How terminal.house finds motivated sellers — every day, before everyone else.
Five steps. Five public-records sources, seven motivated-seller signals, one transparent composite score, and four ways to push leads into your stack. No black box. No mystery scoring.
Ingest · 5 public-records sources, refreshed daily
Every county exposes its public records differently. We normalize five public-records sources into one schema and pull every parcel, every day — no manual list pulling, no stale exports.
Tax-roll, ownership of record, mailing address, valuation, homestead status, use codes.
Deeds, liens, lis pendens, foreclosure filings, mortgages, satisfactions.
Active and resolved code violations, case status, severity, opened date.
Property tax delinquency, payment history, certificate sales.
LLC unmasking. When an entity owns the parcel, we cross-reference the state's business registry to surface registered agents and managing members — the actual people behind the LLC.
- Property Appraiserparcel owner_change · folio 30-3122-008-0440just now
- Clerk of Courtslis_pendens filed · case 2026-CA-01488012s ago
- Code Complianceviolation opened · case CE-2026-0412238s ago
- Property Appraiserhomestead removed · folio 74-43-44-21-…1m ago
- Business-entity registryLLC manager update · SUNNY HOLDINGS LLC2m ago
- Tax Collectortax_delinquent · 3 yrs · folio 30-08-…-02003m ago
Score · transparent composite, 0 → 1
Each parcel gets a composite score from seven signals, each with a published weight. No black box — every score has an explainable breakdown you can audit, override, or argue with.
where recency_decay reduces the score linearly as the underlying public-record observations age (full weight at 0–7 days, −20% at 30+ days, capped at −40%).
composite is capped at 1.00 · cap behavior with v1 weights still being tuned
- +0.15out_of_state_ownerOwner mailing outside the state · higher motivation to sell at discount.
- +0.20tenure_years_longHeld ≥20 years · equity-rich proxy.
- +0.10no_homesteadNot owner-occupied · no SOH cap, easier to transact.
- +0.30code_violationActive case · pressure to offload before fines compound.
- +0.40lis_pendensForeclosure filing · time-pressured seller.
- +0.35tax_delinquent2+ yrs back taxes · cert-sale risk.
- +0.10llc_ownedEntity-held + reachable manager via business registry.
Filter · composable DSL · any · all · not
Build a filter recipe once — reuse it as a watchlist, an API query, an MCP tool call, or a CSV export. Same DSL everywhere. Compose what you actually want, not what a checkbox UI lets you express.
{ "geo": { "zips": ["33125", "33012", "33304"] }, "tenure": { "min_years": 20 }, "signals": { "all": ["out_of_state_owner", "no_homestead"], "any": ["code_violation", "tax_delinquent", "lis_pendens"], "not": [] }, "exclude": { "use_codes": ["condo"], "min_just_value": 80000 }, "score": { "min_composite": 0.65 }}
Same JSON works from /api/v1/leads/search, MCP leads.search tool, and the watchlist editor. One recipe, every surface.
Notify · four delivery surfaces, your choice
When a parcel newly matches a recipe, you decide how it reaches you. Real-time webhook for hot leads, MCP for AI agents, REST poll for cron stacks, email digest if you want to stay out of the loop until morning.
leads.search, parcel.get, watchlist.fire directly.GET /api/v1/leads with cursor pagination. Cron-friendly, idempotent.// 2026-05-09T14:23:08Z · signed: sha256=a3f1...{ "event": "lead.matched", "recipe": "oos_long_tenure_high_signal", "folio": "30-3122-008-0440", "address": "4567 NW 22nd Av, ZIP 33125", "score": 0.78, "signals_fired": ["out_of_state_owner", "code_violation", "no_homestead", "tenure_years_long"], "owner": { "name": "SUNNY HOLDINGS LLC", "manager": "M. Reyes", "mailing_state": "NY" }, "valuation": { "just_value": 412000, "est_equity": 298000 }, "deeplink": "https://terminal.house/leads/30-3122-008-0440"}
Export · into your stack, in seconds
Push leads where you actually work them — GoHighLevel, Zapier, Make.com, custom GPTs, REsimpli, Smarter Contact, or just a CSV. We don't care which CRM you use; we integrate with the rails wholesalers already run on.
// In GHL: Settings → Integrations → Webhooks → New// Receive URL: https://services.leadconnectorhq.com/hooks/...{ "contact": { "firstName": "{{owner.first}}", "lastName": "{{owner.last}}", "address1": "{{address.line1}}", "city": "{{address.city}}", "customField": { "th_score": "{{score}}", "signals": "{{signals_fired}}" } }, "tags": ["th-hot", "motivated-seller"], "pipeline": "acquisitions", "stage": "new-lead"}
See the full set of provider examples — Zapier, Make.com, Custom GPT + Claude over MCP, raw curl, and CSV — on the integrations page.