public records · live ingest · daily fresh

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.

step 01
.01

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.

Property Appraiser4h ago

Tax-roll, ownership of record, mailing address, valuation, homestead status, use codes.

parcelsownersjust_valuehomestead
Clerk of Courts4h ago

Deeds, liens, lis pendens, foreclosure filings, mortgages, satisfactions.

deedslienslis_pendens
Code Compliance4h ago

Active and resolved code violations, case status, severity, opened date.

violationscase_status
Tax Collector24h ago

Property tax delinquency, payment history, certificate sales.

delinquentcert_sales
Business-entity registryweekly

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.

entitiesregistered_agentsmanagers
ingest stream · live
  • 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
processing ~2.4M parcel events · last 24h
step 02
.02

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.

score = Σ(signal_i × weight_i) × recency_decay

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%).

Why publish the formula? Wholesalers don't trust black-box scoring. We publish the math so you can replicate it, override it, or train a competing model — your account, your data.

composite is capped at 1.00 · cap behavior with v1 weights still being tuned

SignalWeight
  • out_of_state_owner
    Owner mailing outside the state · higher motivation to sell at discount.
    +0.15
  • tenure_years_long
    Held ≥20 years · equity-rich proxy.
    +0.20
  • no_homestead
    Not owner-occupied · no SOH cap, easier to transact.
    +0.10
  • code_violation
    Active case · pressure to offload before fines compound.
    +0.30
  • lis_pendens
    Foreclosure filing · time-pressured seller.
    +0.40
  • tax_delinquent
    2+ yrs back taxes · cert-sale risk.
    +0.35
  • llc_owned
    Entity-held + reachable manager via business registry.
    +0.10
step 03
.03

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.

recipe · "oos_long_tenure_high_signal"340 parcels match · refreshes daily
Geo
zip ∈ [33125, 33012, 33304]
Tenure
tenure_years ≥ 20
Signals · all
out_of_state_ownerandno_homestead
Signals · any
code_violationortax_delinquentorlis_pendens
Exclude
use_code = condoandjust_value < $80k
Score
composite ≥ 0.65
recipe.json — same recipe via API
{  "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.

step 04
.04

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.

Webhook · real-time
POST to your endpoint within ~3 sec of signal fire. HMAC-signed. Retries with exponential backoff.
MCP server
AI agents (Claude, custom GPTs) call leads.search, parcel.get, watchlist.fire directly.
REST poll
Standard GET /api/v1/leads with cursor pagination. Cron-friendly, idempotent.
Email digest
Daily 7am digest, one email per recipe. Ungated leads, contact paths, signal trace.
webhook payload — POST your endpoint
// 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"}
step 05
.05

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.

GoHighLevelZapierMake.comcurlCSV
goh-webhook.json — terminal.house → GoHighLevel custom webhook
// 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.

Ready to wire it up?

Start the 14-day trial — connect your stack in under 10 minutes.

No charge during trial. Cancel any time — no charge, no clawback.