Crexi Scraper & API: Commercial Real Estate Listings avatar

Crexi Scraper & API: Commercial Real Estate Listings

Pricing

from $1.60 / 1,000 crexi property listings

Go to Apify Store
Crexi Scraper & API: Commercial Real Estate 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

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

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:

FieldWhat you get
listingId, listingUrl, transactionTypeCrexi listing ID, public listing page, and sale or lease
title, statusListing name and Crexi status (for example Active, On-Market, Auction, Under Contract)
address, city, state, postalCode, county, fullAddress, latitude, longitudeProperty location and map coordinates
propertyTypesRetail, Office, Industrial, Multifamily, Land, Self Storage, and the other Crexi types
price, priceText, pricePerSquareFootAsking price or starting bid for sale listings
leaseRateText, leaseRateMinPerSfYear, leaseRateMaxPerSfYearLease rate range in USD per square foot per year
rentableSqftMin, rentableSqftMax, numberOfSpaces, spacesAvailable lease spaces with size, rate, and space type
squareFeet, lotSize, capRate, yearBuiltBuilding size, lot size, cap rate, and year built when Crexi shows them publicly
description, investmentHighlights, propertyDetailsMarketing description, highlights, and the public property fact table
brokerName, brokerCompany, brokerPhone, brokersListing brokers and brokerage (phone only when shown publicly)
imageUrlsUp to 20 public listing photos
activatedOn, updatedOn, offersDueOn, isInOpportunityZoneDate listed, last update, offer or auction deadline, Opportunity Zone flag
sourceSearchUrl, detailEnriched, scrapedAt, warningsWhere 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

  1. Choose For sale or For lease.
  2. Add cities ("Austin, TX"), states ("TX"), property types, and an optional keyword, or paste Crexi URLs.
  3. Set Maximum listings and run. Download the results as JSON, CSV, Excel, or HTML, or read them through the API.
FieldTypeDefaultNotes
modesale or leasesaleListing type for the filter fields below
citieslist of strings–US cities written as "City, ST", for example "Austin, TX"
stateslist of strings–Two-letter state codes, for example "TX"
propertyTypeslist–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
searchTermstring–Keyword such as "car wash" or "medical office"
startUrlslist of URLs–Crexi search URLs (/properties?..., /lease/properties?...) keep their filters; listing URLs (/properties/<id>/<slug>, /lease/properties/<id>/<slug>) return that listing
maxResultsinteger 1–50020Listings delivered and charged
maxPagesinteger 1–5010Search pages (up to 100 listings each) per search
enrichDetailsbooleantrueAdds description, highlights, property facts, lease spaces, brokers, and photos
maxDetailPagesinteger 0–500500Cap 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.

EventFREEBRONZESILVERGOLD and aboveWhen it is charged
Crexi Property Listing (result-item, primary)$0.002$0.00195$0.0019$0.0016Once per listing delivered to the dataset
Actor Start (apify-actor-start)$0.005$0.005$0.005$0.005Once 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:

ListingsFREEGOLD
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 BLOCKED outcome and no listing charges. A valid search with no matches ends as EMPTY. 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.

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