Bulk Domain Availability & RDAP WHOIS Checker
Pricing
from $1.50 / 1,000 domain checkeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
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 leaveincludeRawRdapoff (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
| Field | Example |
|---|---|
domain | google.com |
available | false (true = no registry record) |
status | registered, available, unknown_likely_registered, unknown_no_dns |
registrar / registrarIanaId | MarkMonitor Inc. / 292 |
created, expires, lastChanged | ISO 8601 UTC dates |
daysToExpiry, ageDays | 680, 10276 |
statusCodes | client transfer prohibited, redemption period, pending delete... |
nameservers, dnssec | ns1.google.com... / false |
registrantOrg, registrantCountry | when the registry publishes them (often redacted) |
method | rdap, 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 deleteor 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
- Put domains in Domains, one per line. URLs,
www.and subdomains are cleaned up automatically (https://shop.example.co.uk/pageis checked asexample.co.uk). Internationalized names (münchen.de) are converted to punycode. Duplicates are checked once. - Or fill Name ideas and Extensions to generate candidates.
- 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 ApifyClientclient = 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.