WHOIS / WhoisXML Replacement — RDAP-Powered Lookup avatar

WHOIS / WhoisXML Replacement — RDAP-Powered Lookup

Pricing

$5.00 / 1,000 domain whois/rdap lookups

Go to Apify Store
WHOIS / WhoisXML Replacement — RDAP-Powered Lookup

WHOIS / WhoisXML Replacement — RDAP-Powered Lookup

WhoisXML is gated. Here's the RDAP-powered drop-in that works on any TLD. Unified JSON schema, RDAP-first with legacy WHOIS fallback.

Pricing

$5.00 / 1,000 domain whois/rdap lookups

Rating

0.0

(0)

Developer

Stephan Corbeil

Stephan Corbeil

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

WHOIS Replacement — RDAP-Powered Drop-In for Any TLD

WhoisXML is gated. Here's the RDAP-powered drop-in that works on any TLD.

For two decades, every domain-hunter script, brand-protection dashboard, security-ops playbook, SEO toolchain, DNS expiry monitor, cold-outreach CRM, and "who owns this site?" utility on the internet leaned on a handful of free or cheap WHOIS endpoints: the original port-43 WHOIS servers, the WhoisXML free tier, the RapidAPI WHOIS collection, the scrape-whois.com fallback. One by one, every single one of those pipes has been crimped: GDPR redactions (2018) stripped out registrant identity from every gTLD, the ICANN-mandated RDAP-over-WHOIS migration (2023-2024) broke every scraper that expected port-43 text, WhoisXML's "free tier" now caps at a nuisance-level quota and requires a payment method on file, and the RapidAPI WHOIS bundle limits you to 500 lookups/month with mandatory billing details. The "free WHOIS API" Google keeps surfacing in search results either 404s, 403s, or quietly returns an empty JSON stub.

This actor is the clean replacement. It speaks RDAP — the IETF-standardized, JSON-native successor to WHOIS — against the same IANA bootstrap registry the protocol designers published for exactly this purpose, and falls back to legacy WHOIS only for the long-tail ccTLDs that still haven't migrated. You get one consistent JSON schema across every TLD, regardless of which registrar served the data.

Zero auth. No API keys. No monthly minimum. You pay $0.005 per domain lookup via Apify's pay-per-event billing; the underlying RDAP data is free and public.


Why RDAP Is the Right Backend (and Why Your Existing Code Broke)

RDAP — the Registration Data Access Protocol, RFC 7480-7484 — is the IETF's JSON-native replacement for port-43 WHOIS. ICANN mandated RDAP support for all accredited gTLD registrars and registries starting August 2019 and declared RDAP the primary public lookup mechanism for gTLDs in 2023-2024. Port-43 WHOIS isn't gone yet, but it's officially deprecated, the output is structurally inconsistent (every registrar formats its text differently), and redacted fields now return a useless "REDACTED FOR PRIVACY" stub instead of real data.

RDAP fixes every one of those pain points:

  • Structured JSONevents[], nameservers[], entities[], status[], publicIds[] — no regex-parsing of free-text text files.
  • Standard discovery — the IANA bootstrap registry maps every TLD to its RDAP base URL. Every lookup starts by looking up the server for the TLD, then hitting {base}/domain/{domain}.
  • Consistent identifiers — IANA Registrar ID as a first-class publicIds entry, vCard/jCard contact blocks with typed fields.
  • HTTPS by default — no raw TCP/43 firewall exceptions, no "WHOIS returns 42 lines of English prose and a disclaimer."
  • Globally deployed — Verisign (.com, .net), Afilias, Nominet, Donuts / Identity Digital, CentralNic, ICANN-accredited registrars, plus a growing set of ccTLDs all speak RDAP in 2025.

The problem is that most legacy client code was written before RDAP landed and assumes either (a) a scraped HTML page from whois.com / who.is, (b) a raw port-43 text response, or (c) one of the redirected-to-a-paywall "free" APIs. All three pipes broke over the last two years.

This actor is the glue layer: it hides the RDAP bootstrap dance, the jCard parsing, the vcardArray flattening, the event-action date mapping, and the rare-but-real ccTLD legacy fallback — and returns one consistent record for every domain.


Unified Output Schema

Every domain returns the same shape, whether it came from RDAP or the legacy fallback:

FieldTypeDescription
domainstringThe domain that was looked up (normalized).
sourceenumrdap, whois, or error.
registrar_namestring or nullRegistrar display name.
registrar_iana_idstring or nullIANA numeric registrar ID (RDAP only).
created_dateISO-8601 or nullDomain registration/creation date.
updated_dateISO-8601 or nullLast-changed date.
expires_dateISO-8601 or nullDomain expiration date.
statusarray of stringsEPP/RDAP status codes.
nameserversarray of stringsAuthoritative NS hostnames, lowercased.
registrant_countrystring or nullOften redacted post-GDPR.
registrant_organizationstring or nullOften redacted post-GDPR.
admin_emailstring or nullOften a privacy-proxy address.
raw_rdapobject or nullFull RDAP JSON, only when include_raw: true.
rdap_fallback_reasonstring or nullPresent only when we fell back to legacy WHOIS.

Redacted fields come back as null rather than the mess of "REDACTED FOR PRIVACY" / "GDPR Masked" / "Data Protected" strings that legacy WHOIS servers sprinkle in — so you can cleanly check if record["registrant_country"] is None without a regex over possible placeholders.


Quick Start

Bulk lookup via curl:

curl -X POST \
"https://api.apify.com/v2/acts/nexgendata~whois-replacement/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"domains": ["google.com", "github.com", "stripe.com"],
"include_raw": false,
"timeout_seconds": 10
}'

Python with the official client:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("nexgendata/whois-replacement").call(run_input={
"domains": ["google.com", "github.com", "example.co.uk"],
"include_raw": False,
"timeout_seconds": 10,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["domain"], "->", item["registrar_name"], "| expires:", item["expires_date"])

One PPE event fires per domain, so a 100-domain batch costs 100 × $0.005 = $0.50.


5 Real Use Cases

1. Domain-Expiry Monitoring for Your Brand Portfolio

You own 40 domains across .com, .io, .ai, .co, and a few ccTLDs. Feed the full list into this actor weekly, alert on any expires_date inside a 60-day window. Replaces the "we paid $49/mo to WhoisXML for a single-digit-domain portfolio" anti-pattern.

2. Brand-Protection / Typosquat Detection

Pipe a typo-generator feed (facebok.com, faceboook.com, faceboook.net, ...) into this actor; filter results where created_date is within the last 90 days and nameservers don't match your authoritative set. Cheap, evergreen brand-protection signal.

3. Cold-Outreach Enrichment for B2B Sales

For every domain in your CRM, pull the registrar_name and registrant_organization (when not redacted) plus created_date. Domain age is a real B2B signal — "company owns a 15-year-old .com" patterns differently than "company owns a 4-month-old .io." Feed the record into Clay, HubSpot, or your own scoring pipeline.

4. Security Ops: Newly-Registered-Domain Triage

Your SIEM flagged outbound traffic to weird-domain-xyz.net. Run one lookup, see created_date: 2025-02-14 and registrant_country: null. That's a three-week-old domain with redacted registrant — a classic phishing/C2 signal. This beats pasting the domain into whois.com by hand for every alert.

You scraped 10,000 backlinks. Bulk-lookup to cluster them by registrant_organization (when disclosed) to spot link-farm networks that share an operator, or by nameservers tuple to find domains hosted together. RDAP exposes both cleanly.


WHOIS / WhoisXML Free vs This Actor vs the Paid Alternatives

CapabilityWhoisXML Free Tierwhois.com ScrapeThis actor (RDAP-first)WhoisXML Paid ($49/mo+)WhoXY ($2/1k)
Auth requiredAPI key + payment methodNone (until blocked)No auth (via Apify token)API keyAPI key
Monthly capTight free ceilingRate-limited aggressivelyNone — pay per eventTier-gatedTier-gated
TLD coveragegTLDs + common ccTLDsInconsistent (HTML changes)Every RDAP-registered TLD + legacy fallbackBroadBroad
Consistent schemaYesNo (regex over HTML)Yes, unifiedYesYes
Survives ICANN RDAP migrationMaintainedBreaksNative RDAPMaintainedMaintained
Raw RDAP availableNoN/AYes (opt-in)VariesNo
Price per 1,000 lookupsN/A (free cap)Free but unreliable~$5 via PPE~$8-$20$2 bulk
IntegrationsPaid-tier gatedNoneApify (Slack, Sheets, Zapier, webhooks)Paid-tier gatedPaid-tier gated

WhoXY is cheaper per 1k — but you're paying for the convenience of a unified schema plus Apify's integration surface (Google Sheets, Slack, Zapier, Make, n8n, webhooks, scheduled runs), not raw WHOIS calls. If you need millions of lookups/month, talk to WhoXY directly. For every workload under that, this actor is the right tool.


Why Run This on NexGenData / Apify?

  • Zero infra. No IANA bootstrap caching code, no jCard parser, no event-action date mapping, no python-whois fallback orchestration.
  • Batch-friendly. Up to 100 domains per run — one PPE event per domain.
  • Pay-per-event. No monthly seat. One domain is $0.005; a 100-domain batch is $0.50.
  • Resilient. RDAP primary, legacy WHOIS automatic fallback; returns an error record rather than crashing the run when both fail.
  • Integration-ready. Pipe to Google Sheets, Slack, Zapier, Make, n8n, or a webhook via standard Apify integrations.

FAQ

Q: Why is registrant_country / admin_email null for most domains? GDPR redactions. Since 2018, ICANN-accredited registrars redact personal registrant data for every gTLD by default. For domains owned by organizations that opted into public disclosure (many governments, large corporations, open-source projects), you'll get real values. For everything else, expect nulls — and be glad we return null instead of the legacy "REDACTED FOR PRIVACY" text soup.

Q: Does this work for ccTLDs like .co.uk, .de, .fr? Many yes, some no. The UK's Nominet, Germany's DENIC, France's AFNIC, and the Dutch SIDN all speak RDAP in 2025. Some smaller ccTLDs haven't migrated — for those we fall back to legacy port-43 WHOIS via the python-whois library, and you'll see "source": "whois" on the record.

Q: How fresh is the data? RDAP responses reflect the registry's current state — same freshness as the registrar's own dashboard. Some registries cache aggressively (1-hour TTLs are typical), so a freshly-transferred domain may show old registrar info for a short window.

Q: What's the rate limit? RDAP servers enforce per-IP limits — typically 10-60 req/minute. This actor lookups sequentially with default timeouts sized for stable operation. For 10,000+ domain batches, split into multiple runs with a gap between them.

Q: Can I get the raw RDAP JSON? Yes — set include_raw: true and every record includes a raw_rdap field with the full RDAP response (entities[], events[], publicIds[], notices[], everything). Useful when you need a field we don't surface by default.


  • wappalyzer-replacement — Detect the tech stack of any domain (CMS, framework, analytics, CDN). Pairs with WHOIS to build full tech-OSINT profiles.
  • tranco-rank-lookup — Academic, free Alexa Rank replacement. Cross-reference your WHOIS list against domain popularity.
  • company-data-aggregator — Bulk company profile from WHOIS, DNS, SSL, GitHub — the enterprise-bundle upsell of this actor.
  • dns-propagation-checker — Verify A / AAAA / NS / MX across global resolvers. Use alongside WHOIS when domains move between registrars.

Built by NexGenData — more "killed API, reborn cheaper" actors at apify.com/nexgendata