Crexi Listings Scraper avatar

Crexi Listings Scraper

Pricing

from $30.00 / 1,000 results

Go to Apify Store
Crexi Listings Scraper

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

Dave K

Maintained by Community

Actor stats

1

Bookmarked

40

Total users

12

Monthly active users

6.8 days

Issues response

14 days ago

Last modified

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

Optional

ParameterDefaultDescription
includeListingDetailsfalseFetch detailed info (NOI, cap rate, lease terms)
headlesstrueRun browser in headless mode
waitAfterLoadMs10000Time to wait for API responses (ms)
maxProperties0Limit results (0 = unlimited)
scrapeMode"default"Result ordering: default, newest, or random
skipResults0Skip first N results (for pagination across runs)
maxScrolls5Scroll iterations to load more results
scrollDelayMs500Delay 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 order
  • newest: Sorts by listing date (newest first) - ideal for monitoring new listings
  • random: Shuffles results randomly - useful for sampling variety

Pagination with skipResults

Use skipResults and maxProperties together to paginate through large result sets across multiple runs:

RunskipResultsmaxPropertiesResult
1st020Properties 1-20
2nd2020Properties 21-40
3rd4020Properties 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)

FieldDescription
propertyNameProperty listing name
propertyStatusOn-Market, Under Contract, etc.
typeProperty type (Office, Retail, etc.)
address, city, state, zipLocation details
sqFtSquare footage
askingPriceListing price
pricePerSqFtCalculated price per square foot
opportunityZoneWhether in opportunity zone
latitude, longitudeCoordinates
id, urlCrexi property ID and URL
descriptionShort description
brokerageNameListing brokerage
investmentTypeNet Lease, Core, Value-Add, etc.

Detail Fields (when includeListingDetails: true)

FieldDescription
subTypeProperty subtype (Medical Office, etc.)
capRateCap rate as decimal (0.0537 = 5.37%)
noiNet Operating Income
occupancyOccupancy percentage
tenantTenant name(s)
tenancySingle or Multi tenant
unitsNumber of units
leaseTypeNNN, Gross, Modified, etc.
leaseExpirationLease expiration date
remainingTermYears remaining on lease (number, e.g., 4.5)
rentBumpsRent escalation terms
leaseOptionsRenewal options
dateListedDate property was listed
daysOnMarketDays on market
lastUpdatedLast update timestamp
marketingDescriptionFull marketing description
investmentHighlightsKey investment highlights
brokersArray 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

  1. Use Apify Proxy: Enable RESIDENTIAL proxies to avoid Cloudflare blocks
  2. Start Small: Test with maxProperties: 5 before running large scrapes
  3. Detail Fetching: Each property detail adds ~1-2 seconds; plan accordingly
  4. Search Filters: Use Crexi's URL filters to narrow results before scraping

Make.com Integration

This actor integrates seamlessly with Make.com:

  1. Add "Apify" module in Make.com
  2. Select "Run Actor"
  3. Choose this actor
  4. Configure input JSON
  5. Use "Get Dataset Items" to fetch results
  6. 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