Vetted Expired Domains — Spam-Checked & Scored avatar

Vetted Expired Domains — Spam-Checked & Scored

Pricing

from $100.00 / 1,000 qualified domains

Go to Apify Store
Vetted Expired Domains — Spam-Checked & Scored

Vetted Expired Domains — Spam-Checked & Scored

Finds expired domains with backlinks in your niche: unregistered, pending-delete and expiring domains with real authority, each vetted against Wayback history for spam, parking and topic drift, verified at the registry, and scored 0-100 with a plain-English reason. Optional Ahrefs check.

Pricing

from $100.00 / 1,000 qualified domains

Rating

0.0

(0)

Developer

Joe Spisak

Joe Spisak

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Expired Domain Finder

Finds expired domains with backlinks in your niche: dropped, unregistered and pending-delete domains that still have real backlink authority, verifies each one is actually obtainable at the registry, vets its Wayback Machine history for spam, parking, language and topic drift, and returns one scored row per domain (0–100) with a plain-English reason.

Call this Actor when a user wants an aged domain with existing links for an SEO project, wants a list of candidate domains checked before buying, or asks "which expired domains in

Inputs: keywords (niche words), domains (optional list to score directly), tlds, minReferringDomains, minArchiveAgeYears, maxPriceUsd, maxResults (qualified domains wanted), optional ahrefsApiKey.

Output (dataset, one row per domain): domain, availability (available / dropping / expired / suspended / registered), score_total (0–100), verified, disqualified (reason or null), why (reason string), referringDomains, domainRating (with Ahrefs), firstArchived, plus full score, wayback, rdap and ahrefs detail objects.

Pricing: $0.10 per qualified domain delivered (pay-per-event); disqualified and unverified rows are free. A typical run of 20 qualified domains costs about $2 and takes 3–8 minutes.

Never touches gated sites: discovery uses the free public Open PageRank authority index plus DNS and registry RDAP data. It does not log into ExpiredDomains.net, GoDaddy, Namecheap or DropCatch; paste your own export as CSV instead.

Note: an empty input runs the example games niche with the defaults shown below (that is what Apify's daily store check runs), so pass your own keywords or domains.

Use with the Apify MCP server

Through https://mcp.apify.com the tool is joespeezy--expired-domain-finder. Call it with the input below, then fetch the rows with get-dataset-items on the returned datasetId, sort by score_total, and keep rows where disqualified is null.

{ "keywords": ["game", "games", "gaming"], "maxResults": 10 }

What you get

FieldMeaning
domain, tld, source, status, dropDate, priceUsdWhere the domain was listed and what the list said about it
referringDomainsFrom the discovery index (Open PageRank's count) or your CSV's DP column
backlinks, archiveBirthYear, archiveSnapshots, priceUsd, status, dropDateOnly populated from a CSV that carries those columns; null for index matches
availability, dnsavailable / dropping / expired / suspended / registered from the registry; whether the domain still has nameservers
waybackFirst and last snapshot, snapshot count, active years, longest gap, sampled page titles/text, detected languages, spam hits (with the snapshot date)
rdapRegistry status codes (e.g. pending delete), registrar, expiry, registration date
ahrefsDR, live referring domains, live backlinks, organic keywords and traffic (only with your API key)
openPageRank0–10 PageRank-style authority (only with a free Open PageRank key)
scoretopical, authority, history, cleanliness, availability, total (0–100), disqualified, verified, why
score_total, verified, disqualified, why, domainRating, firstArchivedFlat copies of the values above for table views and spreadsheets

What a run looks like

Dataset overview: domain, availability, referring domains, score, why

Run log: index scan, DNS and registry checks, then one scored line per domain with the reason

How the score works

ComponentMaxRule
Topical3020 if a keyword appears in the domain name; up to 10 more for the share of archived pages whose title/text mention a keyword
Authority30Referring domains on a log scale (5 → 5 pts, 20 → 12, 50 → 18, 100 → 22, 500 → 28, 1000+ → 30), averaged with Ahrefs DR/100×30 and Open PageRank/10×30 when present
History20Age of the first Wayback snapshot (1 y → 4, 3 y → 10, 5 y → 14, 10 y+ → 20); −4 for an archive gap longer than 24 months
Cleanliness15Starts at 15; −8 per spam category found in sampled snapshots (casino, pharma, adult, payday loans, replicas, PBN/SEO spam, parking, crypto giveaways); −5 for language drift or a non-English site; −3 if the topic drifted away before the drop
Availability55 unregistered or dropping (hand-register or drop-catch), 4 expired at the registrar (watch/backorder), 3 marketplace listing within budget, 1 unknown, 0 suspended

Disqualifiers (total forced to 0, reason in score.disqualified, row delivered free): any spam signal in the archived history (casino, pharma, adult, payday, replicas, PBN, parking pages or registrar redirect stubs, crypto giveaways, fake-endorsement trading-robot funnels) — even an old, outgrown one, so you can judge it yourself; a gambling, adult, play-to-earn or trading-scam token in the domain name (casino, slot, bet, 777, xxx, bitcoin-trader…); first snapshot younger than minArchiveAgeYears or no archive history; a link-network signature (1,000+ referring domains that never produced a single organic ranking) or a thin history for its links (hundreds of referring domains but only a few archived months of life); marketplace price above maxPriceUsd; measured referring domains below minReferringDomains (Ahrefs count wins); anything you cannot obtain — registered and live, on registrar hold, or availability the registry could not confirm — whether it came from the index or your own list; an archive check that failed (score.verified: false).

Never charged twice: a domain you were charged for in any earlier run is remembered in your account (key-value store expired-domain-finder-charged) and comes back free in later runs, so daily prospecting only pays for new finds.

You are only ever charged for a row that is obtainable (available, dropping, expired at the registrar, or a priced listing), verified, and free of every disqualifier above. Registered domains in your own list are still scored, for information, at no charge.

Unknown is not zero, and unknown is not clean: a missing referring-domain count never disqualifies, but an archive history that could not be read never earns cleanliness points and the row ships flagged instead of "clean".

Input

FieldDefaultNotes
keywordsDomain name must contain one of these. The Actor scans the free Open PageRank top-10-million authority index for matches, then keeps only the ones that are unregistered, in pending delete, or expired. Example for a games site: game, games, gaming, arcade, puzzle
domainsSkip the sources and score these domains directly (check a list you already have). Registered domains are scored for information but never charged; maxResults still caps how many qualified domains are delivered
tldscom, net, org, io
minReferringDomains10Applied to the index's referring-domain column (conservative: Ahrefs reports a median ~15× more for the same domain, measured on 30 domains 2026-09-10), then re-checked against Ahrefs when a key is given
minArchiveAgeYears3First Wayback snapshot at least this old
maxPriceUsd200Marketplace listings above this are disqualified
maxCandidates / maxResults4000 / 10How many index matches (highest-ranked first) get the DNS + registry check, and how many qualified domains you want. You pay only for qualified domains (verified, not disqualified); disqualified and unverified rows are delivered free so you can see what was rejected and why. At most 8× maxResults candidates are scored per run
csvText / csvUrlA CSV you exported yourself (any expired-domain marketplace member export, an Ahrefs export, an auction sheet). Needs a domain column; BL/DP/ABY/ACR/price/status/end-date columns are picked up when present
includeRegisteredfalseAlso score index matches that are still registered and live
ahrefsApiKeyOptional. Ahrefs API v3, ~160 API units per scored domain (measured 2026-09-10)
openPageRankApiKeyOptional, free at openpagerank.com

Worked example — a games-discovery site

Goal: an aged, clean domain with a games history to host a "new games worth trying" site.

{
"keywords": ["game", "games", "gaming", "arcade", "puzzle"],
"tlds": ["com", "net", "org", "io"],
"minReferringDomains": 20,
"minArchiveAgeYears": 5,
"maxCandidates": 5000,
"maxResults": 50,
"ahrefsApiKey": "…"
}

Real rows from a games-niche run on 2026-09-10 (Ahrefs on). Every domain below was unregistered or in pending delete at the registry when scored; availability changes daily, so always re-run before buying.

domainavailabilityscorewhy
mutilateadoll2game.comdropping (pending delete)83name matches "game"; 4/4 archived pages on-topic; 503 referring domains, DR 10; archived since 2016
galileogames.comdropping (pending delete)81name matches "game"; 637 referring domains, DR 35; archived since 1996 (209 archived months)
4arcades.comavailable (hand-register now)73name matches "arcade"; 498 referring domains, DR 9; archived since 2014
swordsandsoulsgame.comavailable (hand-register now)73name matches "game"; 553 referring domains, DR 4.7; archived since 2015
astronaut-crashgame777.comdropping0DISQUALIFIED: gambling token in the domain name; recent spam history (casino/gambling); archive age 1y < minimum 3y — despite 5,493 referring domains
gamepgslot.netavailable0DISQUALIFIED: gambling token in the domain name; recent spam history (casino/gambling)
complexitygaming.comsuspended (registrar hold)0DISQUALIFIED: registered but on hold — not obtainable, even though DR 52 and archived since 2006

To check a list you already have (an auction shortlist, a broker's sheet), pass it as domains; those rows are scored whether registered or not, and availability tells you which is which.

How it behaves toward the sources

  • Discovery uses the free, public Open PageRank top-10-million list (one anonymous CSV download per run, cached for a week) plus DNS and registry RDAP. The Actor never logs into ExpiredDomains.net, GoDaddy, Namecheap, DropCatch or any gated marketplace — those sites forbid automated access, and nothing here puts your accounts at risk. If you want their data, export it by hand and paste it as CSV.
  • Wayback Machine CDX API and raw snapshots: 3 concurrent, ≥1 s between request starts, exponential backoff on 429/503 honouring Retry-After. wayback.snapshots counts distinct months with a 200 HTML capture, not raw captures. If the archive still cannot be read, the row is pushed as disqualified: unverified…, score.verified: false, and is not charged — rerun those domains via domains.
  • RDAP straight to each registry from the IANA bootstrap (Identity Digital for .io): 4 concurrent, ≥0.25 s apart. available = the registry has no record; dropping = pendingDelete/redemptionPeriod; expired = past expiry or auto-renew grace; suspended = registrar/registry hold (registered, not obtainable — disqualified for index matches).
  • Ahrefs and Open PageRank only with your keys, on your quota; metrics stay in your run's dataset, never cached across users.
  • Resumable: state is checkpointed to the run's key-value store every 10 domains and on migration; a resumed run does not re-pull lists or re-score domains already pushed.

Local development

npm install
cp .env.example .env # fill in what you have
npm test # unit tests
apify run --purge # uses storage/key_value_stores/default/INPUT.json

Pinned references (verified 2026-09-10)