Domain Lookup: DNS Records & Availability Checker avatar

Domain Lookup: DNS Records & Availability Checker

Pricing

from $1.00 / 1,000 domain looked ups

Go to Apify Store
Domain Lookup: DNS Records & Availability Checker

Domain Lookup: DNS Records & Availability Checker

Bulk domain lookup for any TLD, incl. .com: live DNS records (A, AAAA, MX, TXT, NS) and an availability hint. Most rows are DNS-only. Registrar, expiry and status come from official registry RDAP only for 8 supported TLDs (e.g. .fi, .ec, .ht).

Pricing

from $1.00 / 1,000 domain looked ups

Rating

0.0

(0)

Developer

Stego

Stego

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Check one domain or up to 10,000 in a single run. You get one clean JSON object per domain with:

  • live DNS records: A, AAAA, MX, TXT and NS
  • a registered / likely-available hint
  • clear statuses that scripts and AI agents can rely on

This works for every TLD, including .com, .net and .org.

Expect most rows to be DNS-only. Registrar, created/expiry dates, EPP status and DNSSEC come from the registry's official RDAP service, and are returned only for 8 small TLDs whose registry terms we read and found no written ban on this use: .fi, .ec, .ht, .cv, .fj, .pg, .ss and .vi (details below).

Almost every other registry, including Verisign (.com/.net), PIR (.org), Identity Digital, GoDaddy Registry, CentralNic, Nominet and Google Registry, bans automated or commercial use in writing, so it is never queried. Those domains (in practice, the large majority of what you will look up) get DNS data and the DNS-based availability hint only, with registry fields set to null.

No WHOIS scraping, no website scraping, no API key.

What it does

  • DNS records (on by default). A, AAAA, MX (priority and exchange), TXT (chunks joined) and NS, using standard DNS queries through the platform's resolver. Each row also gets a dnsStatus: NOERROR, NXDOMAIN, SERVFAIL or TIMEOUT.

  • Availability hint (switch on checkAvailability). Adds likelyAvailable, availabilityBasis (dns, rdap or rdap+dns) and a plain-English availabilityNote.

  • Registry RDAP data, supported TLDs only. Adds registrar, createdAt, updatedAt, expiresAt, daysUntilExpiry, statusCodes, nameservers and dnssec. The registry RDAP server is found through the official IANA RDAP bootstrap. Unsupported TLDs instead report rdapServer, registryOperator and registryTermsUrl, so you can see why.

  • Normalises messy input. Accepts:

    • plain domains, URLs (https://www.example.com/page) and emails (name@example.com)
    • IDNs (bücher.de) and punycode
    • subdomains, which are reduced to the registered domain with the Public Suffix List (shop.example.co.uk → example.co.uk)

    Duplicates are merged and charged once.

  • Never fails silently. Every input entry gets a row with a status, plus a readable error when relevant.

  • Crash-safe. Progress is saved after every batch of 25 results. If a run restarts, it never returns or charges a domain twice.

Polite to registries

  • One request at a time per registry server, at most 1 request per second by default (the maximum allowed is 2).
  • Retry-After is honoured on HTTP 429/503:
    • short waits: the Actor waits, retries and slows down
    • long waits: that server's remaining domains are returned as rate-limited and are not charged
  • A server that keeps failing is paused for the rest of the run.
  • Caching. Registry answers are reused, so a registry is not asked the same question twice:
    • within a run, each RDAP URL is requested at most once
    • across runs, answers are kept for cacheHours (default 24 h) in a key-value store named rdap-domain-lookup-cache on your Apify account
    • only non-contact fields are stored (registrar name, IANA ID and URL, dates, status codes, nameservers, DNSSEC). No contact data is stored at all, not even the registrar's abuse email or phone. A row served from the cache therefore has registrarAbuseEmail and registrarAbusePhone set to null; set cacheHours to 0 if you need them on every row.
    • "not found" answers are reused for at most 1 hour
    • rows served from the cache have rdapFromCache: true and rdapCachedAt
    • DNS is always live
  • Redirects are followed manually: HTTPS only, at most 3 hops, and every hop must also be a supported registry server. A refused redirect is never requested, and the row is returned as error and not charged.

Statuses

statusMeaningCharged?
registered / not-foundSupported TLD: the registry RDAP answered (record / HTTP 404)yes
excluded-by-registry-termsRegistry not queried: its RDAP terms restrict this use, or could not be confirmed. DNS fields are filled.yes, if DNS gave a clean answer
no-rdap-serverThe TLD has no RDAP service in the IANA bootstrap (e.g. .de, .io, .co). DNS fields are filled.yes, if DNS gave a clean answer
terms-not-reviewedA registry server added to IANA after our review; not queried. DNS fields are filled.yes, if DNS gave a clean answer
rate-limited / errorLookup failed (see error and retryAfterSeconds), including a registry redirect that was refused (non-HTTPS, too many hops, or pointing to a server that is not supported)no, never, even if DNS data is present
invalid-inputNot a usable domain (see error)no
not-processedThe run's max total charge was reached firstno

Each row has billable: true|false, so you can see exactly which rows were charged. A clean DNS answer means either every requested record type resolved (NOERROR) or the name does not exist (NXDOMAIN).

Availability caveat

  • DNS only (.com, .net, .org and most TLDs):
    • NOERROR: the name exists, so it is registered.
    • NXDOMAIN: a weak hint. Registered names with no nameservers, names on hold, and reserved or premium names also return NXDOMAIN.
  • With registry RDAP (supported TLDs): an HTTP 404 means the registry has no record, so the name is likely available. If DNS still shows the name, it is reported as probably registered (rdap+dns).
  • Neither is a guarantee. Always confirm with a registrar before buying.

Supported TLDs for registry data (review of 21 Oct 2026)

.cv, .ec, .fi, .fj, .ht, .pg, .ss and .vi. Second-level names under them, like .com.ec and .com.fj, are covered too. The .ss registry limits lookups to 15 per minute "to prevent 'data mining'", so .ss names are always paced at one request every 4 seconds.

Not supported (registry never queried; DNS data only), with the reason and quotes in TOS-NOTES.md:

  • .com, .net, .org, .info, .biz, .uk, .ca, .nl, .au, .br, .in, .pl, .ng and almost all new gTLDs: the registry bans the use in writing (on any channel: RDAP notice, WHOIS terms or website terms).
  • .ly, .zm, .ml, .lb, .gs, .nf, .cx, .gy, .rw, .uz, .hn, .as and .ke: also written bans, found in the October 2026 re-review.
  • .fr, .tz and .рус: the registry's terms could not be read or verified (site offline / terms document missing / claimed ban not locatable), so they are treated as not supported until confirmed.
  • .de, .io, .co: these TLDs have no RDAP service.

Input

FieldDefaultDescription
domainsrequiredDomains, URLs or emails; up to 10,000 per run
reduceToRegisteredDomaintrueSubdomain → registered domain. When off, subdomains are invalid-input.
includeDnstrueResolve DNS records
dnsRecordTypesall fiveAny of A, AAAA, MX, NS, TXT
checkAvailabilityfalseAdds the availability hint (see the caveat above)
requestsPerSecondPerServer1Pacing per supported registry server (0.1–2)
maxRetryWaitSecs30Longest Retry-After to wait for. Longer waits mark that server's domains as rate-limited.
requestTimeoutSecs20Per-request timeout for RDAP and DNS
maxConcurrency10Domains processed in parallel (per-server limits still apply)
cacheHours24How long registry answers are reused across runs (0 turns the cross-run cache off)

Example inputs:

{ "domains": ["apify.com", "https://www.bbc.co.uk/news", "support@traficom.fi"] }
{ "domains": ["my-startup-name.com", "my-startup-name.fi"], "checkAvailability": true }

Output (one item per unique domain)

See samples/output-sample.json for real output. Summary of the main fields:

  • DNS: aRecords, aaaaRecords, mxRecords, txtRecords, dnsNameservers, dnsStatus, dnsError
  • Availability: likelyAvailable, availabilityBasis, availabilityNote
  • Registry (supported TLDs; null otherwise): registrar, registrarIanaId, registrarUrl, registrarAbuseEmail, registrarAbusePhone (live answers only, never cached), createdAt, updatedAt, expiresAt, daysUntilExpiry, statusCodes, eppStatusCodes, nameservers, dnssec, rdapUrl, rdapFromCache, rdapCachedAt
  • Why not: rdapServer, registryOperator, registryTermsUrl, error

Dates are always YYYY-MM-DDTHH:MM:SSZ (UTC). Fields you switch off (DNS, availability) are left out instead of being set to null.

A run summary is saved under the OUTPUT key. It includes byStatus, chargedLookups, rdapRequestsSent, rdapServersQueried, rdapCacheHits and bootstrapPublished.

Personal data

None. Registrant, admin and tech contacts are never returned or cached. The only contact data returned is the registrar's role-based abuse email and phone, when the registry publishes them, and only on live registry answers: they are never written to the cache.

Pricing

Pay per event: a small start fee, plus a fee per domain on billable rows only.

  • The per-domain fee is the same whether or not registry data is returned. For most domains (all .com, .net, .org and most other TLDs) a billable row contains DNS records and the DNS availability hint only. Registry data is a bonus for the 8 supported TLDs above.
  • A DNS-only row is charged only if DNS gave a clean answer (every record type NOERROR, or NXDOMAIN).
  • Free: error and rate-limited rows (including refused redirects), even when DNS data is present; invalid, duplicate and not-processed rows; DNS-only rows with a DNS failure. The run respects your "Max total charge" setting; domains beyond it are returned as not-processed.

Data sources and terms

  • IANA RDAP bootstrap registry: https://data.iana.org/rdap/dns.json (RFC 9224).
  • DNS: the public Domain Name System, using standard resolver queries.
  • Registry RDAP servers: only those whose terms or help text we read and found no written ban. Per-server reasoning and quotes are in TOS-NOTES.md and src/registry_terms.json.