LoopNet
US commercial property for lease, for sale and at auction: offices, retail, industrial, land, multifamily and shopping centres.
/loopnet/v1/search2 creditsCommercial listings in a market. Give a `location` ('Austin, TX', '78704', 'Downtown Austin') or a `location_id` from the `location_search` action, and pick a `transaction` (for_lease, for_sale or auction). Every filter offered here was proven to narrow the result set against an unfiltered control; the ones LoopNet accepts and ignores are deliberately not offered. `total_results` is the source's own count and saturates at 750 — `total_is_capped` tells you when it did.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| location | optional | — | Where to search: a US market ('Austin, TX'), a LoopNet submarket ('CBD - Austin, TX'), a county ('Travis County, TX'), a state ('Texas'), a ZIP code ('78704'), a street address, or 'usa' for a nationwide search. Resolved through LoopNet's own geography service, which recognises ITS submarket names rather than every local nickname — run the `location_search` action first to see what it matches, and pass the `location_id` of the one you want. An address is widened by LoopNet to the area around it, and the response says so. |
| location_id | optional | — | A geography id from the `location_search` action, used ALONGSIDE `location` to pick which of the matches to search. LoopNet's geography service is searched by text, so the text is still required; the id only decides which match wins (e.g. location='Austin, TX' with location_id='251' searches the CBD submarket). |
| transaction = for_lease | optional | for_lease · for_sale · auction | Which side of the market to search. The filters available differ between them — rent, space size and lease type only exist for lease; price, cap rate, unit count, lot size and year built only exist for sale. |
| property_type | optional | — | Property types to keep, from LoopNet's own category tree. For lease: office, industrial, retail, flex, medical, restaurant, lab, land, coworking. For sale: office, industrial, retail, shopping-center, multifamily, specialty, health-care, hospitality, sports-entertainment, land, residential-income, restaurant, lab. A type that does not exist on the chosen side is rejected rather than ignored. |
| page = 1 | optional | 1–30 | Which page of 25 listings to return. The source serves 25 per page and will page through at most 30. |
| limit = 25 | optional | 1–100 | How many listings to return, up to 100. The source serves 25 per page and each page is a large document, so a bigger limit costs one upstream page per 25. Use `page` to walk further — the source itself stops at page 30. `all_listing_ids` already returns every id in the result set (up to 750) in the FIRST call, so paging is only needed for the rows. |
| sort = default | optional | default · price_low_to_high · price_high_to_low | Result order, applied BY THE SOURCE. Only the orders whose effect could be verified against the published figures are offered here. |
| min_price | optional | 0– | Lowest asking SALE price in USD. For-sale searches only — LoopNet has no price filter on the lease side. |
| max_price | optional | 0– | Highest asking SALE price in USD. For-sale searches only. |
| min_rent | optional | 0– | Lowest asking rent, in dollars per square foot per year. FOR-LEASE searches only. Listings that publish no rent (very common — 14 of 25 rows in the measured Austin page) cannot match a rent filter. |
| max_rent | optional | 0– | Highest asking rent in dollars per square foot per year. For-lease searches only. |
| min_building_size | optional | 0– | Smallest building size, in `size_unit`. |
| max_building_size | optional | 0– | Largest building size, in `size_unit`. |
| size_unit = sf | optional | sf · sm | Unit for the building and space-size filters. |
| min_space_available | optional | 0– | Smallest available space, in `size_unit`. FOR-LEASE searches only — on the sale side LoopNet accepts this and does not apply it, so it is not sent. |
| max_space_available | optional | 0– | Largest available space, in `size_unit`. For-lease only. |
| min_lot_size | optional | 0– | Smallest lot size, in `lot_size_unit`. FOR-SALE searches only. |
| max_lot_size | optional | 0– | Largest lot size, in `lot_size_unit`. For-sale only. |
| lot_size_unit = ac | optional | ac · ha · sf | Unit for the lot-size filter. |
| min_year_built | optional | 1700–2100 | Earliest year built. FOR-SALE searches only — the lease side accepts the value and ignores it. |
| max_year_built | optional | 1700–2100 | Latest year built. For-sale only. |
| min_cap_rate | optional | 0–100 | Lowest capitalisation rate, in percent. For-sale only. |
| max_cap_rate | optional | 0–100 | Highest capitalisation rate, in percent. For-sale only. |
| min_units | optional | 0– | Fewest units (multifamily and similar). For-sale only. |
| max_units | optional | 0– | Most units. For-sale only. |
| keywords | optional | — | Free-text keyword the listing must match. Proven to narrow (750 → 227 for 'warehouse'); a keyword with no matches returns an empty result set, not an error. |
| sublease_only = false | optional | — | Keep only sublease listings. For-lease searches only. |
| net_leased_only = false | optional | — | Keep only net-leased investments. For-sale only. |
/loopnet/v1/property_detail2 creditsOne listing by id or URL: the asking figure with its SHAPE, property type and subtype, building and lot size, year built and renovated, units, cap rate, NOI where published, zoning, address and coordinates, photos, the marketing description, every available space with its own size, term and rate, and the brokers with their firms. `detail_level` says whether the deep record came back ('full') or only the listing-card record ('placard') — see the API notes.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| listing_id | required | — | The LoopNet listing id (the number at the end of the listing URL) or the full listing URL. |
/loopnet/v1/listings1 creditUp to 30 listing ids in ONE upstream call. Each row carries the address, city, state, ZIP, property type, the asking figure with its shape and the lead photo — the compact record, not the deep one. Use it to price or re-check a saved set of ids; use `property_detail` when you need the facts table, the spaces or the coordinates.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| listing_ids | required | — | Listing ids or listing URLs, up to 30. Ids the source does not return are listed in `missing` rather than silently dropped. |
/loopnet/v1/location_searchfreeTurn a typed place into the geography LoopNet's search takes: the id, the type (state, city, postal_code, submarket, county, country — or property/address/building for a single site), the coordinates and the bounding box. `searchable` says whether a search can be scoped to that row: only the area types carry a bounding box. Pass a row's `location_id` back to `search` alongside the same `location` text to pick that match instead of the top one.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | required | — | What was typed: a city, a county, a ZIP code, a neighbourhood or a street address. |
| limit = 12 | optional | 1–25 | How many matches to return. |
curl -X POST https://api.reefapi.com/loopnet/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"location":"Austin, TX","transaction":"for_lease","property_type":["office"],"limit":25}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}