Model MatchHelp

Properties

Search properties with filters

postapi.modelmatch.com/v1/properties

Search and list individual properties/parcels with filters — one row per parcel. Filter by location (state, county, city, zip, address), owner name, property characteristics (beds, baths, square footage, year built, property type), value, ownership or transaction history, and occupancy (ownerOccupancy: not_flagged plus absenteeOwner: true targets likely investor / non-owner-occupied parcels — pair absenteeOwner with a geography filter), with sorting and cursor pagination. This is the discrete per-property record search: use it to find specific properties or build a filtered property list. (For a single property by its ID use the property detail endpoint.) If you only need how many properties match and not the records themselves, send the same request body to countProperties.

Authorization

x-api-keystringrequired

API key or OAuth token. See Authentication.

Body application/json

advancedFiltersone of
Show child attributes
Option 1object
Show child attributes
childrenone of[]required

Array of filter expressions (AND)

Same shape as its parent.

typeenumrequired
Options:and
Option 2object
Show child attributes
childrenone of[]required

Array of filter expressions (OR)

Same shape as its parent.

typeenumrequired
Options:or
Option 3object
Show child attributes
childone ofrequired

Same shape as its parent.

typeenumrequired
Options:not
Option 4object
Show child attributes
fieldstringrequired
openumrequired

Comparison operator. exists means the field has a REAL value: on fields whose source records an unknown as an in-domain value (e.g. beds, squareFeet, lotSquareFeet, where an unrecorded measurement is stored as 0), those docs count as NOT existing. neq keeps docs with no value — it removes only what is known to equal the value, matching the reading of an exclusion.

Options:eqneqgtgteltltebetweeninmatchgeoDistanceexists
typeenumrequired
Options:filter
valuenull

Comparison value

filtersone of
Show child attributes
Option 1object
Show child attributes
childrenone of[]required

Array of filter expressions (AND)

Same shape as its parent.

typeenumrequired
Options:and
Option 2object
Show child attributes
childrenone of[]required

Array of filter expressions (OR)

Same shape as its parent.

typeenumrequired
Options:or
Option 3object
Show child attributes
childone ofrequired

Same shape as its parent.

typeenumrequired
Options:not
Option 4object
Show child attributes
fieldstringrequired
openumrequired

Comparison operator. exists means the field has a REAL value: on fields whose source records an unknown as an in-domain value (e.g. beds, squareFeet, lotSquareFeet, where an unrecorded measurement is stored as 0), those docs count as NOT existing. neq keeps docs with no value — it removes only what is known to equal the value, matching the reading of an exclusion.

Options:eqneqgtgteltltebetweeninmatchgeoDistanceexists
typeenumrequired
Options:filter
valuenull

Comparison value

flatFiltersobject
Show child attributes
absenteeOwnerboolean

Owner's mailing address (street + 5-digit zip, case/punctuation-insensitive) differs from the property's site address — an investor / non-owner-occupied signal. true = absentee, false = owner mails to the property; parcels with no mailing or site address match neither. Evaluated per candidate document (no stored flag yet), so always pair it with a geography filter (state, county, zipCode, fips, a radius) — an unscoped absenteeOwner over all parcels may time out.

activeLoanCountone of | null

Mortgages believed to still be outstanding (e.g. {lte: 0} for parcels with none). {lte: 0} alone is NOT a free-and-clear filter: it also matches recently-sold parcels whose new mortgage has not been recorded yet. Pair it with preSaleLoanCount: {lte: 0} for parcels we can actually verify.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
addressone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
affordableHousingTractboolean

Parcel sits in a qualified census tract for affordable-housing programs (17,603,810 parcels). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

agentIdone of

Agent id(s) (GET /v1/agents/{id}): parcels with a recorded sale by the agent.

Show child attributes
Option 1string
Option 2string[]
agentUidone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
apnone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
avmConfidenceone of | null

Confidence in the value estimate, as a 50–100 score (e.g. {gte: 90} for high-confidence estimates only). NOT a fraction — {gte: 0.9} matches every scored parcel, not the top decile.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avmValueone of | null

Automated value estimate for the parcel, in whole dollars (e.g. {gte: 500000}). ~77% coverage. Matches the avm.mid value on the response.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
bedsone of | null

Bedroom count (e.g. {lte: 2} for starter homes). ~46% coverage — on the rest the bedroom count was never recorded, which is NOT the same as a parcel with no bedrooms and NOT the same as a parcel with no assessor record: 15.6M of them do carry a recorded bath count and floor area. Unrecorded parcels are EXCLUDED by default; pass includeNulls: true to add them back. beds: 0 matches nothing (an unrecorded count is not a count of zero, and a genuine studio is indistinguishable from it), and the response returns null rather than 0.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
borrowerStatusone of | null
Show child attributes
Option 1enum

One of (case-insensitive): no_active_loans, Current, Current_via_ALI

Options:no_active_loansCurrentCurrent_via_ALI
Option 2enum[]

Match any of these values

Options:no_active_loansCurrentCurrent_via_ALI
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
brokerNmlsone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
cityone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
companyNmlsone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
countyone of | null

County, as a 5-digit FIPS code (e.g. 06037). Canonical key for the county dimension; fips is the exact-code alias kept for back-compat.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
difficultDevelopmentAreaboolean

Parcel sits in a HUD-designated difficult development area (30,643,419 parcels). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

distressedTractboolean

Parcel sits in a distressed-or-underserved nonmetropolitan middle-income tract (13,289,914 parcels). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

equityone of | null

Estimated equity, in whole dollars (e.g. {gte: 250000}). Negative values are genuine underwater parcels. Derived from the value estimate minus outstanding loan balances, so it inherits their coverage (~77%) AND their gaps: on a parcel whose mortgage is missing from the record there is nothing to subtract, so this returns the full value estimate. Pair a high-equity range with preSaleLoanCount: {lte: 0} to drop those.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
equityPctone of | null

Estimated equity as a FRACTION of the value estimate, where 1 = the whole value and 0.5 = half. Pass {gte: 0.5} for 50%-or-more equity — {gte: 50} is not a synonym and matches ZERO parcels, since no value exceeds 1. Negative values are genuine underwater parcels. Note the contrast with loanLtv, which takes whole percents. CAUTION: 1 is not proof a parcel is owned free and clear — it is also what a recently-sold parcel returns when the buyer's new mortgage has not been recorded yet, because the calculation subtracts nothing. Add preSaleLoanCount: {lte: 0} to restrict to parcels whose position we can actually verify.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
excludeIdstring[]

Parcel ids to exclude — the inverse of id.

fipsone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
floodHazardTractboolean

Parcel sits in a FEMA special flood hazard area (4,675,160 parcels). tractFloodZone gives the specific zone code. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

foreclosureDateone of | null

Recording date of the most recent foreclosure notice on the parcel (e.g. {gte: "2025-01-01"}). Parcels with no notice are excluded. Pair with foreclosureStage, e.g. {foreclosureStage: "ND", foreclosureDate: {gte: "2025-01-01"}}.

Show child attributes
Option 1string

Exact date, or a whole period: YYYY-MM-DD (that day), YYYY-MM (the whole month — "2025-06" = 2025-06-01 through 2025-06-30) or YYYY (the whole year). YYYYMMDD, MM/DD/YYYY, an ISO-8601 datetime and epoch milliseconds are also accepted. An unparseable value is a 400.

Option 2object

Date range. Excludes null/missing-field docs by default; add includeNulls: true to keep them. Bounds accept YYYY, YYYY-MM, YYYY-MM-DD, YYYYMMDD, MM/DD/YYYY, a full ISO datetime or epoch milliseconds; an unparseable bound is a 400. A partial bound denotes the whole period and expands to the edge that preserves the operator: gte/lt take the period START, gt/lte take the period END — so {gte: "2024"} means on/after 2024-01-01 and {lte: "2024"} means through 2024-12-31.

Show child attributes
gtstring
gtestring
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires a bound.

ltstring
ltestring
foreclosureStageone of | null

Stage code of the most recent recorded foreclosure notice on the parcel (e.g. "ND", "NS"). Present on every parcel whose foreclosureStatus is in_foreclosure, so any value here also limits results to those parcels. Accepts one code or an array (any-of). Pair with foreclosureDate to find recent notices of one stage.

Show child attributes
Option 1enum

One of (case-insensitive): AN, CS, JF, ND, NF, NL, NS, NT, PF, RD, RJ, RL, RP, RS, RT, SR

Options:ANCSJFNDNFNLNSNTPFRDRJRLRPRSRTSR
Option 2enum[]

Match any of these values

Options:ANCSJFNDNFNLNSNTPFRDRJRLRPRSRTSR
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
foreclosureStatusone of | null
Show child attributes
Option 1enum

One of (case-insensitive): unknown, in_foreclosure

Options:unknownin_foreclosure
Option 2enum[]

Match any of these values

Options:unknownin_foreclosure
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
geoBoundsobject

Map viewport {north, south, east, west} in degrees: only listings inside the box. west greater than east crosses the antimeridian. Unlike geoPoint (a radius) this is the shape a map reports. Applies to list, count and analytics alike.

Show child attributes
eastnumberrequired
northnumberrequired
southnumberrequired
westnumberrequired
geoPointobject | null

Radius search — { lat, lon, radius } (e.g. radius "15mi" or "24km") — around any office on the agent's record; with locationSource office the CURRENT office, production their transactions.

Show child attributes
latnumberrequired
lonnumberrequired
radiusstringrequired
idstring[]

Exact parcel ids (up to 50,000, any-of). A property id from the list/search rows (mm_<fips><apn>|<fips>-<apn>|<unit>, exactly that parcel) or an mmPropertyId (mm_<fips><apn>, every unit of the parcel). Must start with mm_. ANDed with the other filters, even under mode: "or".

lastSalePriceone of | null
Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
lenderNmlsone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loNmlsone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanAmountone of | null
Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
loanBalanceone of | null
Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
loanBorrowerStatusone of | null
Show child attributes
Option 1enum

One of (case-insensitive): Current, Current_via_ALI

Options:CurrentCurrent_via_ALI
Option 2enum[]

Match any of these values

Options:CurrentCurrent_via_ALI
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanCompanyone of | null

Per-loan funding-company NMLS id (digits only) on the parcel's loans.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanCompanyNameone of | null

Funding-company name on the loan, case-insensitive contains.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanCompanyOrLenderone of | null

NMLS id matched as the loan's funding company OR lender.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanCountone of | null
Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
loanExcludeobject

Loan filters to EXCLUDE — each key negated on its own, under the same loanMatchMode. With "most_recent", {loanCompanyOrLender: "3030"} keeps parcels whose newest loan is not from 3030 (no-loan parcels included); {loanRecordedDate: {lt: "2017-01-01"}} drops newest loans recorded before 2017, keeping parcels with no date.

Show child attributes
loanCompanyone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

loanCompanyNameone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

loanCompanyOrLenderone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

loanOriginatorone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

loanRecordedDateone of | null
Show child attributes
Option 1string

Exact date, or a whole period: YYYY-MM-DD (that day), YYYY-MM (the whole month — "2025-06" = 2025-06-01 through 2025-06-30) or YYYY (the whole year). YYYYMMDD, MM/DD/YYYY, an ISO-8601 datetime and epoch milliseconds are also accepted. An unparseable value is a 400.

Option 2object

Date range. Excludes null/missing-field docs by default; add includeNulls: true to keep them. Bounds accept YYYY, YYYY-MM, YYYY-MM-DD, YYYYMMDD, MM/DD/YYYY, a full ISO datetime or epoch milliseconds; an unparseable bound is a 400. A partial bound denotes the whole period and expands to the edge that preserves the operator: gte/lt take the period START, gt/lte take the period END — so {gte: "2024"} means on/after 2024-01-01 and {lte: "2024"} means through 2024-12-31.

loanInterestRateone of | null

Deprecated alias of loanModeledInterestRate — a low-biased ModelMatch model that caps near 7%. For the genuine recorded note rate use recordedInterestRate.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
loanLenderone of | null

Lender ID on the parcel's loans — the normalized lender-dictionary key, NOT the lender name the response shows. Resolve a lender via instantSearch (or listLenders) and pass the id it returns (e.g. "mortgage_rocket" or "mortgage rocket"); the lenderId on a parcel's loans[] is the same value, so a lender read off a result round-trips here directly. Underscores and letter case are normalized, and the id expands to every stored variant the lender is recorded under. A value that is neither an id nor a stored lender name returns 400 with the closest matches, rather than silently matching nothing — to filter by the lender NAME shown on the parcel, use loanLenderName.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanLenderNameone of | null

Lender NAME on the parcel's loans — the counterpart to the exact-id loanLender, and the filter that accepts the lenderName a parcel's loans[] displays (e.g. "UNION HOME MORTGAGE CORP"). Case-insensitive, matched against the name recorded on the loan. When the name is one the lender dictionary knows, it also expands to that lender's whole recorded-name family, so a brand name ("union home mortgage") selects far more than the one literal string. Never 400s: a name it cannot resolve simply matches the recorded string. The response reports how each value resolved as lenderNormalizations.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanLenderNameContainsone of | null

Lender name on the loan, case-insensitive contains (loanLenderName is the exact / name-family match).

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanLtvone of | null

Loan-to-value on the parcel's active loan(s), as WHOLE PERCENTS — {gte: 40, lte: 50} means 40%–50% LTV. A fractional range ({gte: 0.4, lte: 0.5}) is not a synonym and matches ZERO parcels. ~7% coverage. Careful: the response DTO reports the same measurement as a fraction (loans[].ltv of 0.4238 is 42.38% LTV), so a value read off a result must be multiplied by 100 before it can be used here. equityPct, by contrast, takes the fraction. Two further limits of the stored value. It SATURATES at 10 and 199 — no parcel stores a ratio outside that range, so {gte: 200} matches nothing at all, and the extremes are dominated by parcels whose true ratio was merely clipped to the bound; the response returns those as null, but this filter still selects them. And the underlying value is not a dependable per-loan ratio — two thirds of parcels with several mortgages store an identical figure across loans of very different amounts (see loans[].ltv, deprecated). For selecting on borrower position prefer equityPct, which has neither limitation.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
loanMatchModeenum

How the loan-slot filters combine across a parcel's 5 cached loans. correlated (default): ONE loan (any slot) must satisfy ALL loan-slot conditions. most_recent: only the newest loan (loan_1). any: each condition may be satisfied by a different loan. none: ignore loan-slot filters. Honored on list, bulk-delivery, and bulk-enrich.

Options:correlatedmost_recentanynone
loanModeledInterestRateone of | null

Per-loan MODELED rate (loan_N.modeled_interest_rate). Low-biased, effectively caps near 7% — not a note rate. Use recordedInterestRate for the recorded rate.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
loanOriginatorone of | null

Per-loan originator NMLS id (digits only) on the parcel's loans. For all-time attribution across the parcel use loNmls.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanOriginatorNameone of | null

DEPRECATED — fuzzy name matching is unreliable (same originator can return wildly different counts by name string). Resolve the loan officer via instantSearch and filter by loanOriginator (exact NMLS id) instead. Still functional for now.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanOriginatorNameContainsone of | null

Loan officer name on the loan, case-insensitive contains. Prefer loanOriginator (NMLS id).

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanRecordedDateone of | null
Show child attributes
Option 1string

Exact date, or a whole period: YYYY-MM-DD (that day), YYYY-MM (the whole month — "2025-06" = 2025-06-01 through 2025-06-30) or YYYY (the whole year). YYYYMMDD, MM/DD/YYYY, an ISO-8601 datetime and epoch milliseconds are also accepted. An unparseable value is a 400.

Option 2object

Date range. Excludes null/missing-field docs by default; add includeNulls: true to keep them. Bounds accept YYYY, YYYY-MM, YYYY-MM-DD, YYYYMMDD, MM/DD/YYYY, a full ISO datetime or epoch milliseconds; an unparseable bound is a 400. A partial bound denotes the whole period and expands to the edge that preserves the operator: gte/lt take the period START, gt/lte take the period END — so {gte: "2024"} means on/after 2024-01-01 and {lte: "2024"} means through 2024-12-31.

Show child attributes
gtstring
gtestring
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires a bound.

ltstring
ltestring
loanTransactionTypeone of | null
Show child attributes
Option 1enum

One of (case-insensitive): purchase, refinance, equity, construction, non_residential

Options:purchaserefinanceequityconstructionnon_residential
Option 2enum[]

Match any of these values

Options:purchaserefinanceequityconstructionnon_residential
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loanTypeone of | null
Show child attributes
Option 1enum

One of (case-insensitive): va, fha, conventional, usda, home_equity, heloc, reverse, commercial, building, standalone_refi

Options:vafhaconventionalusdahome_equityhelocreversecommercialbuildingstandalone_refi
Option 2enum[]

Match any of these values

Options:vafhaconventionalusdahome_equityhelocreversecommercialbuildingstandalone_refi
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
lotSquareFeetone of | null

Lot size in square feet (e.g. {gte: 5000}). ~85% coverage; unmeasured parcels are excluded by default — pass includeNulls: true to add them back. lotSquareFeet: 0 matches nothing (the response returns null).

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
lowModIncomeTractboolean

Parcel sits in a low- or moderate-income tract under the Community Reinvestment Act (34,010,153 parcels). tractIncomeLevel is the four-way form of the same classification. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

majorityMinorityTractboolean

Parcel sits in a majority-minority tract (38,745,783 parcels). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

milesToCollegeone of | null

Straight-line distance from the parcel to the nearest college, in miles. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
milesToSchoolone of | null

Straight-line distance from the parcel to the nearest school, in miles. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
milesToWorshipone of | null

Straight-line distance from the parcel to the nearest place of worship, in miles. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
modeenum
Options:andor
mortgageBalanceone of | null
Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
opportunityZoneboolean

Parcel sits in a federally designated Opportunity Zone tract (10,277,168 parcels). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

ownerNameone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
ownerOccupancyone of | null

Assessor owner-occupancy flag, bucketed: "owner_occupied", "probable_owner_occupied", or "not_flagged" (the assessor did not flag the parcel — where non-owner-occupied/investor parcels land). Accepts one value or an array (any-of). For investor targeting use {ownerOccupancy: "not_flagged", absenteeOwner: true}, optionally with ownerType: "entity".

Show child attributes
Option 1enum

One of (case-insensitive): owner_occupied, probable_owner_occupied, not_flagged

Options:owner_occupiedprobable_owner_occupiednot_flagged
Option 2enum[]

Match any of these values

Options:owner_occupiedprobable_owner_occupiednot_flagged
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
ownerTypeone of

Owner vesting type (any-of); individual = neither entity nor trust.

Show child attributes
Option 1enum
Options:entitytrustindividual
Option 2enum[]
Options:entitytrustindividual
preSaleLoanCountone of | null

Mortgages excluded from activeLoanCount because the parcel sold after they were recorded — the seller's loan, assumed paid off at closing. Use it to separate the two meanings of activeLoanCount: 0: {activeLoanCount: {lte: 0}, preSaleLoanCount: {lte: 0}} returns parcels where nothing was excluded, so the zero is backed by the record; {activeLoanCount: {lte: 0}, preSaleLoanCount: {gte: 1}} returns the parcels where it is not. On its own a non-zero value is unremarkable — most recently-sold parcels have one and also carry a current mortgage.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
programEligibilityenum

Restrict to parcels whose value estimate falls within this loan program's county price limit — an eligibility band (value ceiling). Pair with fips to resolve the county's limit; with no county context the national baseline applies. Parcels without a value estimate are excluded. This is a price band only — no borrower income, payment, or DTI is considered.

Options:fhaconforming
recordedInterestRateone of | null

Genuine RECORDED note rate from the parcel's active loan(s) (~7% coverage, concentrated on the most-recent loan). Percent input (e.g. 7 means 7%).

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
ruralTractboolean

Parcel sits in a rural tract (29,289,319 parcels). Thinner coverage than the other flags — stamped on 111.9M of 161.1M parcels, and a parcel with no value is dropped by either true or false. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

saleCountone of | null
Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
salePropensityone of | null

Likelihood the parcel sells in the near term, as a 0–100 score (e.g. {gte: 80} for the most likely to sell). NOT a fraction — {gte: 0.8} matches nearly every scored parcel. salePropensityCategory is the bucketed form of the same signal.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
salePropensityCategoryone of | null
Show child attributes
Option 1enum

One of (case-insensitive): High, Medium, Low

Options:HighMediumLow
Option 2enum[]

Match any of these values

Options:HighMediumLow
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
squareFeetone of | null

Building area in square feet (e.g. {gte: 1500}). ~68% coverage; unmeasured parcels are excluded by default — pass includeNulls: true to add them back. squareFeet: 0 matches nothing (the response returns null).

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
stateone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
tractApplicationsone of | null

Mortgage applications reported in the tract over the year, as a count. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractAsianPctone of | null

Asian (non-Hispanic) share of the tract's population, 0-100. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractBlackPctone of | null

Black (non-Hispanic) share of the tract's population, 0-100. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractCountyCodeone of | null

Three-digit county FIPS code of the tract (county-within-state, NOT the 5-digit county/fips key). Pass with tractStateCode and tractId to pin one neighborhood. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
tractDenialRateone of | null

Share of the tract's mortgage applications that were denied, 0-100 (e.g. {gte: 25} for 25%+). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractFamilyIncomeone of | null

Median family income of the tract, in whole dollars (e.g. {lte: 60000}). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractFloodZoneone of | null
Show child attributes
Option 1enum

One of (case-insensitive): A, AE, AH, AO, A99, V, VE

Options:AAEAHAOA99VVE
Option 2enum[]

Match any of these values

Options:AAEAHAOA99VVE
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
tractHispanicPctone of | null

Hispanic or Latino share of the tract's population, 0-100. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractHomeownershipRateone of | null

Owner-occupied share of the tract's housing units, 0-100. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractHouseholdIncomeone of | null

Median household income of the tract, in whole dollars (e.g. {gte: 120000}). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractIdone of | null

Six-digit tract code. A tract code REPEATS in every state and county, so this only identifies a neighborhood when passed ALONGSIDE tractStateCode and tractCountyCode — on its own it matches roughly 75× too many parcels. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
tractIncomeLevelone of | null
Show child attributes
Option 1enum

One of (case-insensitive): low, moderate, middle, upper

Options:lowmoderatemiddleupper
Option 2enum[]

Match any of these values

Options:lowmoderatemiddleupper
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
tractIncomeVsMetroPctone of | null

Tract income relative to its metro area, where 100 is parity — {lt: 80} is the CRA low/moderate band and values legitimately exceed 100 (observed up to 412). NOT a 0-100 share. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractLoanVolumeone of | null

Mortgage dollar volume reported in the tract over the year, in whole dollars. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractMedianAgeone of | null

Median age of the tract's population, in years. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractMedianHomeValueone of | null

Median home value across the tract, in whole dollars. A neighborhood statistic — the parcel's own value estimate is avmValue. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractMinorityPctone of | null

Non-white share of the tract's population, 0-100 (e.g. {gte: 50} for majority-minority; majorityMinorityTract is the flag form). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractOriginationsone of | null

Mortgage originations reported in the tract over the year, as a count. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractPopulationone of | null

Total population of the tract. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractPovertyRateone of | null

Share of the tract's population below the poverty line, 0-100 (e.g. {gte: 20} for 20%+). Pass whole percents — {gte: 0.2} means 0.2% and matches almost every tract. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractRuralGradientone of | null

Remoteness of the tract on an ORDINAL 1-10 scale (1 = metropolitan core, 10 = most remote). This is a code, not a percent — {gte: 7} selects the most remote tracts. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
tractStateCodeone of | null

Two-digit state FIPS code of the tract. Pass with tractCountyCode and tractId to pin one neighborhood. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
tractWhiteNonHispanicPctone of | null

White (non-Hispanic) share of the tract's population, 0-100. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
usdaEligibleTractboolean

Parcel sits in a tract eligible for USDA rural housing programs (70,637,816 parcels). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

yearBuiltone of | null
Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
zipone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
zipCodeone of | null

ZIP code. Canonical key (matches loans zipCode and the response DTO); zip is a legacy alias kept for back-compat.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
paginationobject
Show child attributes
cursorstring

Opaque cursor from previous response for next page

sizeinteger

Page size (1-100, default 25)

sortobject[]
Show child attributes
fieldenumrequired
Options:addresscitystatezipCodezipapnfipsownerNamebedssquareFeetlotSquareFeetyearBuiltavmValueavmConfidenceequityequityPctsalePropensitysalePropensityCategoryforeclosureStatusforeclosureStageforeclosureDateborrowerStatusloanCountactiveLoanCount+16 more
missingenum

Where rows without a value go (default last in both directions). first with asc / last with desc treats blanks as the smallest value.

Options:firstlast
orderenum
Options:ascdesc

Responses

200objectPaginated list of properties
Show attributes
cursorstring
dataobject[]required
Show child attributes
absenteeOwnerboolean | null

true when the owner's mailing address (street + 5-digit zip, case/punctuation-insensitive) differs from the property's site address — a non-owner-occupied/investor signal; false when the owner mails to the property; null when either address is missing. Filterable.

activeLoanCountnumber | null

Mortgages believed to still be outstanding. IMPORTANT: 0 does not always mean the parcel is paid off — on a recently-sold parcel it usually means the buyer's new mortgage has not reached the public record yet, so the honest reading is UNKNOWN. Check activeLoanCountKnown before treating a 0 as fact, and do not infer 100% equity from it.

activeLoanCountKnownboolean

false when activeLoanCount reflects a gap in the record rather than a measurement — the parcel sold, its prior mortgage was excluded, and no replacement has been recorded yet. On those parcels activeLoanCount: 0, mortgageBalance: 0 and an equity of 100% are all consequences of the same missing document, not independent findings. To exclude them, filter preSaleLoanCount: {lte: 0} alongside activeLoanCount: {lte: 0}.

addressstring | null
apnstring | null

Assessor parcel number (cleaned)

avmobject | null
Show child attributes
confidencenumber | nullrequired

0–100

highnumber | nullrequired
lownumber | nullrequired
midnumber | nullrequired
bathsnumber | null
bedsnumber | null
borrowerStatusstring | null
borrowersobject[]

Borrowers on the current mortgage (up to two); not the owner of record.

Show child attributes
firstNamestring | nullrequired
lastNamestring | nullrequired
citystring | null
coordinatesobject | null
Show child attributes
latnumberrequired
lonnumberrequired
countyNamestring | null

County name, lowercase ("catawba county").

currentOwnerNamestring | null

The assessor's owner-of-record line as recorded — every owner on title.

equityobject | null
Show child attributes
pctnumber | nullrequired

Equity as a FRACTION of the value estimate — 1 is the whole value, 0.5 is half. A 1 alongside activeLoanCountKnown: false is arithmetic on a missing mortgage, not a free-and-clear parcel.

valuenumber | nullrequired

Estimated equity in whole dollars — the value estimate minus the outstanding balance of the mortgages we know about. It inherits their completeness: when activeLoanCountKnown is false there is no known balance to subtract, so this equals the full value estimate and should NOT be read as equity.

equityPlausibleboolean

false when equity is outside the range our equity metrics treat as possible, so aggregate equity figures exclude this parcel while this row still shows it — both are correct, they are answering different questions. Applies to pct as well, since that is value divided by the value estimate. Read alongside activeLoanCountKnown, which is the opposite failure: that one flags equity computed against a MISSING mortgage (so equity looks too GOOD), where this one flags equity distorted by an oversized one (equity looks too BAD).

fipsstring | null

FIPS county code

foreclosureobject
Show child attributes
datestring | nullrequired

Recording date of the most recent foreclosure notice (ISO 8601) — the value the foreclosureDate filter matches. Null when the parcel has no notice.

matchedbooleanrequired
scheduledAuctionDatestring | nullrequired
stagestring | nullrequired

Stage code of the most recent recorded foreclosure notice (e.g. "ND", "NS") — the value the foreclosureStage filter matches. Null when the parcel has no notice.

statusstring | nullrequired

e.g. "in_foreclosure" or "unknown"

idstringrequired

Document ID

loanCountnumber | null

Every mortgage on record for this parcel, current or not. Splits into activeLoanCount + preSaleLoanCount + the paid-off and released counts on the detail position block.

loanTypestring | null
loansobject[]

The parcel's cached top-5 loans (may be fewer than loanCount; full history is on the loans index).

Show child attributes
amountnumber | nullrequired
amountPlausibleboolean

false when amount is outside the range our mortgage metrics treat as possible, so aggregate totals exclude this loan while this row still shows it. Usually an institutional blanket loan — one note recorded against every parcel in a pool — which is a real record but not this property's debt. This judges SIZE only, so true means the amount is a believable one, not that it is the right one.

borrowerStatusstring | nullrequired
brokerNmlsstring | nullrequired
companyNamestring | null

Funding-company name as recorded on the loan.

companyNmlsstring | nullrequired
currentBalancenumber | nullrequired
interestRatenumber | nullrequired
lenderIdstring | nullrequired

Lender id for this loan — pass it back as loanLender to select every parcel financed by the same lender, exactly as a chart bucket's id round-trips. null when this loan carries no lender id; use lenderName with loanLenderName in that case.

lenderNamestring | nullrequired

Lender name as recorded on the loan document — the same value /v1/loans returns as lenderName for this loan. To filter parcels by it, pass it as loanLenderName; lenderId is the exact-id route.

lenderNmlsstring | nullrequired
loanTypestring | nullrequired
ltvnumber | nullrequired

DEPRECATED — do not use; will be removed in a future major. This is not a reliable loan-to-value ratio. It is NOT per-loan: two thirds of parcels carrying several mortgages report an identical figure across loans of very different amounts, so per-loan equity computed from it is wrong. Nor does it consistently track the parcel's combined position, so it cannot be read as a whole-parcel ratio either. null when unknown — the stored value is clipped to a fixed range and both ends mean "clipped" rather than a real ratio, so they are returned as null rather than as a plausible-looking number. For a dependable measure of borrower position use equity on the parcel.

originatorNamestring | nullrequired
originatorNmlsstring | nullrequired
recordedInterestRatenumber | nullrequired
recordingDatestring | nullrequired
transactionTypestring | nullrequired
lotSquareFeetnumber | null
mmPropertyIdstring | null
mortgageBalancenumber | null
mortgageBalancePlausibleboolean

false when mortgageBalance is outside the range our mortgage metrics treat as possible — typically a parcel carrying an institutional blanket loan, where one securitization note is recorded against every property in the pool. Sorting by mortgageBalance puts these first, so check this flag before reading the top of that list as the most heavily mortgaged homes.

ownerFirstNamestring | null
ownerLastNamestring | null
ownerMailingAddressobject | null

Primary owner's mailing address, null when none is recorded.

Show child attributes
citystring | nullrequired
statestring | nullrequired
streetstring | nullrequired
zipstring | nullrequired
ownerMiddleNamestring | null
ownerNamestring | null
ownerOccupancyenum

Assessor owner-occupancy flag, bucketed: owner_occupied (owner-occupied, incl. the vendor's phased-out non-residential code), probable_owner_occupied, or not_flagged (the assessor did not flag the parcel — not proof of an investor, but where non-owner-occupied/investor parcels land; pair with absenteeOwner). Filterable.

Options:owner_occupiedprobable_owner_occupiednot_flagged
ownerOccupiedboolean | null

true only on the assessor's confident owner-occupied code ("Y"); null = not flagged / unknown, never false. Kept for compatibility — prefer ownerOccupancy.

partialBathsnumber | null
preSaleLoanCountnumber | null

Mortgages excluded from activeLoanCount because the parcel sold after they were recorded — the seller's loan, assumed paid off at closing. Read this NEXT TO activeLoanCount, never alone: a non-zero value on a parcel that still has an active loan is the normal post-sale state and means the replacement mortgage was recorded. It is only a warning when activeLoanCount is 0, which is what activeLoanCountKnown reports.

recordedInterestRatenumber | null

Genuine recorded note rate from the most-recent loan (sparse, ~7%). See loans[] for per-loan detail.

saleCountnumber | null
salePropensityobject | null
Show child attributes
categorystring | nullrequired

Low/Medium/High

scorenumber | nullrequired

0–100

salesobject
Show child attributes
countnumber | nullrequired
firstDatestring | nullrequired
lastDatestring | nullrequired
lastPricenumber | nullrequired
scoredAtstring | null
squareFeetnumber | null
statestring | null

Two-letter state abbreviation, uppercased (stored lowercase in OS)

storiesnumber | null
yearBuiltnumber | null
zipstring | null
lenderNormalizationsobject[]

How each loanLenderName value resolved against the lender dictionary. Present when a loanLenderName filter was supplied. A matchedVia of unresolved means only the recorded lender string was matched, not the lender's whole name family.

Show child attributes
aliasCountintegerrequired

Stored lender-name variants this id expands to

displayNamestring | nullrequired
idstring | nullrequired

Canonical lender-dictionary id, or null

matchedViaenumrequired

id = the value already WAS a canonical key; alias = a stored lender name; name = matched the display/canonical name; unresolved = fell back to raw text match; degraded = the dictionary could not be consulted.

Options:idaliasnameunresolveddegraded
originalstringrequired

The value the caller sent

totalDocumentsintegerrequired

Loans the dictionary attributes to this id. A small number next to a well-known lender name means the name matched a minor entry.

totalnumberrequired
400objectValidation error
401objectUnauthorized
403objectForbidden (authenticated, but missing required context — e.g. no active organization)
404objectNot found
413objectResponse payload too large — detail endpoint capped to fit Lambda response limits
503objectSearch timed out or the cluster is overloaded — retry after `Retry-After` seconds.