Crexi
Crexi
/crexi/v1/search1 creditSearch the FOR-SALE commercial listings on crexi.com. Give a market — city plus state, a county, a ZIP code or a whole state — and narrow it with the filters Crexi itself publishes: property type, asking price range, building size, lot acreage, cap rate, year built and opportunity-zone status. Every row carries the asking price in USD with an explicit status, the property types, the building size, the brokerage, the full geocoded address and the live crexi.com URL. Listings whose price the broker did not publish are included by default and say so; set include_unpriced to false for priced listings only. Page with offset. A market with no matching listing answers an honest empty result, not an error.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| city | optional | — | City name as Crexi spells it, e.g. 'Austin', 'Los Angeles', 'Fort Worth'. Pair it with `state` — a bare city name matches that city in EVERY state (Austin alone returns Austin TX and Austin MN together). |
| state | optional | — | Two-letter US state code (TX, CA, NY…). Works on its own for a whole-state sweep and narrows `city` when both are given. |
| county | optional | — | County name, e.g. 'Travis'. Crexi stores county names exactly as the listing agent typed them, so spelling varies between listings; `city` + `state` is the more reliable market filter. |
| zip_code | optional | — | Five-digit US ZIP code. The tightest geography filter Crexi publishes. |
| query | optional | — | Free-text search across the listing name, description and address — the same box Crexi's own header search uses. It is NOT a location filter: 'Austin, TX' also matches a San Antonio listing whose text mentions Austin. Use `city`/`state`/`zip_code` for geography and `query` for a tenant, a brand or a building name. |
| property_types | optional | Retail · Office · Industrial · Multifamily · Land · Mixed Use · Hospitality · Special Purpose · Business for Sale · Note/Loan · Self Storage · Health Care | Crexi's own top-level property categories. Several may be given and the listing matches if it carries ANY of them. A value Crexi does not know is rejected by the source, so a typo fails loudly rather than silently returning everything. |
| price_min | optional | 0– | Lowest asking price in USD. Listings with no published price are not excluded by this filter — set `include_unpriced` to false if you want only priced listings. |
| price_max | optional | 0– | Highest asking price in USD. |
| size_min | optional | 0– | Smallest building size in square feet. |
| size_max | optional | 0– | Largest building size in square feet. |
| acres_min | optional | 0– | Smallest lot size in acres — the size filter that matters for Land listings, which are the single biggest category on Crexi. |
| acres_max | optional | 0– | Largest lot size in acres. |
| cap_rate_min | optional | 0–100 | Lowest capitalisation rate, in percent (7.5 means 7.5%). Only investment listings publish a cap rate, so this filter also removes the ones that do not. |
| cap_rate_max | optional | 0–100 | Highest capitalisation rate, in percent. |
| opportunity_zone_only = false | optional | — | Return only listings inside a federal Qualified Opportunity Zone. |
| include_unpriced = true | optional | — | Keep the listings whose price the broker did not publish ('contact broker', auctions, offering-memorandum-only deals). They are a large and genuine part of the US commercial market, so they are included by default and come back with price.amount = null and price.status saying why. Set false for priced listings only. |
| limit = 50 | optional | 1–100 | How many listings to return in this call (1-100). One call, one page: Crexi serves the whole page in a single request. |
| offset = 0 | optional | 0–10000 | How many listings to skip before the ones returned — this is how you page. offset=50 with limit=50 is the second page. Crexi ignores every other paging name it is offered, so this is the only one that moves the window. |
/crexi/v1/lease_search1 creditSearch the SPACES FOR LEASE on crexi.com. Same geography filters as `search`, plus the lease-side one: rentable space size. Every row carries the rate range with Crexi's own formatted twin next to the number (so you can cross-check it), the rate type the broker quoted, the rentable square-foot range, how many suites the building has, the brokerage, the geocoded address and the live crexi.com/lease URL. Spaces whose rate the broker withheld are included by default and say so. The lease side is a separate Crexi product with its own listing ids and its own property-type list.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| city | optional | — | City name as Crexi spells it, e.g. 'Austin', 'Los Angeles', 'Fort Worth'. Pair it with `state` — a bare city name matches that city in EVERY state (Austin alone returns Austin TX and Austin MN together). |
| state | optional | — | Two-letter US state code (TX, CA, NY…). Works on its own for a whole-state sweep and narrows `city` when both are given. |
| county | optional | — | County name, e.g. 'Travis'. Crexi stores county names exactly as the listing agent typed them, so spelling varies between listings; `city` + `state` is the more reliable market filter. |
| zip_code | optional | — | Five-digit US ZIP code. The tightest geography filter Crexi publishes. |
| query | optional | — | Free-text search across the listing name, description and address — the same box Crexi's own header search uses. It is NOT a location filter: 'Austin, TX' also matches a San Antonio listing whose text mentions Austin. Use `city`/`state`/`zip_code` for geography and `query` for a tenant, a brand or a building name. |
| property_types | optional | Retail · Office · Industrial · Restaurant · Land · Special Purpose · Flex · Medical · Coworking | Crexi's own top-level space categories on the lease side. The lease and sale category trees are NOT the same list. |
| space_sqft_min | optional | 0– | Smallest rentable space, in square feet. |
| space_sqft_max | optional | 0– | Largest rentable space, in square feet. |
| include_undisclosed_rate = true | optional | — | Keep the spaces whose asking rate the broker withheld. They come back with rate.per_sqft_year_min = null and rate.status = 'undisclosed'. Set false for spaces with a published rate only. |
| limit = 50 | optional | 1–100 | How many listings to return in this call (1-100). One call, one page: Crexi serves the whole page in a single request. |
| offset = 0 | optional | 0–10000 | How many listings to skip before the ones returned — this is how you page. offset=50 with limit=50 is the second page. Crexi ignores every other paging name it is offered, so this is the only one that moves the window. |
/crexi/v1/property_detail1 creditRead one FOR-SALE listing in full: everything the search row carries plus Crexi's own fact table (asking price, property type and sub type, lot size, ground-lease flag, sale condition, and whatever else that listing publishes), the investment highlights and marketing copy as plain text, whether the listing is sold, paused, unpriced, a note/loan or run by an auctioneer, and the brokers with their title, licence number, brokerage and brokerage address. Facts Crexi keeps behind a login come back as null rather than as the row of asterisks the source sends. A listing id that is not live answers NOT_FOUND.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| listing_id | required | — | Crexi's numeric listing id. It is the first number in the listing URL (https://www.crexi.com/properties/2725055/michigan-taco-bell → 2725055) and the `listing_id` of every search row. Sale and lease ids are separate number spaces: a sale id given to lease_detail answers NOT_FOUND, and the other way round. |
/crexi/v1/lease_detail1 creditRead one LEASE listing in full: everything the lease search row carries plus Crexi's building fact table, the building highlights and marketing copy as plain text, and — the reason this action exists — the SUITE TABLE: every available space in the building with its name, rentable square feet, asking rate per square foot, rate type, space subtypes and whether a floor plan is published. A suite whose rate is undisclosed comes back with a null rate, not a zero. Lease ids are a separate number space from sale ids.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| listing_id | required | — | Crexi's numeric listing id. It is the first number in the listing URL (https://www.crexi.com/properties/2725055/michigan-taco-bell → 2725055) and the `listing_id` of every search row. Sale and lease ids are separate number spaces: a sale id given to lease_detail answers NOT_FOUND, and the other way round. |
/crexi/v1/suggest1 creditCrexi's own type-ahead: turn a few typed characters into the things Crexi knows — a listing at that street address (with its listing_id, ready for property_detail), a broker, or a brokerage. Use it to go from an address a user typed to the listing id. It is NOT a place gazetteer: it never returns a city, county or ZIP id, and it is not needed for search — search takes plain city, state, county and ZIP names.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | required | — | What the user typed. Two characters is enough. |
curl -X POST https://api.reefapi.com/crexi/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"city":"Austin","state":"TX","limit":25}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.
Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.
Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.
No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.
Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.