Skip to content

Domain expiry quickstart

This turns on DNS monitoring for an existing HTTP check. The check’s URL must be on a domain you register yourself: hosts on shared platform suffixes (*.github.io, *.herokuapp.com, *.vercel.app) cannot be monitored this way. See step 3.

  1. Open the HTTP check and choose Edit monitor.

  2. Under Optional checks, turn Monitor DNS on and click Save changes. New HTTP monitors have it on already.

The check runs on a daily schedule with a flexible window of up to four hours, so the first result may take a few hours to appear.

The HTTP check page shows a Domain tile with the status and days until expiry. The Domain Registration section of the Details panel shows the registrable domain being monitored and, once the first run completes, the expiry date.

Five things to check on that first result:

  • domain is the registrable domain, not the hostname you monitor. https://www.example.com/orders is monitored as example.com, because registries hold registrations, not hostnames.
  • current_status is good, expired or unknown. unknown is not an error state on its own. See the status table.
  • grace_states is empty, and that is the field to watch. A non-empty list means the registration is in trouble no matter how far away the date reads. See the registry states.
  • expiry_source says who gave you the date. rdap and whois are the registry’s own answer. whoxy is a commercial database, worth a second look before you act on it. manual is a date you entered. See where the date comes from.
  • expiry_date may differ by a day from your registrar’s control panel. Site Qwality reads the registry’s date, not the registrar’s.

If last_failure_reason is set, the registry fields around it are last-known values rather than current ones. See the check and a run of the check.

  1. Check that a domain monitor was created at all. Fetch the HTTP check and look for dns_job_id. If it is null, none was provisioned.

  2. If the URL is on a shared platform suffix, that is expected. A create with monitor_dns: true on myapp.vercel.app creates the HTTP check but pairs no domain monitor, because the registration for vercel.app belongs to Vercel. Turning it on afterwards with PUT /http/job/{id} is refused with an error saying the host is on a shared platform domain.

  3. If the status is unknown, read the failure reason. GET /dns/job/{id}/results returns failure_reason per run. registry_publishes_no_expiry is not a failure and needs step 4. Everything else is a real lookup problem and is listed in the reference.

Ten TLDs publish no expiry date to anybody, by registry policy:

.am · .at · .be · .de · .eu · .gg · .im · .nl · .no · .nz

A domain on one of them reports registry_publishes_expiry: false, expiry_date: null, current_status: unknown and last_failure_reason: "registry_publishes_no_expiry". The check is not broken: no source has the date, so there is nothing to wait for. Registrar and nameserver change alerts still work. Enter the date yourself.

  1. Open the HTTP check and find Domain Registration in the Details panel. On these TLDs it says the registry publishes no expiry date, instead of showing a date.

  2. Under Enter the renewal date, pick the date and click Save.

From then on the check behaves like any other: warnings at 90, 60, 30 and 7 days, then on the lapse, each rung once. expiry_source reads manual.

Alerts go to the parent HTTP check’s notification groups. Each is one of five messages.

TriggerHeadline
A ladder rung (90, 60, 30 or 7 days)example.com expires in 30 days
The registration lapsesexample.com expires today, or example.com has expired if it lapsed before monitoring saw it
The registry starts holding the domainexample.com is in auto renew period
The sponsoring registrar changesexample.com changed registrar
The nameserver delegation changesexample.com changed nameservers

A registry state alert can arrive while the expiry date still reads years away: the registry renewed the domain automatically and the registrar can still hand it back. The overview explains this auto-renew trap. Maintenance windows do not hold domain alerts.