RDAP Bootstrap Coverage and Server Conformance Ledger by TLD
Pricing
$5.00 / 1,000 tld_checks
RDAP Bootstrap Coverage and Server Conformance Ledger by TLD
Check which TLDs have an RDAP server in the IANA bootstrap file, which servers answer correctly, and what a 404 means for each server.
Pricing
$5.00 / 1,000 tld_checks
Rating
0.0
(0)
Developer
kingii98
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Share
This Actor checks RDAP (Registration Data Access Protocol) coverage for each TLD (top-level domain). It helps lookup code avoid one error: a registered domain that the code reports as free.
For each TLD, the Actor answers these questions:
- Does the IANA bootstrap file (
https://data.iana.org/rdap/dns.json) list an RDAP server? - Does the server answer 200 for a known-registered name?
- Does the server answer 404 for a random name?
- What does a 404 mean for this server?
Input
| Field | Default | Meaning |
|---|---|---|
tlds | ["com","net","org"] | TLDs to check. |
domains | [] | Domains. The Actor reduces each domain to its TLD. |
probe_domain_overrides | example.com, example.net, example.org | Known-registered name for each TLD. |
timeout_seconds | 10 | Timeout for each request. Range: 1 to 30. |
compare_with_previous_run | true | Write change records against the previous run. |
Limits: maximum 300 TLDs for each run. The Actor ignores TLDs above this limit. An invalid TLD gets no row. A run with empty input uses the defaults and succeeds.
Without an override, the probe name is nic.<tld>. This is an assumption.
It can be wrong for some TLDs. Set probe_domain_overrides for those TLDs.
Output
The default dataset has one row for each TLD (record_type = tld):
tld,bootstrap_present,server_url,probe_domainknown_status: HTTP status for the known-registered namerandom_status: HTTP status for a random nameredirect_chain: URLs visited for the known namerate_limit_headers: rate-limit andretry-afterheadershas_expiration_event,has_registrar_entityresponse_ms: response time for the known nameclass: one of the values belowerror: error text, ornull
| Class | Meaning |
|---|---|
usable | Known name gives 200. Random name gives 404. |
ambiguous_not_found | Any other pair of statuses. A 404 for a known name does not prove that the name is free. |
no_rdap_server | The bootstrap file has no entry for the TLD. A 404 from a redirector does not mean "not registered". |
unreachable | A request failed, timed out, or went to a blocked target. |
When a value differs from the previous run, the Actor writes a change record
(record_type = change) with tld, field, previous, and current.
A bad verdict never fails the run. If the bootstrap file cannot load, each row has class unreachable
and an error that starts with bootstrap:. The Actor does not charge for these rows.
State
The Actor keeps one record for each user in the named key-value store rdap-ledger-state.
The record holds the previous row for each TLD. The Actor uses no external database.
Pricing event
Pay-per-event. The Actor makes one Actor.charge call for the event tld_check for each TLD checked
(one row written, count 1). The contract proposal is USD 0.005 for each event.
The cost estimate is USD 0.0008 for each TLD. This is an estimate, not a measured value.
The default maximum charge in the proposal is USD 1.5. The Actor stops when the charge limit is reached.
This repository does not set the price. Set it in the Apify Console.
Safety limits
- HTTP only. No browser, proxy, or paid API.
- The Actor rejects URLs with a private, loopback, link-local, or reserved address. It also rejects URLs with credentials. It checks each redirect target.
- Limits: 300 TLDs, 3 redirects, 2 MB for each response, 30 s total deadline for each request (guard, redirects, and body), 10 parallel TLDs.
- Known limit: the DNS check and the HTTP connection use separate lookups.
Repeat triggers
Use an Apify schedule for a weekly run. Each change of the IANA bootstrap file needs an external trigger. The Actor does not watch the file.
Development
uv run pytestuv run ruff check .

