WHOIS Domain Lookup — Bulk Expiry & Registrar Check (RDAP) avatar

WHOIS Domain Lookup — Bulk Expiry & Registrar Check (RDAP)

Pricing

from $2.00 / 1,000 verifieds

Go to Apify Store
WHOIS Domain Lookup — Bulk Expiry & Registrar Check (RDAP)

WHOIS Domain Lookup — Bulk Expiry & Registrar Check (RDAP)

WHOIS domain lookup at scale: expiration date, registrar, nameservers and lock status read from the registry that owns each extension, over RDAP. You are only charged for domains whose expiry the registry actually returned.

Pricing

from $2.00 / 1,000 verifieds

Rating

0.0

(0)

Developer

Kevin

Kevin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

RDAP Domain Intelligence — verified expiry, registrar and lock status

An independent tool. It is not affiliated with, endorsed by, or operated by ICANN, IANA, Verisign, Nominet, CIRA, DENIC, SWITCH, auDA, SIDN, Norid, Traficom or any registry or registrar. It queries their public RDAP services and reports what they return.

You are only charged for domains the registry actually answered for. No expiration date returned, no charge. That is the whole idea.

This Actor reads domain records over RDAP, the official successor to WHOIS (RFC 7483/9083), straight from the registry that owns the extension — Verisign for .com, Nominet for .uk, AFNIC for .fr, and so on. No scraping, no HTML parsing, no third-party middleman who might be a week out of date.


What you get per domain

FieldMeaning
expirationExpiry date, ISO-8601 with timezone
days_until_expirationNegative when the domain has already expired
createdRegistration date
last_changedLast update recorded by the registry
registrarRegistrar name, read from the nested vCard
registrar_iana_idIts IANA registrar id, when published
nameserversSorted, lowercased, deduplicated
nameserver_count
statusEPP status codes as published
transfer_lockedtrue when a client or server transfer lock is set
unknown_fieldsFields the registry did not supply — named, never guessed
chargedWhether this row cost you anything
not_charged_reasonWhy it did not, in plain English
sourceThe exact registry URL the answer came from, so you can verify it yourself

Add includeRaw to attach the registry's own JSON to every row, for auditing. It does not change the price. Entities carrying personal contact details — registrant, administrative, technical, billing — are removed before delivery. Several country registries publish names, postal addresses, telephone numbers and email addresses with no redaction of their own; this Actor does not pass that on, and says so in the row with _redacted_by_actor.


The billing rule, stated plainly

Two events:

  • Actor start — $0.0005, once per run. The competitors that lead this category charge no start fee at all; this one covers the container and the IANA bootstrap read, measured at about $0.00016.
  • Verified domain record — $0.002, charged only when the registry returned a usable expiration date. That is below the category median and below the market leader, who charges for every lookup whether it answered or not.

You are not charged when:

  • the domain does not exist at the registry,
  • the registry returned no expiration date,
  • the date came back in a format we refuse to guess at,
  • the extension is not covered (see below),
  • the registry timed out or errored.

Every one of those still lands in your dataset, with charged: false and a not_charged_reason saying exactly what happened. A run that finds nothing costs you $0.0005.


Coverage, measured rather than claimed

Servers come from the official IANA bootstrap registry, re-read at the start of every run — currently 1 198 extensions, plus four additions probed and verified individually that IANA does not list (.io, .me, .sh, .us).

On a 102-domain sample spanning eleven extensions, 94 returned a verified expiration date and were billable. The eight that did not are all explained below, and each came back free with that exact sentence in not_charged_reason.

Registries that serve RDAP but never publish an expiry date. Local policy, not an outage. Each was confirmed on five or six separate domains before being listed:

ExtensionOperator
.deDENIC
.ch, .liSWITCH
.nlSIDN
.noNorid
.fiTraficom
.auauDA

No request is even sent for these, and the row names the operator so you can confirm it yourself in ten seconds.

Namespaces administered apart from their parent registry. .ac.uk, .gov.uk, .nhs.uk, .mod.uk, .police.uk and .sch.uk are not run by Nominet and publish no RDAP service of their own. Ordinary .uk and .co.uk domains are fully supported — bbc.co.uk returns its expiry normally.

Excluded by registry terms. .ca — CIRA's RDAP terms forbid this kind of batch, commercial lookup (see "Registry terms" below). No request is ever sent for a .ca domain; the row comes back free, naming CIRA and the clause.

Extensions with no public RDAP at all: .co, .jp, .cn, .ru, .es, .it, .se, .dk, .at, .be, .nz, .za and others. Probed one by one on 2026-08-18 against every published operator address; none answered.

This is a property of the RDAP ecosystem, not of this Actor. It is stated here rather than discovered on your invoice.

Typical uses

  • Portfolio monitoring — check the domains you own or manage and alert on days_until_expiration < 30.
  • Acquisition — find out when a name you want actually drops.
  • Due diligence — confirm a counterparty's domains are locked and not about to lapse.
  • Security review — spot nameserver changes and missing transfer locks across an estate.

Input

{
"domains": ["google.com", "lemonde.fr", "bbc.co.uk", "github.io"],
"includeRaw": false
}

Give registrable domains: google.com, bbc.co.uk. A URL is reduced to its host, but the host is then queried as written — www.google.com is not the same name as google.com, and no registry holds a record for it. Strip the www. yourself.

Duplicates, casing and trailing dots are normalised, so Google.COM, google.com. and google.com count as one domain and are charged once. A run is capped at 5000 domains; beyond that the first 5000 are kept and the log says so.

Set a maximum cost per run in the Actor's settings and the run stops cleanly when it is reached, telling you how many domains were left untouched. Your list order is preserved, so put what matters first.


Output

{
"domain": "google.com",
"expiration": "2028-09-14T04:00:00+00:00",
"days_until_expiration": 757,
"created": "1997-09-15T04:00:00+00:00",
"last_changed": "2019-09-09T15:39:04+00:00",
"registrar": "MarkMonitor Inc.",
"registrar_iana_id": "292",
"nameservers": ["ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com"],
"nameserver_count": 4,
"status": ["client delete prohibited", "client transfer prohibited"],
"transfer_locked": true,
"unknown_fields": [],
"charged": true,
"not_charged_reason": "",
"source": "https://rdap.verisign.com/com/v1"
}

A SUMMARY.json lands in the key-value store with the counts and a breakdown of every reason a domain was not charged — so a registry outage looks like a registry outage, not like a quiet drop in your results.


Rate limits and politeness

Requests are spaced per registry, not globally. A hundred .com domains are a hundred requests to one registry and are paced accordingly; a hundred domains spread over twenty extensions are only five per registry and run at full speed. Transient 429/5xx responses are retried.

A registry that answers 429 gets more room, and only that registry — the delay for it doubles and stays doubled for the rest of the run, while every other registry keeps running at full speed.

A 404 is taken as that registry's final answer, and the message says which registry answered — because "not found" is only ever a fact about one server, never about the world. Measured throughput: 102 domains across eleven extensions in 36.7 seconds.


Registry terms — read this before you scale

Registry RDAP services are published so that people can look up domains, and several registries put limits in writing on what may be done with the answers. .ca is excluded entirely as of 2026-08-19: CIRA permits RDAP use only to identify or contact a domain holder and prohibits aggregation, commercial and market-research use, and automated multi-query access — exactly what a batch lookup tool does, regardless of how the customer intends to use one row of it. A .ca domain in your input list comes back free, with that reason, and no request is ever sent to CIRA's registry. The .us registry prohibits high-volume automated processes. Verisign reserves the right to restrict access at its sole discretion.

Checking domains you own or administer is the use this Actor is built for. Compiling registrant data across domains you have no relationship with is not, and this Actor is not sold for it. The practical consequence of ignoring that is not a courtroom — it is an IP block, which is a reliability problem for everyone using the tool.


Why trust the numbers

Every row that got an answer names the registry URL it came from in source. Rows that got no answer carry the reason instead. Check any of them yourself:

$curl -H 'Accept: application/rdap+json' https://rdap.verisign.com/com/v1/domain/google.com

You should get the same expiration date this Actor reported.