If you have ever used a domain availability checker and gotten a "likely available" result, only to find the domain is actually taken when you try to register it, you are not alone. The technology behind availability checking is messier than most people realize. Here is how it actually works.
The DNS Layer
The fastest way to check if a domain is registered is a DNS lookup. When you query example.com, the DNS system returns one of a few responses:
- NXDOMAIN (status 3): The domain does not exist in DNS. This usually means it is available, but not always.
- NOERROR with records: The domain has DNS records (A, AAAA, CNAME, etc.), which means it is registered and actively configured.
- NOERROR without records: The domain exists in the registry but has no DNS records configured. This is common for parked or newly registered domains.
DNS lookups are fast -- typically under 50ms using DNS-over-HTTPS (DoH) through providers like Cloudflare's 1.1.1.1. But they have a fundamental limitation: they can tell you if a domain has DNS records, but they can't tell you with certainty whether a domain is registered but not using DNS.
The RDAP Layer
RDAP (Registration Data Access Protocol) is the modern replacement for WHOIS. It is a structured JSON-based protocol that lets you query domain registration databases directly. When DNS returns NXDOMAIN, a good availability checker will follow up with an RDAP query to confirm.
An RDAP query to rdap.org/domain/example.com returns either:
- HTTP 200: Domain is registered. The response includes registration data (registrar, dates, etc.).
- HTTP 404: Domain is not in the registry. This is the strongest signal of availability.
RDAP is more reliable than DNS alone, but it is also slower (200-500ms per query) and not all TLDs support it yet. The major ones (.com, .net, .org, .dev, .app, .io) do, but many country-code TLDs and newer gTLDs have spotty RDAP coverage.
Why Checkers Get It Wrong
There are several scenarios where availability checks produce incorrect results:
DNS propagation delays: A domain can be registered but not yet propagated to all DNS servers. During this window (which can last up to 48 hours, though it is usually much faster), a DNS-only checker will report it as available.
Registry-reserved names: Some TLD registries reserve certain names (common words, geographic names, etc.) without them showing as registered in RDAP. A checker will say "available" but the registrar will reject the registration.
Premium pricing: The domain might technically be available, but at a premium price that the registry or a secondary market is setting. A checker says "available" but the registration costs $5,000 instead of $12.
Redemption period domains: When a domain expires, it enters a redemption period (typically 30-45 days) where the original owner can still reclaim it. During this time, DNS and RDAP might report it as unregistered, but you still can't buy it.
The NS Record Trick
One technique that improves accuracy is checking NS (nameserver) records in addition to A records. A domain can have NS records (meaning it is delegated to nameservers) without having any A records (meaning no website). This catches cases where someone has registered a domain and pointed it to nameservers but has not set up a website yet.
// DoH query for NS records
const r = await fetch(
'https://cloudflare-dns.com/dns-query?name=example.com&type=NS',
{ headers: { 'Accept': 'application/dns-json' } }
);
const data = await r.json();
// If Answer array has entries, domain is registered
Rate Limiting and Ethical Checking
If you are building your own availability checker, be aware that bulk DNS queries and RDAP requests will get you rate-limited quickly. Cloudflare's DoH endpoint handles moderate volumes well, but if you are checking thousands of domains, you need to batch requests and add delays between batches.
RDAP is particularly sensitive to bulk queries. Most RDAP servers will start returning 429 (Too Many Requests) after 20-30 queries per minute. The polite approach is to use DNS as a first filter and only hit RDAP for domains that pass the DNS check.
What We Do Here
The availability checker on this site uses a three-step approach: DoH query for A records, DoH query for NS records if needed, and RDAP verification for supported TLDs. We batch 4 domains at a time with delays between batches to stay within rate limits. Results are labeled "Likely Available" rather than "Available" because no remote check can guarantee availability -- only your registrar can confirm that. Try it out and see how the multi-layered checking works in practice.