Crexi Listings Scraper
Pricing
from $30.00 / 1,000 results
Crexi Listings Scraper
Extract commercial real estate listings from Crexi.com with comprehensive property details including NOI, cap rate, lease terms, and tenant information.
Pricing
from $30.00 / 1,000 results
Rating
0.0
(0)
Developer

Dave K
Actor stats
1
Bookmarked
40
Total users
12
Monthly active users
6.8 days
Issues response
14 days ago
Last modified
Categories
Share
Crexi Commercial Real Estate Scraper
Extract commercial real estate listings from Crexi.com with comprehensive property details including NOI, cap rate, lease terms, and tenant information.
Features
- Scrape property listings from Crexi search results
- Scrape single property pages directly (auto-detects URL type)
- Extract detailed financial data (NOI, cap rate, price per sqft)
- Get tenant and lease information (lease type, expiration, rent bumps)
- Full marketing descriptions and investment highlights
- Bypass Cloudflare with Puppeteer stealth mode
- Apify Proxy support (RESIDENTIAL recommended)
Input
Required
- Start URLs: Crexi search URLs or single property URLs (minimum 1)
- Search URL:
https://www.crexi.com/properties?term=davita - Single property:
https://www.crexi.com/properties/597828
- Search URL:
Optional
| Parameter | Default | Description |
|---|---|---|
includeListingDetails | false | Fetch detailed info (NOI, cap rate, lease terms) |
headless | true | Run browser in headless mode |
waitAfterLoadMs | 10000 | Time to wait for API responses (ms) |
maxProperties | 0 | Limit results (0 = unlimited) |
scrapeMode | "default" | Result ordering: default, newest, or random |
skipResults | 0 | Skip first N results (for pagination across runs) |
maxScrolls | 5 | Scroll iterations to load more results |
scrollDelayMs | 500 | Delay between scrolls (ms) |
proxyConfiguration | - | Apify Proxy or custom proxy settings |
Scraping Modes & Pagination
Scrape Modes
Control how results are ordered before applying limits:
default: Returns results in Crexi's default ordernewest: Sorts by listing date (newest first) - ideal for monitoring new listingsrandom: Shuffles results randomly - useful for sampling variety
Pagination with skipResults
Use skipResults and maxProperties together to paginate through large result sets across multiple runs:
| Run | skipResults | maxProperties | Result |
|---|---|---|---|
| 1st | 0 | 20 | Properties 1-20 |
| 2nd | 20 | 20 | Properties 21-40 |
| 3rd | 40 | 20 | Properties 41-60 |
Scrolling for More Results
The scraper scrolls the page to trigger Crexi's infinite scroll and load more properties. Adjust maxScrolls based on how many results you need:
- 5 scrolls (default): ~50-100 properties
- 10 scrolls: ~100-200 properties
- 20 scrolls: ~200-400 properties
Example: Monitor New Listings
{"startUrls": [{"url": "https://www.crexi.com/properties?term=davita"}],"scrapeMode": "newest","maxProperties": 10,"maxScrolls": 10}
Example: Paginate Through All Results
{"startUrls": [{"url": "https://www.crexi.com/properties?placeIds%5B%5D=..."}],"skipResults": 50,"maxProperties": 50,"maxScrolls": 20}
Example: Random Sampling
{"startUrls": [{"url": "https://www.crexi.com/properties?placeIds%5B%5D=..."}],"scrapeMode": "random","maxProperties": 10,"maxScrolls": 15}
Single Property URLs
You can scrape individual property pages directly by using their URL. The scraper auto-detects single property URLs and fetches full details automatically (no need to set includeListingDetails).
Example: Single Property
{"startUrls": [{"url": "https://www.crexi.com/properties/597828"}]}
Example: Multiple Single Properties
{"startUrls": [{"url": "https://www.crexi.com/properties/597828"},{"url": "https://www.crexi.com/properties/612345"},{"url": "https://www.crexi.com/properties/789012"}]}
Example: Mixed (Search + Single Properties)
{"startUrls": [{"url": "https://www.crexi.com/properties/597828"},{"url": "https://www.crexi.com/properties?term=davita"}],"includeListingDetails": true}
Output Fields
Basic Fields (always included)
| Field | Description |
|---|---|
propertyName | Property listing name |
propertyStatus | On-Market, Under Contract, etc. |
type | Property type (Office, Retail, etc.) |
address, city, state, zip | Location details |
sqFt | Square footage |
askingPrice | Listing price |
pricePerSqFt | Calculated price per square foot |
opportunityZone | Whether in opportunity zone |
latitude, longitude | Coordinates |
id, url | Crexi property ID and URL |
description | Short description |
brokerageName | Listing brokerage |
investmentType | Net Lease, Core, Value-Add, etc. |
Detail Fields (when includeListingDetails: true)
| Field | Description |
|---|---|
subType | Property subtype (Medical Office, etc.) |
capRate | Cap rate as decimal (0.0537 = 5.37%) |
noi | Net Operating Income |
occupancy | Occupancy percentage |
tenant | Tenant name(s) |
tenancy | Single or Multi tenant |
units | Number of units |
leaseType | NNN, Gross, Modified, etc. |
leaseExpiration | Lease expiration date |
remainingTerm | Years remaining on lease (number, e.g., 4.5) |
rentBumps | Rent escalation terms |
leaseOptions | Renewal options |
dateListed | Date property was listed |
daysOnMarket | Days on market |
lastUpdated | Last update timestamp |
marketingDescription | Full marketing description |
investmentHighlights | Key investment highlights |
brokers | Array of broker contacts |
Example Input
{"startUrls": [{"url": "https://www.crexi.com/properties?term=davita"}],"includeListingDetails": true,"maxProperties": 10,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Example Output
{"propertyName": "NNN Leased Investment - Dialysis Center","propertyStatus": "On-Market","type": "Office","address": "9420 Forestwood Ln","city": "Manassas","state": "VA","zip": "20110","sqFt": 9981,"askingPrice": 2700000,"pricePerSqFt": 271,"opportunityZone": false,"longitude": -77.4787335,"latitude": 38.7668747,"id": 597828,"url": "https://www.crexi.com/properties/597828","investmentType": "Net Lease","subType": "Medical Office","tenant": "DaVita","tenancy": "Single","units": 4,"capRate": 0.0537,"noi": 144924,"occupancy": 100,"leaseType": "NNN","leaseExpiration": "5/31/2030","remainingTerm": 4.5,"rentBumps": "10% every 5 years","leaseOptions": "2 remaining 5-year options","dateListed": "2021-04-30T17:08:18.75Z","daysOnMarket": 1680,"marketingDescription": "Four first-floor office condos totaling 9,981 SF leased to DaVita Dialysis on a NNN basis..."}
Use Cases
- Real Estate Investors: Monitor NNN lease opportunities and cap rates
- Market Research: Analyze commercial real estate trends by location/type
- Brokers & Agents: Track competitor listings and market activity
- Data Analysis: Build datasets for investment modeling
- Lead Generation: Find properties matching specific investment criteria
Tips for Best Results
- Use Apify Proxy: Enable RESIDENTIAL proxies to avoid Cloudflare blocks
- Start Small: Test with
maxProperties: 5before running large scrapes - Detail Fetching: Each property detail adds ~1-2 seconds; plan accordingly
- Search Filters: Use Crexi's URL filters to narrow results before scraping
Make.com Integration
This actor integrates seamlessly with Make.com:
- Add "Apify" module in Make.com
- Select "Run Actor"
- Choose this actor
- Configure input JSON
- Use "Get Dataset Items" to fetch results
- Process results in downstream modules (Google Sheets, Airtable, etc.)
Example Make.com Scenario
1. Schedule (trigger)↓2. Apify: Run Actor- Actor: crexi-scraper- Input: { startUrls, includeListingDetails, etc. }- Wait for completion: Yes↓3. Apify: Get Dataset Items- Dataset ID: {{datasetId}}↓4. Google Sheets: Add Rows- Map fields from dataset
Limitations
- Detail fetching increases runtime (~1-2 seconds per property)
- Some properties may not have all fields (vacant properties won't have tenant info)
- Cloudflare may occasionally block requests; retry or use proxies
License
MIT