Bulk Domain Availability & RDAP WHOIS Checker avatar

Bulk Domain Availability & RDAP WHOIS Checker

Pricing

from $1.50 / 1,000 domain checkeds

Go to Apify Store
Bulk Domain Availability & RDAP WHOIS Checker

Bulk Domain Availability & RDAP WHOIS Checker

Domain availability checker API for apps and AI agents: bulk RDAP / WHOIS lookup. Compact JSON per domain: available or taken, registrar, creation and expiry dates, days to expiry, status codes, nameservers, from official registry servers. Name ideas x extensions mode. No API key.

Pricing

from $1.50 / 1,000 domain checkeds

Rating

0.0

(0)

Developer

Dylan Knaup

Dylan Knaup

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

Check thousands of domain names in one run. For each domain you get: available or registered, registrar, creation date, expiry date and days to expiry, last change, EPP status codes, nameservers, DNSSEC and domain age, read directly from the official registry RDAP servers (RDAP is the ICANN-mandated successor to WHOIS). No API key, no proxies, no browser, no scraping of registrar websites.

Paste a list, or type a few name ideas plus extensions (com, io, ai, co, dev...) and get every combination checked.

AI agents: quick call

  • Minimal input: {"domains":["example.com","mybrand.io"]} (or {"nameStems":["mybrand"],"tlds":["com","io"]})
  • One output row (short): {"domain":"mybrand.io","available":true,"status":"available","method":"rdap","registrar":null,"expires":null,"daysToExpiry":null,"checkedAt":"2026-11-03T20:00:00Z"}
  • Price: $1.50 per 1,000 domains ($0.0015 per row). Invalid, duplicate and failed domains are not charged.
  • Keep results small: read the dataset with fields=domain,available,status,registrar,expires,daysToExpiry, and leave includeRawRdap off (the default) unless you need the full registry answer.

Standby (fast API) mode

Call the Actor like a normal web API and get the result in the HTTP response, with no run to start or dataset to read. The first call after a quiet period starts a server (a few seconds); later calls answer right away. The server stops after 60 seconds without calls.

curl -H "Authorization: Bearer $APIFY_TOKEN" \
"https://djk12--domain-availability-rdap-checker.apify.actor/check?domains=example.com,mybrand.io"
curl -X POST -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"nameStems":["mybrand"],"tlds":["com","io","ai"]}' \
https://djk12--domain-availability-rdap-checker.apify.actor/check
  • Input: the same fields as a normal run (domains, nameStems + tlds, includeRawRdap), as query parameters (comma-separated lists) or a JSON body.
  • Response: {"count":2,"results":[...rows as in the dataset...],"invalidInputs":[],"failed":[],"stoppedBySpendingLimit":false,"tookMs":850}. Errors come back as JSON with a 4xx status and a plain message.
  • Limit: up to 100 domains per request. Use a normal run for bigger lists.
  • Price: the normal $0.0015 per returned domain, plus $0.0005 per request that returns results, plus the usual $0.00005 start fee each time a Standby server starts. Requests that return nothing (all invalid or failed) cost nothing beyond that. Like any run, the server also uses platform compute while it is up.

What you get

FieldExample
domaingoogle.com
availablefalse (true = no registry record)
statusregistered, available, unknown_likely_registered, unknown_no_dns
registrar / registrarIanaIdMarkMonitor Inc. / 292
created, expires, lastChangedISO 8601 UTC dates
daysToExpiry, ageDays680, 10276
statusCodesclient transfer prohibited, redemption period, pending delete...
nameservers, dnssecns1.google.com... / false
registrantOrg, registrantCountrywhen the registry publishes them (often redacted)
methodrdap, dns_no_rdap, dns_after_rdap_error

A clean Domains table view shows domain, available, status, registrar, created, expires, days to expiry, nameservers, method and check time. Export to CSV, Excel, JSON or use the API.

Who it is for

  • Domain investors: screen big lists, find names in pending delete or close to expiry, check domain age.
  • Brand naming and startups: 30 name ideas x 10 extensions = 300 checks in under a minute.
  • Expiry monitoring: schedule the Actor daily or weekly on your portfolio or competitors and sort by daysToExpiry.
  • Lead generation and research: registrar, creation date and nameservers (hosting / email provider hints) for a list of company domains.
  • SEO and security teams: lookalike and typo domains of your brand, who registered them and when.

How to use it

  1. Put domains in Domains, one per line. URLs, www. and subdomains are cleaned up automatically (https://shop.example.co.uk/page is checked as example.co.uk). Internationalized names (münchen.de) are converted to punycode. Duplicates are checked once.
  2. Or fill Name ideas and Extensions to generate candidates.
  3. Click Start. A few hundred domains usually take under a minute.

Input example

{
"domains": ["google.com", "wikipedia.org", "bbc.co.uk", "spiegel.de", "my-new-startup-name.com"],
"nameStems": ["acmecloud", "acmelabs"],
"tlds": ["com", "io", "ai", "dev"],
"perServerConcurrency": 3
}

Output example

{
"domain": "google.com",
"available": false,
"status": "registered",
"method": "rdap",
"registrar": "MarkMonitor Inc.",
"registrarIanaId": "292",
"created": "1997-09-15T04:00:00Z",
"expires": "2028-09-14T04:00:00Z",
"daysToExpiry": 680,
"ageDays": 10276,
"statusCodes": ["client delete prohibited", "client transfer prohibited", "client update prohibited",
"server delete prohibited", "server transfer prohibited", "server update prohibited"],
"nameservers": ["ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com"],
"dnssec": false,
"rdapUrl": "https://rdap.verisign.com/com/v1/domain/google.com",
"checkedAt": "2026-11-03T20:00:00Z"
}

A RUN_SUMMARY record in the key-value store gives counts by status and method, the inputs that were skipped as invalid, and any domain that could not be checked.

Pricing

$1.50 per 1,000 domains ($0.0015 per domain checked), pay per event: you pay for rows in your dataset and nothing else. Invalid inputs, duplicates and domains that could not be checked are not charged. Set a maximum cost per run and the Actor stops cleanly when it is reached. See the Pricing tab for the current price.

FAQ

RDAP or WHOIS? RDAP (Registration Data Access Protocol) is the structured JSON replacement for WHOIS. ICANN required it for all generic TLDs and retired the old port-43 WHOIS requirement in January 2025. The Actor finds each extension's official server from the IANA RDAP bootstrap registry, so answers come from the registry itself, not from a reseller cache.

How accurate is "available"? available: true means the registry has no record of the domain (RDAP answered "not found"). That is the same signal registrars use, but it is not a purchase guarantee: premium names, reserved names and names blocked by registry policy can still be unavailable or cost more, and a domain can be registered by someone else a minute later. Confirm at your registrar before you rely on it.

What about .de and other country extensions? Some country registries (for example .de, .eu, .ch, .it, .jp) do not offer public RDAP lookups. For those the Actor falls back to a DNS check over DNS-over-HTTPS and says so in method (dns_no_rdap): unknown_likely_registered when the domain has nameservers, unknown_no_dns when it has none (often free, but a registered domain without nameservers also looks like this). available is null for these rows. .io, .co, .me, .sh and .ac run on official registry RDAP servers that are not yet in the IANA list; the Actor knows them.

Why are owner names empty? Since GDPR most registries redact registrant data. When a registry does publish an organization or country, you get it in registrantOrg / registrantCountry; redaction placeholders are returned as empty.

Will I get blocked or rate-limited? The Actor is polite on purpose: a per-registry concurrency limit (default 3), backoff with jitter on errors, and it honours Retry-After on HTTP 429. If a registry stays unreachable after 5 tries, the domain gets a DNS check instead (method: dns_after_rdap_error) so the run still finishes.

Subdomains? blog.example.com is checked as example.com (using the Public Suffix List, so example.co.uk stays example.co.uk). Your original text is kept in input.

How big can a run be? Up to 100,000 domains per run. Large lists of one extension are limited by that registry's speed; split very big lists or raise perServerConcurrency carefully.

Use it from code

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("<YOUR_USERNAME>/domain-availability-rdap-checker").call(run_input={
"nameStems": ["acmecloud", "acmelabs"], "tlds": ["com", "io", "ai"],
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["domain"], row["status"], row["expires"])

Or with plain HTTP, run synchronously and get the rows back in one call:

curl -X POST "https://api.apify.com/v2/acts/<YOUR_USERNAME>~domain-availability-rdap-checker/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"domains": ["example.com", "example.io"]}'

Data source and terms

Registration data comes from the public RDAP services that ICANN-accredited registries operate for automated queries, located through the IANA bootstrap file https://data.iana.org/rdap/dns.json. DNS fallback uses Cloudflare's public DNS-over-HTTPS resolver. Use the data in line with the registries' terms of use.