A domain renewal watcher on AWS for a few dollars a month
A domain lapsing is one of the very few failures in a small business that takes the whole thing off the internet at once: the site, the email, the logins that use that email to reset. It happens to somebody every week, and almost never because nobody knew. It happens because the reminder went to a person who left in 2023, or the card on file expired, or the domain was registered by an agency who stopped invoicing. This post walks through a small system built around that.

Key takeaways
- The expiry comes from the registry, not from a registrar email or dashboard.
- A domain register is a short list and almost nobody has one.
- Three discovery paths find the domains you forgot: certificates, DNS, and card charges.
- Escalation goes to people who currently work here, not to whoever bought the domain.
- Designed on AWS for about $1 a month.
The whole system on one page
Before any code, here is the shape of what we are designing.
- Networking
- Management
- Analytics
- People
Why the registry rather than the registrar
A registrar’s dashboard shows what the registrar believes about your domain. The registry — the organisation that actually runs the top-level domain — shows what is true. Those two agree almost all of the time, and the times they disagree are exactly the times you need to know.
A renewal that was taken from an expired card shows as renewed in the registrar’s billing view and unchanged at the registry. A transfer in progress can show a date at one and a different date at the other. A registrar that has been acquired frequently has stale records for months. Querying the registry directly, over RDAP, costs nothing and removes the whole class.
What runs weekly (the inside)
- The checker. Queries the registry for each registered domain and records the expiry, the registrar, the nameservers and the status codes. Part 2 covers RDAP and what to do about the registries that do not offer it.
- Discovery. Looks for domains you depend on that are not in the register. Three sources, covered in Part 3, and between them they typically find two or three domains per business that nobody had written down.
- The escalator. Ninety days, thirty days, seven days, and then daily. It escalates to people from your staff list rather than to whatever address is on the registration, which is the single most important thing it does.
One domain, end to end
- App integration
- Management
- Analytics
In plain words
A business has eleven domains. Three are obvious: the main one, the .co.uk that redirects, and one for a product. Four more are found by discovery: two that were bought for campaigns years ago and still have MX records pointing at the mail provider, one that an agency registered and never transferred, and one that a former employee bought on a personal card and expensed.
That last one is the interesting case. It is the domain used for a customer-facing portal. It was registered to a personal email that no longer exists, paid for with a card that was cancelled when the person left, and expires in five months. Every registrar reminder it will ever send is going to a dead address. Discovery finds it because it appears in a certificate transparency log for a hostname the business uses; the checker gets its real expiry from the registry; and at ninety days somebody who still works there is told, with enough time to transfer it rather than to argue about it during a redemption period.
Design rules that shaped every decision
- Check the registry, not the registrar. One tells you the truth and the other tells you what it believes.
- Escalate to your staff list. The address on a registration is the least reliable place to send a warning.
- Ninety days is the first notice. Transfers, payment fixes and registrar support all take weeks.
- It cannot renew. A system that can spend money on a card needs a security posture this does not have.
- Discovery is a first-class feature. The domains that lapse are the ones nobody listed.
- Watch the status codes, not just the date. A domain can be locked, on hold or pending deletion well before it expires.
Why this shape
The reason this is worth building rather than putting eleven dates in a calendar is that the dates are not the problem. The problem is that domains accumulate at the edges of a business — bought by agencies, by former staff, for campaigns — and the ones at the edges are both the least visible and the most likely to have a broken payment path attached.
So the system spends about half its effort on discovery and about half on making sure the warning reaches somebody who exists. The actual date check is a weekly HTTP request per domain, and it is the least interesting part.
The next four posts walk through each piece: how a registry lookup works, how domains get discovered, what the status codes mean, and how the escalation runs. One diagram per post, a cost breakdown, and an engineering reference at the end.
All posts