# Expired Domains API — 9M+ Domains, 40+ Sources, 90+ SEO Filters (`karma-domains/expired-domains-api`) Actor

Search 9M+ expired domains from 40+ platforms (GoDaddy, DropCatch, Dynadot, Namecheap, Gname, NameSilo, SnapNames, Nicsell, Sedo, Sav.com, and more) via API — 90+ SEO filters (Ahrefs DR, Moz DA, Majestic, Semrush, traffic, age), 400,000+ domains updated every day.

- **URL**: https://apify.com/karma-domains/expired-domains-api.md
- **Developed by:** [Karma.Domains](https://apify.com/karma-domains) (community)
- **Categories:**
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.017 / actor start

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?

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

**Buy expired domains with SEO reputation** — the same catalog as [Karma.Domains](https://karma.domains/): expired, deleted, and dropped names plus live **auctions**, **backorder**, and **buy-now**.

**9+ million** domains. **~400,000 new** every day. **90+ filters**. **40+ auction and marketplace sources** in one Expired Domains API. gTLDs and ccTLDs.

Not a thin scrape of one registrar. Each row is a full Karma report: **Ahrefs DR**, **Moz DA / spam score / backlinks**, **Majestic TF/CF**, **Semrush**, **SimilarWeb traffic**, **Open PageRank**, **Wayback age and languages**, **Karma Score**, **AI categories**, **AI history summary**, and **Wayback screenshots**. Names are not masked.

Full product: [karma.domains](https://karma.domains/) · [Expired Domains API](https://karma.domains/en/expired-domains-api/)

### Why Karma (not another expired-domains scraper)

- **Ultimate aggregator.** One search across GoDaddy, DropCatch, Dynadot, Namecheap, GNAME, Sedo, Nicsell, Sav.com, and the rest of the list below — auctions, closeouts, backorder, and buy-now together.
- **Wayback Machine + spam context.** Archive age, languages, last title/description, and historical snapshots — the same Wayback-oriented workflow as the web app.
- **AI summary of domain history.** `ai_summary` on the full report: what the name was used for, in plain language, so you do not replay 20 years of archive by hand.
- **AI categories.** Topic tags on the listing (`categories`) so you can filter education, health, finance, and the rest of the Karma taxonomy.
- **Screenshots in the response.** `screenshot_url` (and `wa_screenshot_snaped_at`) — a JPEG of the archived site, not “go click the report in a browser”.
- **Many SEO metrics on every row.** Ahrefs Domain Rating, Moz DA / SS / BL / RD, Majestic TF / CF / BL / RD, Semrush authority and visits, SimilarWeb visits, Karma Score / Karma Metric, Open PageRank — one JSON, not five extra APIs.
- **No name masking.** Domain + `report_type` + `report_id` in the payload.

Live per-domain **SEO tools** (fresh DR/DA, backlinks, traffic, WHOIS, DNS) are a separate Actor: **Domain SEO Tools API**.

### Auction and marketplace sources

Same sources as the [Karma.Domains](https://karma.domains/) app. Types in parentheses:

| Source | Listings |
| --- | --- |
| **GoDaddy** | Auctions, Closeouts |
| **DropCatch** | Pre-Release, Dropped, Private Seller |
| **Namecheap** | Auctions, Buy Now |
| **Namejet / SnapNames** | Auctions |
| **GNAME** | Auctions, Backorder, Buy Now |
| **Sav.com** | Dropped, Customer, Expired |
| **Dynadot** | Auctions, Closeout, Backorder, Buy Now |
| **NameSilo** | Auctions, Buy Now |
| **Park.io** | Auctions |
| **WebExpire** | Auctions |
| **DomainLore** | Auctions |
| **Subreg** | Auctions |
| **CZ.NIC** | Auctions |
| **Aftermarket.pl** | Auctions, Buy Now |
| **WHC.ca** | Auctions, Backorder |
| **Sedo** | Expiring, Buy Now |
| **Nicsell** | Auctions |
| **SEO.domains** | Buy Now |
| **Porkbun** | Buy Now |
| **Alibaba Cloud** | Buy Now |
| **Nameshift** | Auctions, Buy Now |
| **Rakkodomain** | Buy Now |
| **Efty** | Buy Now |
| **HugeDomains** | Buy Now |

Inventory types in the API: `expired`, `auctions`, `backorder`, `buynow`.

### Typical flow

1. **search** — filtered list (`page`, `page_size` 1–100; `page × page_size` ≤ 5000).
2. Read `report_type` and `report_id` from `body.items`.
3. **get\_report** — full report (AI summary, categories, screenshot URL, SEO metrics).
4. Or **by\_domain** — report ids for an exact name.

### Filter parameters

| Input | Description |
| --- | --- |
| `action` | `search` (default), `by_domain`, `get_report` |
| `tlds` | e.g. `com` or `fr,de` |
| `domain` | Substring (search) or exact name (`by_domain`) |
| `domain_type` | `auctions`, `expired`, `backorder`, `buynow` |
| `keywords` | Wayback text |
| `languages` | Archive languages |
| `ahrefs_dr_min` | Ahrefs Domain Rating |
| `moz_da_min` | Moz Domain Authority |
| `majestic_tf_min` / `majestic_cf_min` | Majestic TF / CF |
| `majestic_rd_min` / `moz_rd_min` | Referring domains |
| `moz_bl_min` | Moz backlinks |
| `wa_age_min` | Wayback age (years) |
| `karmascore_min` | Karma Score |
| `sr_as_min` / `sr_visits_min` | Semrush |
| `sw_visits_min` | SimilarWeb visits |
| `page` / `page_size` / `sort_by` / `sort_desc` | Pagination |
| `report_type` / `report_id` | `get_report` only |

Origin has 90+ filters (AI categories, Moz spam score, Semrush EDU/GOV, country share, …). Do not send `favorites`.

### Output schema

Search row (fields vary by report; `null` = unknown):

```json
{
  "action": "search",
  "ok": true,
  "status_code": 200,
  "body": {
    "items": [
      {
        "domain": "example.com",
        "report_type": "expired",
        "report_id": "REPORT_ID",
        "karmascore": 80,
        "categories": ["Education"],
        "ahrefs_dr": 12,
        "moz_da": 15,
        "moz_ss": 1,
        "majestic_tf": 8,
        "sw_last_traffic": 1200,
        "wa_age": 11,
        "screenshot_url": "https://karma.domains/api/screenshot/expired/REPORT_ID/1234567890.jpg"
      }
    ],
    "total": 1
  }
}
```

Full report (`get_report`) adds **`ai_summary`**, richer Wayback fields, and the same SEO vendors. Failed origin calls set `ok: false`.

### Example queries

Aged `.com` with Ahrefs DR:

```json
{
  "action": "search",
  "tlds": "com",
  "wa_age_min": 10,
  "ahrefs_dr_min": 10,
  "page_size": 20
}
```

Expired + auction `.io` with Moz DA:

```json
{
  "action": "search",
  "tlds": "io",
  "domain_type": ["expired", "auctions"],
  "moz_da_min": 15,
  "page_size": 50
}
```

Lookup one name:

```json
{
  "action": "by_domain",
  "domain": "example.com"
}
```

Full report (AI summary + screenshot + metrics):

```json
{
  "action": "get_report",
  "report_type": "expired",
  "report_id": "REPORT_ID"
}
```

### How to run

Apify Console or `apify-client`. Billing is this listing’s Apify pricing.

[Karma.Domains](https://karma.domains/) · [Expired Domains API](https://karma.domains/en/expired-domains-api/) · [Python SDK](https://github.com/karma-domains/python-api-sdk) · [TypeScript SDK](https://github.com/karma-domains/typescript-api-sdk) · [CLI](https://github.com/karma-domains/expired-domains-cli)

Live SEO checkers: **Domain SEO Tools API**.

# Actor input Schema

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

search = catalog list; by\_domain = report ids for one name; get\_report = full report by type + id.

## `page` (type: `integer`):

Search pagination. page × page\_size must be ≤ 5000.

## `page_size` (type: `integer`):

Results per page (1–100).

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

Table column name for sorting.

## `sort_desc` (type: `boolean`):

true = highest / newest first; false = ascending.

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

Comma or space separated, e.g. com,io or co.uk.

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

Substring on the domain name. Comma = AND, pipe = OR. Also used as exact name for by\_domain.

## `domain_type` (type: `array`):

auctions, expired, backorder, buynow. Empty = all.

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

Wayback title/description/headings. Comma = AND, pipe = OR.

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

Language codes for archive content, e.g. en,de.

## `ahrefs_dr_min` (type: `number`):

Minimum Ahrefs Domain Rating (0–100).

## `moz_da_min` (type: `integer`):

Minimum Moz Domain Authority (0–100).

## `majestic_tf_min` (type: `integer`):

Minimum Majestic Trust Flow (0–100).

## `majestic_cf_min` (type: `integer`):

Minimum Majestic Citation Flow (0–100).

## `majestic_rd_min` (type: `integer`):

Minimum Majestic referring domains count.

## `moz_rd_min` (type: `integer`):

Minimum Moz referring domains count.

## `moz_bl_min` (type: `integer`):

Minimum Moz backlinks count.

## `wa_age_min` (type: `integer`):

Minimum Wayback Machine archive age in years.

## `karmascore_min` (type: `integer`):

Minimum Karma Metric / Karma Score (0–100).

## `sr_as_min` (type: `number`):

Minimum Semrush Authority Score (0–100).

## `sr_visits_min` (type: `integer`):

Minimum Semrush monthly visits.

## `sw_visits_min` (type: `integer`):

Minimum SimilarWeb monthly visits.

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

Required for get\_report.

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

Required for get\_report.

## Actor input object example

```json
{
  "action": "search",
  "page": 1,
  "page_size": 20,
  "sort_by": "added_at",
  "sort_desc": true
}
```

# Actor output Schema

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

// Run the Actor and wait for it to finish
const run = await client.actor("karma-domains/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("karma-domains/expired-domains-api").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 '{}' |
apify call karma-domains/expired-domains-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,karma-domains/expired-domains-api"
        }
    }
}

```

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/DR5HX44JeiGWTNxHK/builds/DSyyR29GjlO1vxQd7/openapi.json
