Crexi Commercial Real Estate Scraper
Pricing
Pay per event
Crexi Commercial Real Estate Scraper
🏢 Export public Crexi listings with prices, locations, sizes, property types, brokerages, images, financial fields, and timestamps.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Export public commercial property listings from Crexi into clean JSON, CSV, Excel, XML, or RSS data.
Use any filtered Crexi search URL to collect property IDs, listing links, names, addresses, asking prices, sizes, property types, brokerages, images, investment fields, and timestamps. The Actor talks to Crexi's public listing API, so routine searches are fast and do not require a browser or Crexi account.
What does Crexi Commercial Real Estate Scraper do?
The Actor converts public Crexi search results into one structured dataset row per property.
It can:
- 🏢 scrape sale and lease inventory from public Crexi searches
- 📍 preserve location, city, state, ZIP, county, and coordinates
- 💰 extract asking price, cap rate, NOI, size, and investment type when public
- 🤝 collect public brokerage and broker metadata
- 🖼️ retain listing thumbnails and public image metadata
- 🔄 paginate large searches and remove duplicate property IDs
- 🧾 preserve the source API payload for advanced analysis
- ⏱️ add source and scrape timestamps for monitoring workflows
Who is it for?
Commercial real estate investors
Build acquisition lists, compare asking prices, and screen opportunities by market or property type.
Brokers and business-development teams
Track active inventory, identify listing brokerages, and organize prospecting research.
Appraisers and lenders
Collect current asking-price and property-size evidence for market snapshots and underwriting research.
Market-data and analytics teams
Create repeatable inventory feeds for dashboards, warehouses, alerting systems, and historical comparisons.
Developers
Integrate public Crexi listings through the Apify API without maintaining pagination and normalization code.
Why use this Crexi scraper?
- Search URL support: configure filters on Crexi and paste the resulting URL.
- Fast HTTP extraction: no full browser is required for normal listing searches.
- Stable identifiers: deduplication uses Crexi property IDs.
- Partial-result safety: search rows are retained if optional detail enrichment fails.
- Data lineage: each row includes its source search URL and collection time.
- Raw payload access: newly exposed Crexi fields remain available in
raw. - Scheduled monitoring: run daily or weekly and compare datasets over time.
What data can you extract?
| Field | Description |
|---|---|
propertyId | Stable Crexi property ID |
url | Public property listing URL |
name | Listing or property name |
description | Public listing summary |
status | Listing status, such as On-Market or Auction |
propertyTypes | Commercial property categories |
askingPrice | Public asking price |
squareFootage | Public building or offering size |
capRate | Public capitalization rate when available |
netOperatingIncome | Public NOI when available |
investmentType | Investment profile, such as Value Add |
location | Address, city, county, state, ZIP, and coordinates |
brokerageName | Public listing brokerage |
brokers | Public broker metadata from detail enrichment |
thumbnailUrl | Primary listing image |
images | Public image metadata from detail enrichment |
activatedOn | Listing activation timestamp |
updatedOn | Listing update timestamp |
scrapedAt | Actor collection timestamp |
sourceUrl | Crexi search URL that produced the record |
raw | Complete public source payload |
Fields may be absent when a listing owner does not publish that information.
How to scrape Crexi listings
- Open the public Crexi properties search.
- Apply location, property-type, price, and other filters.
- Copy the resulting
/propertiesURL. - Paste it into Crexi search URLs.
- Choose the maximum number of listings.
- Enable detail enrichment only when you need additional public fields.
- Click Start.
- Export the dataset in your preferred format.
Input
{"searchUrls": ["https://www.crexi.com/properties?types%5B%5D=Retail"],"maxItems": 100,"fetchDetails": false,"pageSize": 60,"sortOrder": "rank"}
Input options
| Option | Type | Default | Purpose |
|---|---|---|---|
searchUrls | string array | Retail search | Public Crexi property search URLs |
maxItems | integer | 100 | Global maximum unique listings |
fetchDetails | boolean | false | Request each public property detail endpoint |
pageSize | integer | 60 | Listings requested per API page |
sortOrder | string | rank | Relevance, newest, price, or cap-rate ordering |
Output example
{"propertyId": 2558765,"url": "https://www.crexi.com/properties/2558765/alabama-vacant-freestanding-qsr-w-drive-thru","name": "Vacant Freestanding QSR w Drive-Thru","status": "Auction","propertyTypes": ["Retail"],"askingPrice": 25000,"squareFootage": 1130,"investmentType": "Value Add","location": {"city": "Birmingham","state": { "code": "AL", "name": "Alabama" },"zip": "35218"},"brokerageName": "Diversified Realty Exchange","updatedOn": "2026-07-09T21:07:20.598Z","sourceUrl": "https://www.crexi.com/properties?types%5B%5D=Retail"}
Search URL examples
Retail inventory
https://www.crexi.com/properties?types%5B%5D=Retail
Multiple property types
Use Crexi's interface to select multiple types, then copy the complete URL. Repeated query keys such as types[] are retained as arrays.
Location-specific search
Choose a city, county, state, or map region on Crexi. The resulting placeIds[], map center, and related public filters are forwarded to the listing API.
Optional detail enrichment
Set fetchDetails to true to request the public asset endpoint for every listing.
This may add:
- broker arrays
- cap rate and NOI
- gallery metadata
- property descriptions
- investment and occupancy details
- additional public listing attributes
Enrichment increases request count and runtime. If a detail request fails, the Actor still stores the useful search result.
How much does it cost to scrape Crexi listings?
This Actor uses pay-per-event pricing: a small start charge plus a charge for each property saved. The exact amount is shown in the Apify Console before a run and decreases on higher platform tiers.
You control cost with maxItems. Start with 20 records, verify the fields, and then scale to the inventory volume you need.
Tips for reliable results
- Use a focused Crexi search URL for precise market exports.
- Keep
fetchDetailsoff if search-level fields are sufficient. - Use stable property IDs when comparing runs.
- Schedule focused searches instead of repeatedly exporting the entire national feed.
- Keep the
rawfield when building long-lived pipelines. - Expect optional financial fields to vary by listing.
Listing monitoring workflow
- Save a filtered search input as an Apify Task.
- Schedule the Task daily or weekly.
- Send datasets to cloud storage or a webhook.
- Match records by
propertyId. - Compare
askingPrice,status, andupdatedOn. - Alert when properties appear, disappear, or change.
Lead sourcing workflow
Export name, location, propertyTypes, brokerageName, url, and public broker metadata. Filter the dataset for your market, then import qualified rows into a CRM for human review.
Do not use the Actor to send unsolicited messages or circumvent access controls.
Integrations
Google Sheets
Use the Apify Google Sheets integration to create a searchable CRE inventory table.
Airtable
Upsert rows by propertyId and add internal underwriting or outreach status fields.
Make and Zapier
Trigger automations when scheduled runs complete or when a matching property enters the dataset.
Webhooks
Notify your application after a run and retrieve records through the dataset API.
Data warehouses
Load JSON or CSV exports into BigQuery, Snowflake, PostgreSQL, or your preferred analytics stack.
API usage
JavaScript API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/crexi-commercial-real-estate-scraper').call({searchUrls: ['https://www.crexi.com/properties?types%5B%5D=Retail'],maxItems: 100,fetchDetails: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python API example
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/crexi-commercial-real-estate-scraper').call(run_input={'searchUrls': ['https://www.crexi.com/properties?types%5B%5D=Retail'],'maxItems': 100,'fetchDetails': False,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item)
cURL API example
curl -X POST \'https://api.apify.com/v2/acts/automation-lab~crexi-commercial-real-estate-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchUrls":["https://www.crexi.com/properties?types%5B%5D=Retail"],"maxItems":100}'
Use with Apify MCP
Connect the Actor to AI clients through Apify MCP.
Claude Code
claude mcp add apify --transport http \'https://mcp.apify.com/?tools=automation-lab/crexi-commercial-real-estate-scraper'
Example prompts:
- “Export 100 public Retail listings from this Crexi search and summarize asking prices.”
- “Find newly updated industrial properties in this dataset and group them by state.”
- “Compare cap rates among enriched Crexi listings where the field is public.”
Claude Desktop
Add this server to claude_desktop_config.json. Claude Desktop launches the remote-MCP bridge and opens Apify authentication when you first use the tool.
{"mcpServers": {"apify": {"command": "npx","args": ["-y","mcp-remote","https://mcp.apify.com/?tools=automation-lab/crexi-commercial-real-estate-scraper"]}}}
Cursor
Create or update .cursor/mcp.json in your project, then enable the apify server in Cursor Settings → MCP:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=automation-lab/crexi-commercial-real-estate-scraper"}}}
VS Code
Create .vscode/mcp.json, then run MCP: List Servers and start apify. VS Code prompts you to authenticate with Apify on first use.
{"servers": {"apify": {"type": "http","url": "https://mcp.apify.com/?tools=automation-lab/crexi-commercial-real-estate-scraper"}}}
Scheduling
Save the input as an Apify Task and use Schedules to run it automatically. A focused scheduled search provides a repeatable inventory snapshot without manual exports.
Data quality
The Actor normalizes high-value fields but does not invent missing values. Crexi sellers control which pricing and financial details are public. Always review source listings before making an investment, lending, appraisal, or outreach decision.
Error handling
Transient server and rate-limit responses are retried with exponential delay. Invalid non-Crexi URLs fail early. Duplicate IDs are ignored. A failed optional detail request produces a warning while preserving the search record.
Legality
This Actor collects information exposed on public Crexi listing surfaces. Whether a particular use is lawful depends on your jurisdiction, purpose, contractual obligations, and the data you process.
Use reasonable request volumes, respect applicable laws and rights, avoid personal-data misuse, and review Crexi's terms. This documentation is not legal advice.
FAQ
Does it require a Crexi account?
No. The supported search and public listing fields do not require Crexi credentials.
Can it scrape filtered searches?
Yes. Paste the complete filtered /properties URL. Array and scalar query parameters are forwarded.
Why is a financial field missing?
Not every listing publicly discloses price, cap rate, NOI, or other investment metrics. Enable detail enrichment, but expect some fields to remain absent.
Why did fewer records appear than requested?
The filtered search may contain fewer unique results, or Crexi may return an empty page before the requested cap.
Does it scrape private broker contact details?
No. It only preserves broker metadata returned by the public listing endpoints and does not bypass login controls.
How do I avoid duplicate records?
The Actor deduplicates by Crexi property ID during each run. For historical pipelines, upsert records by propertyId across runs.
Related real estate scrapers
Explore other real-estate and market-data Actors from automation-lab to combine Crexi inventory with additional public sources. Only use sources and data that fit your compliance requirements.
Support
If a public Crexi search URL produces unexpected output, open an Actor issue with the input URL, run ID, expected fields, and a short example. Do not include private credentials or confidential deal information.