# Domain WHOIS Database Search (`opspilot.cc/domain-whois-database-search`) Actor

Search registered and recently expired domains by name, TLD, registrar, dates, SEO traffic, paid visibility, and backlink strength. Export up to 200 enriched domain records.

- **URL**: https://apify.com/opspilot.cc/domain-whois-database-search.md
- **Developed by:** [wang wei](https://apify.com/opspilot.cc) (community)
- **Categories:** SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Domain WHOIS Database Search — Find Domains by Registration, SEO & Backlinks

Search a large domain intelligence database by name, top-level domain, registrar, registration status, registration dates, expiration date, organic traffic, and backlink strength. Export up to 200 enriched domain records to JSON, CSV, Excel, databases, or automation workflows.

### What This Actor Does

This Actor is a **domain database search tool**, not a basic single-domain WHOIS lookup. It helps discover groups of domains that match business criteria, then enriches every result with:

- WHOIS registration and expiration dates
- Registrar and domain status information
- Organic search visibility and estimated traffic
- Paid search visibility and estimated cost
- Backlinks, referring domains, and dofollow link counts

### Common Use Cases

- **Expired-domain research** — find recently expired domains with existing backlinks.
- **Domain acquisition** — identify domains matching a niche, brand, or product keyword.
- **SEO prospecting** — find relevant domains with measurable organic visibility.
- **Competitive research** — discover domains in a market and compare search strength.
- **Renewal monitoring** — find domains approaching expiration.
- **Registrar analysis** — research portfolios managed by a specific registrar.
- **Lead generation** — build domain lists for partnerships, outreach, or agency prospecting.

### Quick Start

```json
{
  "domain_query": "seo",
  "tld": "com",
  "registrar": "",
  "registration_status": "registered",
  "created_from": "",
  "created_to": "",
  "expires_before": "",
  "min_organic_traffic": 100,
  "sort_by": "organic_traffic_desc"
}
```

All fields have defaults. Empty API or Apify automated-test input safely searches registered domains containing `seo`, ordered by organic traffic.

### Input Reference

#### Domain Name Contains

Enter one text fragment that must appear anywhere in the domain name. Examples: `seo`, `travel`, `shop`, `cloud`, or a brand name. Default: `seo`.

#### Top-Level Domain

Optionally select one popular extension such as `.com`, `.net`, `.org`, `.io`, `.ai`, `.app`, or a major country extension. Default: Any extension.

#### Registrar Contains

Optional partial registrar name, such as `GoDaddy`, `NameCheap`, `Cloudflare`, or `MarkMonitor`. Default: empty, meaning any registrar.

#### Registration Status

- **Registered** — currently registered domains.
- **Recently expired** — expired domains still present in the database.
- **Any status** — both registered and recently expired domains.

Expired domains remain available only for a limited time. Default: Registered.

#### Registered From / Registered To

Optional registration-date range in `YYYY-MM-DD` format. Leave empty to search all registration dates.

#### Expires Before

Optional maximum expiration date in `YYYY-MM-DD` format. Useful for renewal monitoring and expiring-domain research.

#### Minimum Estimated Organic Traffic

Only include domains with at least the specified estimated monthly organic search traffic. Default: `0`.

#### Sort Results By

Choose Highest organic traffic, Most backlinks, Most referring domains, Newest registrations, Oldest registrations, Expiring soon, or Domain name A–Z.

### Fixed Limits and Cost Protection

- Result limit is fixed at **200 domains per run** and cannot be changed.
- Exactly one database search request is sent per Actor run.
- Free users can run the Actor **5 times per day**.
- Paid Apify users have no daily run limit.
- Advanced raw filters, offsets, pagination tokens, and provider-specific controls are not exposed.

These controls keep usage predictable and prevent unexpectedly expensive bulk exports.

### Output Fields

Each Dataset row contains:

| Field | Type | Description |
|---|---|---|
| `domain` | string | Domain name |
| `tld` | string/null | Top-level domain |
| `registered` | boolean/null | Current registration status |
| `registrar` | string/null | Domain registrar |
| `created_at` | string/null | First registration timestamp |
| `updated_at` | string/null | Latest WHOIS update timestamp |
| `changed_at` | string/null | Latest WHOIS record-change timestamp |
| `expires_at` | string/null | Expiration timestamp |
| `first_seen_at` | string/null | First database observation timestamp |
| `domain_statuses` | array | Queryable domain registration status codes |
| `organic_metrics` | object | Organic traffic, ranking keyword count, equivalent paid cost, and ranking distribution |
| `paid_metrics` | object | Paid traffic, paid keyword count, estimated monthly cost, and ranking distribution |
| `backlink_metrics` | object | Backlinks, dofollow links, referring domains/pages, and update timestamp |

#### Structured Metrics

Arrays and nested objects remain structured and queryable:

```json
{
  "domain_statuses": ["client_transfer_prohibited"],
  "organic_metrics": {
    "estimated_monthly_traffic": 12500,
    "ranking_keywords": 4300,
    "equivalent_paid_traffic_cost": 18400.25,
    "rankings": {
      "position_1": 34,
      "positions_2_3": 91,
      "positions_4_10": 350,
      "positions_11_20": 640,
      "positions_21_50": 1200,
      "positions_51_100": 1985
    }
  }
}
```

Internal task IDs, response status codes, request paths, provider metadata, offsets, and pagination tokens are hidden.

### Pricing & Limits

| Tier or setting | Limit |
|---|---|
| Free users | **5 runs per day** |
| Paid Apify users | Unlimited daily runs |
| Search requests | Exactly 1 per run |
| Exported domains | Fixed maximum of **200** |
| Domain text filters | One name fragment per run |
| Advanced filters | Curated form fields only |

Usage is billed through the Actor's configured Apify events.

### FAQ

**Can I look up one exact domain?**\
Yes. Enter the complete domain in Domain Name Contains and optionally select its extension. However, this Actor is optimized for searching and comparing groups of domains.

**Does Recently expired mean the domain is available to register?**\
No. It means the registration record is marked expired in the database. Always verify current availability with a registrar before making a purchase decision.

**Why are some registrar or date fields null?**\
WHOIS privacy rules, registry limitations, or incomplete records can prevent individual fields from being available.

**Can I increase the 200-domain limit?**\
No. The limit is intentionally fixed to protect service costs and keep exports manageable.

**What does equivalent paid traffic cost mean?**\
It estimates the monthly advertising cost required to acquire similar search traffic through paid search.

**Where can I inspect the total number of matches?**\
Open the default Key-Value Store and read the `SUMMARY` record. It includes `total_matching_domains` even when only the first 200 are exported.

### Support

Open an issue from the Actor page and include the run ID plus the `SUMMARY` record. Never include credentials.

# Actor input Schema

## `domain_query` (type: `string`):

Text that must appear anywhere in the domain name. Use a brand, niche, product, or keyword. Default: seo.

## `tld` (type: `string`):

Optionally restrict results to one popular domain extension.

## `registrar` (type: `string`):

Optional registrar name filter, such as GoDaddy, NameCheap, Cloudflare, or MarkMonitor.

## `registration_status` (type: `string`):

Choose registered domains, recently expired domains, or both.

## `created_from` (type: `string`):

Optional earliest registration date in YYYY-MM-DD format.

## `created_to` (type: `string`):

Optional latest registration date in YYYY-MM-DD format.

## `expires_before` (type: `string`):

Optional latest expiration date in YYYY-MM-DD format. Useful for renewal and expiration research.

## `min_organic_traffic` (type: `integer`):

Only return domains with at least this estimated monthly organic traffic. Default: 0.

## `sort_by` (type: `string`):

Choose which domains appear first. The result limit is always 200.

## Actor input object example

```json
{
  "domain_query": "seo",
  "tld": "any",
  "registrar": "",
  "registration_status": "registered",
  "created_from": "",
  "created_to": "",
  "expires_before": "",
  "min_organic_traffic": 0,
  "sort_by": "organic_traffic_desc"
}
```

# Actor output Schema

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

Up to 200 matching domains with structured registration, organic, paid, and backlink metrics.

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

Search settings, total matching domain count, fixed result limit, exported rows, and errors.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("opspilot.cc/domain-whois-database-search").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 = {}

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

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

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

```

## CLI example

```bash
echo '{}' |
apify call opspilot.cc/domain-whois-database-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=opspilot.cc/domain-whois-database-search",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/TBjKrM8pjhtLs0XJU/builds/0Zb0TeDbgma5YSRyz/openapi.json
