# Expired Domains API - 19 Platforms, SEO Metrics in One Call (`catchdoms/expired-domains-api`) Actor

Search 19 expired-domain auction platforms (Dynadot, GoDaddy, DropCatch, Catched, Gname, NameSilo, SnapNames, BloomUp, Nicsell, UK Backorder, Subreg, WebExpire, Park.io, SEO.Domains,
NameShift, DomainLore, Rakko, Gnews Domains, Backorders Domains) via API.

- **URL**: https://apify.com/catchdoms/expired-domains-api.md
- **Developed by:** [Catchdoms](https://apify.com/catchdoms) (community)
- **Categories:** SEO tools
- **Stats:** 66 total users, 5 monthly users, 95.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## Expired Domains API — 19 Auction Platforms in One Search

The fastest way to query the expired-domains market from code. One API call returns aggregated inventory from **19 live auction platforms** (Dynadot, GoDaddy, DropCatch, Catched, Gname, SnapNames, Nicsell, BloomUp, Subreg, WebExpire, Park.io, NameSilo, SEO.Domains, NameShift, DomainLore, Rakko, UK Backorder, Gnews Domains, Backorders Domains) — every domain pre-enriched with quality score, Domain Authority, backlinks, referring domains, Wayback age, language, GBP detection, historical tech stack, and 5-year traffic estimate.

Sits on top of [CatchDoms.com](https://catchdoms.com), which also exposes a deleted-domains catalog (100k+ aged ccTLDs at registry price) and a weekly pending-delete inventory across 125+ TLDs — both reachable via the same API.

### Why use this actor

- **One endpoint, 19 sources.** No more polling DropCatch + GoDaddy + Dynadot + … and merging results. The catalog is refreshed daily and pre-deduplicated.
- **SEO data already attached.** Every row ships with the metrics that matter for an expired-domain buyer (DA, TF, CF, backlinks, referring domains, Wayback age, indexed pages, GBP, historical CMS) — no chaining into Ahrefs / SEMrush / Majestic.
- **Filterable.** 25+ query parameters — by TLD, score, DA, TF/CF, age, language, keyword, price range, category, has-backlinks, has-GBP, has-bids, etc.
- **Free tier on Apify.** 50 results per run, first 10 names visible, the rest masked to invite a free CatchDoms signup for unmasking.

### Supported sources

19 platforms covered (catalog refreshed every 24h):

| Source | Type | Volume |
|---|---|---|
| **Dynadot** | Closeouts (fixed price) | ~13k |
| **GoDaddy** | Expiring auctions + closeouts | ~10k |
| **DropCatch** | Pre-release auctions | ~9.6k |
| **Catched** | Auctions + backorders | ~3.5k |
| **Gname** | Auctions + buy-now | ~2k |
| **NameSilo** | Registrar expired auctions | ~2k |
| **SnapNames** | Pre-release + closeout | ~1k |
| **UK Backorder** | UK domains (.uk, .co.uk) | ~2k |
| **BloomUp** | French .fr auctions + buy-now | ~600 |
| **Subreg** | Expiring auctions + closeouts | ~500 |
| **WebExpire** | French .fr auctions | ~500 |
| **Park.io** | Premium domain auctions | ~30 |
| **Nicsell** | European ccTLDs (.de, .nl, .eu…) | ~400 |
| **DomainLore** | UK auctions with SEO metrics | ~230 |
| **Rakko** | Japanese marketplace | ~300-3000 |
| **SEO.Domains** | Buy-now SEO inventory | ~59k |
| **NameShift** | Buy-now marketplace | varies |
| **Gnews Domains** | Curated premium news domains | ~120 |
| **Backorders Domains** | Niche ccTLD auctions (.ie, .si, .tw, .ph, .ar, .mx…) | ~20/day |

Plus two bonus surfaces reachable via the same API:

- **`source=regfree`** — 100k+ deleted ccTLD domains available at registry price (Authority tier on CatchDoms)
- **`/api/pending-delete`** — weekly pending-delete inventory across 125+ TLDs in `pendingDelete`, `redemptionPeriod`, `serverHold`, `clientHold`, `transition`, or `quarantine` status (Authority+ tier on CatchDoms)

### Filter parameters

| Parameter | Type | Description |
|---|---|---|
| `tld` | string | Filter by TLD. Comma-separated for multi (`fr,de,com`) or full prefix (`.co.uk`). |
| `source` | string | Restrict to one source (e.g. `dropcatch`, `dynadot`, `catched`, `regfree`…). |
| `score_min` | int 0–100 | Minimum CatchDoms quality score. Default `30`. |
| `age_min` | int | Minimum domain age in years (from Wayback first snapshot). |
| `da_min` | int 0–100 | Minimum Domain Authority (Moz / DataForSEO). |
| `tf_min` | int 0–100 | Minimum Trust Flow (Majestic / SEObserver). |
| `cf_min` | int 0–100 | Minimum Citation Flow. |
| `rd_min` | int | Minimum referring domains. |
| `has_backlinks` | bool | Domains that have at least one indexed backlink. |
| `has_bids` | bool | Domains with at least one active auction bid. |
| `has_gmb` | bool | Domains with an active Google Business Profile attached. |
| `has_edu_gov` | bool | Domains with `.edu` or `.gov` referring domains (high-authority signal). |
| `snapshots_min` | int | Minimum Wayback Machine snapshot count. |
| `categories` | string | TTF/SEO topic categories (comma-separated). |
| `language` | string | Detected language code (`en`, `fr`, `de`, `es`, `it`, `nl`, `pt`, `pl`, `ja`…). |
| `contains` | string | Keyword in the domain name (e.g. `crypto`, `health`). |
| `techs` | string | Historical tech stack from Wayback (`wordpress`, `shopify`, `magento`…). |
| `price_min` / `price_max` | float | Auction or buy-now price range (USD). |
| `type` | enum | `auction`, `closeout`, or `backorder`. |
| `created_after` / `created_before` | date | Filter by listing creation date (ISO 8601). |
| `ends_after` / `ends_before` | date | Filter by auction end date (ISO 8601). |
| `limit` | int 1–50 | Max results per call (Apify free tier capped at 50). |

### Output schema

Each row returned by the actor:

```json
{
    "name": "mondovino.com",
    "tld": "com",
    "source": "dropcatch",
    "type": "auction",
    "price": 650,
    "score": 72,
    "age_years": 27,
    "domain_authority": 22,
    "backlinks": 746,
    "referring_domains": 169,
    "trust_flow": 18,
    "citation_flow": 24,
    "tf_cf_ratio": 0.75,
    "ttf_topic": "Recreation/Food",
    "ref_domains_edu": 2,
    "ref_domains_gov": 0,
    "has_gmb": false,
    "indexed_pages": 1240,
    "wayback_snapshots": 832,
    "wayback_first_date": "1998-06-12",
    "wayback_last_date": "2024-11-03",
    "language": "fr",
    "historical_tech": ["WordPress", "Yoast", "WooCommerce"],
    "historical_traffic_peak": 14200,
    "historical_traffic_etv": 350,
    "auction_end_date": "2026-03-16T18:00:00Z",
    "buy_url": "https://www.dropcatch.com/domain/mondovino.com",
    "full_profile": "https://catchdoms.com/domains/12345?utm_source=apify"
}
```

Fields are nullable when the underlying enrichment hasn't completed (e.g. `trust_flow` on a freshly-added domain). Nothing is invented — a `null` always means "unknown", not zero.

### Example queries

**Aged .com domains with backlinks, score 50+** :

```
{
    "tld": "com",
    "score_min": 50,
    "age_min": 10,
    "has_backlinks": true,
    "limit": 50
}
```

**High Trust Flow .fr domains in Health, Pro signal for SEO buyers** :

```
{
    "tld": "fr",
    "categories": "Health",
    "tf_min": 15,
    "limit": 50
}
```

**E-commerce historical tech, low DA but high backlinks (PBN-build candidates)** :

```
{
    "techs": "WooCommerce,Shopify,Magento",
    "rd_min": 50,
    "da_min": 0,
    "limit": 50
}
```

**Pending-delete inventory** (Authority+ feature on CatchDoms — Apify free tier returns the upsell pointer instead of the full row, see Limits below):

```
{
    "source": "pending-delete",
    "tld": "fr",
    "limit": 50
}
```

### Limits

| Feature | Apify (free) | CatchDoms free signup | CatchDoms Pro | CatchDoms Authority+ |
|---|---|---|---|---|
| Results per call | 50 | Unlimited | Unlimited | Unlimited |
| Visible domain names | 10 (first) | 10 | All | All |
| Trust Flow / Citation Flow | — | — | ✓ | ✓ |
| Google Business Profile (GBP) | — | — | ✓ | ✓ |
| Historical tech stack | basic | basic | ✓ | ✓ |
| Historical traffic (5y) | — | — | ✓ | ✓ |
| Aged-domains catalog (100k+ regfree) | — | — | Authority | ✓ |
| Pending-delete weekly inventory | — | — | — | ✓ |
| Email alerts (saved searches) | — | — | ✓ | ✓ |
| CSV export | — | — | ✓ | ✓ |
| Direct REST API access | — | — | ✓ | ✓ |
| MCP server (Claude Desktop, Cursor, ChatGPT…) | — | — | ✓ | ✓ |

### Direct API access

Apify is the easiest entry point. If you want the full quota + every field, every domain unmasked, and no `limit=50` cap, use the CatchDoms REST API directly. Same parameters, same response shape, no daily quota:

```bash
curl "https://catchdoms.com/api/domains?score_min=50&has_backlinks=1&per_page=100" \
    -H "Authorization: Bearer YOUR_CATCHDOMS_API_KEY"
```

Generate your API key at [catchdoms.com/api](https://catchdoms.com/api?utm_source=apify). Full reference at [catchdoms.com/docs](https://catchdoms.com/docs?utm_source=apify).

### Why CatchDoms instead of scraping

Most "expired domains scrapers" hit one site (DropCatch or GoDaddy) and return raw HTML or a thin JSON. We aggregate **19 platforms** + **2 enrichment surfaces** (deleted ccTLDs, pending-delete inventory across 125+ TLDs) + **14 SEO metrics per domain**. The catalog is refreshed daily, deduplicated, scored — you go from API call to shortlist in one round-trip.

- **Free signup** to unlock all 50 names per call → [catchdoms.com/register](https://catchdoms.com/register?utm_source=apify)
- **Pro plan** for full SEO metrics, CSV export, email alerts, direct API access → [catchdoms.com/pricing](https://catchdoms.com/pricing?utm_source=apify)
- **Authority** for the deleted-domains catalog (100k+ aged ccTLDs)
- **Authority+** for the weekly pending-delete inventory across 125+ TLDs

# Actor input Schema

## `source` (type: `string`):

Restrict to a single platform. Leave empty to search across all 19 sources.

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

Filter by TLD. Examples: com, fr, de, co.uk. Comma-separated for multi (fr,de,com).

## `score_min` (type: `integer`):

CatchDoms 0-100 quality score combining age, backlinks, authority, traffic, name quality. Default 30.

## `age_min` (type: `integer`):

From Wayback Machine first snapshot.

## `da_min` (type: `integer`):

Moz-style site authority (0-100), via DataForSEO.

## `tf_min` (type: `integer`):

Majestic Trust Flow (0-100), via SEObserver.

## `cf_min` (type: `integer`):

Majestic Citation Flow (0-100), via SEObserver.

## `rd_min` (type: `integer`):

Number of unique referring domains pointing at the URL.

## `has_backlinks` (type: `boolean`):

Only domains with at least one indexed backlink.

## `has_bids` (type: `boolean`):

Only auctions with at least one active bid.

## `has_gmb` (type: `boolean`):

Only domains with an active Google Business Profile attached (Pro feature on CatchDoms).

## `has_edu_gov` (type: `boolean`):

Domains with high-authority .edu or .gov referrers.

## `snapshots_min` (type: `integer`):

Minimum number of Wayback Machine snapshots — proxy for content history.

## `language` (type: `string`):

Language code from archived HTML: en, fr, de, es, it, nl, pt, pl, ja, ko, zh, ru, ar...

## `categories` (type: `string`):

Majestic Trust Flow topics (Health, Sports, Finance, Business, Recreation...). Comma-separated.

## `techs` (type: `string`):

Fingerprinted from Wayback HTML. Examples: WordPress, Shopify, WooCommerce, Magento, Drupal, Joomla, Yoast. Comma-separated.

## `contains` (type: `string`):

Substring match on the domain name (e.g. crypto, health, finance).

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

Restrict to auctions, fixed-price closeouts, or backorders.

## `price_min` (type: `integer`):

Minimum current bid or buy-now price.

## `price_max` (type: `integer`):

Maximum current bid or buy-now price.

## `limit` (type: `integer`):

Number of domains to return. Capped at 50 on the Apify free tier. First 10 names visible, rest masked — sign up free at catchdoms.com to unlock the rest.

## Actor input object example

```json
{
  "score_min": 30,
  "has_backlinks": false,
  "has_bids": false,
  "has_gmb": false,
  "has_edu_gov": false,
  "limit": 50
}
```

# 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("catchdoms/expired-domains-api").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("catchdoms/expired-domains-api").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 catchdoms/expired-domains-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=catchdoms/expired-domains-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9aTDsm9jVMYTrpZxi/builds/MJclfHYgRWkAGpIAQ/openapi.json
