Use case
Lose a domain by renewal lapse exactly once.
A domain expired, the registrar's last warning email went to the wrong inbox, and the redemption-grace fee is now four figures. Or worse: the domain went back on the market and a competitor grabbed it. Crontap fires a scheduled WHOIS / RDAP lookup against every domain you care about, parses the expiry date, and pages you 30 days before it goes bad.
Free plan · no credit card required
The problem
Why this is painful without the right tool
- Registrar reminders go to whatever email was on the account in 2014, which is the founder's old Gmail and nobody monitors it.
- Multi-domain orgs (12 brand domains, 40 typo-protection domains, 8 in-country TLDs) have renewals scattered across 3 registrars and nobody owns the calendar.
- Auto-renew exists but silently breaks: expired card, exhausted prepaid balance, registrar account locked, registry policy change. The registrar's failure email looks like a phishing attempt.
- Country-code TLDs (.de, .co.uk, .com.au) have shorter renewal windows and unique pre-expiry processes that the global account-level reminder doesn't catch.
- After expiry, the redemption-grace fee from most registrars is $80-$500. After the redemption window, it's gone.
The fix
How Crontap solves it
Try the free domain expiry checker first (paste a domain, get back registrar, expiry date, days remaining, name servers, status flags). Then wire a Crontap schedule to a small handler that re-runs the lookup daily for every domain you own. The handler returns 5xx when days-remaining drops under your threshold; Crontap retries and emails the moment the threshold trips.
0 9 * * *RDAP is the modern WHOIS replacement and the right protocol for this in 2026. Most gTLDs and many ccTLDs expose RDAP at https://rdap.org/domain/{name} (or a TLD- specific bootstrap URL). The response is JSON; the field you want is events[*] with eventAction: "expiration" and the ISO date in eventDate.
A small Node handler looks like: fetch(`https://rdap.org/domain/${d}`).then((r) => r.json()) then json.events.find((e) => e.eventAction === "expiration").eventDate. Compare to Date.now(), return 500 if under your threshold. For TLDs that don't have RDAP yet, fall back to whois CLI parsing (less clean, still works).
For a single-domain personal portfolio, run one daily check. For an agency or e-commerce org with 50+ domains, loop the list inside a single endpoint or split into per-domain schedules so the alert email tells you exactly which one tripped.
Free Crontap plan covers one daily schedule end to end; Pro is the flat annual fee for unlimited schedules if you need per-domain split-out.
FAQ
Common questions
- Why not trust the registrar's renewal email?
- You should trust it as a backup. The pattern here is the primary signal because (a) registrar email goes to the account holder, not necessarily the engineer responsible, (b) auto-renew silently fails (expired card is the common one), and (c) ccTLD renewals often have pre-expiry steps the account-level email doesn't surface. An independent daily check via RDAP catches everything the registrar's own pipeline misses.
- Does Crontap have a native domain monitor?
- Crontap is HTTP cron + uptime monitoring. The domain lookup runs in your handler (one fetch to rdap.org for most TLDs). The free domain expiry checker tool runs the same lookup in-browser if you want a one-off check before automating it.
- What threshold should I use?
- Sensible defaults: warn at 60 days (calendar-add the renewal task), escalate at 30 days (assign to a specific owner), page at 14 days (someone is paying right now). For ccTLDs with shorter renewal cycles (.de is 1 month, some are less), tighten the warn threshold to 30 days.
- What about non-gTLD domains (.de, .co.uk, .com.au)?
- rdap.org bootstraps most TLDs. For ones it doesn't (a few legacy ccTLDs), fall back to a TLD-specific WHOIS server. The format is less consistent and parsing is per-registry, but Node has decent libraries (e.g. node-whois) that handle the common cases.
- Can I use this for the cert AND the domain in one check?
- Yes — combine the SSL probe and the RDAP lookup in the same handler. Both fail modes are 'this is about to break and the renewal didn't happen', so a single endpoint that returns 5xx for either case is fine. See SSL certificate monitoring for the cert half.
Ready to fix it?
Point Crontap at any URL. Pick any cron. Done.
WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.
Free forever tier ・ No credit card required
/wp-cron.php?doing_wp_cron=1
Schedule
"every 5 minutes"
Next
in 23s