RDAP Domain WHOIS Scraper avatar

RDAP Domain WHOIS Scraper

Pricing

from $6.80 / 1,000 results

Go to Apify Store
RDAP Domain WHOIS Scraper

RDAP Domain WHOIS Scraper

Look up domain registration data over RDAP (the modern WHOIS). For each domain get the registrar, registration and expiry dates, status codes, nameservers, DNSSEC and any published registrant details. Great for lead research and domain due diligence. Export to JSON, CSV or Excel.

Pricing

from $6.80 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Share

RDAP Domain WHOIS Scraper

RDAP Domain WHOIS Scraper

Here is one real result, with every field the actor returns:

{
"domain": "google.com",
"handle": "2138514_DOMAIN_COM-VRSN",
"registrar": "MarkMonitor Inc.",
"registrarIanaId": "292",
"registrarUrl": "http://www.markmonitor.com",
"registrarAbuseEmail": "abusecomplaints@markmonitor.com",
"registrarAbusePhone": "+1.2086851750",
"status": [
"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"],
"registrationDate": "1997-09-15T04:00:00Z",
"expirationDate": "2028-09-14T04:00:00Z",
"lastChangedDate": "2019-09-09T15:39:04Z",
"daysUntilExpiry": 766,
"registrantOrg": null,
"registrantName": null,
"registrantEmail": null,
"registrantPhone": null,
"registrantCountry": null,
"registrantAddress": null,
"adminEmail": null,
"techEmail": null,
"dnssec": false,
"unicodeName": null,
"whoisServer": null,
"source": "RDAP",
"observedAt": "2026-08-10T14:19:13.197Z",
"error": null
}

The most complete RDAP domain scraper available. It returns every registration field the RDAP (successor to WHOIS) protocol exposes for each domain, including registrar abuse contacts, status codes, nameservers and any registrant details the registry publishes, plus a derived daysUntilExpiry so you can sort by renewal urgency.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor looks up each domain you pass through the RDAP (Registration Data Access Protocol) system, the IETF standard that replaces legacy WHOIS. It resolves the correct registry RDAP endpoint per TLD, parses the structured response, and writes one normalized registration record per domain to the run's dataset. Dates are returned in ISO 8601, status codes and nameservers are arrays, registrar abuse contacts are captured for takedown workflows, and a derived daysUntilExpiry is computed on top of the expiration date.

Registrant contact fields are returned when the registry publishes them. For many gTLDs they are redacted for privacy and returned as null, never invented.

Quickstart

Open the actor, paste this into the input, and press Run. It looks up three domains.

{
"maxDomains": 10,
"domains": ["google.com", "github.com", "stripe.com"]
}

Add as many domains as you like to domains. Each domain returns one registration record. Both fields are optional.

Input reference

FieldTypeRequiredDefaultDescription
domainsstring[]no["google.com", "github.com", "stripe.com"]One or more domains to look up, for example google.com. Each domain returns one registration record.
maxDomainsintegerno10Maximum number of domains to look up from the list.

Output reference

One dataset item per domain. Types: string, integer, boolean, string[], or null when the source value is absent or redacted.

FieldTypeDescription
domainstringThe domain name that was looked up.
handlestringRegistry object handle (unique registry identifier for the domain).
registrarstringSponsoring registrar name.
registrarIanaIdstringIANA registrar ID number.
registrarUrlstringRegistrar website URL.
registrarAbuseEmailstringRegistrar abuse contact email, for takedown and abuse reports.
registrarAbusePhonestringRegistrar abuse contact phone.
statusstring[]EPP status codes, for example client transfer prohibited.
nameserversstring[]Authoritative nameserver hostnames.
registrationDatestringDomain creation date (ISO 8601), or null.
expirationDatestringDomain expiration date (ISO 8601), or null.
lastChangedDatestringDate the registration was last updated (ISO 8601), or null.
daysUntilExpiryintegerWhole days between the run time and expirationDate, or null.
registrantOrgstringRegistrant organization, or null if redacted.
registrantNamestringRegistrant name, or null if redacted.
registrantEmailstringRegistrant email, or null if redacted.
registrantPhonestringRegistrant phone, or null if redacted.
registrantCountrystringRegistrant country, or null if redacted.
registrantAddressstringRegistrant address, or null if redacted.
adminEmailstringAdministrative contact email, or null if redacted.
techEmailstringTechnical contact email, or null if redacted.
dnssecbooleanWhether DNSSEC is enabled for the domain.
unicodeNamestringUnicode (IDN) form of the domain, or null.
whoisServerstringLegacy WHOIS server referenced by the registry, or null.
sourcestringData source label. Always RDAP.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed lookup, an item with a populated error field is written instead.

Example output record

Real record from a live run (input {"domains": ["google.com", "github.com", "stripe.com"], "maxDomains": 10}):

{
"domain": "google.com",
"handle": "2138514_DOMAIN_COM-VRSN",
"registrar": "MarkMonitor Inc.",
"registrarIanaId": "292",
"registrarUrl": "http://www.markmonitor.com",
"registrarAbuseEmail": "abusecomplaints@markmonitor.com",
"registrarAbusePhone": "+1.2086851750",
"status": [
"client delete prohibited",
"client transfer prohibited",
"server delete prohibited"
],
"nameservers": ["ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com"],
"registrationDate": "1997-09-15T04:00:00Z",
"expirationDate": "2028-09-14T04:00:00Z",
"lastChangedDate": "2019-09-09T15:39:04Z",
"daysUntilExpiry": 766,
"registrantOrg": null,
"registrantName": null,
"registrantEmail": null,
"dnssec": false,
"unicodeName": null,
"whoisServer": null,
"source": "RDAP",
"observedAt": "2026-08-10T14:19:13.197Z",
"error": null
}

Note: the status array is trimmed to 3 of the 6 real codes for readability; the live record contains all of them. Registrant fields are null because the .com registry redacts them for privacy.

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~rdap-domain-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"domains":["google.com","github.com","stripe.com"]}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~rdap-domain-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"domains":["example.org","iana.org"],"maxDomains":100}'

Apify CLI:

apify call scrapers_lat/rdap-domain-scraper \
--input '{"domains":["cloudflare.com"]}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=500&limit=500"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per domain record returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. If a lookup fails, the actor writes an item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 domains per run. Upgrade for higher maxDomains.
  • One record per domain. Each domain in domains produces exactly one record.

FAQ and troubleshooting

Why are the registrant name, email and address null? Most gTLD registries redact registrant contact details for privacy under RDAP. The actor returns whatever the registry publishes and leaves the rest null, never invented. Some ccTLDs and business domains do publish these fields.

What is RDAP and how is it different from WHOIS? RDAP is the IETF standard that replaces legacy WHOIS. It returns structured JSON with consistent status codes and dates, which is why the output is clean and machine-readable.

Which TLDs are supported? Any TLD that operates an RDAP service, which is nearly all gTLDs and a growing number of ccTLDs. The actor resolves the correct registry endpoint per TLD automatically.

A domain returned an error. Why? The domain may be unregistered, the TLD may not run RDAP, or the registry may have been temporarily unavailable. The actor writes an item with a populated error field and does not charge for it.

Can I find soon-to-expire domains? Yes. Sort or filter the output by daysUntilExpiry, which is derived from the expiration date at run time.

Is this an official registry tool? No. This actor is independent and reads only data published through the public RDAP protocol.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with any domain registry or registrar. Accesses only data published through the public RDAP protocol.