Domain Availability Checker: Expiry & Drop Date
Pricing
from $5.00 / 1,000 results
Domain Availability Checker: Expiry & Drop Date
A bulk domain expiry checker and availability checker over RDAP. Free, registered or reserved; where the name sits in the delete lifecycle (grace, redemption, pendingDelete); when it could drop; whether it can be transferred today; and what every EPP status means.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
Ai-Q Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
A bulk domain expiry checker and availability checker built on RDAP. Paste a list of domains — or a list of bare names plus the TLDs to try — and get one row per domain.
Most availability checkers answer one question: taken, or free. That leaves the three questions people actually act on unanswered:
- If it's taken, is it on its way out — and when could I register it?
- Can it be moved to another registrar today, or is something blocking that?
- What do all those status codes on the WHOIS record mean?
This Actor answers all three, and refuses to answer the first one when it cannot do so honestly.
The delete lifecycle, not just a yes/no
A domain does not go from registered to free. For gTLDs it walks a fixed path, and where it currently stands tells you exactly what is possible:
| Stage | What it means | Can you register it? |
|---|---|---|
active | Normal service | No |
auto_renew_grace | Expired, in the registrar's grace window (up to 45 days) | No — the owner can still renew at the normal price |
redemption | Deleted, in the 30-day Redemption Grace Period | No — only the owner can restore it, for a large fee |
pending_delete | The final 5 days before release | Not yet — but this is the window to watch |
on_hold | Suspended in DNS by the registrar or registry | No |
no_nameservers | Registered but not delegated anywhere | No |
reserved | Held back by the registry | No |
available | Not registered | Yes |
Every row carries the window: dropWindowEarliest, dropWindowLatest,
dropWindowConfidence and — the field that matters — dropWindowBasis, the
reasoning in one sentence.
dropping-name.com pending_delete high pendingDelete lasts 5 days for gTLDs,counted from the last registry change (2026-07-28).lapsed-name.com redemption medium Redemption started around 2026-07-25: 30 days ofredemption plus 5 days of pendingDelete.someones-brand.com active low Only reachable if the owner lets it expire on2027-03-04 and never renews, which is theexception rather than the rule.
Confidence is high only inside pendingDelete, where the remaining window is a
fixed five days. For a domain still in service it is low, and the basis says
why — because the overwhelmingly likely outcome is that the owner renews. No
single date is ever presented as a fact when it is an inference.
It will not tell you a domain is free unless it knows
This is the failure mode that costs money: a checker reports available, you build a plan around the name, and it was never free at all.
Two guards, both on by default:
1. The TLD must actually have an RDAP service. RDAP signals "not registered"
with HTTP 404 — and so does a base URL for a TLD that never had RDAP, or quietly
stopped. Those are indistinguishable from the response alone. So the run starts by
loading IANA's official RDAP service list
and checks the TLD is on it. If it isn't, the verdict is unknown with
rdap_not_supported, never available.
That is not a theoretical case. In a live run today, of nine TLDs probed,
.mil, .edu, .cu and .bd had no IANA-listed RDAP service — every name
under them would 404, and a checker that trusted the 404 would call the entire
namespace free.
2. DNS gets a veto. A name that resolves, has name servers, or accepts mail is
registered whatever RDAP said. When the two disagree the row comes back unknown
with dns_contradicts_rdap and says which signal contradicted which.
If the IANA list itself cannot be fetched, every verdict in that run is
downgraded to unknown rather than guessed.
Transfer readiness
Two independent brakes stop a registrar transfer, and both are reported:
- Lock statuses —
clientTransferProhibited(the owner can remove this) andserverTransferProhibited(the registry set it). - ICANN's 60-day rule — no transfer within 60 days of registration or of a
previous transfer. Computed from the RDAP event dates, so you get
transferBlockedUntilas a date rather than a rule to remember.
transferable is a plain boolean; transferBlockers explains each reason in a
sentence. An ordinary transfer lock is not reported as a problem — nearly
every well-run domain carries one — so a clean row stays clean.
Every status explained
RDAP hands back status codes and expects you to know them. statusMeanings gives
each one a sentence:
redemption period: Deleted and in the 30-day Redemption Grace Period. Only the currentowner can restore it, for a large fee. It cannot be registered byanyone else yet.server hold: The registry itself has suspended the domain in DNS. Nothing resolves.add period: Registered within the last 5 days. The registrar can still delete itfor a refund.
Both spellings are handled — RDAP's spaced form (client transfer prohibited) and
the raw EPP camelCase (clientTransferProhibited) that many servers return.
Input
{"domains": ["apify.com", "example.com", "myidea"],"tlds": ["com", "net", "io"],"crossCheckDns": true,"onlyAvailable": false}
Three input shapes, because all three are how people arrive at this problem:
- A full domain —
example.com, used as written - A URL —
https://www.example.com/page, reduced to the host - A bare name —
myidea, expanded acrosstldsintomyidea.com,myidea.net,myidea.io
Internationalised names are converted to punycode, so 日本.jp works. Subdomains
climb to the registrable name: www.example.co.uk is answered with
example.co.uk, multi-level suffix and all.
A bare name with no tlds list is reported as skipped, not guessed at.
| Option | Default | What it does |
|---|---|---|
crossCheckDns | true | Let DNS veto a wrong "available". |
onlyAvailable | false | Keep only free names — for screening a long candidate list. |
onlyIssues | false | Keep only warnings and errors: expiring, expired, suspended, in redemption, unverifiable. |
maxConcurrency | 8 | Lookups in flight. Registry RDAP servers rate-limit; raising this on a long list produces errors, not speed. |
requestTimeoutSecs | 20 | Per-request timeout. |
dnsServers | [] | Resolve against specific servers, e.g. 1.1.1.1. |
maxDomains | 20000 | Cap per run, applied after TLD expansion. |
Output
| Field | Meaning |
|---|---|
verdict / verdictBasis | available, registered, reserved or unknown — and the evidence behind it. |
severity / issues / notes | ok/info/warning/error, the codes, and one sentence each. |
lifecycleStage / lifecycleMeaning | Where the name sits in the delete path. |
dropWindow* | Earliest, latest, confidence and the reasoning. |
expiresAt / daysUntilExpiry / registeredAt / domainAgeDays / lastChangedAt / transferredAt | The dates. |
registrar / registrarIanaId / registrantOrg / abuseEmail | Who holds it and who to contact about abuse. |
transferable / transferLocked / transferBlockedUntil / transferBlockers | Transfer readiness. |
statuses / statusMeanings | Raw codes, and what each one means. |
nameservers / dnssec / dnsResolves / dnsHasMx | Delegation and DNS reality. |
rdapServer / rdapQueried / rdapError | Which server answered which question. |
Issue codes: available, expired, expires_within_7_days,
expires_within_30_days, in_redemption, pending_delete, on_hold,
no_nameservers, no_expiry_published, transfer_blocked_60_day_rule,
rdap_not_supported, dns_contradicts_rdap, bootstrap_unavailable,
rdap_error.
A SUMMARY record in the key-value store holds the totals plus
droppingSoonest — the names with a real drop window, sorted by date.
Dataset views: Overview, Drop watch, Transfer readiness, Statuses explained.
How it behaves
- RDAP over HTTPS, and DNS. Nothing is scraped, no HTML is fetched, no page is rendered. Queries go to the registry servers IANA publishes for that TLD.
- One RDAP request per domain in the normal case, against the registry's own server. The IANA service list is fetched once per run and cached.
- A subdomain costs one extra request as it climbs to the registrable name.
- Concurrency defaults to a deliberately modest 8, because registry RDAP servers rate-limit.
- An honest user agent that identifies the Actor and links back to this page.
Limits, stated plainly
- The drop windows are gTLD arithmetic. The 45/30/5-day chain is ICANN policy
for gTLDs; ccTLDs set their own rules and some have no redemption period at all.
Read
dropWindowBasisbefore acting on a date. - Registrars differ on grace periods. The auto-renew window is up to 45 days but many registrars use less, which is why the window has two ends.
- Not every registry publishes everything. Some omit the expiry date, some omit
the registrant, some omit the entry date for a status. Where a fact is missing
the field is
nulland, where it changes the answer, an issue says so —no_expiry_published, or adropWindowBasisthat admits the entry date was not published. availablemeans "free according to the registry and absent from DNS", not "cheap" and not "unclaimed as a trademark". Premium and registry-reserved names can still be refused at checkout.- Registry RDAP servers rate-limit. A long list at high concurrency will produce
rdap_errorrows rather than wrong answers.
Built by Ai-Q Labs. Verified by 49 unit tests and 40 live checks against the real IANA bootstrap and real registry servers before publishing.