Crexi Scraper & API: Commercial Real Estate Listings
Pricing
from $1.60 / 1,000 crexi property listings
Crexi Scraper & API: Commercial Real Estate Listings
Use this Crexi scraper to export commercial real estate listings for sale or lease with prices, cap rates, lease rates, and brokers for CRE investors.
Pricing
from $1.60 / 1,000 crexi property listings
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
This Crexi scraper exports public commercial real estate listings for sale or for lease from Crexi.com into clean, structured data: asking prices and lease rates, addresses with coordinates, property types, square footage, lot size, cap rate where shown, available lease spaces, listing brokers, images, and the listing URL. Search by city, state, property type, and keyword, or paste Crexi search and listing URLs. It is built for CRE investors sourcing deals, brokers watching their market, and analysts who need Crexi listings in a spreadsheet, database, or AI agent.
Price: $2.00 per 1,000 listings on the FREE tier ($1.60 on GOLD and above), plus a $0.005 start fee per run. Up to 500 listings per run on every Apify plan.
What data does this Crexi scraper extract?
One dataset record per unique listing, with these fields:
| Field | What you get |
|---|---|
listingId, listingUrl, transactionType | Crexi listing ID, public listing page, and sale or lease |
title, status | Listing name and Crexi status (for example Active, On-Market, Auction, Under Contract) |
address, city, state, postalCode, county, fullAddress, latitude, longitude | Property location and map coordinates |
propertyTypes | Retail, Office, Industrial, Multifamily, Land, Self Storage, and the other Crexi types |
price, priceText, pricePerSquareFoot | Asking price or starting bid for sale listings |
leaseRateText, leaseRateMinPerSfYear, leaseRateMaxPerSfYear | Lease rate range in USD per square foot per year |
rentableSqftMin, rentableSqftMax, numberOfSpaces, spaces | Available lease spaces with size, rate, and space type |
squareFeet, lotSize, capRate, yearBuilt | Building size, lot size, cap rate, and year built when Crexi shows them publicly |
description, investmentHighlights, propertyDetails | Marketing description, highlights, and the public property fact table |
brokerName, brokerCompany, brokerPhone, brokers | Listing brokers and brokerage (phone only when shown publicly) |
imageUrls | Up to 20 public listing photos |
activatedOn, updatedOn, offersDueOn, isInOpportunityZone | Date listed, last update, offer or auction deadline, Opportunity Zone flag |
sourceSearchUrl, detailEnriched, scrapedAt, warnings | Where the record came from and notes about it |
Crexi hides some property facts (for example year built or APN on certain listings) from visitors who are not signed in. The Actor leaves those out instead of guessing and notes how many were hidden in the record's warnings.
Use cases for Crexi listings data
- Deal sourcing: pull every retail, industrial, or multifamily property for sale in a city or state and screen it by price, size, and cap rate.
- Lease market research: collect commercial real estate for lease with rate ranges and available space sizes to compare asking rents.
- Monitoring: schedule a daily run to catch new Crexi listings, updated listings, and auction or offer deadlines.
- Broker and brokerage lists: see which brokers and firms list which property types in a market.
- Analytics and AI: feed commercial real estate data into a BI dashboard, CRM, or AI agent through the API.
When not to use it: it does not return closed sales comps, ownership or tax records, tenant data, offering memorandums, rent rolls, or anything Crexi shows only to signed-in or paying users.
How to scrape Crexi listings
- Choose For sale or For lease.
- Add cities (
"Austin, TX"), states ("TX"), property types, and an optional keyword, or paste Crexi URLs. - Set Maximum listings and run. Download the results as JSON, CSV, Excel, or HTML, or read them through the API.
| Field | Type | Default | Notes |
|---|---|---|---|
mode | sale or lease | sale | Listing type for the filter fields below |
cities | list of strings | – | US cities written as "City, ST", for example "Austin, TX" |
states | list of strings | – | Two-letter state codes, for example "TX" |
propertyTypes | list | – | For sale: Retail, Office, Industrial, Multifamily, Land, Hospitality, Mixed Use, Special Purpose, Self Storage, Business for Sale, Senior Living, Note/Loan, Mobile Home Park. For lease: Retail, Office, Industrial, Land, Special Purpose, Restaurant |
searchTerm | string | – | Keyword such as "car wash" or "medical office" |
startUrls | list of URLs | – | Crexi search URLs (/properties?..., /lease/properties?...) keep their filters; listing URLs (/properties/<id>/<slug>, /lease/properties/<id>/<slug>) return that listing |
maxResults | integer 1–500 | 20 | Listings delivered and charged |
maxPages | integer 1–50 | 10 | Search pages (up to 100 listings each) per search |
enrichDetails | boolean | true | Adds description, highlights, property facts, lease spaces, brokers, and photos |
maxDetailPages | integer 0–500 | 500 | Cap on listings that get detail data |
With no filters and no URLs, the Actor searches all Crexi listings of the selected type. Filters and URLs can be combined, and a listing found by two searches is delivered once.
Retail properties for sale in Austin:
{ "mode": "sale", "cities": ["Austin, TX"], "propertyTypes": ["Retail"], "maxResults": 25 }
Office space for lease in Texas:
{ "mode": "lease", "states": ["TX"], "propertyTypes": ["Office"], "maxResults": 50 }
Crexi URLs (a filtered search and a single lease listing):
{"startUrls": [{ "url": "https://www.crexi.com/properties?types%5B%5D=Self%20Storage&states%5B%5D=FL" },{ "url": "https://www.crexi.com/lease/properties/38040/wisconsin-brookfield-lakes-corporate-center-iii" }],"maxResults": 10}
Crexi API access from your code
This Actor is not an official Crexi API, but it gives you API access to public Crexi listings through the Apify API. Run it and get the listings back in one call:
curl -X POST "https://api.apify.com/v2/acts/muhammadafzal~crexi-commercial-real-estate-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"sale","cities":["Phoenix, AZ"],"propertyTypes":["Multifamily"],"maxResults":10}'
The same input works with the Apify JavaScript and Python clients, schedules, webhooks, and the Apify MCP server, so an AI agent can ask for "5 industrial properties for lease in Dallas, TX" and know the cost in advance.
Output example
A lease listing with details loaded (description shortened):
{"listingId": "1286432","listingUrl": "https://www.crexi.com/lease/properties/1286432/illinois-2472-w-foster-avenue-103","sourceSearchUrl": "https://www.crexi.com/lease/properties?cities%5B%5D=Chicago%2C+IL&types%5B%5D=Retail","transactionType": "lease","title": "2472 W FOSTER Avenue 103","status": "Active","city": "Chicago","state": "IL","postalCode": "60625","fullAddress": "2472 W FOSTER Avenue 103, Chicago, IL 60625","latitude": 41.9761625,"longitude": -87.6918912,"propertyTypes": ["Retail"],"price": null,"priceText": "$19.05/SF/YR","leaseRateText": "$19.05/SF/YR","leaseRateMinPerSfYear": 19.05,"leaseRateMaxPerSfYear": 19.05,"rentableSqftMin": 1260,"rentableSqftMax": 1260,"numberOfSpaces": 1,"spaces": [{ "name": "103", "rentableSqFt": 1260, "rate": "$19.05/SF/YR", "rateType": "Per Year", "listingType": "Direct", "subtypes": [] }],"description": "Position your business for success in this spacious, light-filled retail or office suite...","propertyDetails": { "Property Type": "Retail", "Stories": "4" },"brokerName": "Kieran Conlon","brokerCompany": "Compass","brokerPhone": null,"imageUrls": ["https://crexi.com/images/format=auto,width=3000,height=2000/lease-assets/1286432/c8bfba2d90944697b648f7eabfda0f20.JPG"],"activatedOn": "2026-10-23T09:41:00.308Z","detailEnriched": true,"warnings": ["6 property detail field(s) are hidden by Crexi for anonymous visitors and were omitted."]}
Sale listings fill price, squareFeet, lotSize, capRate (when shown), and offersDueOn instead of the lease fields. Each run also writes an OUTPUT record with the outcome (DATA, EMPTY, BLOCKED, REJECTED, or FAILED), delivered and charged counts, the stop reason, per-search totals, duplicates skipped, and warnings.
Pricing
Pay per event. Platform usage is included in the event prices; you pay only for the events below.
| Event | FREE | BRONZE | SILVER | GOLD and above | When it is charged |
|---|---|---|---|---|---|
Crexi Property Listing (result-item, primary) | $0.002 | $0.00195 | $0.0019 | $0.0016 | Once per listing delivered to the dataset |
Actor Start (apify-actor-start) | $0.005 | $0.005 | $0.005 | $0.005 | Once per run per started GB of allocated memory (one event at the default 256 MB and at the 512 MB maximum) |
Listing discounts: BRONZE 2.5%, SILVER 5%, GOLD and above 20%.
Worked examples at default memory:
| Listings | FREE | GOLD |
|---|---|---|
| 3 | $0.011 | $0.0098 |
| 20 | $0.045 | $0.037 |
| 100 | $0.205 | $0.165 |
| 500 | $1.005 | $0.805 |
Duplicates, rejected input, blocked runs, and empty searches are never charged as listings. You can set a maximum cost per run; the Actor stops cleanly when it is reached.
Reliability, limits, and failure modes
- The Actor reads the same public listing data that the Crexi website loads in a browser, without signing in, and handles access automatically with bounded retries. No browser is launched, so runs are fast: in cloud tests, 3 listings with details took about 3–5 seconds and 120 listings about 20 seconds.
- Invalid input (an unknown property type for the selected mode, a malformed city, a non-Crexi URL) is rejected before any request, with a clear message and no listing charges.
- Runs that cannot reach Crexi end with a
BLOCKEDoutcome and no listing charges. A valid search with no matches ends asEMPTY. Nothing is fabricated. - Lease searches use a stable newest-first order so results do not reshuffle between pages, and every run deduplicates listings by listing ID.
- Limits per run: 500 listings, 50 search pages per search, 100 listings per page. Runs also stop at
maxResults, your maximum cost, or the timeout, keeping the listings already delivered. - Fields Crexi hides from anonymous visitors are omitted, so some records have fewer facts than the signed-in Crexi page.
Legal and personal data
The Actor collects only public listing information that Crexi shows to anonymous visitors. It is not affiliated with or endorsed by Crexi. Broker names, brokerages, and phone numbers are business contact details published on listings; use them in line with applicable privacy, anti-spam, and telemarketing laws and with Crexi's terms. Do not use the data to republish listings wholesale.
FAQ
How can I scrape real estate data from Crexi? Enter a city, state, property type, or keyword (or paste a Crexi search URL), choose sale or lease, and run the Actor. It returns one structured record per listing that you can export to CSV, Excel, or JSON.
Is there a Crexi API for listings? This Actor works as an unofficial Crexi API: you call it through the Apify API (example above) and get listings as JSON. It is not a Crexi product, and it covers public listing data only.
Do I need a Crexi account? No. The Actor never signs in and returns only what Crexi shows to visitors who are not signed in.
Does it include Crexi auction listings?
Yes. Auction listings come through with status Auction, the starting bid in price/priceText, and the deadline in offersDueOn when Crexi lists one.
Can it scrape commercial real estate for lease?
Yes. Choose For lease (or paste a /lease/properties URL) to get commercial properties for lease with lease rate ranges, available spaces, and their sizes.
Support
Open an issue on the Actor page with the run ID and input if a listing field looks wrong or a run fails.
Last verified: 2026-11-04