# Domain Availability & Expiry Checker (RDAP) (`offerastudio/domain-whois-availability`) Actor

Check up to 5,000 domains for availability and registration data from the official RDAP system (successor of WHOIS): registrar, dates, status, name servers, DNSSEC, DNS and MX. Watch mode returns only domains that expire soon or changed. No proxy or login.

- **URL**: https://apify.com/offerastudio/domain-whois-availability.md
- **Developed by:** [Offera Studio](https://apify.com/offerastudio) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 domain checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Domain Availability & Expiry Checker do?

**Domain Availability & Expiry Checker** checks up to **5,000 domains per run** and returns, in one row each, whether the domain is **available** and, if it is registered, its **registration data** from the official **RDAP** system: registrar and IANA id, created / changed / **expiry** date, days to expiry, status codes, name servers and DNSSEC. RDAP is the official, structured successor of WHOIS and is run by the registries themselves.

- ✅ **Availability** from the registry: no such domain = `available: true`, registered = `false`.
- 📅 **Expiry watch**: in *watch* mode only domains that **expire within N days** or whose **registrar, status, name servers or expiry date changed** since the last run come back, and a domain that became available is reported as a change.
- 🌐 **DNS check** (DNS-over-HTTPS): does the domain resolve, does it have mail servers? That tells "registered but not in use" from "live".
- 💡 **Name ideas × TLDs**: give names and a TLD list and let the Actor generate and check every combination.
- 🔒 **Privacy**: registrant organisation and country are returned **only when the registry publishes them** (most hide them). They are never guessed, and personal names are not returned at all.

### Who is it for?

- **Domain investors and brand teams**: find available names across many TLDs and watch valuable domains for the moment they expire or drop.
- **IT and security teams**: watch your own and your suppliers' domains for expiry and for registrar or name server changes (a hijack warning sign).
- **Agencies and consultants**: audit a client's portfolio: who is the registrar, when does each domain expire, which are DNSSEC-signed.
- **Sales and research teams**: tell registered-but-unused domains from live ones.

### How to use it

1. Paste domains into **Domains** (one per line; `www.`, paths and URLs are cleaned up; internationalised names are converted). Or fill **Name ideas** and **TLDs** to generate candidates.
2. Choose **Lookup** (every domain) or **Watch** (only domains that expire soon or changed). In watch mode set **Expiring within (days)** and a **Monitor name**.
3. Click **Start**. The **Domains** tab shows availability and expiry, **Registration details** the full data, **Unknown and errors** the free rows.

For an expiry watch, save the input as a task with mode *Watch* and a schedule (for example daily). The first run saves the current state and returns every domain once (`change: "baseline"`); later runs return only what is expiring or changed.

### Input example

```json
{
    "domains": ["example.com", "bbc.co.uk", "wikipedia.org"],
    "names": ["acme", "acme-labs"],
    "tlds": ["com", "io", "dev", "ai"],
    "mode": "watch",
    "expiringWithinDays": 45,
    "monitorName": "portfolio"
}
```

### Output example

Registered domain (real data, 7 October 2026):

```json
{
    "type": "domain",
    "domain": "wikipedia.org",
    "available": false,
    "registrar": "MarkMonitor Inc.",
    "registrarIanaId": "292",
    "createdAt": "2001-01-13T00:12:14.754Z",
    "updatedAt": "2026-08-12T08:47:19.410Z",
    "expiresAt": "2027-01-13T00:12:14.000Z",
    "daysToExpiry": 97,
    "statusCodes": ["client delete prohibited", "client transfer prohibited", "client update prohibited"],
    "nameServers": ["ns0.wikimedia.org", "ns1.wikimedia.org", "ns2.wikimedia.org"],
    "dnssec": false,
    "registrantCountry": null,
    "registrantOrganisation": null,
    "resolves": true,
    "hasMx": true,
    "rdapServer": "https://rdap.publicinterestregistry.org/rdap/",
    "change": null,
    "note": null
}
```

An available domain has the same fields with `available: true`, no dates and the note *"The registry has no such domain. Reserved or premium names can still be unavailable to register."* In watch mode `change` is `baseline`, `changed` or `unchanged`, `changes` lists what changed (`{ "field": "registrar", "from": "A", "to": "B" }`) and `expiringSoon` says whether the domain expires within your limit.

#### What is free

Rows with `type: "info"` (the TLD has no RDAP service, `error: "rdap-unavailable"`) and `type: "error"` (`invalid-input`, `rdap-error`, `rate-limited`) are never charged. For a TLD without RDAP the row still shows what DNS says (name servers, resolves, MX) with `available: null`, for example for `.de` and `.io`.

### How much does it cost?

Pay per event: **$0.0005 per domain checked** (`domain-checked`), so 1,000 domains cost $0.50 and 5,000 cost $2.50. **Free**: domains whose TLD has no RDAP service, and error rows. In watch mode you pay only for the rows returned.

### Limitations

- **RDAP coverage follows the IANA bootstrap file.** About 1,200 TLDs have an RDAP service there, including `.com`, `.net`, `.org`, `.uk`, `.nl`, `.fr`, `.dev`, `.app`, `.ai`, `.xyz`. Some registries that are missing from the file (for example `.de`, `.io`, `.co`, `.me`) return `available: null` with a free info row. Port-43 WHOIS is never used.
- **"Available" means "the registry has no such domain".** Reserved, blocked or premium names can still be impossible or expensive to register, and a domain in its redemption period shows as registered with a note.
- **Registries differ in what they publish.** Some give no registrar or no expiry date (for example `.nl` gives no expiry date). Missing data is `null`, never filled in.
- **Registrant data is mostly redacted** since GDPR. Organisation and country appear only when published. The Actor never returns personal names, e-mail addresses or phone numbers.
- **Registries have rate limits.** The Actor sends one or two requests at a time per registry with a pause, retries 429 with backoff and gives a free `rate-limited` row if a registry keeps refusing.
- **Watch mode** compares availability, registrar, status codes, name servers and expiry date. A renewal shows as a change of `expiresAt`.

### FAQ

#### Is this the same as WHOIS?

RDAP is the official successor of WHOIS: same registry data, returned as structured JSON over HTTPS. The Actor does not scrape WHOIS text.

#### How do I find out when a domain I watch is dropped?

Use watch mode: when its registrar, status or availability changes, you get a row with `changes`. A domain that was `available: false` and is now `true` shows `{ "field": "available", "from": false, "to": true }`.

#### Why is `registrar` empty for some domains?

That registry does not publish it. The row never guesses.

#### Does it use a proxy?

No. Requests go to the registries' RDAP servers and to Cloudflare's DNS-over-HTTPS resolver.

### More tools from the same developer

All pay-per-result, no proxy or login needed, built and maintained by the same developer:

**Website audits**

- [Website Accessibility Checker: WCAG 2.2 & EAA](https://apify.com/offerastudio/website-accessibility-audit): accessibility issues with fixes, SEO basics and security headers.
- [Cookie & Tracker Audit: GDPR Consent Checker](https://apify.com/offerastudio/cookie-tracker-audit): cookies and tracking tags that load before consent.
- [AI Crawler Access Checker: robots.txt & llms.txt](https://apify.com/offerastudio/ai-crawler-access-audit): which AI crawlers a site allows, plus llms.txt.
- [Structured Data Validator: Schema & Rich Results](https://apify.com/offerastudio/structured-data-validator): JSON-LD and Microdata checked against Google's rich result rules.
- [Website Change Monitor: Diffs, Prices & Alerts](https://apify.com/offerastudio/website-change-monitor): get a row only when a page changes, with a clean diff.
- [Policy Change Monitor: Privacy & Terms Tracker](https://apify.com/offerastudio/policy-change-monitor): privacy policy and terms changes, classified clause by clause.
- [SaaS Pricing Monitor: Track Competitor Plans](https://apify.com/offerastudio/saas-pricing-monitor): competitor pricing plans as structured data, with price-change diffs.
- [Sitemap Change Monitor: New & Removed URLs](https://apify.com/offerastudio/sitemap-change-monitor): new, removed and changed URLs from a site's sitemaps.
- [Site SEO Crawler: Broken Links & On-Page Audit](https://apify.com/offerastudio/site-seo-crawler-audit): site-wide crawl for broken links, redirects and on-page SEO issues.
- [Website Tech Stack Detector: Bulk Lead Filters](https://apify.com/offerastudio/website-tech-stack-detector): technologies used by websites, with filters for lead lists.
- [Status Page SLA Monitor: Uptime & Incidents](https://apify.com/offerastudio/status-page-sla-monitor): SaaS vendor uptime, incidents and a monthly SLA table from public status pages.

**Company data and compliance**

- [Company Contact Finder: Emails, Phones & Socials](https://apify.com/offerastudio/company-contact-finder): contact details published on company websites.
- [UK New Companies Feed: Companies House Daily](https://apify.com/offerastudio/uk-new-companies-feed): newly incorporated UK companies with sector filters.
- [EU VAT Number Validator: Bulk VIES Checker](https://apify.com/offerastudio/eu-vat-number-validator): bulk VAT checks with name, address and consultation number.
- [LEI Corporate Tree: GLEIF Parents & Subsidiaries](https://apify.com/offerastudio/gleif-lei-corporate-tree): LEI lookup with parents, subsidiaries and a KYC summary.
- [UK Company Distress Watch: Insolvency Alerts](https://apify.com/offerastudio/uk-company-distress-watch): administrations, liquidations and winding-up petitions from The Gazette.
- [IBAN Validator: Bulk Check & Bank Lookup](https://apify.com/offerastudio/iban-bank-validator): IBAN format and checksum, plus bank name and BIC where open data exists.
- [Sanctions Screening: OFAC, EU, UN & UK Lists](https://apify.com/offerastudio/sanctions-screening): names screened against official sanctions lists, with match scores.
- [OSHA & EPA Violation Monitor: Fines by Company](https://apify.com/offerastudio/osha-epa-violation-monitor): US OSHA and EPA enforcement cases and penalties by company.
- [Email List Precheck: Syntax, MX & Disposable Check](https://apify.com/offerastudio/email-list-precheck): cheap email list hygiene before a real verification.
- [UK Company Officer Changes: Director & PSC Alerts](https://apify.com/offerastudio/uk-company-officer-changes): director, owner, address and status changes for a watchlist of UK companies.
- [FDA Warning Letters Monitor: By Company & Subject](https://apify.com/offerastudio/fda-warning-letters-monitor): FDA warning letters by company and subject, with cited regulations.
- [Supplier Risk Report: Sanctions, VAT & Insolvency](https://apify.com/offerastudio/supplier-risk-report): one risk row per supplier from eight official registers, with changes since last run.
- [Brand Impersonation Domain Monitor: Look-alikes](https://apify.com/offerastudio/brand-impersonation-domain-monitor): look-alike domains and certificates that imitate your brand, with a risk score.

**Media and AI**

- [Audio & Video Transcriber: Podcasts, SRT, Speakers](https://apify.com/offerastudio/audio-video-transcriber): audio, video, podcasts and social links to text, SRT and VTT.
- [Podcast Mention Alerts: Brand Mentions by Second](https://apify.com/offerastudio/podcast-mention-alerts): where your brand is said in new podcast episodes, with the exact second.
- [News Brand Mentions Monitor: New Articles Only](https://apify.com/offerastudio/news-brand-mentions-monitor): new news articles about your brand, people or topics.
- [YouTube Channel Monitor: New Videos & Growth](https://apify.com/offerastudio/youtube-channel-monitor): new videos and view growth of the channels you watch.

**Market signals**

- [US WARN Layoff Notices: 12 States Daily Feed](https://apify.com/offerastudio/us-warn-layoff-notices): layoff and plant closure notices from official state sources.
- [US Product Recalls Monitor: FDA & CPSC Feed](https://apify.com/offerastudio/us-product-recalls-monitor): FDA and CPSC recalls in one feed, with severity.
- [EU Tenders Feed: TED Public Procurement Alerts](https://apify.com/offerastudio/eu-tender-feed): EU public tenders from TED with CPV, country and value filters.
- [Liquor License Openings: New Bars & Stores (US)](https://apify.com/offerastudio/liquor-license-openings): new US liquor licences from official state open data.
- [Clinical Trials Change Monitor: Status & Updates](https://apify.com/offerastudio/clinicaltrials-change-monitor): status, enrollment and results changes on ClinicalTrials.gov studies.
- [Career Site Jobs Monitor: ATS Jobs & New Roles](https://apify.com/offerastudio/career-site-jobs-monitor): open roles from company career sites, with new and closed roles since the last run.
- [App Reviews Monitor: App Store & Google Play](https://apify.com/offerastudio/app-store-reviews-monitor): app reviews from both stores, only new ones in monitor mode.
- [US Federal Contracts Feed: SAM.gov & USAspending](https://apify.com/offerastudio/us-federal-contracts-feed): SAM.gov contract opportunities with the buyer's award history.
- [Grants.gov Opportunities: US Federal Grants Feed](https://apify.com/offerastudio/grants-gov-opportunities): US federal grant opportunities by keyword, eligibility and agency.
- [Federal Register Monitor: US Rules & Notices Feed](https://apify.com/offerastudio/federal-register-monitor): new US rules, proposed rules and notices by agency or topic.
- [B2B Sales Trigger Feed: Hiring + Tech Leads](https://apify.com/offerastudio/b2b-sales-trigger-feed): companies hiring for a role and using (or not using) a technology, with contacts.
- [Local Business Leads: OpenStreetMap, No Website](https://apify.com/offerastudio/local-business-leads-osm): local businesses by city and category, including those with no website.
- [Solana Token Pair Monitor: New & Trending Pairs](https://apify.com/offerastudio/solana-token-pair-monitor): new and trending Solana pairs with liquidity, volume and safety flags.

### Feedback

Missing a field or a source that does not work well? Open an issue on the **Issues** tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/offerastudio/domain-whois-availability/changelog.md

# Actor input Schema

## `domains` (type: `array`):

Domains to check, one per line (example.com, www.example.co.uk or a URL; internationalised names are converted). Up to 5,000 domains in total with the generated candidates.

## `names` (type: `array`):

Names to combine with every TLD below, e.g. acme, acme-labs. Letters, digits and hyphens.

## `tlds` (type: `array`):

TLDs without the dot, e.g. com, io, dev, co.uk. Each name idea is checked on each TLD.

## `mode` (type: `string`):

Watch mode keeps the last known registrar, status, name servers and expiry date per domain and returns a row only when a domain expires within the days below, or something changed (or on the first run, to save the baseline).

## `expiringWithinDays` (type: `integer`):

Watch mode: also return domains that expire within this many days (including already expired ones).

## `monitorName` (type: `string`):

Watch mode: name of the snapshot store (letters, digits, spaces, - and \_). Leave empty to derive it from the domain list.

## `checkDns` (type: `boolean`):

Also ask DNS-over-HTTPS (Cloudflare) whether the domain resolves and has mail servers, to tell "registered but not in use". Switch off for a faster run.

## Actor input object example

```json
{
  "domains": [
    "example.com",
    "wikipedia.org",
    "bbc.co.uk",
    "sidn.nl",
    "zq7x-no-such-domain-4f9a1c3e8b.com",
    "zq7x-no-such-domain-4f9a1c3e8b.org"
  ],
  "mode": "lookup",
  "expiringWithinDays": 60,
  "checkDns": true
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `details` (type: `string`):

No description

## `errors` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "domains": [
        "example.com",
        "wikipedia.org",
        "bbc.co.uk",
        "sidn.nl",
        "zq7x-no-such-domain-4f9a1c3e8b.com",
        "zq7x-no-such-domain-4f9a1c3e8b.org"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("offerastudio/domain-whois-availability").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "domains": [
        "example.com",
        "wikipedia.org",
        "bbc.co.uk",
        "sidn.nl",
        "zq7x-no-such-domain-4f9a1c3e8b.com",
        "zq7x-no-such-domain-4f9a1c3e8b.org",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("offerastudio/domain-whois-availability").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "domains": [
    "example.com",
    "wikipedia.org",
    "bbc.co.uk",
    "sidn.nl",
    "zq7x-no-such-domain-4f9a1c3e8b.com",
    "zq7x-no-such-domain-4f9a1c3e8b.org"
  ]
}' |
apify call offerastudio/domain-whois-availability --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,offerastudio/domain-whois-availability"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/W9yFBBOaGA8g4CExw/builds/Sl4BH75REdXfphZMf/openapi.json
