Distressed Property Leads — Tax, Vacancy & Code Violations avatar

Distressed Property Leads — Tax, Vacancy & Code Violations

Pricing

from $20.00 / 1,000 leads

Go to Apify Store
Distressed Property Leads — Tax, Vacancy & Code Violations

Distressed Property Leads — Tax, Vacancy & Code Violations

Finds distressed real estate in official city and county open-data portals: tax-delinquent and tax-sale rolls, vacant and condemned building registries, demolitions, and open code violations. Merges every signal onto the same property and scores it, so you call the most motivated owners first.

Pricing

from $20.00 / 1,000 leads

Rating

0.0

(0)

Developer

Omega Point Solutions

Omega Point Solutions

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Distressed Property Leads

Finds distressed real estate in official city and county open-data portals, merges every signal onto the same property, and ranks the results so you call the most motivated owners first.

Public government records only. No logins, no protected pages, no captcha solving, no scraping of sites that forbid it.

What counts as distress

SignalMeaning
tax_saleThe parcel went to a tax sale or scavenger sale
tax_delinquentProperty taxes unpaid, often with the amount owed
condemnedOn a dangerous/condemned buildings list
demolitionScheduled or completed blight demolition
vacantVacant/abandoned registry, abatement case, or 311 report
code_violationOpen building or code-enforcement violation

Why merging matters

One code violation is noise. A property carrying a vacancy registration and eight open violations is a phone call. The Actor joins records across datasets on both street address and parcel number, so signals that different agencies file under different identifiers still land on the same property:

{
"distress_score": 61,
"address": "6359 S HERMITAGE AVE",
"jurisdiction": "Chicago",
"signal_kinds": ["code_violation", "vacant"],
"signal_count": 10,
"score_reasons": ["vacant x2 (+26)", "code_violation x8 (+18)",
"2 independent signal types (+9)", "recency x1.15"]
}

Set minSignalCount to 2 to get only these stacked properties.

Scoring

distress_score is 0–100 and is a ranking aid, not a valuation. Stronger signal kinds weigh more, repeats of the same kind have diminishing returns, independent signal types earn a stacking bonus, recent records outweigh stale ones, and large sums owed add a little. Every lead ships with score_reasons so you can see the arithmetic and disagree with it.

Coverage

15 datasets across Chicago, Cook County, Cincinnati, Los Angeles, Kansas City, Richmond, Norfolk, New Orleans, New York, Howard County MD, and Sonoma County CA — roughly 5.6M source records. Every dataset in src/sources.py was probed live and its column names read off a real record before being added.

Coverage is the honest limit of this Actor: it reaches the jurisdictions that publish machine-readable open data, which is a minority of US counties. It does not cover your county unless it is listed above.

Input

FieldMeaning
statesTwo-letter codes to include. Empty = all.
jurisdictionsCity/county names to include. Empty = all.
signalTypesWhich distress kinds to collect. Empty = all.
maxRecordsPerSourceRows read per dataset (default 1000).
minDistressScoreDrop leads below this score.
minSignalCountRequire N records on one property. Use 2+ for a short list.
maxResultsCap the output. 0 = no cap.
socrataAppTokenOptional free token; raises rate limits on big runs.
requestDelaySecondsPoliteness delay between paged requests.

Output

One record per property, sorted by score, with a signals array holding each underlying government record and a link to its source dataset. A RUN_REPORT in the key-value store lists rows read and any dataset that failed, so a partial run is never silently presented as a complete one.

Running it locally

pip install -r requirements.txt
python3 tools/smoke.py 300 # live end-to-end check, no Actor runtime needed

Adding a jurisdiction

Add a Source to src/sources.py with the publisher domain, dataset id, and the real column names, then re-run the smoke test. If a dataset reports no usable rows, its address or parcel mapping is wrong — the row carried no locator the Actor could key on.

Publishers rename columns without notice. Re-run the smoke test before trusting a large run.