crexi.com APIwww.crexi.com ↗
Search and retrieve Crexi commercial real estate listings. Get property details, cap rates, NOI, occupancy, loan info, and broker contacts via 3 endpoints.
curl -X GET 'https://api.parse.bot/scraper/ac745241-4ec0-46fa-8f98-e9ede92c503a/search_properties?page=1&page_size=3&sort_order=price&property_type=multifamily&sort_direction=Ascending' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for commercial real estate properties by type with pagination. Returns listing summaries including price, cap rate, NOI, location, and broker info.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-based) |
| max_price | number | Maximum asking price filter |
| min_price | number | Minimum asking price filter |
| page_size | integer | Results per page (max 60) |
| sort_order | string | Sort field. Accepted values: rank, price, capRate, activatedOn |
| property_type | string | Property type to filter by. Accepted values: mobile_home_park, retail, office, industrial, multifamily, land, hospitality, self_storage, special_purpose, mixed_use, healthcare, business_for_sale |
| sort_direction | string | Sort direction. Accepted values: Ascending, Descending |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"listings": "array of listing summary objects with id, name, address, city, state, zip, asking_price, cap_rate, noi, property_types, brokerage_name, and more",
"page_size": "integer, results per page",
"total_count": "integer, total number of matching listings",
"total_pages": "integer, total number of pages"
},
"sample": {
"data": {
"page": 1,
"listings": [
{
"id": 2185638,
"noi": null,
"url": "https://www.crexi.com/properties/2185638",
"zip": "75119",
"city": "Ennis",
"name": "749 Stacks Road, Ennis, Texas 75119",
"state": "TX",
"status": "On-Market",
"address": "749 Stacks Rd, Ennis, Ellis County, TX 75119",
"cap_rate": null,
"asking_price": null,
"brokerage_name": "CENTURY 21 Judge Fite Company",
"property_types": [
"Land",
"Mixed Use",
"Mobile Home Park"
]
}
],
"page_size": 3,
"total_count": 961,
"total_pages": 321
},
"status": "success"
}
}About the crexi.com API
The Crexi API exposes 3 endpoints for accessing commercial real estate listings from Crexi.com, covering property types including multifamily, retail, office, industrial, land, and mobile home parks. The search_properties endpoint returns paginated listing summaries with asking price, cap rate, NOI, and broker details, while get_property_detail delivers full property records including occupancy, loan details, and marketing descriptions keyed by Crexi property ID.
Endpoints and Data Coverage
The API covers three operations. search_properties accepts filters for property_type, min_price, max_price, sort_order (rank, price, capRate, activatedOn), and sort_direction, returning paginated results with up to 60 listings per page. Each listing summary includes id, name, address, city, state, zip, asking_price, cap_rate, noi, property_types, and brokerage information. The total_count and total_pages fields let you build pagination logic or estimate market size for a given filter set.
Property Detail
get_property_detail takes a property_id (numeric, sourced from search_properties results) and returns the full record for that listing. Fields include cap_rate, noi, occupancy (as a percentage), asking_price, a details object with human-readable key-value pairs, a brokers array with agent names and brokerage affiliation, and a loan_details object when financing information is available. The details object holds property-specific attributes that vary by listing type.
Bulk Collection
get_all_listings handles multi-page collection automatically. It accepts the same property_type, min_price, and max_price filters as search_properties, plus max_results to cap how many listings are fetched and delay to control the interval between internal page requests. The response includes fetched_count, total_count, and a complete boolean indicating whether the full result set was retrieved or truncated by max_results.
Property Types and Filters
Supported property_type values are: multifamily, retail, office, industrial, land, and mobile_home_park. Price filters (min_price, max_price) apply across all three endpoints that accept them. No geographic filter parameter (state, city, or radius) is currently exposed — all geographic scoping must be done client-side against the city, state, and zip fields in the response.
- Screen commercial investment opportunities by filtering on
cap_rateandnoiacross multifamily or retail listings - Build a CRE deal pipeline tool that pulls fresh listings daily using
get_all_listingswithproperty_typeand price range filters - Aggregate broker contact data from the
brokersarray across hundreds of listings for outreach or market research - Compare asking prices and occupancy rates across office and industrial listings in a target market
- Monitor new listings by sorting
search_propertiesbyactivatedOnin descending order - Enrich a CRE database with loan details and property descriptions from
get_property_detailusing IDs collected from search - Estimate available inventory and price distribution for a property type using
total_countand paginated price-filtered queries
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Crexi have an official developer API?+
What does `get_property_detail` return that `search_properties` does not?+
get_property_detail returns fields not present in listing summaries: a details object with human-readable property attributes, a loan_details object with financing information (when available), the occupancy percentage, and a full brokers array with agent first name, last name, and brokerage name. The search endpoint returns a subset of these for performance.Can I filter listings by city, state, or geographic radius?+
property_type, min_price, max_price, and sort controls. City, state, and zip are returned in each listing's response fields, so geographic filtering must be applied client-side. You can fork this API on Parse and revise it to add a location-based filter parameter.Does the API cover sold or off-market properties?+
How does pagination work across the three endpoints?+
search_properties uses explicit page and page_size (max 60) parameters and returns total_pages so you can iterate manually. get_all_listings handles pagination automatically and returns a complete boolean and fetched_count to confirm how many listings were actually retrieved. Use max_results on get_all_listings to stop early if you only need a sample.