🏢 Crexi CRE Scraper
Pricing
from $7.00 / 1,000 listing records
🏢 Crexi CRE Scraper
Scrape Crexi commercial real estate listings into 50+ fields per listing: asking price, cap rate, NOI, building size, lot size, year built, asset class, broker contacts, geo coordinates, photos. Numeric mirrors on every monetary field. Export, run via API, schedule, or integrate with other tools.
Pricing
from $7.00 / 1,000 listing records
Rating
0.0
(0)
Developer
Skootle
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
28 minutes ago
Last modified
Categories
Share

TL;DR
Scrape Crexi commercial real estate listings into a normalized JSON schema with 50+ fields per listing: asking price, cap rate, NOI, building size, lot size, year built, asset class + sub-type, listing status, days on market, broker contacts, portfolio sub-properties, geo coordinates, image URLs, and Investment Highlights. Numeric mirrors on every monetary/numeric field for analytics. Built on a managed fetch pipeline tuned for Crexi with continuous maintenance against layout changes.
What does Crexi Commercial Real Estate Scraper do?
Crexi Commercial Real Estate Scraper extracts every public commercial real estate listing on Crexi that matches your filters. You give it a Crexi search URL, a city, an asset class, or a set of filters; it returns one well-typed record per listing with: asking price (numeric USD + raw string), cap rate (% as float), NOI, building size (sqft), lot size (acres), year built, asset class enum, listing status, days on market, broker contacts (when public), portfolio sub-properties (when it's a portfolio listing), geo coordinates (lat/lng), image URLs, and Investment Highlights when Crexi exposes them.
Every monetary or numeric field has a numeric mirror (askingPriceUsd, capRatePct, noiUsd, buildingSqft, lotSizeAcres) for analytics, alongside the raw Crexi-format string. Every listing carries agentMarkdown (300-500 chars) and fieldCompletenessScore (0-100) so AI agents can self-filter and consume directly.
Why scrape Crexi?
Crexi is the largest broker-driven CRE marketplace in the United States, with the deepest coverage of multifamily, retail, industrial, office, and land listings outside of CoStar's paywall. For CRE deal sourcing, broker relationship building, market analytics, comp benchmarking, and AI-powered underwriting pipelines, Crexi is the highest-ROI public CRE data source.
Crexi's listings are publicly accessible on the web, but the site doesn't expose a public API. This actor handles the listing-page fetch, the 50+ field extraction, the numeric normalization, and the broker contact-tier enum so you get clean structured records instead of HTML strings.
Who needs this?
- CRE acquisitions teams sourcing deals by metro, asset class, cap rate threshold, and asking-price range
- Broker-relationship CRMs seeding their database with active brokers + recent listing counts
- Market analysts building cap-rate distribution, days-on-market median, $/sqft benchmarks per submarket
- Property tech (proptech) startups training AI underwriting models on labeled CRE data
- REIT investor relations monitoring competitor portfolios for listing activity
- Family office and HNW capital allocators screening deals at scale before underwriting deeper
- AI agents consuming a daily filtered Crexi feed and surfacing top deals against an investment thesis
How to use Crexi Commercial Real Estate Scraper
- Open the Input tab on the actor page
- Enter a Crexi search URL OR set individual filters (asset class, city, state, cap rate range, price range)
- Set
maxItems(default 50) andmaxPages - Optionally enable
watchlistModefor daily diffs - Click Start or call via the Apify REST API or CLI
How much will scraping Crexi cost?
This actor is priced per event:
- Actor Start: $0.01 once per run
- Crexi listing record: tiered, charged per record written
| Apify plan | $/1000 records |
|---|---|
| FREE | $40.00 |
| BRONZE | $34.00 |
| SILVER | $28.00 |
| GOLD | $24.00 |
| PLATINUM | $24.00 |
| DIAMOND | $21.60 |
A daily watchlist for multifamily 50+ unit deals in your target metros returns ~30-100 records day 1, then 5-20 per day. Roughly $0.65-$2.40 per day on GOLD.
Is it legal to scrape Crexi?
Yes, Crexi's listings are publicly accessible to anyone in a browser without logging in. This actor reads the same public pages with proper rate-limiting and a respectful User-Agent. It does not log into broker accounts, does not access broker-private data, and does not bypass any technical access control.
For commercial redistribution of raw datasets, consult Crexi's terms and your legal counsel. For internal CRE pipelines, comp analysis, broker outreach, and AI underwriting, the scraped data is treated like any other public web content.
Examples
Example 1: Multifamily in Texas, $5M-$25M asking
{"searchUrl": "https://www.crexi.com/properties?types=Multifamily&priceMin=5000000&priceMax=25000000&states=TX","maxItems": 100}
Example 2: Industrial 7%+ cap rate national
{"assetClass": "Industrial","capRateMin": 7,"maxItems": 200}
Example 3: Daily watchlist on retail in Florida
{"assetClass": "Retail","states": ["FL"],"watchlistMode": true,"maxItems": 100}
Example 4: Office portfolios over $50M
{"assetClass": "Office","priceMin": 50000000,"isPortfolio": true,"maxItems": 50}
Example 5: Land deals in growth metros
{"assetClass": "Land","metros": ["Austin", "Phoenix", "Nashville", "Charlotte"],"maxItems": 200}
Example 6: Broker-prospecting (active brokers in your geography)
{"states": ["CA"],"maxItems": 500}
Aggregate by brokerName and filter for ≥10 active listings to find power brokers.
Example 7: Cap-rate benchmark scrape
{"assetClass": "Multifamily","states": ["TX", "FL", "GA", "NC", "TN"],"maxItems": 1000}
Median + P25 + P75 of capRatePct per metro × asset class.
Example 8: AI underwriting pipeline feed
{"assetClass": "Multifamily","priceMin": 10000000,"priceMax": 50000000,"watchlistMode": true,"maxItems": 100}
Pipe to your underwriting model; auto-score deals against your investment thesis.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
searchUrl | string | "" | Direct Crexi search URL. Overrides individual filters. |
assetClass | enum | null | Multifamily, Retail, Industrial, Office, Land, Hospitality, Mixed-Use |
states | string[] | [] | 2-letter state codes |
metros | string[] | [] | Metro / city names |
priceMin, priceMax | int | null | USD asking-price range |
capRateMin, capRateMax | float | null | Cap rate % range |
isPortfolio | bool | null | Filter to portfolio listings |
maxItems | int | 50 | Hard cap |
maxPages | int | 5 | Pagination cap |
watchlistMode | bool | false | Idempotent diff against KV-stored seen listing IDs |
useApifyProxy | bool | true | Apify residential proxy. Recommended. |
Crexi output format
crexi_listing
| Field | Type | Description |
|---|---|---|
outputSchemaVersion, recordType, recordId | string | Discriminated identity |
listingId, url, slug | string | Crexi IDs + URL |
title, address, city, state, zip, country | string | Address fields |
latitude, longitude | float | Geo |
assetClass, assetSubType, propertyType | string/enum | Asset taxonomy |
listingStatus | enum | Active, Pending, Sold, Withdrawn |
askingPriceUsd, askingPriceRaw | int / string | Numeric mirror + raw |
capRatePct, capRateRaw | float / string | Numeric mirror + raw |
noiUsd | int | Net Operating Income |
buildingSqft, lotSizeAcres, yearBuilt, numUnits, numBuildings | int / float | Property facts |
daysOnMarket, listedAt | int / ISO 8601 | Time-on-market |
brokerName, brokerCompany, brokerEmail, brokerPhone, contactDataStatus | string / enum | Broker contact tier (none, public_profile_only, public_contact_details, gated) |
subProperties | array | Per-property breakdown for portfolio listings |
imageUrls | string[] | Property photos |
investmentHighlights | string[] | Bullet-point highlights from listing |
description | string | Full listing description |
fieldCompletenessScore, agentMarkdown | int / string | Quality + LLM-ready summary |
Crexi scraper output example
{"outputSchemaVersion": "2026-05-08","recordType": "crexi_listing","recordId": "crexi:listing:abc-multifamily-tx","listingId": "abc-multifamily-tx","url": "https://www.crexi.com/properties/abc-multifamily-tx","title": "Class B Multifamily · 96 Units","address": "1234 Sample Ln","city": "Austin","state": "TX","assetClass": "Multifamily","askingPriceUsd": 14250000,"askingPriceRaw": "$14,250,000","capRatePct": 5.85,"capRateRaw": "5.85%","noiUsd": 833625,"buildingSqft": 92500,"yearBuilt": 1985,"numUnits": 96,"daysOnMarket": 12,"brokerName": "Sample Broker","brokerCompany": "ABC Realty","contactDataStatus": "public_contact_details","fieldCompletenessScore": 88,"agentMarkdown": "**🏢 Class B Multifamily · 96 Units** ($14.25M · 5.85% cap)\n- 📍 Austin, TX · 92,500 sqft · built 1985\n- 💰 NOI $833K · 12 days on market\n- 👤 Sample Broker @ ABC Realty\n- 🔗 https://www.crexi.com/properties/abc-multifamily-tx"}
During the Actor run
The actor uses Playwright with the Apify residential proxy to fetch search results pages and listing detail pages. Each listing's detail page yields the 50+ field record. Inter-request delays + stealth fingerprinting keep block rate near zero.
The actor writes:
OUTPUT— run summaryAGENT_BRIEFING— top 10 listings by completeness × cap-rate × recencyWATCHLIST_STATE— (whenwatchlistMode: true) seen listing IDs
FAQ
How does Crexi Commercial Real Estate Scraper work?
The actor uses Playwright to load each Crexi search page and listing detail page (Crexi is a heavy SPA). Each detail page is parsed for the 50+ fields, validated against a Zod schema, and pushed.
Can I get broker contact info?
When Crexi exposes it publicly on the listing page, yes — brokerName, brokerCompany, brokerEmail, brokerPhone. The contactDataStatus enum tells you what's available before you try to use it (public_contact_details means you got the email/phone; public_profile_only means just the name).
Can I monitor for new listings only?
Yes. Set watchlistMode: true. The actor stores seen listing IDs and emits only listings new since the last run.
Can I filter by cap rate?
Yes. capRateMin: 6, capRateMax: 9 returns only listings where Crexi published a cap rate in that range.
Can I get historical (sold) data?
listingStatus includes Sold listings when they're still on the search results. For deeper sold history, sales-comparable scraping is on the roadmap as a v0.2 feature.
Can I use this with the Apify API?
Yes. POST to https://api.apify.com/v2/acts/skootle~crexi-commercial-real-estate-scraper/runs.
Can I integrate with Make / Zapier / n8n / Slack?
Yes. Click Integrations on the actor page.
Why does this actor cost more than free CRE scrapers?
This actor ships 50+ fields per listing (vs ~10 from free scrapers), numeric mirrors on every monetary/numeric field, broker-contact-tier enum, watchlist diff mode, and continuous maintenance. If you're feeding the data into an underwriting pipeline or AI agent, the per-record cost pays back in saved engineering and missed-deal time.
Your feedback
Open an issue on the actor page — replies within 48 hours.
Why choose Crexi Commercial Real Estate Scraper
- 50+ fields per listing — every Crexi-visible data point normalized
- Numeric mirrors —
askingPriceUsd,capRatePct,noiUsd,buildingSqft,lotSizeAcresready for analytics - Broker contact tier enum —
contactDataStatustells you what to expect - Portfolio sub-property breakdown — multi-property listings expand into structured sub-records
- Watchlist diff mode — only emits NEW listings since the last run
- Versioned schema —
outputSchemaVersion: '2026-05-08' - Idempotent record IDs —
crexi:listing:<slug>stable across runs - Agent-grade output —
agentMarkdownready to paste into an LLM context
Other Skootle actors you might want to check
- SAM.gov + USAspending Federal Contracts — federal contracting + award history
- Wellfound Jobs Scraper — startup hiring intelligence
- Reddit Subreddit Scraper — sentiment + brand monitoring
- GitHub Trending Repos — daily trending dev repos
- SEC EDGAR Filings Monitor — public-company filings stream
Support and contact
File issues on this actor's page — replies within 48 hours.