Domain Monitor / Blog
How to Monitor Domain Expiration: The Complete Guide
Most ranking guides on this topic are either thinly disguised sales pitches or generic uptime articles that bury domain monitoring as a footnote. Here's how it actually works, what to monitor, and how to pick between free, paid, and DIY.
If you've ever lost a domain because nobody renewed it, or watched a competitor scoop up a domain you thought you had time to grab, you already know domain expiration monitoring matters. The question is what to use, and how the underlying mechanics work so you can tell whether a tool is doing its job.
Below: how WHOIS-based monitoring works at the protocol level, why some TLDs are easy to track and others are impossible, the four options for monitoring your domains, and how to pick between them.
The short answer
- One domain you own: set up registrar auto-renewal with a backup payment method, then add a calendar reminder a month before. That's enough.
- Three to thirty domains: use a paid monitoring service. The cost ($5-15/month) is invisible compared to redemption fees ($80-150) for a single missed renewal.
- Thirty to a thousand domains: a paid service with API or bulk add, or a small cron script if you have technical chops. Manual tracking breaks down here.
- A thousand or more: build the system yourself with proper TLD-aware WHOIS parsing, or work with a domain management firm.
Why monitoring matters (the real cost of forgetting)
Letting a domain expire isn't just an inconvenience. The downside scales with what's connected to it:
- Website goes down. DNS stops resolving in the hours or days after expiry, depending on registrar.
- Email stops working. If you use the domain for email, the moment DNS fails, mail bounces. For a small business, this is the first sign of trouble.
- Recovery costs money. Redemption period restoration fees are typically $80-150 above standard renewal price. Multiply that by accidentally letting several domains lapse and the cost compounds quickly.
- Worst case, somebody else registers it. If the domain has any value (brand, traffic, history), drop-catchers will grab it the moment redemption ends. Recovery usually means buying it back at a markup or proceeding with a UDRP claim.
The fix is cheap. The downside, when it happens, is expensive.
How WHOIS-based monitoring actually works
Almost every domain monitoring tool uses the same underlying mechanism: WHOIS lookups against the registry's WHOIS server. Here's what that looks like in practice.
The WHOIS protocol is simple. A client connects to port 43 on a registry-operated WHOIS server, sends the domain name as a single line of text, and receives a plain-text response. For example, querying example.com against whois.verisign-grs.com returns something like:
Domain Name: EXAMPLE.COM
Registry Domain ID: 2336799_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.iana.org
Updated Date: 2024-08-14T07:01:31Z
Creation Date: 1995-08-14T04:00:00Z
Registry Expiry Date: 2026-08-13T04:00:00Z
Registrar: ICANN
Domain Status: clientDeleteProhibited
Domain Status: clientTransferProhibited
Domain Status: clientUpdateProhibited
Name Server: A.IANA-SERVERS.NET
Name Server: B.IANA-SERVERS.NET
DNSSEC: signedDelegation
A monitoring tool extracts the Registry Expiry Date field, parses the date, and stores it. On subsequent checks, the tool compares the stored date to the current time and fires alerts when configurable thresholds are crossed. The tool also watches for changes in Domain Status values to detect entry into the post-expiry lifecycle (more on that below).
That's the entire mechanism. Everything else (alert delivery, notification thresholds, dashboards) sits on top of this loop: query WHOIS, parse expiry, compare to now, alert if needed.
Why monitoring is harder for some TLDs
Not every registry plays the same way. The Verisign WHOIS for .com and .net exposes Registry Expiry Date reliably. Most other gTLDs (.org, .io, .info, .co) follow similar patterns. Country-code TLDs are a different story.
Several major ccTLDs deliberately omit expiration data from public WHOIS as a policy choice:
- .de (DENIC) returns minimal information including the registrant's nameservers, but no expiration date.
- .be (DNS Belgium) is similar - nameservers and status, no dates.
- .nl (SIDN) hides expiry; you'll see registration date and registrar but no clear expiry signal.
- .no (Norid) returns brief metadata only.
For these registries, no monitoring tool can show you an expiration date through WHOIS, because the data isn't published. Your only option is your registrar's account dashboard, where the date is visible because the registrar (not the registry) tracks billing.
This trips up users who add a .de domain to a monitoring service and wonder why no expiration date appears. It's not the tool failing - the data was never available.
Other ccTLDs are accessible but have quirks: .uk works, .fr works, .es works for some queries but Spain's registry restricts WHOIS access in others. Before assuming any TLD will work, look up its registry's WHOIS policy.
Method 1: Manual checking
For one or two domains, this works. Use the whois command-line tool on Linux or Mac, or any web-based WHOIS lookup (whois.com, dnschecker.org, your registrar's dashboard). Note the expiration date. Set a calendar reminder 30 days before.
When this works: a small number of domains, each one important to you, low risk of forgetting because the calendar handles it.
When it doesn't: more than a few domains, multiple registrars, or any time the calendar reminder might get ignored or rescheduled. People miss reminders all the time. People forget to add reminders for new domains they buy. The system is brittle.
Method 2: A cron + bash script (free, DIY)
If you have a Linux server or just a development machine that's always on, a small shell script can handle dozens of domains for free. Sketch:
#!/bin/bash
# Daily expiration check - emails you when a domain has under 30 days left.
DOMAINS=("example.com" "example.net" "example.org")
THRESHOLD_DAYS=30
NOW=$(date +%s)
for d in "${DOMAINS[@]}"; do
expiry=$(whois "$d" | grep -i "Registry Expiry Date" | head -1 | awk '{print $4}')
if [ -n "$expiry" ]; then
expiry_ts=$(date -d "$expiry" +%s)
days_left=$(( (expiry_ts - NOW) / 86400 ))
if [ "$days_left" -lt "$THRESHOLD_DAYS" ]; then
echo "$d expires in $days_left days" | mail -s "Domain alert" you@example.com
fi
fi
done
Schedule with cron: 0 9 * * * /path/to/script.sh for a daily 9am check.
When this works: you have a Linux box, you're comfortable with shell scripting, your domains are mostly .com/.net/.org, you don't mind maintaining the script when something breaks.
When it doesn't: ccTLDs that hide expiry, registries with anti-bot WHOIS rate limits (Verisign throttles aggressively if you query too many .com domains too quickly), or any setup that requires more than basic alerting.
The hidden cost of DIY is real. The script above is the easy part. Inside the first month you'll be patching for TLD-specific WHOIS quirks, debugging Verisign rate-limit throttling, fixing alert delivery when sendmail breaks, handling the script crash when one domain returns garbage, and remembering to add new domains as you buy them. Realistic time investment: 8-12 hours of initial setup, plus 1-3 hours of maintenance per month for a portfolio over 10 domains. At any reasonable hourly value of your time, the math is brutal: a paid service at $5-10 a month is far cheaper than the engineering time you'll spend.
Method 3: A paid monitoring service
This is where most people end up. The available options fall into two categories: bundled monitoring suites (where domain expiration is one feature among many) and focused domain trackers (where it's the main job).
- Bundled suites like UptimeRobot, Better Stack, Pinger Man, Beagle Security, and Site24x7 mostly target broader uptime/incident-management use cases. Domain expiration is included but not the focus. They're a sensible pick if you already need uptime monitoring for websites and APIs and want to bolt domain tracking onto the same dashboard. Pricing starts around $5-15/month and scales up for higher monitor counts.
- Domain Monitor is purpose-built for domain expiration and availability tracking. No uptime, SSL, or incident management features - just WHOIS-based monitoring with email and Telegram alerts. Free for 3 domains. Pro is $7/month for 100 domains with hourly checks. If you don't need a full monitoring suite and just want reliable domain alerts, this is the focused option.
What to compare honestly:
- Check frequency: daily is fine until you're within 30 days of expiry; hourly matters near expiration to catch any status changes.
- Alert thresholds: 60, 30, 14, 7, and 1 day before expiry is the standard set. Some tools also alert on status changes (e.g., entering redemption period).
- Alert channels: email is universal; Telegram, Slack, SMS, and webhooks vary by service.
- Domain limits: free tiers usually cap at 1-3 domains. Paid tiers commonly land at 50-100 domains for $5-15/month.
- TLD coverage: any service relying on WHOIS will struggle with TLDs that hide expiry. If you have a lot of .de, .be, .nl, .no, ask the vendor specifically how they handle these.
When to pick a service: any portfolio above 3-5 domains, any situation where the cost of forgetting is meaningful (your business depends on the domain), and any time you'd rather pay $5-15/month than maintain a script.
If you're trying to decide across categories of tools (public expiring lists, SEO-focused finders, drop-catchers, and monitoring services), see our breakdown comparing expired domain tracking tools.
Method 4: Build a real internal system
Worth the effort only above ~1,000 domains, or when existing services don't fit your needs. A real internal system needs:
- A scheduler (cron, or a job queue like Sidekiq, Laravel Horizon, etc.)
- TLD-aware WHOIS parsing - each registry returns slightly different formats
- A throttling layer to respect WHOIS rate limits, especially for Verisign-operated TLDs
- A database to store last-known status, so you can detect changes and avoid duplicate alerts
- Multi-channel alert delivery with retries
- Monitoring of the monitoring (when your queries fail or alerts don't deliver, you need to know)
This is non-trivial software. Building it takes hundreds of hours, plus more for ongoing maintenance. If your domain count is below 1,000, a paid service almost certainly costs less than the engineering time.
What to actually monitor (beyond expiry)
The expiration date itself is just the obvious signal. A serious monitoring setup also watches:
- Auto-renewal status. If your registrar shows auto-renew "off" for a domain you wanted to keep renewing, you want to know before the deadline, not after.
- WHOIS status flags. Statuses like
clientHold,redemptionPeriod, andpendingDeletetell you exactly where in the lifecycle a domain sits.clientHoldon a domain you own is bad: it means DNS isn't resolving even though the domain is technically registered. - Nameserver changes. If nameservers change without your knowledge, that's a signal of unauthorized account access.
- Registrar contact info. If you've lost access to the registrar account, knowing what's on file helps you regain access.
Most paid monitoring services handle expiry alerts by default and offer the rest as additional features. If you're building it yourself, once the WHOIS query is working, tracking these other signals is mostly free.
Alert timing strategy
Standard threshold pattern for domains you own: 60, 30, 14, 7, and 1 day before expiration. Reasoning:
- 60 days: early warning. Enough time to update payment information, transfer the domain to a different registrar, or decide whether to keep it.
- 30 days: last reasonable opportunity to act before things get tight. Auto-renewal usually fires around this point.
- 14 days: if you haven't acted yet, you're cutting it close.
- 7 days: escalate. Send to multiple channels.
- 1 day: last call. Catches payment failures or expired credit cards.
For agencies handling client portfolios, the same thresholds apply internally, but client-facing alerts need a different cadence and tone. We've covered the multi-stakeholder pattern in our guide on tracking client domain renewals.
For domains you're trying to acquire after they expire, the timing reverses. You want alerts when:
- WHOIS status changes to
redemptionPeriod(meaning the original owner has 30 more days to renew or lose it permanently) - WHOIS status changes to
pendingDelete(the 5-day final window before the domain becomes available) - The domain actually drops and is registrable again
If you're specifically trying to catch a domain that's expiring (not just monitoring your own portfolio), the methods are different: manual registration, backorders, auctions, and when each fits. See our guide on how to catch an expiring domain.
Common pitfalls
WHOIS rate limiting
Verisign (which operates .com and .net) actively throttles anonymous WHOIS queries. Hammer their server with even a few hundred queries per minute and you'll start getting blocked. Any monitoring service worth using has a strategy: distributed queries, intelligent backoff, or registry-direct API access where available. If you're DIY, your script needs to spread queries out across the day rather than hitting a list all at once.
Stale WHOIS responses
WHOIS data can be cached at multiple layers. A registry update on a domain might take minutes to hours to appear in the WHOIS response you get from a downstream server. For monitoring purposes this isn't usually a problem (we're checking expiration dates that move on day boundaries), but for tracking near-instant status changes (e.g., the moment a domain drops), the registry's authoritative WHOIS is the source of truth.
Trusting registrar emails alone
Registrar renewal notices are best-effort and they fail in predictable ways: the email lands in spam, the registered email account is no longer monitored, the credit card on file expired without anyone noticing. Independent monitoring is a backup that catches all three. If your business depends on a domain, treat the registrar's email as one signal among several, not the only one.
Monitoring service downtime
A monitoring tool that goes offline silently is worse than no monitoring at all - you assume you'd be alerted, so you stop checking manually. For mission-critical domains, either pick a service with status pages and uptime guarantees, or run a second cheap fallback service in parallel.
Frequently asked questions
How often should I check domain expiration?
Daily is enough if you're more than 60 days out from expiry. Within 60 days, hourly is better - status changes near expiration (entering grace period, auto-renew failures) need quick detection. For domains you're hunting after expiry, hourly during the redemption period and minute-level during pendingDelete.
Is the WHOIS expiration date the same as when the domain becomes available?
No. After WHOIS expiry, .com domains enter a 30-day grace period (still recoverable), then a 30-day redemption period (recoverable but expensive), then 5 days in pending delete, before becoming publicly available. The actual drop date is typically 65 to 80 days after the WHOIS expiry date.
Why doesn't my .de or .uk domain show an expiration date in WHOIS?
Some country-code registries don't publish expiration dates as a policy choice. .de (DENIC), .be (DNS Belgium), .nl (SIDN), and .no (Norid) all hide expiry. For these TLDs, your registrar's account dashboard is the only source of the expiration date. .uk publishes expiry; just check your specific TLD's registry policy.
Can I rely on my registrar's renewal email?
Not entirely. Registrar emails are best-effort: they can land in spam, hit a stale email address, or your card on file might be expired. Independent monitoring catches all three failure modes.
How early should alerts start?
For domains you own, the standard set is 60, 30, 14, 7, and 1 day before expiry. Sixty days is enough lead time to handle payment changes or transfers. One-day catches last-minute payment failures. For domains you're trying to catch after they expire, the relevant alerts are status changes (redemptionPeriod, pendingDelete) rather than calendar countdowns.
What happens if I miss the renewal?
For .com and most gTLDs you have a grace period (around 30 days) at standard renewal price, then a redemption period (around 30 days) at a fee of $80-150 above renewal cost, then 5 days of pending delete with no recovery option. Country-code TLDs vary widely, so check your registry's specific policy.
Want monitoring without setting it up yourself?
Domain Monitor tracks WHOIS for your domains and emails you when status changes - before expiry, during redemption, or the moment a domain becomes available. Free for 3 domains, with hourly checks and Telegram alerts on the Pro plan.