Leads

Lead feed (paid, priced per lead) — with a FREE preview

The Machine Storefront's lead feed: the qualified target list for one SIGNAL in one STATE, delivered as lead records and priced PER LEAD.

Each lead carries its canonical_id (state:county:APN), owner, assessed value, that signal's own strength fields (years held, land/improvement ratio, flip profit, portfolio size, ...), a deterministic lead_score (1-100) and provenance {as_of, source}.

PRICE: per_lead = clamp($0.25 x S(signal strength) x V(asset-value tier), $0.05, $1.00); total = min(count x per_lead, $20). You pay for the leads DELIVERED -- min(matching rows, limit) -- and an empty result is never charged for. The exact total is advertised in the 402's accepts[0].maxAmountRequired (USDC atomic units, 6 decimals).

FREE PREVIEW: add preview=true for the exact count, the exact quote and up to three MASKED sample leads (APN truncated to state:county, house number stripped, owner name and every other people field withheld). No payment, no API key required; anonymous callers are IP-throttled at the free tier. The anonymous security alternative ({}) applies to the preview ONLY.

ACCOUNT OR PAYMENT FOR DELIVERY: a lead is an owner's name and mailing address by area -- people data. It is delivered to a PropRaven ACCOUNT (API key Authorization: Bearer pz_..., MCP OAuth token or signed-in session) and to a PAID pull without one: the leads are returned only once the x402 payment SETTLES or the X-CREDIT-TOKEN debit succeeds. An unpaid (non-preview) pull without an account is refused with HTTP 401 code: "account_required", reason: "people_data_requires_account".

PAID ACCESS (preview omitted) requires ONE of: (a) x402 pay-per-call -- send a base64 signed x402 PaymentPayload in the X-PAYMENT header (account credentials optional); on a successful build the leads are returned and the on-chain settlement receipt is in the X-PAYMENT-RESPONSE response header. (b) A prepaid X-CREDIT-TOKEN balance. (c) A genuine PAID PropRaven subscription entitlement (lead feeds are included). Being merely authenticated is NOT sufficient. (d) Anything else -> HTTP 402 whose accepts array carries the exact payment requirements for this pull.

OWNER CONTACT: each delivered lead carries owner_contact -- the owner's best mailing address, read from ONE address column family of the record with its ZIP, flagged mail_ready. mail_ready=true narrows the pull to parcels whose record carries a complete one-family mailing address (parcel-grain signals only). Each delivery is recorded in PropRaven's people-data access log before it is returned; if the log is unavailable the delivery is refused (503) and nothing is charged.

BOUNDED READS: every read carries a statement timeout (10 s with mail_ready, 25 s otherwise). A pull too broad to finish returns 503 code: "lead_read_timeout" telling you to narrow it (add county); nothing is charged.

NOTE on distressed: an assessment-derived cohort (a structure on the books assessed at a nominal value, on land that carries real value). It is NOT a pre-foreclosure, tax-lien or lis-pendens feed.

get/api/v1/leads/find

Request

  • Base URL: https://propraven.com
  • URL: https://propraven.com/api/v1/leads/find
  • Auth: one of:
    • HTTP bearer
    • none

Query parameters

signal'absentee' | 'long_hold' | 'entity_owned' | 'portfolio_owner' | 'high_land_ratio' | 'flip' | 'distressed' required

Which qualified cohort to pull from. Priced by strength: absentee (1.0x, widest) < long_hold (1.1x) < entity_owned (1.15x) < portfolio_owner (1.25x) < high_land_ratio (1.4x) < flip (1.6x) < distressed (1.9x).

statestring required
Example:NC

REQUIRED 2-letter USPS state code. Every pull is pruned to one state partition.

countystring
Example:183

3-digit within-state code ("183") or 5-digit state+county ("37183").

zipstring
Example:27601

5-digit ZIP. Supported only on the long_hold and entity_owned cohorts (the other source relations carry no ZIP column) -- a zip on any other signal returns 400.

value_mininteger

Minimum assessed value (sell price for the flip cohort), USD.

value_maxinteger

Maximum assessed value (sell price for the flip cohort), USD.

limitinteger

How many leads to buy. Default 25, max 200. You pay for min(matching rows, limit).

previewboolean

true -> the FREE preview (count + quote + up to three masked sample leads, no payment). Omit or false -> the paid call.

mail_readyboolean

true -> only parcels whose record carries a complete mailing address (street, city, state, 5-digit ZIP) in ONE column family. Parcel-grain signals only (400 on portfolio_owner). Each delivered lead's owner_contact.mail_ready is the final word. Narrow with county in large states: the filter checks every candidate.

tax_delinquentboolean

true = only parcels on a treasurer's or tax collector's property-tax delinquency / lien-sale / tax-sale list as of today (status delinquent or in_sale; redeemed and sold never count; expired records never used). Pilot jurisdictions only: a parcel elsewhere never matches. false or absent = no filter. Requires an account, preview included (401 account_required otherwise). Parcel-grain signals only (400 on portfolio_owner).

Headers

X-PAYMENTstring

x402 payment, with or without account credentials (a pull without an account receives the leads only once the payment settles): a base64-encoded signed x402 PaymentPayload (EIP-3009 transferWithAuthorization over USDC on Base). The signed amount must equal this pull's quoted maxAmountRequired (see the 402 body, or call with preview=true first). Ignored on a preview call, which is free.

Response

Either the FREE masked preview (preview=true), the delivered lead set (paid), or an honest empty result (count 0 -- never charged for).

OR

Example response

{
  "quote": {
    "per_lead": {
      "amount": "5.00",
      "currency": "USD"
    },
    "per_lead_usd": 0.25,
    "total": {
      "amount": "5.00",
      "currency": "USD"
    },
    "total_usd": 6.25,
    "total_atomic_usdc": "6250000",
    "asset": "USDC",
    "breakdown": {
      "base_per_lead": 0.25
    }
  },
  "sample": [
    {
      "canonical_id": "37:119:12104406",
      "provenance": {
        "source": "PropRaven absentee_owners (serving epoch 2026-09-03)"
      }
    }
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.