Stop getting surprised by expired certificates.

certy monitors your SSL certificates and domains, and warns you in time.

Create an account
See how it works →
certy/dashboard
Your monitors
api.acme.io 75 days healthy
acme.io 21 days warning
mail.acme.io 5 days critical
acme-labs.org 155 days healthy
Nothing to install Monitored from the outside, 24/7 Alerts before anything lapses
Works with any TLS host & registrar
Let's Encrypt DigiCert ZeroSSL Sectigo Internal CAs .com / .org / .io .co.uk

Set it up once. Stop worrying.

Three steps to never tracking a renewal date in a spreadsheet again.

01Add what to watch

Drop in the hosts and domains you care about — up to ten. Each list is private to your account.

02See it at a glance

A colour-coded dashboard shows days-left for every target: green when healthy, amber as it nears, red when it's urgent.

03Get warned in time

A daily check runs on its own and emails you at 30, 14, 7 and 1 days out — once each, never nagging.

Real certificate checks

A direct TLS handshake reads each host's certificate and its true expiry — the same thing a browser sees. Nothing to install on your side; we check every host from the outside.

Domain expiry too

A raw WHOIS lookup tracks when each domain registration lapses, so a missed renewal can't quietly drop your name from under you.

Tiered alerts, no spam

Warnings fire at 30, 14, 7 and 1 days out — each sent exactly once per expiry. Renew, and the countdown quietly resets.

Check on demand

Don't want to wait for the nightly run? Hit Check now on any target and watch the status refresh live.

It's just a handshake and a lookup.

No magic, no black box — the same low-level checks you'd run by hand, watched for you around the clock.

certy — nightly check
$ certy check mail.acme.io
→ opening TLS socket … connected
issuerLet's Encrypt
expires2026-06-05 (5 days)
status⚠ critical — alert sent
 
$ certy check acme.io --whois
registrarGandi SAS
expires2026-06-21 (21 days)
status✓ healthy

Built from scratch — no framework.

A deliberate exercise in doing more with less: ~5,000 lines of plain PHP 8, zero Composer dependencies, deployed and running in production.

PHP 8.3 No framework No Composer MySQL Caddy systemd GitHub Actions Cloudflare

Hand-rolled foundations

A tiny regex router, a thin PDO wrapper, and global helpers stand in for a framework. SQL lives in the controllers — no ORM, no magic, every query visible.

Real protocol work

Certificates are read over a raw TLS socket and parsed with OpenSSL; domains over a raw WHOIS query on port 43. With strict mode, the chain and hostname are verified too.

Secure multi-tenancy

Every record is scoped to its owner (404 on a miss), every POST is CSRF-checked, passwords are argon2id, and output is escaped by default.

Production ops

A Linux VPS behind Caddy (automatic HTTPS), a systemd timer running the scans, nightly database backups, and push-to-main auto-deploy via GitHub Actions.

See it working in one click.

Jump into a live, pre-loaded demo — or create your own account to watch your hosts.

Create an account