RDAP Domain Lookup and Expiry Checker
Pricing
from $1.50 / 1,000 domain lookups
RDAP Domain Lookup and Expiry Checker
Query RDAP registries for a list of domains and get registrar, creation and expiry dates, EPP statuses, name servers and DNSSEC in one table. Structured JSON from the registry, not WHOIS text. Unsupported or invalid domains are reported but not billed.
Pricing
from $1.50 / 1,000 domain lookups
Rating
0.0
(0)
Developer
Gridline Tools
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
RDAP Domain Lookup and Expiry Checker: registrar, dates, statuses, name servers and DNSSEC for a list of domains
Give the Actor a list of domain names and it queries the responsible RDAP server for each one, returning a single record per domain with the registrar, registration and expiry dates, EPP statuses, name servers and DNSSEC flag. RDAP is the structured, JSON based successor of WHOIS (RFC 7480, 7484, 9082, 9083), so the fields come back typed and ready for a spreadsheet instead of as free text. One plain GET request per domain, no browser, no proxy, no page content.
What it is good for
- Expiry monitoring for a domain portfolio: an MSP or IT team watching 100–300 client domains gets
expiresAtanddaysToExpiryfor each one in a single run; filter the dataset fordaysToExpiry < 30and alert. - A building block for automations: one normalized JSON record per domain (registrar, dates, statuses, name servers, DNSSEC) with the IANA bootstrap, redirects and registry differences handled for you; no WHOIS parsing, no port 43.
- Registry state checks: see whether a domain is
registeredornot-foundat the registry and which EPP statuses it carries (client transfer prohibited,pending delete,redemption period…).not-foundmeans the registry does not know the name; it does not mean the name is available to register. - Domain age as a risk signal:
createdAtfor vendor or counterparty screening, without any registrant personal data.
How to use it
- Open the Actor and paste your list of domains into the
domainsfield, one per line (or pass a JSON array through the API). - Adjust
timeoutSecsandmaxConcurrencyif you need to; the defaults work for most runs. - Click Start. When the run finishes, the status message reads
Processed N of M domains (X with errors, Y not charged). - Download the results from the Dataset tab as JSON, CSV or Excel, or read them through the API.
Input
| Field | Type | Default | Description |
|---|---|---|---|
domains | list of strings | example.com, example.net | Domain names (or URLs, the host is extracted), one per line; exact duplicates skipped; max 1,000 per run |
timeoutSecs | integer 1–60 | 15 | Maximum time per domain, including redirects |
maxConcurrency | integer 1–50 | 10 | Domains looked up in parallel (10 tested on 50 .com domains without rate limiting; lower it if rate-limited records appear) |
Output
One dataset record per input domain. Common fields:
| Field | Type | Meaning |
|---|---|---|
inputValue | string | Domain (or URL) as provided, trimmed; credentials masked as user:***@host, also without a scheme (a password containing a raw /, \, ? or # is not recognized as credentials) |
error | string or null | INVALID_DOMAIN, UNSUPPORTED_TLD, TIMEOUT, NETWORK_ERROR, TOO_MANY_REDIRECTS, BAD_REDIRECT, RATE_LIMITED, RDAP_ERROR (none of them charged) or null |
billable | boolean | true when the record was charged (state is registered or not-found); false for every record with an error, written free of charge |
errorMessage | string or null | Human-readable reason |
checkedAt | string | ISO 8601 timestamp |
Domain-specific fields:
| Field | Type | Meaning |
|---|---|---|
domain | string | Normalized domain name (lowercase, punycode for IDNs, no leading www.); same as inputValue for invalid domains |
tld | string or null | Last label of the normalized domain (e.g. com, pl); null for INVALID_DOMAIN |
state | string or null | registered, not-found, unsupported-tld, rate-limited, error; null only for INVALID_DOMAIN |
registrar | string or null | Registrar name from the RDAP response (first entity with role registrar); null when absent or empty |
registrarIanaId | string or null | IANA Registrar ID from the same entity; null when absent |
createdAt | string or null | Registration date (ISO 8601) from the first registration event |
updatedAt | string or null | Last-changed date from the first last changed event |
expiresAt | string or null | Expiration date from the first expiration event; may be null even for registered domains (e.g. .pl registry) |
daysToExpiry | number or null | Full days until expiry: Math.floor((expiresAt − now) / 86400000); negative for past dates; null when expiresAt is missing or unparseable |
statuses | string[] | Domain status codes (lowercase, no duplicates) from the RDAP response; may be empty for some registries (e.g. .pl) |
nameservers | string[] | Name server hostnames (lowercase, no duplicates, trailing dot removed) |
dnssec | boolean or null | Whether DNSSEC is signed (secureDNS.delegationSigned); null when absent from the response |
rdapServer | string or null | Base URL of the RDAP server used (from the IANA bootstrap, with trailing /); null for INVALID_DOMAIN and unsupported-tld |
rdapUrl | string or null | URL of the last RDAP request made (after all redirects); null when no request was made |
httpStatus | number or null | HTTP status of the last response; null when no response was received (network error, timeout before reply) |
redirectCount | number | Number of HTTP redirects followed (0–2) |
A SUMMARY record in the default key-value store holds the run counters (inputEntries, inputItems, skippedDuplicates, droppedEmptyOrNonString, truncatedOverLimit, resumedSkipped, processed, checked = charged, failed, notBilled, notSavedAfterLimit, unexpectedErrors, stoppedByChargeLimit).
Pricing
This Actor uses Apify pay per event pricing. Each run costs a small fixed start fee plus a price per domain answered by the registry; the exact amounts are shown in the Pricing tab. Only registered and not-found records are charged; INVALID_DOMAIN, UNSUPPORTED_TLD, RATE_LIMITED, timeouts and other errors are written with billable: false and cost nothing. There are no additional platform usage fees.
A domain is charged only when its record is written, and every charged record is written. When the run's "Maximum cost per run" is reached, the Actor stops and reports how many domains were left unprocessed.
Limits and behavior
- Up to 1,000 domains per run; exact duplicates are skipped (two spellings of one domain are two records).
- IP addresses, single-label names (
localhost) and malformed names are reported asINVALID_DOMAINwithout any request and without charge; TLDs without an RDAP server in the IANA bootstrap (as of September 2026 this includes e.g..de,.eu,.io,.ch,.it,.es,.jp) areUNSUPPORTED_TLD(free). - A run interrupted by a platform migration resumes without processing or charging the same domain twice.
- Redirects: Up to 2 HTTP redirects (301/302/303/307/308) are followed; the third consecutive 3xx gives
TOO_MANY_REDIRECTS. Onlyhttps://redirect targets are allowed. Non-httpstargets or redirects to private addresses giveBAD_REDIRECT. - Response size: RDAP responses larger than 1 MB are rejected with
Response too large. The IANA bootstrap is limited to 2 MB. - Timeouts: Every domain is subject to a single timeout period (
timeoutSecs) covering all requests and redirects. A domain that exceeds the timeout receivesTIMEOUT, no retries. - No cache: Every domain sends a fresh HTTP request; there is no in-memory or disk cache.
- Because every error record is free, the status message and
SUMMARYcount errors under "not charged" rather than "with errors". - Registry without expiry: Some registries (e.g.
.plby NASK) may omitexpirationevents and/orstatuscodes; the record will haveexpiresAt: null,daysToExpiry: null,statuses: [], which is valid for a registered domain.
FAQ
- Does the Actor support IDN (internationalized domain names)? Yes. Domain names containing non-ASCII characters are normalized to punycode (RFC 5891) before the RDAP lookup. The
domainfield in the output contains the ASCII form; the original value is preserved ininputValue. - What happens when a domain is not found in RDAP? The RDAP server returns HTTP 404. The record is stored with
state: 'not-found'andbillable: true: the answer from the registry is charged. - Are redirects followed to a different host? Yes. A redirect to any
https://host is accepted, as long as it is not a private address. Only the redirect limit (2) and the overall timeout constrain the chain. - Does this Actor work with WHOIS (port 43)? No. Only RDAP (HTTP-based) registries listed in the IANA bootstrap are queried.
- Why did I get
expiresAt: nullfor a registered domain? Some TLD registries (e.g..pl) do not publish expiration dates via RDAP. The domain is stillregisteredand charged, but the expiry-related fields are empty.
Other Actors by Gridline Tools
Other checks from the same publisher, each with one row per address and the same pricing rule (start fee plus price per checked item):
- HTTP Status and Headers Checker: Audit a list of URLs in one run: status code, every hop of the redirect chain and the final URL, response time, server and content type, and six key security headers.
- Robots.txt Checker: Test a list of URLs against each site's robots.txt for a chosen user agent (RFC 9309).
- AI Crawler Access Audit: See which AI and search crawlers (GPTBot, ClaudeBot, Google-Extended, CCBot and 150+ more) each site allows or blocks in robots.txt, and whether llms.txt is published.
Disclaimer
The Actor sends plain HTTPS requests to the IANA RDAP bootstrap file and to the RDAP server of each domain's registry (no WHOIS, no port 43) and reads the public domain object. Only the registrar entity (name and IANA ID) is extracted from the RDAP response; registrant, administrative, technical, billing, and abuse contacts (including their names, addresses, phone numbers and email addresses) are never read or stored. You are responsible for complying with the registries' RDAP terms of use and rate limits. Gridline Tools does not store the domains or results beyond your own Apify account.