A domain expiry you didn't see coming is one of the most disruptive incidents in web infrastructure. Your site goes dark, email stops delivering, and in the worst case a squatter grabs the domain before you can renew. The fix is simple: check the expiry date now, and set up alerts so it never sneaks up on you.
This guide covers the fastest ways to check when any domain expires, from a one-click free tool to command-line methods and automated monitoring.
The fastest option for a one-off lookup. Go to lior-seats.github.io/domain-expiry-checker/, enter the domain (e.g. github.com), and click Check Expiry. Results appear immediately:
Data comes from RDAP (Registration Data Access Protocol), the modern replacement for WHOIS. It supports most gTLDs (.com, .net, .org, .io, .dev, .app) and a growing set of ccTLDs.
If you prefer the terminal:
whois github.com | grep -i "expir"
Output varies by registrar. Common field names include:
Registry Expiry Date:Expiration Date:Registrar Registration Expiration Date:Example for github.com:
Registry Expiry Date: 2027-10-09T04:00:00Z
To convert the date to days remaining in bash:
EXPIRY="2027-10-09"
DAYS=$(( ( $(date -d "$EXPIRY" +%s 2>/dev/null || date -j -f "%Y-%m-%d" "$EXPIRY" +%s) - $(date +%s) ) / 86400 ))
echo "$DAYS days remaining"
macOS note: Use date -j -f syntax as shown. GNU date (date -d) is Linux-only.
RDAP returns machine-readable JSON, making it easier to parse than WHOIS:
curl -s "https://rdap.org/domain/github.com" | \
python3 -c "
import json, sys
data = json.load(sys.stdin)
for e in data.get('events', []):
if e.get('eventAction') == 'expiration':
print('Expires:', e['eventDate'])
"
Expected output:
Expires: 2027-10-09T04:00:00Z
RDAP is rate-limited, so don't call it in tight loops. For batch checks across many domains, cache results for at least an hour.
If you manage several domains, check them all at once:
#!/bin/bash
# check-domains.sh — check expiry for a list of domains
DOMAINS=("github.com" "example.com" "yourdomain.com")
WARN_DAYS=30
for domain in "${DOMAINS[@]}"; do
expiry=$(whois "$domain" 2>/dev/null | grep -i "expir" | head -1 | awk '{print $NF}')
if [ -z "$expiry" ]; then
echo "UNKNOWN $domain (WHOIS parse failed)"
continue
fi
# Normalize date format (YYYY-MM-DD)
clean=$(echo "$expiry" | grep -oE "[0-9]{4}-[0-9]{2}-[0-9]{2}")
if [ -z "$clean" ]; then
echo "UNKNOWN $domain (date format: $expiry)"
continue
fi
days=$(( ( $(date -d "$clean" +%s 2>/dev/null || date -j -f "%Y-%m-%d" "$clean" +%s) - $(date +%s) ) / 86400 ))
if [ "$days" -lt 0 ]; then
echo "EXPIRED $domain (expired $((days * -1)) days ago)"
elif [ "$days" -lt "$WARN_DAYS" ]; then
echo "WARNING $domain — $days days remaining ($clean)"
else
echo "OK $domain — $days days remaining ($clean)"
fi
done
Save as check-domains.sh, make it executable (chmod +x check-domains.sh), and run it. To run it on a schedule:
# Add to crontab — run every Monday at 9am
0 9 * * 1 /path/to/check-domains.sh | mail -s "Weekly domain expiry report" you@example.com
If you manage more than a handful of domains, a shell script quickly becomes a maintenance burden. DomainWatch monitors domain expiry dates automatically and sends email alerts at 30, 14, 7, and 1 day before expiry — without any cron jobs or scripts to maintain.
Add your domains to the dashboard, and DomainWatch checks them daily. If an expiry date changes unexpectedly (including after a renewal), you get a notification immediately.
Once you know the expiry date, here's how to act on it:
Don't assume it will work. Auto-renew fails silently when:
Set a calendar reminder or use monitoring to get an independent alert — don't rely on your registrar as the only failsafe.
Most registrars offer a grace period (typically 30–45 days after expiry) during which you can renew at the normal price. After the grace period, the domain enters redemption — you can still recover it, but at a significantly higher fee. Act within the grace period to avoid the redemption surcharge.
RDAP and WHOIS both query the authoritative registry, but different registrars update their WHOIS records on different schedules. For most gTLDs (.com, .net, .org), RDAP returns the authoritative registry data and is more reliable. If there's a discrepancy, trust RDAP for recent renewals.
RDAP support varies by ccTLD registry. Most major ccTLDs now support RDAP (.uk, .de, .fr, .nl, .au). For ccTLDs that don't support RDAP, fall back to WHOIS — the format varies more but the expiry date is still present for most registries.
For domains critical to your business, check monthly. For a portfolio of domains, use automated monitoring so you get an alert when something actually needs attention — instead of manually reviewing a list every month.
Enter any domain to see expiry date, days remaining, and registrar instantly. No signup required.
Check Domain Expiry Free → Set Up Auto Alerts →