Expired & Delisted Listing Leads — Off-Market Detector API avatar

Expired & Delisted Listing Leads — Off-Market Detector API

Pricing

from $100.00 / 1,000 delisted lead returneds

Go to Apify Store
Expired & Delisted Listing Leads — Off-Market Detector API

Expired & Delisted Listing Leads — Off-Market Detector API

Detect homes that left the market without selling. Expired and withdrawn listing leads by ZIP code, pay per lead. No MLS subscription, no sales call. For agents, investors, and AI agents.

Pricing

from $100.00 / 1,000 delisted lead returneds

Rating

0.0

(0)

Developer

Brock Bangasser

Brock Bangasser

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a month ago

Last modified

Share

Expired & Delisted Listing Leads — Off-Market Detector

Detects homes that left the market without selling — the signal behind every $60–360/month "expired listing" subscription — as a pay-per-lead API with no MLS lock-in.

Roughly 85,000 US homes get delisted every month (Redfin), and expired/withdrawn listings are the highest-converting seller leads in real estate: the owner already wanted to sell, their agent contract just ran out. That's why 20–50 agents call each one within 48 hours, and why REDX ($60/mo per MLS), Landvoice ($60–120/mo per MLS), Vulcan7 (~$250+/mo) and Espresso Agent ($279/mo) built subscription businesses on this exact signal.

This Actor gives you the same detection layer, unbundled:

  • Watch any ZIP codes — no per-MLS subscriptions, no sales call, no contract
  • Pay per lead ($100/1k), not per month — a January expiration wave costs you more, a quiet week costs you almost nothing
  • API-first — pipe leads into your CRM, dialer, direct-mail tool, n8n/Make workflow, or AI agent
  • You own the watch state — snapshots live in your Apify storage, and your watch history compounds into better detection

How it works

The first run for a ZIP records a snapshot of every active listing. Every following run re-checks the market and reports listings that disappeared without a sold record:

typeWhat it meansBilled?
delisted_leadOn market before, gone now, no recent-sold record$0.10
relistedA previously delisted home is back on market — motivated sellerFree
stale_listingSeed-run bonus: on market 60+ days without selling — a pre-expired sellerFree
zip_summaryPer-ZIP receipt: actives checked, leads foundFree
run_summaryWhole-run receipt — "no leads" is an answer, never an empty tableFree

Why can't the first run return delisted leads? Detecting a disappearance requires a before and an after — and "before" data (what was listed last month) isn't publicly available anywhere; it's the thing MLS feeds and $119+/mo data vendors sell. Your watch builds that history from day one, and so the seed run pays you a different way: every listing already sitting 60+ days on market comes back as a free stale_listing row — those owners are weeks from becoming expired listings, and agents prospect them the same way.

Each lead row carries: full address, city/state/ZIP, last asking price, beds/baths/sqft, days-on-market when it vanished, first/last seen dates, the date it disappeared, last listing status, a stable zpid join key, the listing URL, and a confidence flag (probable = vanished outright; low = was pending, likely a closing in flight).

Run it on a schedule (daily or every 2–3 days is ideal) with Apify's built-in scheduler — set it once and leads accumulate.

Sample output

{
"type": "delisted_lead",
"address": "1234 Main Street, Example City, TX 78701",
"zipcode": "78701",
"last_list_price": 345000,
"beds": 3, "baths": 1, "area_sqft": 1452,
"days_on_zillow_last_seen": 94,
"first_seen": "2026-07-08",
"disappeared_on": "2026-07-15",
"last_status_seen": "ForSale",
"confidence": "probable",
"zpid": "100000000",
"detail_url": "https://www.zillow.com/homedetails/..."
}

What this costs (both layers, honestly)

  1. This Actor's events: your first run for each ZIP is free of this Actor's fees — a seed run only records your baseline, so there's nothing to bill. From the second run on: $0.02 per run + $1 per 1,000 listings watched + $0.10 per delisted lead.
  2. Data source: each run internally calls the Zillow ZIP-search Actor under your account (~$1.10 per 1,000 listings scanned) — this applies on every run including the seed, since the baseline has to be fetched once. A typical suburban ZIP has 50–300 active listings.

Worked example: watching 5 suburban ZIPs (~800 active listings) daily for a month ≈ $26 of scanning + ~$0.60 of run fees + $0.10 per lead found. The first day (seeding all 5 ZIPs) is free of this Actor's fees. If those ZIPs produce 40 leads that month, your total is around $31 — versus $60–120/month for one MLS region with an incumbent, and you only paid for what appeared. One converted expired listing is a $5,000–15,000 commission.

Who uses this

  • Listing agents prospecting expired/withdrawn homeowners (pair with your dialer's compliance tools)
  • Real-estate marketing agencies running direct-mail or door-knocking campaigns for agent clients
  • Investors hunting motivated sellers before they relist
  • Proptech builders and AI agents that need a delisting signal as an API primitive

No contact info — by design

Rows contain addresses and listing facts only: no owner names, no phone numbers, no emails. That keeps this dataset clean of personal data and keeps compliance simple. Need contacts? Chain any skip-trace Actor from the Apify Store on the address field in one step (n8n/Make make this a 3-node workflow) — and scrub against the DNC registry before calling; that's your obligation, not optional.

Input reference & common mistakes

You don't need to get this perfect. Wrong-but-unambiguous values are fixed for you (and noted in the log); a genuinely empty ZIP list ends the run with a receipt that tells you what to change — never a blank failure. And if the upstream data provider has a hiccup, the run ends cleanly with no leads and no charges, your watch state untouched — not a failed run.

FieldAcceptsIf you get it wrong
zipCodes (required)5-digit US ZIPs: a list ["78701","85254"] or a string "78701, 85254". ZIP+4 (78701-1234) is trimmed to 78701Invalid entries (1234, abcde) are dropped with a warning; no valid ZIPs → receipt telling you the format. Max 50/run
priceMin / priceMaxdollars, 0 = no boundOut of range clamped; if min > max they're swapped; non-numeric ignored — all logged
includeFsbotrue / falseAny truthy value is accepted
staleDomThreshold03650 days (0 disables the seed-run bonus rows)Clamped / defaulted to 60, logged
maxLeads110000Clamped / defaulted to 500, logged
contactEmaila plain email (reserved for a future direct-fetch mode)Control characters stripped automatically; never fatal

Quickest correct first run: put one or two ZIPs in zipCodes, leave everything else default. The first run seeds each ZIP (you'll get a baseline + free stale_listing bonus rows); schedule it daily and delisted leads start appearing within 2–7 days.

Honest notes on the data (read this)

  • Detection is portal-derived inference, not MLS truth. A probable lead means the listing vanished from the portal with no sold record — usually expired/withdrawn/cancelled, occasionally a data hiccup or an off-MLS sale. The relisted signal and your own follow-up close that gap. Incumbent MLS feeds see status flips a few hours sooner; this Actor sees withdrawn and quietly-delisted homes that MLS-expired-only feeds can miss.
  • First run per ZIP produces zero delisted leads — it seeds the baseline (you get free stale-listing rows instead). Delisted leads start when the market moves: schedule daily and typical ZIPs surface leads within 2-7 days.
  • Coverage follows the portal. Very rural areas and off-MLS listings may be missed.
  • Watch state lives in your account under the delisted-listing-watch key-value store. Delete it to reset a watch.

FAQ

How is this different from REDX/Vulcan7? They sell MLS-sourced expireds plus skip-traced contacts as a per-MLS monthly subscription. This is the raw detection signal, nationwide, pay-per-use, API-first, without contact enrichment.

Can I watch a whole metro? Yes — up to 50 ZIPs per run; run multiple schedules for more.

What happens on a huge day (e.g., early January)? Year-end expirations spike. Cap your spend with maxLeads and the platform's max-charge limit — this Actor honors both and never charges for undelivered leads.