Domain WHOIS (RDAP) & DNS Lookup, No Login icon

Leads & companies · Live on Apify

Bulk WHOIS lookup with RDAP and live DNS records

Paste a list of domains. For each one, you get registrar, dates and days until expiry from the official registry. You also get live DNS records in the same row.

About $1.50 for 1,000 domains$0.0015 per domain + $0.0005 per run. One run gives up to 5,000 domains. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

domainapify.com
tldcom
lookupStatuscomplete

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: apify.com in Domains. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Check a list of domain names and get WHOIS-style registration data from the official registry RDAP service, plus live DNS records, in one row per domain. You get the registrar, creation and expiry dates, days until expiry, status codes, nameservers, DNSSEC and A, AAAA, MX, NS, TXT, CNAME, SOA or CAA records. No login and no API key.

  • RDAP, the modern replacement of WHOIS. It asks the registry of the domain's top-level domain (for example Verisign for .com, Public Interest Registry for .org, Nominet for .uk). The server is found in the IANA RDAP bootstrap file.
  • DNS over HTTPS, from Google Public DNS or Cloudflare 1.1.1.1. If one fails, the other is tried.

Good for

  • Find domains that expire soon in a portfolio (expiresAt, daysUntilExpiry).
  • Check which registrar and nameservers a list of domains uses.
  • Check mail and verification setup (MX, TXT with SPF, CAA) for many domains at once.
  • Check whether domain names are registered (registered, not_found).

Not a good fit

  • No registrant data. The Actor never reads the owner's name, address, e-mail or phone. Registries hide most of it anyway.
  • No port 43 WHOIS. Some country-code registries have no public RDAP service, for example .it, .es, .ru, .jp, .se, .dk, .so. For these you get DNS records and rdapStatus: rdap_unavailable, not registration data.
  • Some registries share little. For example DENIC (.de) does not publish the registrar or expiry date. These fields are null then.
  • Best effort. Data comes from public services as they answer at run time. We do not promise that every field is present or correct.
  • Not for spam. Registry terms (for example Verisign and PIR) forbid using this data for mass advertising or unsolicited e-mail. Use it for your own domains, research or security work.

Who uses it

Domain portfolio owners

Find domains that expire soon and renew them in time.

IT and security teams

Check registrars, nameservers and mail setup for many domains.

Name hunters

See which domain names are not registered yet.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.0005Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Domain lookup$0.0015 (from $0.0013 on paid Apify plans)One checked domain saved to the Dataset with status complete, partial or not_found. Rows with status error, invalid inputs and duplicates are not charged.

Examples

  • One domain: about $0.002.
  • 1,000 domains: about $1.50.
  • Every day 100 domains, for 30 days: about $4.51 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 3,300 domains.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Is RDAP the same as WHOIS?

RDAP is the official successor of WHOIS. It gives the same facts in clean JSON.

Do I get the owner's name or email?

No. The tool never collects owner data. Most registries hide it anyway.

Why is there no expiry date for some domains?

Some registries share little, or run no public RDAP. You still get DNS records.

Do I need a WHOIS API key?

No. RDAP and DNS over HTTPS are public. You only need an Apify account.

Why do I not get the owner's name or e-mail?

The Actor does not collect personal data of registrants. Most registries hide it for privacy reasons anyway.

How fresh is the data?

Each row is checked live at checkedAt. Registry data can lag behind registrar changes by a short time; rdapDatabaseUpdatedAt shows when the registry last refreshed it.

Details

Step by step on Apify
  1. Open the Input tab.
  2. Put your domains in Domains (domains), one per line. The field is prefilled with four examples.
  3. Keep the defaults: RDAP on, DNS on, record types A, AAAA, MX, NS, TXT, Google resolver.
  4. Click Start.
  5. Open the Output tab and the dataset table. The table has three views:
  6. Domains — status, registrar, dates and nameservers;
  7. DNS records — DNS response code and records by type;
  8. Registry details — registrar IDs, RDAP sources and links.
Use cases
TaskInputKey fieldsNext step
Expiry watch for a domain portfoliodomainsexpiresAt, daysUntilExpiry, registrarSort by daysUntilExpiry; run on a schedule
Registrar and DNS auditdomains, recordTypesregistrar, nameservers, dns.NS, dnssecExport to CSV or Excel
E-mail setup checkincludeRdap: false, recordTypes: ["MX","TXT"]dns.MX, dns.TXTFilter rows with empty dns.MX
Is this name registered?domainsregistered, lookupStatusKeep rows with not_found
Tips for better results
  • Sort by daysUntilExpiry to see urgent renewals first.
  • Pick only the DNS record types you need. Each type is one query.
  • Long .ch or .uk lists can be slow. Split them into smaller runs.
Limits and good to know
  • Up to 5,000 unique domains per run. For more, split the list into several runs
  • The Actor keeps request rates low for each registry (at most 10 requests per second to Verisign) and waits when a server asks it to slow down
  • Some registries limit RDAP on their side. SWITCH (.ch) answered only about 40–70 lookups in a row in our tests and then returned rate-limit errors; Nominet (.uk) allows about 2 lookups per second and a daily maximum. The Actor slows down for these registries, but long .ch or .uk lists can get rows with errorCode: RATE_LIMITED or HOST_CIRCUIT_OPEN. Such a row still has its DNS records and is partial
  • Measured on 256 MB with a mixed list (mostly .com, .net, .org): 2,000 domains took about 9 minutes and 5,000 domains about 22 minutes. Lists with many .ch or .uk domains run slower because of the registry limits above. The default timeout is 1 hour

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "input": "apify.com",
  "domain": "apify.com",
  "tld": "com",
  "lookupStatus": "complete",
  "registered": true,
  "rdapStatus": "found",
  "registrar": "Amazon Registrar, Inc.",
  "registrarIanaId": "468",
  "registrarAbuseEmail": "[email protected]",
  "createdAt": "2009-06-02T17:14:10.000Z",
  "updatedAt": "2026-05-16T16:53:04.000Z",
  "expiresAt": "2035-06-02T17:14:10.000Z",
  "daysUntilExpiry": 3154,
  "domainAgeDays": 6341,
  "status": ["client transfer prohibited"],
  "nameservers": ["ns-1225.awsdns-25.org", "ns-1928.awsdns-49.co.uk", "ns-449.awsdns-56.com", "ns-839.awsdns-40.net"],
  "dnssec": true,
  "rdapUrl": "https://rdap.verisign.com/com/v1/domain/apify.com",
  "dnsResponseCode": "NOERROR",
  "dns": {
    "A": ["3.170.42.100", "3.170.42.109", "3.170.42.68", "3.170.42.76"],
    "AAAA": ["2600:9000:2870:2000:9:a03e:6540:93a1"],
    "MX": ["1 aspmx.l.google.com", "5 alt1.aspmx.l.google.com"],
    "NS": ["ns-1225.awsdns-25.org", "ns-1928.awsdns-49.co.uk", "ns-449.awsdns-56.com", "ns-839.awsdns-40.net"],
    "TXT": ["google-site-verification=R_4agUZyHorQrO5QGFa6ZB_o-uDxq82NY-EteDUpPvo"]
  },
  "dnsResolver": "google",
  "error": null,
  "errorCode": null,
  "checkedAt": "2026-10-13T11:24:11.691Z",
  "source": "RDAP (domain registry) + DNS-over-HTTPS"
}

Use it from code

Actor ID: cliqtomedia/domain-whois-dns-lookup. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/domain-whois-dns-lookup").call(run_input={
    "domains": [
        "apify.com",
        "example.org",
        "this-domain-should-not-exist-7f3k9q.com",
        "repubblica.it"
    ],
    "includeRdap": True
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~domain-whois-dns-lookup/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains": ["apify.com", "example.org", "this-domain-should-not-exist-7f3k9q.com", "repubblica.it"], "includeRdap": true}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/domain-whois-dns-lookup")
result = tool.invoke({"run_input": {"domains": ["apify.com", "example.org", "this-domain-should-not-exist-7f3k9q.com", "repubblica.it"], "includeRdap": True}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (30)
FieldTypeMeaning
inputstringThe value as given in the input, before normalisation.
domainstringRegistrable domain that was checked (lowercase ASCII/punycode), e.g. example.co.uk.
tldstringTop-level domain whose registry was asked, e.g. com, uk, de.
lookupStatusstringcomplete = every requested part answered; partial = some data returned but a part failed or the registry has no RDAP; not_found = the registry says the domain is not registered (or, with RDAP off, DNS answers NXDOMAIN); error = nothing usable (not charged).
registeredbooleantrue when the registry RDAP returned the domain, false when it answered 404 (not registered), null when unknown (RDAP off, unavailable or failed). DNS alone never sets this.
rdapStatusstringOutcome of the RDAP part: found, not_found (404), rdap_unavailable (the TLD has no public RDAP service known to the Actor), error, or skipped (RDAP off).
registrarstringSponsoring registrar name from RDAP.
registrarIanaIdstringRegistrar IANA ID (gTLDs).
registrarUrlstringRegistrar website from RDAP, when published.
registrarAbuseEmailstringRegistrar abuse-contact mailbox when it is a role address (abuse@, support@, ...); any other address is dropped.
createdAtstringRegistration date (ISO 8601, UTC).
updatedAtstringLast change of the registration (ISO 8601, UTC).
expiresAtstringExpiry date (ISO 8601, UTC). Many ccTLD registries do not publish it: null then.
daysUntilExpiryintegerWhole days from checkedAt to expiresAt; negative when already past. null when expiresAt is unknown.
domainAgeDaysintegerWhole days since createdAt. null when createdAt is unknown.
statusarrayEPP / RDAP status values, lowercase, e.g. client transfer prohibited.
nameserversarrayDelegated nameservers according to the registry (RDAP).
dnssecbooleantrue/false when the registry states whether the delegation is DNSSEC-signed; null when not stated.
rdapServerstringRDAP base URL used for the TLD.
rdapServerSourcestringWhere the RDAP server came from: the IANA bootstrap file, or a registry endpoint verified by the Actor author but not yet listed by IANA.
rdapUrlstringExact RDAP URL that was requested (open it to see the source record).
registrarRdapUrlstringLink to the registrar's own RDAP record of the domain, when the registry publishes one.
rdapDatabaseUpdatedAtstringWhen the registry last refreshed its RDAP database (ISO 8601).
dnsResponseCodestringDNS response code: NOERROR (name exists), NXDOMAIN (name does not exist in DNS), SERVFAIL, REFUSED. null when DNS is off or failed.
dnsobjectRecords per requested type, e.g. {"A": ["1.2.3.4"], "MX": ["10 mx.example.com"]}. Empty list = no records of that type; null = that query failed. MX values are "priority host" ("0 ." = null MX: the domain accepts no mail); TXT strings are joined and unquoted.
dnsResolverstringResolver that answered.
errorstringWhat failed, per part (RDAP: ... | DNS: ...). null when nothing failed.
errorCodestringMachine-readable code of the first failure, e.g. RDAP_NOT_AVAILABLE, RATE_LIMITED, SOURCE_UNAVAILABLE, SOURCE_TIMEOUT.
checkedAtstringWhen the lookup started (ISO 8601, UTC).
sourcestringSources used for this row: RDAP (domain registry), DNS-over-HTTPS, or both.
Input settings (5)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Domains requireddomainsarray["apify.com", "example.org", "this-domain-should-not-exist-7f3k9q.com", "repubblica.it"]
Registration data (RDAP)includeRdapbooleantrue
DNS recordsincludeDnsbooleantrue
DNS record typesrecordTypesarray["A", "AAAA", "MX", "NS", "TXT"]
DNS resolverdnsResolverstring"google"

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure