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 & geo. Filter by type, state, city, ZIP, price, cap rate. MCP-ready.

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

2 days ago

Last modified

Share

Scrape commercial real estate for-sale listings from Crexi — the largest US CRE marketplace — into clean, structured JSON. Filter by property type, state, city, ZIP, asking price, and cap rate, then optionally deep-enrich every listing with cap rate, NOI, year built, zoning, lot size, marketing description, and broker details.

Built HTTP-only against Crexi's public JSON API. No login, no cookies, fast and reliable. MCP-ready — drop it straight into an AI agent (Claude, ChatGPT, Gemini) as a tool.

What you can do

  • Search by filters — property type (Office, Retail, Industrial, Multifamily, Land, Hospitality, Mixed Use, Special Purpose, Self Storage, Mobile Home Park, Business for Sale, Senior Living), subtype, state, city, ZIP, price band, and cap-rate band.
  • Scrape specific listings — paste Crexi property URLs and pull full detail for each.
  • Deep-enrich — add cap rate, NOI, year built, zoning, lot size, APN, marketing description, investment highlights, and broker (name, brokerage, license, title) per listing.
  • Feed the output into a CRM, deal-flow tracker, comps database, market-research model, or lead list.

Who it's for

CRE brokers, acquisitions teams, private-equity and REIT analysts, appraisers, and PropTech builders who need Crexi deal data in bulk without copy-pasting from the site.

Output — one record per listing

FieldDescription
idCrexi listing ID
nameListing name
urlPublic Crexi listing URL
propertyTypes / subtypesAsset classes and subtypes
statuse.g. On-Market
askingPrice / isUnpricedAsking price in USD; unpriced flag
capRate / noiCap rate (%) and net operating income (USD)
squareFootage / unitsBuilding size and unit count
yearBuilt / lotSizeAcres / zoning / apnPhysical + legal attributes
address / city / county / state / zipFull location
latitude / longitudeGeo coordinates
brokerageName / brokers[]Listing brokerage + broker name, title, license, state
description / investmentHighlightsMarketing copy (plain text)
imageUrl / galleryCountPrimary image + gallery size
hasVideo / hasVirtualTour / isInOpportunityZoneMedia + zone flags
activatedOn / updatedOn / scrapedAtISO 8601 timestamps

capRate, noi, yearBuilt, zoning, apn, description, and brokers are populated when Deep-enrich is on (default) or when scraping property URLs. With enrichment off, you get the fast listing-card fields only.

Pricing (pay-per-event)

EventPrice
Actor start$0.00005
Property scraped (card fields, enrichment off)$0.004
Property enriched (full detail + broker)$0.008

A typical 100-listing enriched run costs about $0.80. Turn off enrichment to halve the cost for lead-list use cases that only need price, size, type, and location.

{
"propertyTypes": ["Multifamily"],
"states": ["TX"],
"cities": ["Austin"],
"minPrice": 500000,
"maxPrice": 5000000,
"minCapRate": 6,
"enrichDetails": true,
"maxResults": 100
}

Example input — specific listings

{
"propertyUrls": [
"https://www.crexi.com/properties/2608102/michigan-5084-lovers-lane",
"https://www.crexi.com/properties/2608071/ohio-14307-state-route-113"
]
}

Run via API

JavaScript (Apify client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('khadinakbar/crexi-commercial-real-estate-scraper').call({
propertyTypes: ['Retail'],
states: ['FL'],
maxResults: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python (Apify client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("khadinakbar/crexi-commercial-real-estate-scraper").call(run_input={
"propertyTypes": ["Industrial"],
"states": ["CA"],
"minCapRate": 5,
"maxResults": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item.get("askingPrice"), item.get("capRate"))

Use as an MCP tool

Expose it to an AI agent via Apify's hosted MCP server:

https://mcp.apify.com?tools=khadinakbar/crexi-commercial-real-estate-scraper

The agent supplies filters or property URLs and receives structured listing JSON — ideal for "find me Austin multifamily deals under $3M with a 6%+ cap rate."

FAQ

Does it need Crexi login or cookies? No. It uses Crexi's public JSON API. No credentials.

Does it cover leases? This version covers for-sale listings (the core Crexi marketplace, ~243K live listings). Lease listings are not included yet.

Does it return broker emails/phones? No — Crexi gates broker contact details behind login. You get broker name, brokerage, license, state, and title, which are publicly visible.

How fresh is the data? Listings are read live from Crexi at run time.

Why are some fields empty? With enrichment off, detail-only fields (cap rate, NOI, zoning, etc.) are not fetched. Turn on Deep-enrich for the full record.

Can I get the whole market? Yes — leave filters empty and raise maxResults. Watch the cost cap shown in the run log before large runs.

This actor collects publicly available listing data from Crexi for legitimate business use such as market research, comps, and lead generation. You are responsible for using the data in compliance with Crexi's Terms of Service, applicable laws (including data-protection regulations), and any downstream contractual obligations. Do not use the data to spam, harass, or violate individuals' privacy. This actor is not affiliated with or endorsed by Crexi.