Domain Lookup: DNS Records & Availability Checker
Pricing
from $1.00 / 1,000 domain looked ups
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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,SERVFAILorTIMEOUT. -
Availability hint (switch on
checkAvailability). AddslikelyAvailable,availabilityBasis(dns,rdaporrdap+dns) and a plain-EnglishavailabilityNote. -
Registry RDAP data, supported TLDs only. Adds
registrar,createdAt,updatedAt,expiresAt,daysUntilExpiry,statusCodes,nameserversanddnssec. The registry RDAP server is found through the official IANA RDAP bootstrap. Unsupported TLDs instead reportrdapServer,registryOperatorandregistryTermsUrl, 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.
- plain domains, URLs (
-
Never fails silently. Every input entry gets a row with a
status, plus a readableerrorwhen 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-Afteris 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-limitedand 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 namedrdap-domain-lookup-cacheon 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
registrarAbuseEmailandregistrarAbusePhoneset tonull; setcacheHoursto 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: trueandrdapCachedAt - 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
errorand not charged.
Statuses
status | Meaning | Charged? |
|---|---|---|
registered / not-found | Supported TLD: the registry RDAP answered (record / HTTP 404) | yes |
excluded-by-registry-terms | Registry 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-server | The 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-reviewed | A registry server added to IANA after our review; not queried. DNS fields are filled. | yes, if DNS gave a clean answer |
rate-limited / error | Lookup 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-input | Not a usable domain (see error) | no |
not-processed | The run's max total charge was reached first | no |
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 returnNXDOMAIN.
- 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
| Field | Default | Description |
|---|---|---|
domains | required | Domains, URLs or emails; up to 10,000 per run |
reduceToRegisteredDomain | true | Subdomain → registered domain. When off, subdomains are invalid-input. |
includeDns | true | Resolve DNS records |
dnsRecordTypes | all five | Any of A, AAAA, MX, NS, TXT |
checkAvailability | false | Adds the availability hint (see the caveat above) |
requestsPerSecondPerServer | 1 | Pacing per supported registry server (0.1–2) |
maxRetryWaitSecs | 30 | Longest Retry-After to wait for. Longer waits mark that server's domains as rate-limited. |
requestTimeoutSecs | 20 | Per-request timeout for RDAP and DNS |
maxConcurrency | 10 | Domains processed in parallel (per-server limits still apply) |
cacheHours | 24 | How 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;
nullotherwise):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, orNXDOMAIN). - Free:
errorandrate-limitedrows (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 asnot-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.