Bulk WHOIS & RDAP Domain Lookup - Age, Expiry, DNS
Pricing
from $1.50 / 1,000 domains
Bulk WHOIS & RDAP Domain Lookup - Age, Expiry, DNS
Look up domains via official RDAP (WHOIS). Input: list of domains; optional DNS records. Returns per domain: registered, registrar, creation and expiry dates, domain age, nameservers, status, DNSSEC, plus DNS/MX/SPF/DMARC. 1,100+ TLDs, no personal data, no API key.
Pricing
from $1.50 / 1,000 domains
Rating
0.0
(0)
Developer
Bence Kadi
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Bulk WHOIS & RDAP Domain Lookup: age, expiry, registrar, DNS
Look up registrar, creation and expiry dates, domain age, EPP status, nameservers and DNSSEC for any list of domains from each registry's official RDAP service (the modern WHOIS), plus DNS, SPF, DMARC and e-mail provider. $1.50 per 1,000 domains.
๐ What is Bulk WHOIS & RDAP Domain Lookup?
A bulk WHOIS tool that asks each domain's own registry for its public data over RDAP, the ICANN-mandated successor of WHOIS. Paste domains, URLs or e-mail addresses; get one clean row per domain, ready for a spreadsheet, CRM or API.
- ๐ 1,100+ TLDs from the official source: generic TLDs (.com, .org, .io, .ai, .app...) and 90+ country TLDs via IANA's RDAP bootstrap, plus verified registry servers IANA doesn't list yet (.de, .io, .ch, .us, .me). RDAP only, never port-43 WHOIS.
- ๐ก๏ธ GDPR-safe: no names, e-mails, phones or addresses of people, ever. Registrant organisation only when clearly a legal entity (GitHub, Inc.). No raw WHOIS text.
- ๐ฌ DNS & e-mail included: A/AAAA/MX/NS/TXT, SPF, DMARC and the e-mail provider, at no extra cost. Competitors charge $3+ per 1,000 for WHOIS + DNS.
- ๐งฎ Ready-to-filter:
domainAgeDaysanddaysUntilExpirycomputed; ISO 8601 UTC dates; standard EPP status names. - ๐ธ Failures are free: not-registered, unsupported, timed-out and rate-limited domains are listed with the reason, not charged.
- ๐ค Polite by design: per-registry rate limits, automatic slow-down on HTTP 429,
Retry-Afterhonoured, robots.txt opt-outs respected. No proxies, no IP rotation. - ๐ Messy input OK: URLs and e-mail addresses become the registrable domain; IDNs (mรผnchen.de) work.
๐ฏ Use cases
- Expiry monitoring (agencies, IT teams): filter
daysUntilExpiry < 30to catch renewals before they lapse. - Fraud, phishing and KYB checks: new domains (
domainAgeDays < 90) and missing DMARC are classic risk signals for vendors and sign-ups. - Lead enrichment (sales teams): add domain age, e-mail provider and registrar to CRM accounts.
- Brand protection & security audits: who registered look-alike domains, where they are hosted, whether SPF/DMARC/DNSSEC are set.
- Developers and AI agents: call it from code or via MCP inside a workflow.
๐ Output fields
| Field | Description | Example |
|---|---|---|
input | Your line | https://www.bbc.co.uk/news |
domain / domainUnicode / tld | Registrable domain, Unicode form, TLD | bbc.co.uk |
registered | true, false or null (failed) | true |
availability | registered, possibly_available, unknown | registered |
lookupSource | rdap if the registry answered | rdap |
registrar / registrarIanaId | Registrar and IANA ID | MarkMonitor Inc. / 292 |
registrarUrl | Registrar website | http://www.markmonitor.com |
registrarAbuseEmail / registrarAbusePhone | Abuse contact (role addresses only) | abusecomplaints@markmonitor.com |
registrantOrganization / registrantCountry | Only for a legal entity | GitHub, Inc. / US |
createdDate / updatedDate / expiresDate | UTC dates | 1997-09-15T04:00:00Z |
domainAgeDays | Days since registration | 10611 |
daysUntilExpiry | Days left (negative if expired) | 710 |
status | EPP status codes | ["clientTransferProhibited"] |
nameservers / dnssec | Registry nameservers, delegation signed | ["ns1.google.com"] / false |
registryDomainId | Registry handle | 2138514_DOMAIN_COM-VRSN |
dnsResolved | DNS answered | true |
aRecords / aaaaRecords | IPv4 / IPv6 | ["185.199.108.153"] |
mxRecords / nsRecords | MX (with priority), NS | ["10 smtp.google.com"] |
txtRecords | TXT (e-mails masked) | ["v=spf1 a -all"] |
hasSpf / hasDmarc / dmarcPolicy | SPF, DMARC, policy | true / true / reject |
emailProvider | From MX (Google Workspace, Microsoft 365, Self-hosted, Other...) | Microsoft 365 |
registryServer / registryTermsUrl | Registry that answered, its terms | https://rdap.verisign.com/com/v1/ |
error / errorType | Why a lookup failed | unsupported_tld |
lookedUpAt | Lookup time (UTC) | 2026-10-05T02:16:10Z |
The DNS fields only appear when Include DNS records is on.
Use cases: Analyze SEO & marketing (analyze domain authority & metrics, extract website metadata & tech stacks) ยท Generate leads (lead enrichment & validation) ยท Research markets & competitors (profile companies & due diligence).
๐ How to use
- Open the Actor's Store page and click Try for free.
- Paste your domains, URLs or e-mail addresses, one per line (a whole CSV column works).
- Keep Include DNS records on, or turn it off for a registry-only lookup.
- Click Start. The prefilled 8 domains finish in about 2-5 seconds.
- Download CSV, Excel or JSON, or fetch results via API, Make, Zapier or n8n.
๐ง Input guide
Domains (domains, required). One per line; commas and semicolons also split entries. Each is reduced to the registrable domain (Public Suffix List); duplicates are skipped, so news.bbc.co.uk and www.bbc.co.uk count once as bbc.co.uk.
- โ
Good:
example.com,https://shop.example.co.uk/cart,info@example.de,mรผnchen.de. - โ Bad:
192.168.1.1(IP address),gov.uk(public suffix),localhost(no TLD),example.notatld(unknown TLD). - Invalid lines are skipped and listed in
RUN_SUMMARYโinvalidInputs. If no line is valid, the run fails with a clear message.
Include DNS records (includeDns, default true). A, AAAA, MX, NS, TXT, SPF, DMARC and e-mail provider via DNS-over-HTTPS, free of extra charge. Turn it off if you only need dates and registrar.
Max domains (maxResults, default 0 = all). Hard limit: 100,000 domains per run; longer lists are cut with a log warning. Use 10-20 to test a big list first.
Parallel lookups (maxConcurrency, 1-50, default 10). Each registry keeps its own limit (e.g. PIR, DENIC, Nominet: 2 parallel, 0.5 s gaps), so higher values mostly help lists that mix many TLDs.
Request timeout (requestTimeoutSecs, 5-60, default 20). Busy answers (HTTP 408, 429, 5xx) and dropped connections are retried up to 3 times with backoff; a domain that still fails becomes a free row with error set.
Full example input:
{"domains": ["apify.com","wikipedia.org","https://www.bbc.co.uk/news","www.spiegel.de","github.io","afnic.fr","sidn.nl","cbc.ca"],"includeDns": true,"maxResults": 0,"maxConcurrency": 10,"requestTimeoutSecs": 20}
๐ฆ Output
One row per domain. Real row from a run on 2026-10-05 (arrays shortened):
{"input": "google.com","domain": "google.com","domainUnicode": "google.com","tld": "com","registered": true,"availability": "registered","lookupSource": "rdap","registrar": "MarkMonitor Inc.","registrarIanaId": "292","registrarUrl": "http://www.markmonitor.com","registrarAbuseEmail": "abusecomplaints@markmonitor.com","registrarAbusePhone": "+1.2086851750","registrantOrganization": null,"registrantCountry": null,"createdDate": "1997-09-15T04:00:00Z","updatedDate": "2019-09-09T15:39:04Z","expiresDate": "2028-09-14T04:00:00Z","domainAgeDays": 10611,"daysUntilExpiry": 710,"status": ["clientDeleteProhibited", "clientTransferProhibited", "serverUpdateProhibited"],"nameservers": ["ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com"],"dnssec": false,"registryDomainId": "2138514_DOMAIN_COM-VRSN","dnsResolved": true,"aRecords": ["192.178.194.100", "192.178.194.101"],"aaaaRecords": ["2a00:1450:4025:1807::64"],"mxRecords": ["10 smtp.google.com"],"nsRecords": ["ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com"],"txtRecords": ["v=spf1 include:_spf.google.com ~all", "MS=E4A68B9AB2BB9670BCE15412F62916164C0B20BB"],"hasSpf": true,"hasDmarc": true,"dmarcPolicy": "reject","emailProvider": "Google Workspace","registryServer": "https://rdap.verisign.com/com/v1/","registryTermsUrl": "https://www.verisign.com/domain-names/registration-data-access-protocol/terms-service/index.xhtml","error": null,"errorType": null,"lookedUpAt": "2026-10-05T02:16:10Z"}
availability:possibly_available= registry "not found" and no DNS;unknown= lookup failed, or "not found" but the name resolves. A hint, not a purchase guarantee (reserved and premium names exist).- Unsupported TLDs give
registered: null,errorType: "unsupported_tld"and a reason (.it is not supported: the registry offers no public RDAP service (WHOIS is not used)), plus DNS data.
Dataset views (Output tab): Registration overview (registrar, dates, age, nameservers), Expiry & status (expiry, days left, EPP status, DNSSEC, availability), DNS & e-mail (A, MX, provider, SPF, DMARC, NS) and Lookup source & errors (input, registry server, error, error type).
Key-value store: each run writes a RUN_SUMMARY record with counts (domainsLookedUp, domainsNotRegistered, domainsFailed...), errors by type, results per TLD (byTld), invalidInputs, duplicatesSkipped, chargeLimitReached, domainsNotProcessed, the RDAP bootstrap version, requests, robotsBlockedHosts and durationSecs.
Export: JSON, CSV, Excel, XML, RSS or HTML table from the Output tab, or via the API (e.g. /v2/datasets/{id}/items?format=csv&view=expiry).
๐ Supported TLDs
| Status | TLDs |
|---|---|
| Supported (registry RDAP) | Generic TLDs whose registry allows automated RDAP access (.com, .net, .org, .info, .biz, .io, .ai, .app, .dev, .me, .tv, .cc...) and 90+ country TLDs including .uk, .de, .fr, .nl, .ch, .li, .ca, .au, .pl, .in, .us, .cz, .fi, .no, .si, .tw, .kr |
| Not supported (free rows that say why) | TLDs whose registry's robots.txt disallows automated access to its RDAP server: .co, .xyz and other CentralNic TLDs, GMO Registry TLDs, .br, .so. Country TLDs with no RDAP service (~150), e.g. .it, .eu, .be, .es, .at, .se, .dk, .jp, .ru, .cn, .pt, .ie, .nz, .hu, .mx, .hk |
The run summary (RUN_SUMMARY โ robotsBlockedHosts) lists the registry servers that opted out during your run.
๐ต Pricing: $1.50 per 1,000 domains
You pay once per domain for which registration data was returned (event domain), DNS included. Platform compute is included; the only other charge is Apify's tiny $0.00005 per-run start fee. Not registered, unsupported, failed and rate-limited domains are free.
| Typical run | Domains charged | Cost |
|---|---|---|
| Client's sites | 100 | $0.15 |
| Agency portfolio | 1,000 | $1.50 |
| CRM batch | 10,000 | $15.00 |
| Maximum run | 100,000 | $150.00 |
(Plus the start fee.) In our 223-domain test, only the 147 domains with data were charged ($0.22).
Cap spending with Max charge per run: the run stops cleanly at your limit (RUN_SUMMARY โ chargeLimitReached).
๐ Use it via API
Get your token from Apify Console โ Settings โ API & Integrations and replace YOUR_API_TOKEN.
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('kadi_bence/domain-whois-lookup').call({domains: ['apify.com', 'https://www.bbc.co.uk/news', 'info@example.de'],includeDns: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((d) => console.log(d.domain, d.expiresDate, d.daysUntilExpiry));
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("kadi_bence/domain-whois-lookup").call(run_input={"domains": ["apify.com", "wikipedia.org", "github.io"],"includeDns": False,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["domain"], item["registrar"], item["domainAgeDays"])
cURL (runs the Actor and returns the rows in one call):
curl -X POST "https://api.apify.com/v2/acts/kadi_bence~domain-whois-lookup/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"domains": ["apify.com", "sidn.nl"], "includeDns": true}'
Apify CLI:
apify call kadi_bence/domain-whois-lookup --input '{"domains": ["apify.com", "cbc.ca"]}'apify call kadi_bence/domain-whois-lookup -f input.json
MCP for AI agents. Add the Actor as a tool in Claude, Cursor, VS Code or any other MCP client:
{"mcpServers":{"apify":{"url":"https://mcp.apify.com/?actors=kadi_bence/domain-whois-lookup"}}}
๐ Integrations & scheduling
- Schedules: run a saved task on a cron expression.
- Webhooks: POST to your URL when a run succeeds (
ACTOR.RUN.SUCCEEDED). - Zapier, Make, n8n: start runs and read dataset items.
- Google Sheets, Slack, e-mail: via Apify integrations or Zapier/Make.
Recipe 1: monthly expiry monitoring of a domain portfolio. Save a task with your portfolio in domains and includeDns: false, and schedule it monthly (cron 0 6 1 * *). On run success, a Make/Zapier scenario reads the Expiry & status view, keeps rows with daysUntilExpiry < 60 and posts them to Slack or e-mail. A 500-domain portfolio costs about $0.75 per month.
Recipe 2: sign-up risk check. Call the run-sync endpoint with the new user's e-mail address; flag accounts with domainAgeDays < 90 or hasDmarc: false.
Recipe 3: CRM enrichment. Run company websites weekly and write emailProvider, domainAgeDays and registrar back via Make or n8n.
๐งฐ Related tools by the same developer
Website due diligence:
- Website Tech Stack Detector: CMS, ecommerce, analytics and frameworks from 7,600+ fingerprints; $1.50 / 1,000 websites.
- SEO Site Audit Crawler: broken links, redirects, titles/meta, canonical and hreflang on every page; $1.50 / 1,000 pages.
- Website Screenshot & PDF API: full-page/mobile PNG, JPEG, WebP and PDF captures; $2.50 / 1,000 screenshots.
Content pipelines:
- Document to Markdown: PDF/Word/PowerPoint/Excel/OCR to Markdown and RAG chunks; $2 / 1,000 documents.
- Bulk Image Downloader: all images/files from pages into a ZIP; $0.80 / 1,000 files.
โ FAQ
How does it work? It finds each domain's registry in IANA's RDAP bootstrap (downloaded every run) or its verified extra list, checks robots.txt, sends one RDAP request and flattens the answer. DNS runs in parallel.
Why is the registrant name or e-mail missing or "REDACTED"? (GDPR)
Since GDPR, most registries redact personal registrant data. On top of that, this Actor never outputs personal data, even when a registry publishes it: no names, e-mails, phones or addresses of any contact, and no raw WHOIS/RDAP text. registrantOrganization is filled only for a legal entity (Inc, LLC, GmbH, S.p.A., Sp. z o.o., Ltd, Foundation, University...), never for a redaction placeholder or privacy/proxy service; in our test that was 13% of registered domains. Abuse e-mails are kept only when they are role addresses (abuse@, compliance@...), and e-mail addresses in TXT records become [e-mail removed].
Why are some other fields empty? Some registries never publish them: .de has no dates or registrar, .ch/.li and .au no creation or expiry dates, .nl no expiry date. In a 223-domain test across 37 TLDs, every registered domain in a supported TLD came back: 100% with nameservers, 88% registrar, 83% creation date, 78% expiry date.
Why is my TLD not supported? If a registry's RDAP robots.txt disallows bots (CentralNic for .co/.xyz, GMO Registry, registro.br) or a country TLD has no RDAP at all (.it, .eu, .be, .es, .dk, .jp...), the row says so and is free. We don't fall back to port-43 WHOIS: most WHOIS terms forbid automated queries and none explicitly allow them. New RDAP registries are picked up automatically from IANA's list.
Is it legal? RDAP is the official, ICANN-mandated protocol for public registration data. The Actor queries only domains you supply, respects each registry's limits, robots.txt and terms, and outputs no personal data. Registry terms forbid using the data for spam, mass marketing or rebuilding their database (DENIC and nic.ch also exclude advertising). You are responsible for your use of the results; this is not legal advice.
How fast is it? The prefilled 8 domains take 2-5 s. In our test, 223 domains across 37 TLDs took 23-33 s with 20 in parallel. .com/.net (Verisign) is the fastest.
Do I need proxies?
No, and it deliberately doesn't rotate IPs. If a registry still answers 429, the row says rate_limited (free); re-run those domains later. Big single-registry lists (e.g. 10,000 .org) hit this most.
Where does the DNS data come from? Cloudflare's public DNS-over-HTTPS (1.1.1.1), with Google Public DNS as fallback.
Can I use it from Python, Zapier or an AI agent? Yes: see Use it via API and Integrations & scheduling.
What does a big job cost? 100,000 domains (the per-run maximum) cost at most $150 plus the start fee; free rows lower that. Use Max charge per run as a hard cap.
What if a lookup fails?
The row stays in the dataset, free, with error and errorType (unsupported_tld, rate_limited, timeout, dns, refused, tls, network, http, invalid_response, internal). If something looks wrong or a TLD is missing, open an issue on the Issues tab with the domain. Fixes usually land within 24-48 hours. Recent changes are in the changelog below.
๐ Changelog
- 2026-10-05: Store page rewritten (README and input descriptions); no change to the code or output.
- 1.0 (2026-10-05): First release. RDAP via the IANA bootstrap plus verified non-bootstrap registry servers, RDAP only (no port-43 WHOIS), robots.txt opt-outs honoured with no workaround, DNS/SPF/DMARC/e-mail provider, GDPR guard, per-registry rate limits, failed, unsupported and not-registered domains not charged.
๐ค Need a custom version?
I build custom scrapers, scheduled data feeds and integrations (CSV, Excel, Google Sheets, API, MCP for AI agents). Tell me the sites and fields you need:
- Email: bence.kadi@gmail.com
- Apify profile: https://apify.com/kadi_bence
Credits
Registry data: each TLD's registry via RDAP (RFC 9082/9083) and the IANA RDAP bootstrap (RFC 9224). Public Suffix List ยฉ Mozilla Foundation and contributors, MPL-2.0. DNS: Cloudflare 1.1.1.1 and Google Public DNS. This Actor is not affiliated with ICANN, IANA or any registry.
Related Actors
More low-cost Actors by the same developer, built on official APIs and public data:
- Website Tech Stack Detector โ CMS, ecommerce, analytics and frameworks of any website
- SEO Site Audit โ 0-100 SEO score per page, broken links and fix hints
- New Business Filings USA โ newly registered LLCs and companies
- Website Screenshot & PDF API โ full-page screenshots and PDFs of any URL
- PageSpeed Insights Bulk Checker โ Core Web Vitals and Lighthouse scores in bulk
- SEC Form D Scraper โ new startup funding rounds from SEC EDGAR
- AI Visibility Tracker โ how ChatGPT, Perplexity, Gemini and Claude mention your brand
All my Actors: apify.com/kadi_bence