Domain WHOIS Lookup API - RDAP, DNS Records, SSL Expiry avatar

Domain WHOIS Lookup API - RDAP, DNS Records, SSL Expiry

Pricing

from $1.05 / 1,000 results

Go to Apify Store
Domain WHOIS Lookup API - RDAP, DNS Records, SSL Expiry

Domain WHOIS Lookup API - RDAP, DNS Records, SSL Expiry

Domain WHOIS lookup API built on official RDAP (IANA bootstrap). For each domain you get registrar, creation and expiry dates, domain age, days to expiry, status codes, nameservers and DNSSEC, plus optional DNS records (A, AAAA, MX, NS, TXT, SPF, DMARC), the SSL certificate (issuer, expiry, SANs) an

Pricing

from $1.05 / 1,000 results

Rating

0.0

(0)

Developer

Martin Petrov

Martin Petrov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Security

Limited permissions

Share

Need to know who registered a domain, when it expires, which nameservers it uses, whether its SSL certificate is about to run out and where it redirects? Those facts live in four different places (WHOIS/RDAP, DNS, TLS, HTTP). This actor collects them in one call and returns one clean JSON row per domain.

Registration data comes from the official RDAP registry servers (found through the IANA bootstrap file), not from scraping WHOIS websites. No API key, no login, no proxies. Personal data of registrants is never output: you get the registrar (a company) and technical facts only.

Who needs it

  • Security and IT teams: watch your own and your vendors' domains for expiry, nameserver changes and certificates that are about to expire.
  • Sales and lead-ops: enrich a company list with domain age, registrar, mail provider (MX) and SPF/DMARC setup.
  • Domain investors and SEO tools: domain age, expiry date and status codes in bulk.
  • AI agents and chatbots: a single tool call answers "who owns example.com, is it expiring, is the certificate valid?".

What you get per domain

FieldMeaning
domain, registrar, registrarIanaIdNormalized domain and the registrar company with its IANA ID
createdDate, updatedDate, expiryDateRegistration events (ISO 8601, UTC)
domainAgeDays, daysToExpiryCalculated for you
status, nameservers, dnssecEPP status codes, delegated nameservers, DNSSEC signed or not
rdapSourceThe registry RDAP URL the data came from
dns (optional)A, AAAA, MX, NS, TXT, CAA plus parsed SPF and DMARC
ssl (optional)Validity, issuer, notBefore, notAfter, daysLeft, TLS version, SANs
redirect (optional)Redirect chain from http://domain and the finalUrl with status
changesOnly in only-new mode: what changed since the last run

A domain that cannot be looked up (not registered, registry down or rate limited) is not saved and not charged; the reason is listed in the RUN_SUMMARY record (failed, lastError).

How to use it (step by step)

  1. Click Try for free.
  2. Paste your domains into Domains. The default (apify.com, github.com, wikipedia.org) works immediately.
  3. Switch DNS, SSL and redirect checks on or off.
  4. Click Start and download JSON, CSV or Excel, or call it by API.

API example (copy and paste)

Replace YOUR_APIFY_TOKEN with your token from Apify Console, Settings, Integrations.

curl -s -X POST "https://api.apify.com/v2/acts/martin10291~domain-whois-dns-lookup/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains":["apify.com","github.com","wikipedia.org"]}'

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('martin10291/domain-whois-dns-lookup').call({
domains: ['apify.com', 'github.com', 'wikipedia.org'],
includeDns: true,
includeSsl: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((d) => `${d.domain}: expires in ${d.daysToExpiry} days, SSL ${d.ssl?.daysLeft} days`));

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("martin10291/domain-whois-dns-lookup").call(run_input={
"domains": ["apify.com", "github.com", "wikipedia.org"],
})
for d in client.dataset(run["defaultDatasetId"]).iterate_items():
print(d["domain"], d["registrar"], d["daysToExpiry"], (d.get("ssl") or {}).get("daysLeft"))

Use it from AI agents (MCP)

This actor works with the Apify MCP server: add martin10291/domain-whois-dns-lookup as a tool and Claude, ChatGPT or any MCP-capable agent can look up domains on demand. The output is flat, documented JSON, so agents do not need to parse WHOIS text.

Domain availability check

Every row has registered and available. A name with no registry record (RDAP 404) and no DNS delegation comes back as "registered": false, "available": true instead of an error, so you can check a list of name ideas in one run. TLDs whose registry has no RDAP server (for example .io) are still answered through DNS: registered or likely available. Always confirm at a registrar before buying (reserved and premium names exist).

{"domain": "my-new-startup-idea-2026.io", "registered": false, "available": true, "availabilitySource": "no-rdap+dns"}

Expiring soon: set expiringWithinDays (e.g. 30) to keep only domains whose registration ends within that many days.

Monitoring and alerts

In only-new mode rotating A/AAAA IPs (CDNs, load balancers) are ignored by default; turn on trackIpChanges to flag them too.

Turn on Only new or changed domains and set a Monitor ID. The actor remembers a snapshot per domain (registrar, expiry, status, nameservers, DNSSEC, DNS records, certificate issuer and expiry, final URL) and outputs only domains where something changed, with a changes list such as ["nameservers", "ssl.notAfter"]. The first run reports every domain as ["new"]. Schedule it daily and connect a webhook, Slack or email. Each result is paid for once.

Input

FieldDefaultDescription
domainsapify.com, github.com, wikipedia.orgDomains or URLs (host is used)
includeDnstrueDNS records, SPF, DMARC
includeSsltrueTLS certificate facts
includeRedirectstrueRedirect chain and final URL
onlyNewfalseOutput only new or changed domains
monitorIddefaultSeparate memory per watch list
maxConcurrency5Parallel lookups (1-20)

Pricing

Pay per event, about $1.50 per 1,000 domains. Failed lookups are free.

Data sources and limits

  • Registration: official RDAP servers from the IANA bootstrap (data.iana.org/rdap/dns.json). A few registries do not publish RDAP, or rate-limit heavy use; those domains are reported as failed.
  • DNS: live queries through the system resolver. SSL: a normal TLS handshake on port 443. Redirects: plain GET requests with the honest User-Agent RadarDomainLookup/1.0.
  • No registrant names, emails, phones or addresses are collected or output.
  • Use the registered domain (example.co.uk), not a subdomain.

FAQ

Is this WHOIS? It is the modern replacement: RDAP is the official JSON protocol that registries run today. Same registration facts, structured.

Why no owner name or email? Registries redact it since GDPR, and this actor deliberately never outputs personal data.

Does it need proxies? No.

Use it as an integration (chain it after another actor)

This actor can run automatically after any actor whose results contain a website or domain.

  1. Open the source actor in Apify Console and go to the Integrations tab.
  2. Click Add integration -> Actor, pick this actor and set Dataset to {{resource.defaultDatasetId}} (leave domains empty). Set your other options and save.
  3. When the source run finishes, this actor reads its dataset and processes every row. The field is detected automatically; set Dataset field if your column has another name.

You can also start it by hand with datasetId (pick a dataset or paste its ID) to process an existing dataset.

Good sources to chain from:

  • compass/crawler-google-places (Google Maps Scraper)
  • martin10291/local-business-leads-osm
  • martin10291/reddit-posts-comments-extractor (domain)
  • martin10291/website-tech-stack-detector
  • any lead list with a website/domain column