ListingsFeed

Data dictionary

Every field a listing can carry, its type, where it comes from and how often it is populated across active listings. Empty means the broker did not publish it; we do not backfill from defaults.

FieldTypeDescriptionFilled
hash_idstringStable public id (20 hex chars).100%
brokerageobjectBrokerage {public_id, name, website}.100%
namestringListing title.—
description (fields=all)stringListing description (only with fields=all or fields=description).—
highlights (fields=all)arrayBullet highlights from the listing page.—
addressstringStreet address.—
citystringCity.—
statestringTwo-letter state.100%
zipstringZIP code.—
countystringCounty (subset of listings).—
county_fipsstringCounty FIPS (subset of listings).—
countrystringISO country (US).—
latnumberLatitude.—
lngnumberLongitude.—
listing_typestringsale | lease | sale_lease | unknown (the broker did not state it).100%
transaction_salebooleanTrue when for sale.100%
transaction_leasebooleanTrue when for lease.100%
statusstringactive | under_contract | sold | leased | withdrawn | closed.—
property_typestringland | industrial | office | retail | multifamily | hospitality | special | other.100%
property_subtypestringSource subtype text.—
sale_ask_totalnumberAsking sale price (USD). Null when undisclosed.—
sale_ask_psfnumberAsking price per building SF, derived.—
price_textstringPrice as written by the broker.—
price_upon_requestbooleanTrue when the price is on request / negotiable.—
cap_ratenumberCap rate, percent.—
lease_rate_minnumberLease rate minimum as published (unit not normalized).—
lease_rate_maxnumberLease rate maximum as published.—
lease_typestringNNN, gross, … as published.—
building_sfintegerBuilding square feet.—
land_acresnumberLand size in acres.—
year_builtintegerYear built.—
storiesintegerStories.—
unitsintegerUnits.—
brokersarray[{name, email, phone}] — email/phone on paid plans only.—
linkstringListing page URL.—
brochure_linkstringBrochure / flyer PDF URL.—
photos (fields=all)arrayPhoto URLs (fields=all).—
attributes (fields=all)objectSource key/value attributes (fields=all).—
date_createdstringCreated date on the source, when known.—
date_updatedstringUpdated date on the source, when known.—
first_seenstringFirst observed by ListingsFeed.100%
last_seenstringLast observed by ListingsFeed.100%
updated_atstringLast time the record changed here.100%
is_activebooleanFalse once the broker removed it.100%
superseded_bystringhash_id of the canonical record when this one was merged.—

Vocabularies

property_typeland · industrial · office · retail · multifamily · hospitality · special · other. Mapped from each platform's own labels; the original wording is kept in property_subtype.
listing_typesale · lease · sale_lease (broker offers both) · unknown (not stated on the source page; both transaction flags false, so transaction= filters exclude it). The boolean flags transaction_sale/transaction_lease are derived from it.
statusactive · under_contract · sold · leased · withdrawn · closed, read from the listing title/badges where the broker states it.

Normalization rules

  • Price. sale_ask_total is numeric USD. Feeds often use 0, 1 or a small number as an "undisclosed" placeholder; anything under $1,000 is returned as null and the broker's wording stays in price_text. price_upon_request is true when the text says on request / negotiable / call.
  • Size. building_sf is the building; land_acres is the lot. Some platforms label lot square feet as "acres"; values over 5,000 "acres" are converted (÷43,560). The raw value and unit are kept in land_size_raw/land_size_unit_raw (fields=all).
  • Lease rates. Returned as published; units ($/SF/yr, $/SF/mo, $/mo) are not normalized in v1. Use lease_type and price_text for context.
  • Geography. lat/lng come from the broker's page or the platform's geocode. county and county_fips are being derived from coordinates and are populated for a subset; check the fill rate above.
  • Brokers. Up to 10 per listing, as published. Emails lower-cased; phones as written. Suppressed contacts are removed.
  • Dates. date_created/date_updated are the source's own dates when it exposes them. first_seen/last_seen are ours. updated_at changes only when content changes.
  • Identity. hash_id is stable for the life of a listing. Duplicate detection (same address + type + size; sale and lease records for one property) keeps one canonical row and retires the rest with superseded_by.

Coverage today

Live counts appear here once the first publish run has landed; see GET /v1/stats.