# WHOIS Lookup & Domain Availability Checker (Bulk RDAP) (`pandabear/bulk-whois-domain-checker`) Actor

WHOIS lookup in bulk via official RDAP with port-43 WHOIS fallback: registrar, creation and expiry dates, domain age, status, nameservers, availability, plus DNS (A, MX, SPF, DMARC). Export to CSV/JSON.

- **URL**: https://apify.com/pandabear/bulk-whois-domain-checker.md
- **Developed by:** [Andy zeng](https://apify.com/pandabear) (community)
- **Categories:** Developer tools, SEO tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## Bulk WHOIS & Domain Availability Checker (RDAP + DNS)

**Look up thousands of domains at once: registrar, creation date, expiry date, domain age, status, nameservers, registrant country, abuse contact and availability, plus DNS (A, MX, SPF, DMARC).** The actor uses **RDAP**, the official ICANN successor to WHOIS, through the IANA bootstrap registry, and follows the registrar's RDAP server for extra detail. It falls back to classic port-43 WHOIS for country-code TLDs that don't offer RDAP yet. Paste domains, URLs or email addresses, and you get a clean table you can export to CSV, Excel or JSON, or pull through the API.

### What you get per domain

- **Availability:** `registered`, `available`, `pending-delete` or `unknown`, plus an `available` true/false flag.
- **Registration data:** registrar (with IANA ID), `createdDate`, `updatedDate`, `expiryDate`, `domainAgeDays` / `domainAgeYears`, `daysUntilExpiry`, an `expiringSoon` flag, EPP statuses (`clientTransferProhibited`, …), nameservers and DNSSEC.
- **Contacts (when public):** registrant organization and country, registrar abuse email and phone. Data redacted under GDPR stays redacted. Nothing is guessed.
- **DNS (optional):** NS, A and MX records, SPF and DMARC policy, plus `hasWebsite` / `hasEmail` flags.
- **Run summary:** counts by availability, the list of available domains, domains expiring soon and invalid inputs (`SUMMARY`), plus an `AVAILABLE` CSV.

### Use cases

- **Domain investing and brand protection:** bulk-check name ideas or typo variants, find expiring and pending-delete domains, and watch competitors' renewal dates.
- **SEO and expired-domain research:** check domain age, registrar and DNS before buying a domain or link. It pairs well with the Wayback Machine URL Extractor (see below).
- **Lead generation and enrichment:** add company age, registrar, country and whether a domain has working email (MX) or a website to a CRM list.
- **Security and IT:** inventory a domain portfolio, catch domains about to expire, check SPF/DMARC coverage and find abuse contacts.
- **Data cleaning:** paste raw URLs or emails. The registrable domain is extracted (`shop.example.co.uk` → `example.co.uk`) and de-duplicated.

### Input

| Field | Description | Default |
|---|---|---|
| `domains` | Domains, URLs or email addresses (one per line, or comma-separated) | 3 sample domains |
| `checkDns` | Resolve NS / A / MX / SPF / DMARC over DNS-over-HTTPS | `true` |
| `outputOnlyAvailable` | Save only available / pending-delete domains (you pay only for saved rows) | `false` |
| `expiringWithinDays` | Threshold for the `expiringSoon` flag | 30 |
| `whoisFallback` | Use port-43 WHOIS for TLDs without RDAP | `true` |
| `concurrency` | Parallel lookups (each registry is also rate-limited separately) | 10 |

```json
{ "domains": ["apify.com", "https://www.bbc.co.uk/news", "jobs@stackoverflow.com", "my-new-startup-idea.com"] }
```

### Output example

```json
{
  "domain": "stackoverflow.com",
  "availability": "registered",
  "available": false,
  "registrar": "CSC Corporate Domains, Inc.",
  "createdDate": "2003-12-26T19:18:07Z",
  "expiryDate": "2027-02-02T11:59:59Z",
  "domainAgeYears": 22.8,
  "daysUntilExpiry": 99,
  "expiringSoon": false,
  "statuses": ["client transfer prohibited", "client delete prohibited", "client update prohibited"],
  "nameservers": ["ns-1033.awsdns-01.org", "ns-358.awsdns-44.com"],
  "abuseEmail": "domainabuse@cscglobal.com",
  "mxRecords": ["1 aspmx.l.google.com"],
  "spf": "v=spf1 ...",
  "dmarc": "v=DMARC1; p=reject; ...",
  "hasWebsite": true,
  "hasEmail": true,
  "source": "rdap"
}
```

### Pricing (pay per event)

| Event | Price |
|---|---|
| Actor start (per run) | $0.005 |
| Domain checked and saved | $0.002 (= $2 per 1,000 domains) |

DNS checks are included. If you turn on `outputOnlyAvailable`, you pay only for the available domains that are saved. Set a maximum cost per run, and the actor stops cleanly at your limit while keeping the results collected so far.

### FAQ

**Is this legal?** Yes. RDAP and WHOIS are public lookup services that registries run for exactly this purpose, and DNS is public. The actor respects per-server rate limits, and it doesn't scrape any registrar website.

**How accurate is "available"?** `available` means the registry has no record of the domain and it has no DNS delegation. Premium or reserved names can still be unbuyable, so confirm at a registrar before you plan around a name.

**Why are some fields empty?** Many registries redact registrant data (GDPR), and some ccTLDs publish only minimal data. Those fields are left empty rather than guessed.

**Which TLDs are supported?** All gTLDs (.com, .net, .org, .io, .ai, new gTLDs …) and every ccTLD that has RDAP or WHOIS. If neither is available, the actor infers registration from DNS delegation and says so in `note`.

### Related actors by pandabear

- [App Store Scraper - Search, Top Charts & Keyword Ranks](https://apify.com/pandabear/app-store-search-charts-scraper): iOS apps by keyword, top chart, category or developer, with full details and ASO keyword rank tracking.
- [Sitemap Extractor & SEO Index Audit](https://apify.com/pandabear/sitemap-seo-auditor): extracts every sitemap URL and finds 404, noindex and canonical problems.
- [Wayback Machine URL Extractor & Lost Page Finder](https://apify.com/pandabear/wayback-lost-url-finder): lists a domain's historical URLs from the Internet Archive, finds lost pages and suggests 301 redirects. Useful before buying an expired domain.
- [App Store Reviews Scraper - All Countries + Analytics](https://apify.com/pandabear/app-store-reviews-scraper): Apple App Store reviews from 76 countries, with app details, rating trends by version and complaint keywords.
- [Website Contact Scraper - Emails, Phones, Socials & Tech Stack](https://apify.com/pandabear/website-contact-enrichment): emails, phones, social links, company info and tech stack from any list of websites.
- [Trending Topics Scraper - Google Trends, HN, Wikipedia & More](https://apify.com/pandabear/trending-topics-aggregator): trending topics from Google Trends, Hacker News, Wikipedia, GitHub, Bluesky, Baidu and more, with heat scores and cross-platform clusters.

***

### 中文说明

#### 这个工具做什么

批量查询域名的 WHOIS 信息和是否可注册：注册商、注册日期、到期日期、域名年龄、状态、DNS 服务器、注册人国家/组织（如果公开）、滥用投诉联系方式，并可同时检查 DNS（A、MX、SPF、DMARC）。数据来自 ICANN 官方的 **RDAP** 协议（WHOIS 的继任者，通过 IANA 引导表找到各注册局的服务器），没有 RDAP 的国家域名会自动改用传统 WHOIS（43 端口）。可以直接粘贴域名、网址或邮箱，工具会自动提取主域名并去重。

#### 适用场景

- 域名投资和品牌保护：批量检查想注册的名字或拼写变体，找出即将到期或待删除的域名，跟踪竞争对手的续费日期
- SEO 和过期域名研究：购买域名前查看域名年龄、注册商和 DNS（可配合 Wayback 工具查看历史页面）
- 销售线索补充：为客户名单补上公司域名年龄、注册商、国家，以及是否有网站（A 记录）和企业邮箱（MX 记录）
- 安全和 IT：盘点自有域名、提醒即将到期的域名、检查 SPF/DMARC 配置

#### 输入参数

- `domains`：域名、网址或邮箱，每行一个，也可以用逗号分隔（必填，默认是 3 个示例域名）
- `checkDns`：是否检查 DNS（默认开启）
- `outputOnlyAvailable`：只保存可注册或待删除的域名（只对保存的结果收费）
- `expiringWithinDays`：到期前多少天标记为"即将到期"（默认 30）
- `whoisFallback`：没有 RDAP 的后缀是否改用 WHOIS（默认开启）
- `concurrency`：并发数（默认 10，每个注册局服务器另有单独限速）

#### 输出

- 数据集：每个域名一条记录，包含是否可注册、注册商、注册/更新/到期日期、域名年龄、距到期天数、状态、DNS 服务器、DNSSEC、注册人国家/组织、滥用投诉邮箱和电话、A/MX/SPF/DMARC 记录、数据来源（rdap/whois/dns）
- `SUMMARY`：各状态的数量、可注册域名列表、即将到期域名列表、无效输入
- `AVAILABLE`：可注册域名的 CSV

#### 价格（按事件计费）

- 每次运行启动：$0.005
- 每查询并保存一个域名：$0.002（每 1000 个 $2），DNS 检查不另收费

可以设置单次运行的费用上限，达到上限后工具会正常停止并保留已有结果。

#### 常见问题

- **合法吗？** 合法。RDAP 和 WHOIS 是注册局专门公开的查询服务，DNS 本身也是公开的。工具会遵守各服务器的频率限制，不抓取任何注册商网站。
- **"可注册"准确吗？** 表示注册局查不到这个域名，DNS 里也没有它。溢价域名或保留域名仍可能无法购买，最终请到注册商处确认。
- **为什么有些字段是空的？** 很多注册局按 GDPR 隐藏了注册人信息，有些国家域名只公开很少的数据。工具不会猜测这些字段。
- **支持哪些后缀？** 支持所有通用顶级域（.com/.net/.org/.io/.ai 及各类新后缀），以及所有提供 RDAP 或 WHOIS 的国家域名。两者都查不到时，工具会根据 DNS 判断域名是否已注册，并在 `note` 字段说明。

#### pandabear 的其他工具

- [App Store Scraper - Search, Top Charts & Keyword Ranks](https://apify.com/pandabear/app-store-search-charts-scraper)：按关键词、排行榜、分类或开发者抓取苹果应用数据，并跟踪 ASO 关键词排名
- [Sitemap Extractor & SEO Index Audit](https://apify.com/pandabear/sitemap-seo-auditor)：提取网站全部 sitemap 网址，找出 404、noindex、canonical 等收录问题
- [Wayback Machine URL Extractor & Lost Page Finder](https://apify.com/pandabear/wayback-lost-url-finder)：从互联网档案馆提取域名的历史网址，找出丢失页面并给出 301 重定向建议
- [App Store Reviews Scraper](https://apify.com/pandabear/app-store-reviews-scraper)：抓取苹果 App Store 76 个国家的应用评论，附带应用详情、按版本的评分趋势和差评关键词
- [Website Contact Scraper](https://apify.com/pandabear/website-contact-enrichment)：从网站列表中提取邮箱、电话、社交媒体链接、公司信息和技术栈
- [Trending Topics Scraper](https://apify.com/pandabear/trending-topics-aggregator)：汇总 Google Trends、Hacker News、维基百科、GitHub、Bluesky、百度热搜等平台的热门话题，附热度分和跨平台聚类

# Actor input Schema

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

Domains to look up. You can also paste URLs or email addresses; the registrable domain is extracted automatically (shop.example.co.uk -> example.co.uk). Duplicates are removed.

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

Also resolve public DNS records over DNS-over-HTTPS. Tells you whether a domain has a website and email set up.

## `outputOnlyAvailable` (type: `boolean`):

Save only domains that look unregistered (or pending delete). You are charged only for saved domains.

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

Sets expiringSoon=true for domains whose expiry date is within this many days.

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

Use classic port-43 WHOIS when the TLD has no RDAP server (some ccTLDs).

## `concurrency` (type: `integer`):

Parallel lookups. Requests to each registry server are additionally limited to stay within fair-use limits.

## Actor input object example

```json
{
  "domains": [
    "apify.com",
    "wikipedia.org",
    "example.com"
  ],
  "checkDns": true,
  "outputOnlyAvailable": false,
  "expiringWithinDays": 30,
  "whoisFallback": true,
  "concurrency": 10
}
```

# Actor output Schema

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

Registrar, dates, age, status, nameservers, availability and DNS for every domain.

## `available` (type: `string`):

CSV list of domains that look unregistered.

## `summary` (type: `string`):

Counts by availability, available domains, domains expiring soon and invalid inputs.

# 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": [
        "apify.com",
        "wikipedia.org",
        "example.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pandabear/bulk-whois-domain-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 = { "domains": [
        "apify.com",
        "wikipedia.org",
        "example.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("pandabear/bulk-whois-domain-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 '{
  "domains": [
    "apify.com",
    "wikipedia.org",
    "example.com"
  ]
}' |
apify call pandabear/bulk-whois-domain-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pandabear/bulk-whois-domain-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/79jARnt8hzJ8u7Oed/builds/IUrdhlCVNvqY4PEK8/openapi.json
