Crexi Commercial Real Estate Scraper & Deal Screener
Pricing
from $2.00 / 1,000 listing scrapeds
Crexi Commercial Real Estate Scraper & Deal Screener
Scrape Crexi commercial real-estate listings and underwrite them: price/SF, price/unit, DSCR, debt yield, cash-on-cash and a transparent 0-100 Deal Score.
Pricing
from $2.00 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Zapticx
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Extract commercial real-estate listings from Crexi — location and coordinates, building and lot size, property class, zoning, broker details, images and marketing copy — then screen and rank them, with transparent loan sizing and debt-service math on top of the asking price.
Most Crexi scrapers hand you rows. This one hands you typed, deduplicated records that tell you, listing by listing, exactly which numbers came from Crexi and which were calculated — and never invents the ones Crexi withholds.
⚠️ Read this before you rely on cap rate, NOI or Deal Score
As of 14 September 2026, Crexi no longer discloses cap rate, NOI, unit count, occupancy or year built in its public listing data. Those fields come back masked (
*****) to anyone who is not signed in to Crexi. This Actor does not sign in, does not bypass access controls, and does not guess — so those fields, and every metric that depends on them (DSCR, debt yield, cash-on-cash, break-even occupancy, Deal Score), are returned asnullwith a stated reason.You are not charged the premium rate for analysis that could not be produced. A listing is billed at
listing-analyzed($0.008) only when real yield analysis was computed from data Crexi actually disclosed; otherwise it is billed atlisting-scraped($0.002). Every record states which, indataQuality.billedEvent.Everything else below — search, filtering, location data, physical characteristics, brokers, images, pagination beyond Crexi's 1,499-result cap — works as described.
What it does
- Searches Crexi by city, state, ZIP, property type, asking price and cap rate. Crexi's city matching also covers neighborhoods and nearby suburbs, so pair a city with its state for precise geographic targeting.
- Extracts deep listing data — location and coordinates, building size, lot size, number of buildings, stories, zoning, building class, sale condition, property type and subtype, auction terms, marketing copy, investment highlights, images and publicly listed broker details.
- Calculates price-based and financing metrics — price per square foot, loan amount, monthly payment and annual debt service from the asking price plus your financing assumptions.
- Computes yield metrics and a 0–100 Deal Score when Crexi discloses a cap rate or NOI for a listing. See the warning above: in public data today, it does not.
- Breaks past Crexi's result ceiling. Crexi caps any single query at 1,499 results. This Actor automatically splits a large search into smaller non-overlapping queries and merges them, de-duplicated by listing ID.
Who it's for
| Use case | How this helps |
|---|---|
| Deal sourcing | Pull an entire metro or asset class and filter by price, size, type and location |
| Underwriting prep | Arrive at your model with price/SF, loan amount and debt service already computed |
| Pipeline building | Typed, deduplicated records with canonical listing IDs and URLs |
| Market research | Pull an entire metro or asset class and analyse pricing distribution |
| Broker lead generation | Build a brokerage contact list from publicly listed broker profiles |
| Property comparisons | Normalised, typed fields make listings directly comparable in Excel |
| AI & automation pipelines | Predictable JSON for agents, n8n, Make and Zapier |
Three modes
1. Property Search
Find listings by location and filters.
{"mode": "search","cities": ["Dallas"],"states": ["TX"],"propertyTypes": ["Multifamily"],"maxPrice": 5000000,"maxResults": 100}
2. Analyze Listing URLs
Deep-extract specific listings you already have.
{"mode": "urls","listingUrls": ["https://www.crexi.com/properties/2522223/georgia-glenrose-apartments"],"downPaymentPercent": 30,"interestRatePercent": 6.75,"amortizationYears": 30}
3. Deal Finder
Narrow to Crexi's own yield-filtered inventory and rank what comes back.
{"mode": "dealFinder","states": ["TX"],"propertyTypes": ["Multifamily"],"maxPrice": 4000000,"minCapRate": 6,"downPaymentPercent": 25,"interestRatePercent": 6.5,"amortizationYears": 30,"closingCostsPercent": 2,"maxResults": 100}
minCapRate is applied server-side by Crexi, so the listings really are restricted to those whose cap rate clears 6% — but Crexi does not tell you the value, so source.capRate comes back null. That is a genuine narrowing capability, not a disclosure one.
minDscr and minDealScore are deliberately omitted here. They need a Crexi-disclosed cap rate or NOI. Set them today and nothing can be evaluated — the Actor will say exactly that, and will never report an untested listing as one that failed your thresholds.
Output structure
Every record separates what Crexi published from what this Actor computed. A calculated value is never written into source.
{"rank": 1,"scrapedAt": "2026-09-14T18:12:04Z","source": { // Published by Crexi"listingId": 1292270,"listingUrl": "https://www.crexi.com/properties/1292270/texas-2-story-living-and-retail","propertyName": "2 Story living and Retail","listingType": "Sale","askingPrice": 850000.0,"buildingSizeSqFt": 2000, // from /assets/{id}/summary"lotSizeAcres": 0.12,"numberOfBuildings": 1,"stories": 2,"zoning": "B3","buildingClass": "C","saleCondition": "For sale by owner","capRate": null, // withheld from public Crexi data"noi": null, // withheld from public Crexi data"units": null, // withheld from public Crexi data"occupancyPercent": null, // withheld from public Crexi data"yearBuilt": null, // withheld from public Crexi data"city": "Taylor", "state": "TX", "zip": "76574","latitude": 30.57, "longitude": -97.41,"brokers": [ { "name": "...", "brokerageName": "...", "profileUrl": "..." } ],"images": ["https://..."],"daysOnMarket": 1063},"analysis": { // Calculated by this Actor"pricePerSqFt": 425.0, // 850,000 / 2,000"downPayment": 212500.0, // your 25% assumption"loanAmount": 637500.0,"closingCosts": 17000.0,"totalCashRequired": 229500.0,"monthlyMortgagePayment": 4505.62,"annualDebtService": 54067.44,"pricePerUnit": null, // needs unit count"dscr": null, // needs NOI"debtYield": null, // needs NOI"cashOnCashReturn": null, // needs NOI"dealScore": null,"dealScoreConfidence": 0.0,"dealScoreUnavailableReason": "insufficient_financial_data: ... Cap rate and NOI were not available in the public Crexi data returned for this listing."},"dataQuality": { // What could not be computed, why, and what you paid"analysisProduced": false,"billedEvent": "listing-scraped","analysisUnavailableReason": "public_crexi_data_excludes_cap_rate_and_noi","unavailableMetrics": { "dscr": "noi_and_cap_rate_unavailable", "...": "..." },"derivedFromOtherFields": [],"hasCapRateFromSource": false,"hasNoiFromSource": false,"financingAssumptionsApplied": true,"financingAssumptions": { "downPaymentPercent": 25.0, "interestRatePercent": 7.0, "...": "..." }}}
When Crexi does disclose a cap rate or NOI for a listing, source.capRate / source.noi are populated, the yield metrics and Deal Score are computed, analysisProduced becomes true and billedEvent becomes listing-analyzed.
Three dataset views are provided in the Output tab: Listings overview, Investment analysis and Broker leads.
Calculated metrics
Metrics are computed from the listing's own figures plus the financing assumptions you supply. The right-hand column says what each one needs — and today, anything needing NOI or cap rate will be null.
| Metric | Formula | Available today? |
|---|---|---|
| Price per SF | Asking price ÷ building SF | ✅ where Crexi discloses a building size |
| Price per unit | Asking price ÷ unit count | ❌ unit count is withheld |
| Down payment, loan amount, closing costs | From asking price × your assumptions | ✅ |
| Monthly payment, annual debt service | Standard amortising payment × 12 | ✅ |
| NOI, cap rate | Crexi's published figures, or derived from each other | ❌ both withheld |
| DSCR, debt yield, cash flow, cash-on-cash, break-even occupancy | Need NOI | ❌ |
| Deal Score | Needs cap rate or NOI | ❌ |
The rules this Actor follows
- Nothing is invented. If a metric needs data that isn't there, it returns
nullplus a reason indataQuality.unavailableMetrics— for example"dscr": "noi_and_cap_rate_unavailable". Values Crexi masks (*****) are treated as unavailable, never parsed as zero and never passed through as text. - No silent assumptions. Financing terms come only from your input. Omit them and every leverage metric returns
nullwith"financing_assumptions_not_provided"— the Actor will not quietly pick a rate for you. - Derived values are labelled. If NOI was reconstructed from price × cap rate rather than published by Crexi, it appears in
dataQuality.derivedFromOtherFields. - Placeholders are treated as missing. Some auction listings carry a $1 placeholder price; these never become ratios. Crexi's asterisk masks are handled the same way.
- You only pay the premium rate for analysis you actually received. See Pricing below.
Deal Score
A deterministic 0–100 score. The same listing with the same assumptions always scores the same — it never depends on the other listings in your run.
| Component | Weight | 0 points at | 100 points at |
|---|---|---|---|
| Cap rate | 30% | 4.0% | 9.0% |
| DSCR | 25% | 1.00 | 2.00 |
| Debt yield | 20% | 7.0% | 15.0% |
| Cash-on-cash return | 15% | 0% | 15% |
| Occupancy | 10% | 70% | 97% |
Each component is scored on a linear ramp between those anchors, clamped at both ends, then weighted.
Why the cap-rate ramp stops at 9%. In US commercial real estate, yield materially above ~9% usually signals higher risk — a weaker submarket, weaker tenant credit, or deferred condition — rather than a better asset. Letting it keep earning points would rank the riskiest listings highest. DSCR and cash-on-cash carry no such ambiguity, so their ramps extend further.
Only available components are scored, and the total is renormalised over them, so a listing isn't punished for non-disclosure. dealScoreConfidence reports how much of the total weight had real inputs (1.0 = everything).
If components covering less than 50% of the weight are available, the score is null with a reason — never a fabricated number. A Deal Score requires (a) Crexi disclosing a cap rate or NOI, and (b) you supplying financing assumptions. Since (a) is currently not met by public Crexi data, the Deal Score is null on public listings today — and those listings are billed at the basic rate accordingly.
One honest caveat about the model itself: with a fixed set of financing assumptions, DSCR, debt yield and cash-on-cash are all algebraic functions of the cap rate, so the score is in practice driven by cap rate and occupancy rather than by five independent signals. dealScoreBreakdown shows every input, so you can see this for yourself.
dealScoreBreakdown returns every component, its weight, the input value and its sub-score, so any ranking can be audited. Bands: Excellent ≥80, Strong ≥65, Moderate ≥50, Weak ≥35, Poor <35.
Important: what Crexi actually discloses publicly
Measured on 2026-09-14 across 95 listings in four disjoint samples (6 states, 8 property types, priced and unpriced):
| Field | Public availability |
|---|---|
| Asking price, property type, subtype | ~100% |
| Location, coordinates, ZIP, county | ~100% |
| Lot size | ~85% |
| Building size | ~55% (varies by asset class; land listings have none) |
| Buildings, stories, zoning, class, sale condition | where the broker filled them in |
| Brokers, images, marketing copy, auction terms | ~100% |
| Cap rate | 0% — masked |
| NOI | 0% — masked |
| Unit count | 0% — masked |
| Occupancy | 0% — masked |
| Year built | 0% — masked |
Also masked: APN, tenancy, investment type, net rentable area, parking, pro-forma cap rate and NOI, and lease terms. Gross income and operating expenses have never been published by Crexi at all.
The decisive test: 25 listings were selected using Crexi's own capRateMin=6 filter — listings that provably carry a cap rate, since the filter narrowed TX Multifamily from 2,823 to 361. All 25 returned ***** for cap rate. The masking is unconditional, not a per-listing broker choice.
What minCapRate is still good for. Crexi applies it server-side, so it genuinely narrows your results to higher-yielding inventory. It just cannot tell you the number. That is a filtering capability, not a disclosure one, and this Actor will never present a filtered result as an observed cap rate.
Pricing
Pay-per-event, charged once per listing that actually reaches your dataset:
| Event | Price | When |
|---|---|---|
listing-scraped | $0.002 / listing | The listing was delivered, but no yield analysis could be produced |
listing-analyzed | $0.008 / listing | The listing was delivered with real yield analysis — cap rate, NOI, DSCR, debt yield, cash-on-cash or Deal Score computed from data Crexi disclosed |
Exactly one of the two is charged per listing — never both. Loan sizing and debt service computed from the asking price and your own assumptions do not qualify for the premium event on their own. Listings that are skipped, fail to fetch, or are screened out are never charged at all.
Given what Crexi currently discloses, expect essentially every listing to bill at listing-scraped. Each record tells you which event it incurred, in dataQuality.billedEvent.
Performance
- Runs on Crexi's JSON API over plain HTTP. No browser, so no browser overhead.
- Bulk fetching: up to 1,499 listings per request, so 1,000 search results arrive in a single search request. Details and the public summary are then fetched per listing.
- A 20-listing run completes in roughly 5–10 seconds.
- Bounded retries with exponential backoff; repeated failures are reported, never hidden.
- Concurrency is configurable (default 8) and results are de-duplicated by listing ID.
Integrations
Export as JSON, CSV, Excel, XML or HTML, or pull from the Apify API. Works with Make, Zapier, n8n, Google Sheets, and any AI agent that can read JSON. Predictable types mean no string-parsing downstream: 2450000.0, not "$2,450,000".
Limitations
Stated plainly, because underwriting decisions depend on them:
- Sale and auction listings only. Crexi's lease inventory is served by a separate system this Actor does not cover. Lease listings also carry no cap rate or NOI, so investment analysis would not apply to them.
- Broker phone numbers and email addresses are not included. Crexi does not publish them anonymously, and this Actor does not attempt to access anything behind authentication.
- Cap rate, NOI, unit count, occupancy and year built are masked in public Crexi data (verified 2026-09-14) and are therefore always
null. This Actor does not sign in to Crexi and does not attempt to unmask them. See the table above. - Where a cap rate is available, it is as advertised by the listing broker. Marketing figures, not audited financials. Treat any score as a screening aid, not investment advice.
minDscrandminDealScorecannot currently evaluate anything, because the metrics they test are unavailable. The Actor reports such listings as unscreenable and never as failed.- Building size comes from
GET /assets/{id}/summary, the public endpoint crexi.com itself calls. Some listings — land in particular — simply have none. - Crexi caps any single query at 1,499 results. The Actor partitions automatically, but a search too broad to subdivide will log a warning and return what it could reach — narrow by state, city or price range to reach the rest.
- Offering memoranda and document downloads are gated behind Crexi accounts and confidentiality agreements, and are not retrieved.
- Undocumented upstream API: field availability can change if Crexi changes its platform.
Responsible use & data source
Data comes from Crexi's public listing endpoints — the same information any visitor sees on a listing page. The Actor does not log in, does not use credentials, does not bypass access controls, and does not retrieve anything gated behind authentication or a confidentiality agreement. Broker information is limited to what brokers publish on their own public profiles.
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Crexi. Output is for research and screening. It is not investment advice — verify every figure against the offering memorandum and your own due diligence before transacting.
FAQ
Why is dealScore null?
Cap rate and NOI were not available in the public Crexi data returned for the listing, so no yield component could be scored. The exact reason is in analysis.dealScoreUnavailableReason, and dataQuality.analysisUnavailableReason gives the machine-readable code. Note this says the data was not available to us — Crexi still filters on cap rate server-side, so it clearly holds the figure; it just does not disclose it to anonymous callers.
Was I charged for analysis I didn't get?
No. A listing only incurs the premium listing-analyzed event when real yield analysis was produced. Otherwise it incurs listing-scraped at a quarter the price. Check dataQuality.billedEvent on any record.
Why does minCapRate return listings with a null cap rate?
Because Crexi applies the filter on its side and withholds the value from ours. The filtering is real; the disclosure is not.
Why are DSCR and cash-on-cash null? They need both financing terms (which you supply) and an NOI or cap rate (which Crexi currently withholds). Supplying financing assumptions alone gets you loan sizing and debt service, but not DSCR.
Can I get more than 1,499 results?
Yes. Set maxResults higher and the Actor splits the search automatically. Very broad searches may still be limited — add a state, city or price range.
Why does a listing show a cap rate in source but a different one in analysis?
It shouldn't — analysis.capRate mirrors the source value when Crexi discloses one. It only differs when Crexi disclosed NOI but no cap rate, in which case it's derived and flagged in derivedFromOtherFields.
Does it get lease listings? No — see Limitations.
Why does a city search return nearby or unexpected places? Crexi matches city names against neighborhoods and nearby suburbs as well as the city itself — searching "Austin" can return listings in Chicago's Austin neighborhood, and "Dallas" can return neighbouring Farmers Branch. Always pair a city with its state for precise targeting; add ZIP codes to narrow further.
Do I need a proxy? Usually not. If you see access-restricted errors, enable Apify Proxy with residential groups in the Actor's proxy settings.
Are cap rates reliable? When available, they're broker-advertised marketing figures. The Deal Score deliberately stops rewarding cap rates above 9% so that implausible or high-risk yields don't top your ranking.
Will cap rate and NOI come back?
If Crexi restores public disclosure, this Actor picks them up with no change on your side: the parser already handles both the current /assets/{id}/summary shape and the older inline one, and billing follows whatever is actually produced.