WHOIS Domain Lookup & Domain Age Checker (Bulk, RDAP) avatar

WHOIS Domain Lookup & Domain Age Checker (Bulk, RDAP)

Pricing

from $0.56 / 1,000 domain checkeds

Go to Apify Store
WHOIS Domain Lookup & Domain Age Checker (Bulk, RDAP)

WHOIS Domain Lookup & Domain Age Checker (Bulk, RDAP)

WHOIS domain lookup in bulk via RDAP: domain age, registration and expiry dates, registrar, nameservers and DNSSEC from the registries' own servers, with a new / young / established signal for cold email. No personal data.

Pricing

from $0.56 / 1,000 domain checkeds

Rating

0.0

(0)

Developer

LYFE Offshore

LYFE Offshore

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 days ago

Last modified

Share

Domain Age Checker & Bulk WHOIS Lookup (RDAP)

Domain Age Checker and bulk WHOIS lookup over RDAP: for a list of domains, get the registration date, expiry date, registrar, nameservers and DNSSEC of each one, plus a new / young / established age signal.

The answers come straight from the registries' own RDAP servers (the official successor to WHOIS). A domain registered three weeks ago sending cold mail is one of the oldest spam signals there is.

No personal data. RDAP answers sometimes contain the registrant's name or contact details. This Actor never copies them out: it reads only dates, status flags, nameservers, DNSSEC and the registrar's company name, and drops every registrant, admin, tech and abuse contact. There is a test for exactly that.

One run, real output

Eleven domains across .com, .org, .nl, .co.uk, .dev, .app, .shop, .de, .io, run for real on 4 October 2026. Eight were looked up, two sit on TLDs with no RDAP server, one is not registered.

DomainStatusRegisteredAge (years)SignalRegistrarDNSSEC
stripe.comok1995-09-1231.1establishedSafeNames Ltd.no
mozilla.orgok1998-01-2428.7establishedMarkMonitor Inc.no
rijksoverheid.nlok1999-07-0627.2establishedRijksoverheidyes
bbc.co.ukok1994-12-1331.8establishedBritish Broadcasting Corporationno
web.devok2018-10-297.9establishedMarkMonitor Inc.no
cash.appok2018-03-298.5establishedCSC Corporate Domains, Inc.no
allbirds.shopok2026-08-220.1youngSpaceship, Inc.no
lyfeoffshore.comok2026-05-130.4youngCloudflare, Inc.no
spiegel.detld_without_rdap
github.iotld_without_rdap
nonexistent-zz-98765-foo.comnot_registered

You were billed for the eight rows with facts. The three others cost nothing.

Input example

This is the prefilled input of the run above:

{
"domains": ["stripe.com", "mozilla.org", "rijksoverheid.nl", "bbc.co.uk", "web.dev", "cash.app",
"allbirds.shop", "lyfeoffshore.com", "spiegel.de", "github.io", "nonexistent-zz-98765-foo.com"],
"outputMode": "all"
}

domains takes names, URLs or email addresses (https://www.mozilla.org/ and someone@bbc.co.uk both work). Or give inputDatasetId (and domainField) to read domains from another Actor's dataset; without domainField it uses the domain, website, url or email column. outputMode: "found-only" returns just the rows with facts. concurrency (default 20) sets the lookups in flight overall.

Output example

One real row (stripe.com, looked up locally with this Actor's code on 5 October 2026) and one free row:

{
"domain": "stripe.com",
"tld": "com",
"rdapServer": "https://rdap.verisign.com/com/v1/",
"status": "ok",
"billable": true,
"registered": "1995-09-12T04:00:00Z",
"expires": "2027-09-11T04:00:00Z",
"lastChanged": "2025-10-01T01:39:51Z",
"ageDays": 11346,
"ageYears": 31.1,
"ageSignal": "established",
"statusFlags": ["client delete prohibited", "client transfer prohibited", "client update prohibited",
"server delete prohibited", "server transfer prohibited", "server update prohibited"],
"registrar": "SafeNames Ltd.",
"nameservers": ["ns-1087.awsdns-07.org", "ns-1882.awsdns-43.co.uk", "ns-423.awsdns-52.com", "ns-705.awsdns-24.net"],
"dnssec": false
}
{ "domain": "spiegel.de", "tld": "de", "status": "tld_without_rdap", "billable": false,
"note": ".de has no RDAP server in the IANA bootstrap list" }
FieldMeaning
domainThe domain as looked up (lowercase, www. removed, IDN in punycode)
tldTop-level domain
statusRow status, see the table below
billabletrue only for rows you pay for (status: ok)
registeredRegistration date from the registry
expiresExpiry date
lastChangedLast time the registry record changed
ageDays / ageYearsAge since registered
ageSignalnew, young, established or unknown
registrarRegistrar's company name (empty when the registry leaves it out)
nameserversNameservers, sorted
dnssectrue if the delegation is signed, false if not, null if the registry does not say
statusFlagsEPP status flags such as client hold, pending delete
rdapServerThe RDAP server that answered
noteWhy a row has no facts

A run summary (counts per status, TLDs without RDAP, date of the IANA list) is stored under the SUMMARY key.

Age signal

SignalAgeReading
newunder 30 dayshigh risk for cold email, check before you send
young30 to 364 daystreat with care
establishedone year or moreno age warning
unknownno registration datethe registry did not give one

It is one signal, not a verdict: plenty of legitimate businesses register a fresh domain, and a spammer can buy an old one. Pair it with an address check, for example Catch-All Email Verifier.

Which TLDs work (and which do not)

The Actor finds each domain's RDAP server in the IANA bootstrap list (version of 30 September 2026, 1,203 TLDs). A TLD that is not in that list has no RDAP server, and the row says tld_without_rdap and is free. Checked on 4 October 2026 against 59 popular TLDs:

  • Work: com net org info biz ai app dev shop store online site tech xyz tv uk nl fr no fi pl cz ua ca au kr in br ar sg tw id
  • Do not work: io co me us de be ch at eu es it pt se dk ru tr gr ie nz jp cn mx cl za il ae hk

Several of the popular ones that do not work, .de, .io, .co and .eu among them, are widely used for business domains. If most of your list is .de, this Actor is not for you yet. Lookups also tested live: .fr .no .ca .br .in .cz .pl .kr returned data, and .au returned registrar and status but no dates for a .net.au name (row status no_dates, free). Some registries leave out the registrar name (.br, .cz in our test), and the field is then empty.

Row statuses

StatusMeaningBilled
okregistration facts returnedyes
tld_without_rdapno RDAP server for this TLDno
not_registeredthe registry says the domain does not existno
no_datesthe registry answered without registration or expiry datesno
rate_limited / lookup_failedthe server refused or failed after retries; try again laterno
invalid_domainnot a domain nameno

If every lookup fails (no network, all servers down), the run fails with a message instead of finishing empty. Domains are looked up once even if they appear twice. Subdomains are not reduced to the registrable domain: give example.com, not shop.example.com.

Politeness

Each RDAP server gets at most 2 requests at a time with a short pause between them, a 429 or 503 is retried with backoff (honouring Retry-After), and every request says who it is in the User-Agent (tools@lyfeoffshore.com). These are the registries' public servers; please do not point huge lists at a single TLD in a tight loop. A 10,000-domain .com list takes a while by design.

Price

Price per 1,000 by your Apify plan (Apify applies the right column automatically):

FreeStarterScaleBusiness and up
Domain checked, per 1,000$0.80$0.80$0.68$0.56

No start fee. The figures below use the Free-plan price; on a paid plan the same run costs less.

EventPrice
Domain checked (registration facts returned)$0.0008
  • 1,000 domains with facts ≈ $0.80. 10,000 ≈ $8.
  • The 11-domain run above: 8 billed rows = $0.0064.
  • Free: tld_without_rdap, not_registered, no_dates, rate_limited, lookup_failed and invalid_domain rows, in both output modes.

Platform usage is included. A run's max-charge limit (ACTOR_MAX_TOTAL_CHARGE_USD) caps how many domains are processed; the rest are skipped with a warning in the log.

Use it from code or an AI agent

curl -X POST "https://api.apify.com/v2/acts/lyfe_tools~domain-age-whois-rdap-bulk/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains": ["stripe.com", "allbirds.shop"]}'

It returns the rows as a JSON array. AI agents (Claude, Cursor and other MCP clients) can call the Actor through the Apify MCP server at https://mcp.apify.com: the agent sends domains and reads status, registered, expires, ageSignal and registrar.

FAQ

How do I check the age of many domains at once? Put them in domains or point inputDatasetId at another Actor's dataset. Each domain gets one row.

Is this a WHOIS lookup? It uses RDAP, the registries' JSON successor to WHOIS. You get the same registration and expiry dates and registrar, without parsing WHOIS text and without registrant contact data.

Why does my .de or .io domain show tld_without_rdap? Those registries have no RDAP server in the IANA bootstrap list, so there is nothing to ask. The row is free.

Can I find who owns a domain? No. Registrant, admin, tech and abuse contacts are dropped on purpose. Only the registrar's company name is kept.

How do I spot newly registered domains for spam or cold email checks? Filter on ageSignal: new is under 30 days, young under a year.

Am I charged for domains that are not registered? No. Only rows with status: ok are billed.

Next step: check the domain's email setup with SPF, DKIM & DMARC Checker.

Source and terms

Data comes from the registries' public RDAP servers, found through IANA's bootstrap list (RFC 9224). RDAP is a public protocol meant for this kind of lookup, but each registry publishes its own terms and rate limits, and we have not read all of them. Registry data is not ours; use it for the lookups you need rather than to rebuild a registry. The registered date is what the registry holds, which can differ from when a site first went live (domains change hands and are re-registered).

Issues and questions: tools@lyfeoffshore.com.