# Domain Availability Checker – Bulk RDAP & Name Generator (`gazidev/domain-availability-checker`) Actor

Check thousands of domain names at once against the official registries (RDAP, WHOIS fallback): available or taken, registrar, creation & expiry date, pendingDelete (dropping soon). Generate ideas from keywords × TLDs × prefixes/suffixes. $0.80 per 1,000 domains.

- **URL**: https://apify.com/gazidev/domain-availability-checker.md
- **Developed by:** [Cemal Atakli](https://apify.com/gazidev) (community)
- **Categories:** Developer tools, SEO tools, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 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

## Domain Availability Checker – Bulk RDAP Lookup & Domain Name Generator

Check **hundreds or thousands of domain names at once**, straight from the **official registries**. For each name you get **available or registered** and, for taken names, the **registrar, creation and expiry date, registry status and name servers**. Give it keywords and it builds candidates for you: **keywords × TLDs × prefixes/suffixes** (`bluefox` → bluefox.com, bluefox.io, getbluefox.com, bluefoxhq.ai…).

- **$0.80 per 1,000 domains**, about 3× cheaper than the paid domain checkers on the Store. Invalid inputs and duplicates are free.
- **Registry data, not guesses.** Lookups use the **RDAP** protocol that ICANN requires of gTLD registries (the successor of WHOIS), found through the IANA bootstrap. For ccTLDs without RDAP (.it, .com.tr, .ru, .co.jp, .eu…) it falls back to the registry's own **WHOIS**. A **DNS cross-check** catches reserved, premium or registry-held names.
- **Expiring and dropping domains.** `droppingSoon` flags names in `pendingDelete` or `redemptionPeriod`. `daysToExpiry` shows how long a taken name is paid up.
- **Any TLD.** .com, .net, .org, .io, .ai, .co, .app, .dev, .xyz and new gTLDs, plus .de, .co.uk, .fr, .nl, .com.br, .com.au and many more ccTLDs.
- **Polite and fast.** Each registry gets at most 4 parallel requests, and the Actor slows down automatically when a registry rate-limits it. No registrar sites are scraped and no paid API is used.

### What can I use it for?

- **Brand and startup naming:** check 50 name ideas across 8 extensions in one run, and keep only `available` rows.
- **Domain investing:** screen lists of keywords or expiring names, and spot `droppingSoon` domains.
- **Brand protection:** see which variants and extensions of your brand are still open (or who registered them).
- **Portfolio checks:** check expiry dates and registrars for your own domains, or your clients'.
- **Lead and market research:** get registrar and domain age for a list of company domains.
- **AI naming assistants:** let an agent generate names and confirm availability in the same loop (see below).

### Input

| Field | Description |
|---|---|
| `keywords` | Names to check on every TLD (`blue fox` becomes `bluefox`) |
| `tlds` | Extensions without the dot: `com`, `io`, `ai`, `de`, `co.uk`… (default: com, net, org, io, ai, co, app, dev) |
| `prefixes`, `suffixes` | Optional generator: `get`, `try`, `my` / `hq`, `app`, `labs`… |
| `hyphenVariants` | Also try `blue-fox` for multi-word keywords |
| `domains`, `bulkText` | Exact domains to check (URLs and IDNs accepted) |
| `outputFilter` | `all`, `available` or `registered` |
| `whoisFallback`, `dnsCrossCheck` | Both on by default |
| `maxDomains`, `maxConcurrency`, `timeoutSecs` | Limits |

```json
{
  "keywords": ["bluefox", "quiet harbor"],
  "tlds": ["com", "io", "ai", "co"],
  "prefixes": ["get", "try"],
  "suffixes": ["hq"],
  "outputFilter": "available"
}
```

### Output

One row per domain. The Output tab has two tables: **Availability** and **Registered domains (WHOIS data)**.

```json
{
  "domain": "bluefoxcoffee.com",
  "tld": "com",
  "name": "bluefoxcoffee",
  "keyword": "bluefoxcoffee",
  "status": "registered",
  "available": false,
  "confidence": "high",
  "method": "rdap",
  "length": 13,
  "hasHyphen": false,
  "hasDigit": false,
  "registrar": "Hosting Concepts B.V. d/b/a Registrar.eu",
  "createdAt": "2025-12-28T09:58:38Z",
  "expiresAt": "2026-12-28T09:58:38Z",
  "daysToExpiry": 83,
  "domainAgeDays": 282,
  "registryStatus": ["client transfer prohibited"],
  "nameservers": ["ns1.dns-parking.com", "ns2.dns-parking.com"],
  "droppingSoon": false,
  "onHold": false,
  "checkedAt": "2026-10-05T12:08:56+00:00"
}
```

**`status` values:**

- `available`: the registry has no record of the name. Confidence is `high` from RDAP and `medium` from WHOIS.
- `registered`: the name is taken. Registrar and dates are added.
- `unclear`: the registry has no record, but the name has DNS delegation. This usually means a reserved, premium or registry-held name.
- `likely-available`: the registry could not be reached and DNS has no record of the name (`low` confidence).
- `unknown`: the lookup failed.
- `invalid`: free.

### Pricing

Pay per event: **$0.0008 per domain checked** ($0.80 per 1,000), plus $0.00005 per run start. Every checked domain is charged once, whatever the output filter shows. Invalid inputs and duplicates are free.

| Actor | Monthly users | Price per 1,000 domains |
|---|---|---|
| **This Actor** | – | **$0.80**, registry RDAP + WHOIS fallback, name generator, expiry data |
| onescales/domain-availability-checker | 55 | free (no expiry/registrar data) |
| automation-lab/domain-availability-checker | 16 | $2.30 + $0.035 per run start |
| eliai/domain-availability-checker | 2 | $2.80 |
| aiqlabs/domain-availability-checker | 2 | $5.00 |

Competitor figures are from the Apify Store on 2026-10-05. Example: 100 name ideas × 8 TLDs = 800 domains for **$0.64**.

Want the full picture for registered domains (DNS records, SPF/DMARC, SSL certificate, website)? Use our [Domain Checker – WHOIS/RDAP, DNS, SSL & Email Security](https://apify.com/gazidev/domain-intel).

### FAQ

**Does "available" mean I can register it at the normal price?** It means the registry has no registration for the name. A few registries also hold back **premium** or **reserved** names, which may cost more or be blocked. Those often show up as `unclear`. Your registrar's checkout shows the final price.

**Why not check through a registrar (GoDaddy, Namecheap)?** Registrar sites and APIs need accounts and keys, and their terms forbid bulk scraping. RDAP is the official, public registry protocol made for exactly this kind of lookup.

**Some TLDs are slower.** Registries set their own rate limits. Google Registry (.app, .dev, .page…), for example, allows short bursts only. The Actor slows down for that registry automatically instead of failing, so mixed lists still finish. .com/.net (Verisign) is fast.

**Why is the registrant missing?** Since GDPR, most registries redact registrant details. The Actor reports the organisation and country only when the registry publishes them.

**Is it legal?** Yes. RDAP and WHOIS are public lookup services run by the registries. The Actor rate-limits itself and identifies itself with a contact address. Questions: iletisim.ortalamabiri@gmail.com.

### Use with AI agents / Apify MCP

Ask your agent *"suggest 30 names for a coffee subscription brand and tell me which .com and .co are free"*. It can generate the names and call this Actor through the [Apify MCP server](https://mcp.apify.com) (`https://mcp.apify.com?actors=gazidev/domain-availability-checker`). Over the API: `POST https://api.apify.com/v2/acts/gazidev~domain-availability-checker/run-sync-get-dataset-items` with `{"keywords": [...], "tlds": [...]}`.

### Related Actors

[Domain Checker – WHOIS, DNS, SSL](https://apify.com/gazidev/domain-intel) · [Bulk URL Status Checker](https://apify.com/gazidev/bulk-url-status-checker) · [Tech Stack Detector](https://apify.com/gazidev/tech-stack-detector) · [Website Contact Finder](https://apify.com/gazidev/website-contact-finder)

# Actor input Schema

## `keywords` (type: `array`):

Brand or product names. Each one is checked on every TLD below (and with the prefixes/suffixes, if set). Spaces are removed (`blue fox` → `bluefox`); turn on hyphen variants to also try `blue-fox`.

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

Extensions to try for every keyword, without the dot: `com`, `net`, `org`, `io`, `ai`, `co`, `app`, `dev`, `de`, `co.uk`, `com.br`… Any TLD with a public registry RDAP/WHOIS service works.

## `prefixes` (type: `array`):

Optional name ideas: `get`, `try`, `use`, `my`, `go`, `the` → getbluefox.com, trybluefox.com…

## `suffixes` (type: `array`):

Optional: `app`, `hq`, `labs`, `ai`, `io`, `hub`, `ly` → bluefoxapp.com, bluefoxhq.com…

## `hyphenVariants` (type: `boolean`):

For multi-word keywords, also check `blue-fox` next to `bluefox`.

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

Exact domains (`example.com`, `bücher.de`, `https://www.site.co.uk/page` → `site.co.uk`). IDNs are converted to punycode.

## `bulkText` (type: `string`):

Paste thousands of domains: one per line, comma-separated, or a CSV.

## `outputFilter` (type: `string`):

`all`, only `available`, or only `registered` domains. Every checked domain is charged either way.

## `whoisFallback` (type: `boolean`):

Some ccTLDs (.it, .eu, .co.jp, .com.tr, .ru…) have no RDAP; use the registry's port-43 WHOIS for them.

## `dnsCrossCheck` (type: `boolean`):

For domains the registry reports as free (or when the registry cannot be reached), look up NS records: a delegated zone means reserved/premium/registry-held (`unclear`) or, if the registry failed, `registered`.

## `maxDomains` (type: `integer`):

0 = no limit.

## `maxConcurrency` (type: `integer`):

Registries are also limited to 4 parallel requests each.

## `timeoutSecs` (type: `integer`):

Failed lookups are retried with backoff.

## Actor input object example

```json
{
  "keywords": [
    "gazidevtest",
    "openai",
    "bluefoxcoffee"
  ],
  "tlds": [
    "com",
    "net",
    "io",
    "ai"
  ],
  "hyphenVariants": false,
  "outputFilter": "all",
  "whoisFallback": true,
  "dnsCrossCheck": true,
  "maxDomains": 0,
  "maxConcurrency": 10,
  "timeoutSecs": 15
}
```

# Actor output Schema

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

No description

## `registered` (type: `string`):

No description

## `results` (type: `string`):

No description

## `summary` (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 = {
    "keywords": [
        "gazidevtest",
        "openai",
        "bluefoxcoffee"
    ],
    "tlds": [
        "com",
        "net",
        "io",
        "ai"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gazidev/domain-availability-checker").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 = {
    "keywords": [
        "gazidevtest",
        "openai",
        "bluefoxcoffee",
    ],
    "tlds": [
        "com",
        "net",
        "io",
        "ai",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("gazidev/domain-availability-checker").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 '{
  "keywords": [
    "gazidevtest",
    "openai",
    "bluefoxcoffee"
  ],
  "tlds": [
    "com",
    "net",
    "io",
    "ai"
  ]
}' |
apify call gazidev/domain-availability-checker --silent --output-dataset

```

## MCP server setup

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

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/uOvVsc3KQE8Dbk59n/builds/C4S70WKpUQjQTY9q2/openapi.json
