Crexi Real Estate Scraper
Pricing
from $1.00 / 1,000 results
Crexi Real Estate Scraper
Scrapes commercial real estate listings from Crexi.com including property details, pricing, location, images, and investment metrics.
Pricing
from $1.00 / 1,000 results
Rating
5.0
(2)
Developer
Crawler Bros
Maintained by CommunityActor stats
6
Bookmarked
152
Total users
16
Monthly active users
3.5 hours
Issues response
5 days ago
Last modified
Categories
Share
Extract commercial real estate listings from Crexi.com — the largest US marketplace for commercial property. Get property names, addresses, prices, square footage, property types, listing URLs, and high-resolution images, ready for analysis, lead generation, market research, or CRM imports.
The scraper covers all 51 US states (50 + DC) and every commercial asset class — Office, Retail, Industrial, Multifamily, Land, Hotel, Hospitality, Mixed Use, Special Purpose, Healthcare, Self Storage, Mobile Home Park, Senior Housing, Student Housing.
Data path (Aug 2026): Crexi moved its search behind session-gated frontend pages — anonymous browsers no longer receive the
/assets/searchcall. This actor now calls Crexi's public search API directly (api.crexi.com/assets/search), which needs no cookies, no browser, and no proxy. The browser fallback path remains only for resilience if the API is ever blocked.
What you get
For each property listing:
| Field | Description |
|---|---|
property_id | Unique Crexi asset identifier |
name | Listing title (e.g., "Multi-Tenant Office Building") |
property_type | Asset class(es) (e.g., Office, Retail, Land) |
address | Full street address |
city | City name |
state | Two-letter state code |
zip_code | Postal code |
price | Asking / sale price (formatted with $ and commas) |
square_footage | Building or unit size |
images | Array of listing photos (thumbnail URL from the API) |
property_url | Direct link to the Crexi detail page |
description | Listing description (when available) |
brokerage | Listing brokerage name |
listing_status | Status (e.g. On-Market) |
investment_type | Investment classification (e.g. Value Add) |
latitude / longitude | Geocoordinates (when disclosed) |
source | Origin (api) |
Empty fields are omitted from each record so the dataset stays clean.
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
maxProperties | Integer | 100 | Maximum properties to return across all locations / filters. |
scrapeDetails | Boolean | false | When true, enriches each listing via the public detail API (/assets/{id}): details key/value map, full description, net_operating_income, subtypes. |
propertyTypes | Array | [] | Pick one or more from the 14 asset classes. Empty = all types. |
locations | Array | [] | Pick one or more US state codes (e.g., CA) or names (e.g., California). Empty = nationwide. |
minPrice | Integer | — | Minimum asking price in USD. |
maxPrice | Integer | — | Maximum asking price in USD. |
proxy | Object | optional | NOT required — the primary path uses Crexi's public API and works from datacenter IPs. Only needed if you want the browser fallback path (Apify Residential, US). |
Example input — start small
{"maxProperties": 5,"scrapeDetails": false}
Example input — Multifamily, $500K-$5M, full details
{"maxProperties": 50,"scrapeDetails": true,"propertyTypes": ["Multifamily"],"minPrice": 500000,"maxPrice": 5000000}
Example input — Land in UT (the Aug-2026 regression case)
{"maxProperties": 200,"scrapeDetails": false,"propertyTypes": ["Land"],"locations": ["UT"]}
Example input — Office + Retail in TX and CA
{"maxProperties": 200,"propertyTypes": ["Office", "Retail"],"locations": ["TX", "CA"]}
Example output
{"property_id": "2553937","name": "1476 Major Street","property_type": "Retail, Office, Land","address": "1476 South Major Street, Salt Lake City, Salt Lake County, UT 84115","city": "Salt Lake City","state": "UT","zip_code": "84115","price": "$1,050,000","square_footage": "3,500 SF","images": ["https://map-images.crexi.com/map-images/UT/Salt%20Lake%20City"],"property_url": "https://www.crexi.com/properties/utah-1476-major-street","brokerage": "Newmark Mountain West","listing_status": "On-Market","investment_type": "Value Add","description": "Fantastic Owner/User or Investment opportunity","source": "api"}
Use cases
- Lead generation — Build prospect lists of for-sale CRE inventory by city, state, asset class, or price band.
- Market research — Track inventory volume, price ranges, and asset-class mix across markets.
- Investment analysis — Pull cap-rate-published listings for underwriting comparisons.
- CRM enrichment — Augment broker / owner records with currently listed properties.
- Geographic targeting — Run state-level pulls (e.g., FL, TX, CA) to feed regional dashboards.
- Price-range monitoring — Set
minPrice/maxPriceto capture only assets inside your buy box.
FAQ
Do I need a proxy? No. The primary data path calls Crexi's public search API directly and works from datacenter IPs with no proxy, cookies, or browser. The browser fallback (only used if the API is unreachable) does require the RESIDENTIAL group.
Can I filter by city?
Filtering is at the state level (locations: ["FL"]). To narrow by city, run a state-level scrape and post-filter on the city field.
Why does propertyTypes sometimes return mixed types?
Crexi tags many listings with multiple asset classes — for example, a building can be both Office and Land. The scraper returns properties that include the requested type in their tag list, and always applies a strict client-side confirmation so every record actually contains the requested type and state.
Why are some listings priced "Negotiable" or missing a number?
Crexi lets sellers hide the asking price. Records without a numeric price are still emitted, with the price field omitted, when no price filter is set. If minPrice or maxPrice is provided, listings without a numeric price are excluded so the price filter remains accurate.
Is there a run timeout to configure? No. The primary path (public API) typically finishes in seconds; the actor manages its own internal safety budget — there is nothing to configure.
What if the Crexi API is ever blocked?
The actor falls back to the browser path (up to three residential sessions, when a proxy is configured). If all attempts fail it exits successfully and writes a single record { "type": "crexi_blocked", "reason": "...", "scrapedAt": "..." } so downstream pipelines can detect the block and re-run.
How current is the data? Live — every run hits Crexi at request time. Schedule the actor on the Apify platform for daily / hourly refreshes.
Can I scrape closed / sold / off-market properties? The actor returns currently active for-sale listings on Crexi. Sold or off-market properties are not exposed publicly.
Limitations
- Only publicly listed properties are scraped — no auth-gated or off-market data.
- Crexi can change its API or page structure; if a particular field disappears the actor will continue but may emit fewer columns.
- City-level URL filtering is not supported (state level is). Filter on
cityafter the fact. - Sold / closed listing history is not in scope.