Crexi Scraper — Commercial Real Estate Listings avatar

Crexi Scraper — Commercial Real Estate Listings

Pricing

from $8.00 / 1,000 property enriched (full detail + broker)s

Go to Apify Store
Crexi Scraper — Commercial Real Estate Listings

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a month ago

Last modified

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/maxPrice and minCapRate/maxCapRate narrow the market before anything is collected.
  • Location ready for mapping. Every row has address, city, state, zip, latitude and longitude.
  • Listing freshness. daysOnMarket, activatedOn and updatedOn show how long a deal has been live.
  • Broker leads. brokerageName and brokers (name, licenses and Crexi profile ID) name who to call about each listing.
  • Crexi's key details panel. keyDetails keeps every label Crexi shows for the listing, such as Class, Tenancy, Stories and Ground Lease.
  • Two cost levels. enrichDetails switches 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 keyDetails keeps those labels with masked values, and the matching top-level fields fill in when a listing publishes them openly.
  • Use propertyUrls when 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
}
FieldTypeWhat it controls
propertyUrlsarray of stringsCrexi listing URLs to fetch directly.
propertyTypesarrayOffice, Retail, Industrial, Multifamily, Land, Hospitality, Mixed Use, Special Purpose, Self Storage, Mobile Home Park, Business for Sale or Senior Living.
subtypesarray of stringsCrexi subtypes such as Apartment Building or Storefront.
states, cities, zipCodesarrays of stringsLocation filters; states use 2-letter codes.
minPrice, maxPriceintegersAsking price band in USD.
minCapRate, maxCapRateintegersCap rate band in percent.
includeUnpricedbooleanKeep listings without a public price. Default true.
enrichDetailsbooleanFetch full detail, description and brokers for each listing. Default true.
includeGalleryImagesbooleanAdd all gallery image URLs. Default false.
maxResultsintegerCap on listings saved. Default 100.
proxyConfigurationobjectApify Proxy settings. Default uses US Apify Proxy.

Output

One row per listing.

FieldWhat it contains
id, name, url, statusListing identity, link and status
propertyTypes, subtypesAsset classes
askingPrice, isUnpricedAsking price in USD and the unpriced flag
squareFootage, stories, buildings, lotSizeAcres, zoning, groundLeasePhysical and legal attributes, when listed
capRate, noi, units, yearBuiltFinancials and building facts when the listing publishes them openly
address, city, state, zip, latitude, longitudeLocation
brokerageName, brokersListing brokerage and brokers with licenses and profile IDs
description, investmentHighlightsMarketing copy as plain text
keyDetailsCrexi's key details panel as label and value pairs
imageUrl, galleryCount, galleryImagesPhotos (galleryImages with includeGalleryImages)
hasVideo, hasVirtualTour, isInOpportunityZoneMedia and Opportunity Zone flags
daysOnMarket, activatedOn, updatedOn, scrapedAtListing 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 ApifyClient
client = 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 situationHelpful actionExpected outcome
Fast market scanSet enrichDetails to falseListing cards with price, type and location
Broker outreachKeep enrichDetails onRows with brokerageName and brokers
Priced deals onlySet includeUnpriced to falseEvery row has an askingPrice
A tight geographyCombine states with cities or zipCodesA focused submarket
Photo decksTurn on includeGalleryImagesFull gallery URLs per listing
Ongoing deal flowSchedule the same filtersNew 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.