Common filters
These filters work on both/v1/search/rentals and /v1/search/sales:
Rental-only filters
A broker fee is something you pay to rent, so sale listings carry no
broker-fee flag. Sending
noFee to /v1/search/sales returns
400 INVALID_PARAMS rather than matching nothing.
Advanced filters
Detail-only filter coverage
† and ‡ above mark filters that touch detail-only fields: data that only a listing-detail scrape populates, as opposed to the search-feed sweep that keeps most of Borough’s data warm. Currently around 55% of ACTIVE listings have never been detail-scraped — an approximate figure that shifts over time as the backlog drains and new listings arrive, but reliably the majority case, not an edge case; see Detail-only fields and coverage for the full picture. Two consequences follow from that: † Under-return, not exclusion.minSqft/maxSqft, amenities (the
listing-level match), hasOpenHouse=true, has3dTour=true, noFee=true,
and the listedAt-derived filters (minDaysOnMarket, maxDaysOnMarket,
listedAfter, listedBefore, and sort=LISTED_AT or the default
sort=RECOMMENDED) all only match against
data that requires a detail scrape (or, for listedAt, is a feed-first-seen
estimate until one runs). A listing that hasn’t been detail-scraped is
dropped from minSqft/maxSqft/amenities results and cannot satisfy
hasOpenHouse=true/has3dTour=true/noFee=true even if the true value
would have matched. It’s excluded for lack of data, not because it fails
the filter. amenities matching also depends on listing-level amenities
being regex-derived from the listing description, so an amenity the
description never mentions reads as absent, not merely unconfirmed.
sort=LISTED_AT can rank an undetailed listing as newer than it really is,
since its listedAt is only an estimate. Whenever any of these filters (or
sort=LISTED_AT) is used, the response’s meta.warnings array carries a
caveat string naming the specific gap. Check it rather than assuming
meta.total is a population count. The default sort=RECOMMENDED currently
orders by listedAt too, so it has the same ranking caveat, but it does not
add a warning.
† Building-derived filters. minTransitScore, fiberOnly,
minDownloadMbps, the building-level half of amenities, and the building
pet-policy fallback for petsAllowed all read the listing’s building. A
listing is linked to its building only once it is fetched in detail, so an undetailed
listing cannot match any of them. petsAllowed has the same gap from both
sides: the listing’s own pet flag is detail-only, and the building fallback
needs the link. The warnings some of these add (transit, broadband, amenities)
do not mention the building-link gap, and petsAllowed adds no warning.
‡ =false is rejected, not silently ignored. noFee, has3dTour, and
hasOpenHouse are detail-only booleans stored as null until a detail
scrape runs. Borough cannot yet distinguish “confirmed false” from “not yet
checked.” Passing noFee=false, has3dTour=false, or hasOpenHouse=false
returns 400 INVALID_PARAMS rather than the previous behavior of silently
matching every listing (including every undetailed one). Use =true for
confirmed matches, or omit the parameter to search all listings regardless
of that field’s value.
Incremental sync
updatedSince matches listings whose last_seen_at, the time the listing was
last seen in the active feed, is on or after the value you pass. Matching is by
calendar day (UTC); any time component in the value is ignored.
last_seen_at on every listing it sees,
whether or not anything about the listing changed. Any date before the latest
refresh therefore matches nearly the whole active set, and search returns only
ACTIVE listings, so listings that went off-market never appear. To find what
changed or was removed, use webhooks or
watchers, or compare full
result sets between runs.
Each listing also carries sqft and a derived pricePerSqft (rounded to the
nearest dollar) when square footage is known; both are null for listings whose
detail page has not yet been scraped.
Broadband filters are based on Borough’s FCC-backed provider enrichment. Coverage may be exact-building when a listing is attached to a matched FCC location, or Census-block level when sourced from FCC BDC public bulk files. Listings in unmatched buildings or blocks will not satisfy these filters.
This product uses FCC APIs and/or Data but is not endorsed or certified by the FCC.
Not currently supported
These are common requests, but they are not current Borough search filters:prewartransitLines- view-style amenity enums such as
CITY_VIEWorWATER_VIEW
200, so
check your parameter names against this page.
Sale-only filters
Valid values:
RESALE, SPONSOR_UNIT, FORECLOSURE, RESTRICTED, AUCTION, SHORT, UNKNOWN
saleType sent to /v1/search/rentals is ignored (the results are not filtered), unlike noFee on sales, which returns 400.
Sorting
†
RECOMMENDED currently orders by listedAt (recency), the same as LISTED_AT, so both carry the listedAt estimate caveat: see Detail-only filter coverage above. Only sort=LISTED_AT adds the meta.warnings entry.