Crexi Scraper — Commercial Real Estate Listings
Pricing
from $8.00 / 1,000 property enriched (full detail + broker)s
Crexi Scraper — Commercial Real Estate Listings
Scrape Crexi commercial real estate for-sale listings: asking price, cap rate, NOI, size, zoning, broker and location. Filter by property type, state, city, ZIP, price and cap rate.
Pricing
from $8.00 / 1,000 property enriched (full detail + broker)s
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
a month ago
Last modified
Categories
Share
What is Crexi Scraper — Commercial Real Estate Listings?
Crexi Scraper — Commercial Real Estate Listings returns one dataset row per for-sale commercial property on Crexi: asking price, property type and subtype, square footage, lot size, zoning, full address with latitude and longitude, days on market, listing brokerage and brokers, marketing description and photos. CRE brokers, acquisitions teams, investors, appraisers and AI agents use it to build deal lists and comps from filters such as property type, state, city, ZIP, price and cap rate, or from specific listing URLs, with no Crexi login.
Why CRE teams use this Crexi scraper
- Filters that match how investors search.
propertyTypes,subtypes,states,cities,zipCodes,minPrice/maxPriceandminCapRate/maxCapRatenarrow the market before anything is collected. - Location ready for mapping. Every row has
address,city,state,zip,latitudeandlongitude. - Listing freshness.
daysOnMarket,activatedOnandupdatedOnshow how long a deal has been live. - Broker leads.
brokerageNameandbrokers(name, licenses and Crexi profile ID) name who to call about each listing. - Crexi's key details panel.
keyDetailskeeps every label Crexi shows for the listing, such as Class, Tenancy, Stories and Ground Lease. - Two cost levels.
enrichDetailsswitches between lean listing cards and full detail rows.
Best fit for this Actor
- Best fit for for-sale deal sourcing, comps research and broker prospecting across Crexi's marketplace.
- Designed for the public listing view. Crexi shows some financial values, such as Cap Rate, NOI, Units and Year Built, to signed-in users only; in the public view
keyDetailskeeps those labels with masked values, and the matching top-level fields fill in when a listing publishes them openly. - Use
propertyUrlswhen you already have listings, and filters when you are exploring a market. - To compare the same market on another marketplace, continue with LoopNet Scraper and match listings by address.
Example workflow: from a target market to a call list
A multifamily investor starts with propertyTypes set to Multifamily, states set to TX and maxPrice at 3,000,000, with enrichDetails on and maxResults at 200. The dataset returns each listing's askingPrice, squareFootage, zoning, daysOnMarket, latitude/longitude and brokers. They compute price per square foot, compare it across cities, and flag listings with more than 60 days on market as negotiation candidates. They export the shortlist with brokerageName and brokers to their CRM, then schedule the same input weekly to catch new listings.
Input
Search by filters:
{"propertyTypes": ["Multifamily"],"states": ["TX"],"cities": ["Austin"],"minPrice": 500000,"maxPrice": 5000000,"includeUnpriced": false,"enrichDetails": true,"maxResults": 100}
Look up specific listings:
{"propertyUrls": ["https://www.crexi.com/properties/2705962/washington-4723-e-18th-st"],"enrichDetails": true}
| Field | Type | What it controls |
|---|---|---|
propertyUrls | array of strings | Crexi listing URLs to fetch directly. |
propertyTypes | array | Office, Retail, Industrial, Multifamily, Land, Hospitality, Mixed Use, Special Purpose, Self Storage, Mobile Home Park, Business for Sale or Senior Living. |
subtypes | array of strings | Crexi subtypes such as Apartment Building or Storefront. |
states, cities, zipCodes | arrays of strings | Location filters; states use 2-letter codes. |
minPrice, maxPrice | integers | Asking price band in USD. |
minCapRate, maxCapRate | integers | Cap rate band in percent. |
includeUnpriced | boolean | Keep listings without a public price. Default true. |
enrichDetails | boolean | Fetch full detail, description and brokers for each listing. Default true. |
includeGalleryImages | boolean | Add all gallery image URLs. Default false. |
maxResults | integer | Cap on listings saved. Default 100. |
proxyConfiguration | object | Apify Proxy settings. Default uses US Apify Proxy. |
Output
One row per listing.
| Field | What it contains |
|---|---|
id, name, url, status | Listing identity, link and status |
propertyTypes, subtypes | Asset classes |
askingPrice, isUnpriced | Asking price in USD and the unpriced flag |
squareFootage, stories, buildings, lotSizeAcres, zoning, groundLease | Physical and legal attributes, when listed |
capRate, noi, units, yearBuilt | Financials and building facts when the listing publishes them openly |
address, city, state, zip, latitude, longitude | Location |
brokerageName, brokers | Listing brokerage and brokers with licenses and profile IDs |
description, investmentHighlights | Marketing copy as plain text |
keyDetails | Crexi's key details panel as label and value pairs |
imageUrl, galleryCount, galleryImages | Photos (galleryImages with includeGalleryImages) |
hasVideo, hasVirtualTour, isInOpportunityZone | Media and Opportunity Zone flags |
daysOnMarket, activatedOn, updatedOn, scrapedAt | Listing age and collection time |
Example enriched row (broker details are illustrative):
{"id": 2705962,"name": "4723 E 18TH ST","url": "https://www.crexi.com/properties/2705962/washington-4723-e-18th-st","propertyTypes": ["Multifamily"],"subtypes": ["Apartment Building"],"status": "Active","askingPrice": 636000,"isUnpriced": false,"squareFootage": 2576,"stories": 2,"lotSizeAcres": 0.14,"zoning": "R-9","address": "4723 E 18TH ST","city": "Vancouver","state": "WA","zip": "98661","latitude": 45.6346358,"longitude": -122.6203635,"brokerageName": "Example Realty Group","brokers": [{ "name": "Dana Morgan", "licenses": ["100200"], "publicProfileId": "danamorgan" }],"description": "Occupied duplex built in 2020, townhome style, with 3 bedrooms and 2.5 baths on each side.","imageUrl": "https://crexi.com/images/format=auto,width=716,height=444,fit=cover/assets/2705962/54a5a624ed8e49bb8db46ec9233c1a86.JPG","galleryCount": 20,"hasVideo": false,"hasVirtualTour": false,"isInOpportunityZone": true,"keyDetails": { "Asking Price": "$636,000", "Property Type": "Multifamily", "Square Footage": "2,576", "Stories": "2", "Zoning": "R-9", "Lot Size (acres)": "0.14" },"daysOnMarket": 22,"activatedOn": "2026-09-08T23:49:43.867Z","updatedOn": "2026-09-27T02:37:46.41Z","scrapedAt": "2026-10-01T12:19:41.921Z"}
Pricing
This Actor uses Pay per event with Apify platform usage included in the event price. With enrichDetails on, each listing is one Property enriched (full detail + broker) event; with it off, each listing is one lower-priced Property scraped (listing-card fields) event. Every run also has one Actor Start event. For example, 100 enriched listings are 100 enriched events plus the start event. maxResults caps the listing count, so it doubles as a spending limit. The live Pricing tab on this page shows the current event prices.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~crexi-commercial-real-estate-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"propertyTypes": ["Retail"], "states": ["FL"], "maxResults": 50, "enrichDetails": true}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/crexi-commercial-real-estate-scraper").call(run_input={"propertyTypes": ["Industrial"],"states": ["CA"],"maxResults": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["name"], item.get("askingPrice"), item.get("daysOnMarket"))
Use with AI agents (MCP)
Connect the Actor to Claude, ChatGPT or Cursor through Apify MCP and ask:
Find up to 40 retail properties for sale in Florida under $2 million. Sort them by days on market and list the brokerage for each.
The agent sets propertyTypes, states, maxPrice and maxResults, reads the dataset with get-dataset-items, sorts by daysOnMarket, and cites each listing's url. Each listing is one event, so maxResults keeps the cost of the request predictable.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| Fast market scan | Set enrichDetails to false | Listing cards with price, type and location |
| Broker outreach | Keep enrichDetails on | Rows with brokerageName and brokers |
| Priced deals only | Set includeUnpriced to false | Every row has an askingPrice |
| A tight geography | Combine states with cities or zipCodes | A focused submarket |
| Photo decks | Turn on includeGalleryImages | Full gallery URLs per listing |
| Ongoing deal flow | Schedule the same filters | New listings each run |
Builder's note
I built this around Crexi's own search filters so a run asks for exactly the deals an investor would browse, instead of collecting a whole state and filtering later. I found that keyDetails is the most honest view of a listing, so the Actor keeps Crexi's labels as shown and also lifts the common values into typed fields.
FAQ
Do I need a Crexi account?
No. The Actor reads Crexi's public listing data.
Does it include lease listings?
It covers for-sale listings, the core Crexi marketplace.
Why do some keyDetails values show asterisks?
Crexi reserves some values, such as Cap Rate and NOI, for signed-in users, and the public view shows them masked. The labels stay in keyDetails so you can see which details the broker provided.
Responsible use
This Actor collects publicly available Crexi listing data for market research, comps and business outreach. Broker names and licenses are personal data under laws such as the GDPR and CCPA, so use them with a lawful basis and respect Crexi's terms of service. Crexi is a trademark of its owner; this independent Actor is not affiliated with or endorsed by Crexi.