September 23, 2026 · 13 min read
Crexi Real Estate Scraper: 240 of 274 Runs Succeeded (2026)
Each record carries 16 fields, including the property name, address, asking price, square footage, and direct listing URL. This Actor provides a dedicated path for commercial real estate practitioners to pull active inventory from all 51 US states (50 + DC) without needing a Crexi account. A thousand results cost $2.00 on Apify's free plan, which covers the first 2,500 results of this Actor. It retrieves every commercial asset class from Industrial to Multifamily, though it is not for users who need historical closed sales or off-market property history.
Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 2,500 results at $0.002 each before platform usage. Open Crexi Real Estate Scraper on Apify and run the prefilled example.
How reliable is Crexi Real Estate Scraper in production?
Across the last 30 days of public runs on the Apify platform, Crexi Real Estate Scraper recorded 274 runs with the following outcomes.
| Outcome | Runs | Share |
|---|---|---|
| Succeeded | 240 | 87.6% |
| Failed | 0 | 0.0% |
| Aborted by the user | 23 | 8.4% |
| Timed out | 11 | 4.0% |
| Total | 274 | 100.0% |
For scheduled operations, these outcomes suggest building a retry mechanism for timed-out runs while treating aborted runs as intentional user stops. Maintain reliable oversight by alerting when the success rate deviates significantly from this trend.
What does it cost to run Crexi Real Estate Scraper?
Each result costs $0.002 on Apify's free plan, which is $2.00 per 1,000 results. Starting a run is charged separately at $0.006 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.002 | $2.00 |
| BRONZE | $0.00167 | $1.67 |
| SILVER | $0.00133 | $1.33 |
| GOLD | $0.001 | $1.00 |
| PLATINUM | $0.001 | $1.00 |
| DIAMOND | $0.001 | $1.00 |
Worked example: collecting 10,000 results costs $20.00 in result charges before run-start fees and platform usage. With 4.0% of runs failing or timing out in the last 30 days, budget for re-running a portion of those batches rather than assuming every run completes.
The number of results written to the dataset is the primary driver of the bill, which is capped by the maxProperties control. Using the example input with maxProperties set to 5 allows for a test run that costs at most $0.01 in result charges.
How do you run Crexi Real Estate Scraper from the API?
None of its 7 controls is strictly required, so the defaults below produce a valid run on their own. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~crexi-real-estate-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"maxProperties":5,"scrapeDetails":false,"propertyTypes":[],"locations":[]}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"maxProperties": 5,
"scrapeDetails": False,
"propertyTypes": [],
"locations": []
}
run = client.actor("crawlerbros~crexi-real-estate-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"maxProperties": 5,
"scrapeDetails": false,
"propertyTypes": [],
"locations": []
}
const run = await client.actor('crawlerbros~crexi-real-estate-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.
Which Crexi Real Estate Scraper inputs matter, and which can you skip?
The schema features 7 controls, all of which are optional, allowing for nationwide searches when left at default. The propertyTypes and locations controls are the most effective for narrowing the result set to relevant inventory.
maxProperties(integer): Maximum number of properties to return. Default:100.scrapeDetails(boolean): Enrich each listing via Crexi's public detail API: full key/value details (year built, zoning, lease terms, NOI...), full description, and subtypes. Adds one request per property. Default:false.propertyTypes(array): Select one or more commercial property types to filter your search. Leave empty to search all property types. Default:[].locations(array): Select one or more U.S. states to search. The scraper will search each state separately and combine results. Leave empty to search nationwide. Default:[].minPrice(integer): Minimum property price filter (in USD).maxPrice(integer): Maximum property price filter (in USD).proxy(object): Optional. The primary data path (Crexi's public search API) works from datacenter IPs with no proxy. Only needed if you want the browser fallback path to run - set Apify Residential (US) in that case.
What does Crexi Real Estate Scraper return?
The output is optimized for competitive analysis and CRM loading, providing structured brokerage and investment type data. The records do not include sold or closed transaction history, which is not exposed publicly on the site.
property_id: Unique Crexi asset identifierproperty_type: Asset class(es) (e.g., Office, Retail, Land)address: Full street addresscity: City namestate: Two-letter state codezip_code: Postal codeprice: Asking / sale price (formatted with$and commas)square_footage: Building or unit sizeimages: Array of listing photos (thumbnail URL from the API)property_url: Direct link to the Crexi detail pagedescription: Listing description (when available)brokerage: Listing brokerage namelisting_status: Status (e.g. On-Market)investment_type: Investment classification (e.g. Value Add)latitude/longitude: Geocoordinates (when disclosed)source: Origin (api)
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open Crexi Real Estate Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Run an initial test with maxProperties set to 5 to confirm the data structure meets your needs before scaling.
- Populate the locations array with two-letter state codes like TX or CA to scope the search to specific US regions.
- Define the propertyTypes array with categories such as Office or Industrial to isolate specific asset classes.
- Set minPrice or maxPrice to filter by budget, noting that listings with non-numeric prices like Negotiable are automatically excluded when these filters are active.
- Toggle scrapeDetails to true if your project requires the details key/value map or net_operating_income from the property detail API.
- Add Apify Residential (US) proxies to the proxy control only if you want the browser fallback path to be available for resilience.
- Verify that the output records contain the property_id and property_url fields before automating exports to your database.
How do you apply it? Three worked playbooks
These are Crexi Real Estate Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Lead generation
Outcome: Build prospect lists of for-sale CRE inventory by city, state, asset class, or price band.
Configure: Set locations to ["FL", "TX"] and maxProperties to 500 while defining propertyTypes with relevant asset classes.
Working method: Execute a state-level pull first, then apply a filter on the city field within your local environment to isolate local prospects.
Deliverable: A spreadsheet of commercial property leads including address, brokerage, and direct listing URL.
Stop condition: The run exits without writing results to the dataset.
Use case 2: Market research
Outcome: Track inventory volume, price ranges, and asset-class mix across markets.
Configure: Leave propertyTypes empty to see all inventory and set maxProperties to 1000 for a representative sample.
Working method: Aggregate the property_type and price fields across multiple states to calculate asset-class density and median pricing.
Deliverable: A comparative report of inventory volume and pricing trends across different asset classes.
Stop condition: The price field is missing from more than 50% of records when no price filters are set.
Use case 3: CRM enrichment
Outcome: Augment broker / owner records with currently listed properties.
Configure: Set scrapeDetails to true and provide exact state codes in the locations array.
Working method: Use the property_id as a unique key to match scraped listings against your CRM and update the listing_status and investment_type fields.
Deliverable: An updated CRM database enriched with current net_operating_income, brokerage info, and property descriptions.
Stop condition: The brokerage field returns empty values for ten consecutive properties.
What breaks, and how do you design around it?
- Only publicly listed properties are scraped - no auth-gated or off-market data.
- Crexi can change its API or page structure; if a particular field disappears the actor will continue but may emit fewer columns.
- City-level URL filtering is not supported (state level is). Filter on
cityafter the fact. - Sold / closed listing history is not in scope.
When the scraper encounters a structural change, it is designed to continue and may emit fewer columns rather than stopping entirely. Users should handle city-level filtering in post-processing as the input schema focuses on state-level targeting.
When should you not use Crexi Real Estate Scraper?
If your workflow depends on historical transaction data or closed sales records, this Actor will not fit because it only scrapes active for-sale listings. For users targeting residential portfolios or different international regions, other tools are better suited. Consider LoopNet.com Commercial Real Estate Scraper for broader commercial alternatives, Zameen Real Estate Scraper for Pakistan, Lamudi Real Estate Scraper for the Philippines, Domain.com.au Real Estate Scraper for Australia, Property Finder Scraper for the Middle East, Imovirtual Real Estate Scraper for Portugal, Rightmove Property Scraper for the UK, or Zoopla UK Property Scraper for UK rental and sale data.
What should you check before trusting the output?
- Check that the state field correctly matches your input locations for every record in the dataset.
- Verify that the price field is either a formatted currency string or omitted entirely for negotiable listings.
- Alert if a run returns the crexi_blocked type in a single record, signaling that both the API and browser paths were unsuccessful.
- Confirm that records contain at least one thumbnail link in the images array.
- Monitor the square_footage field for the SF suffix to ensure consistency for area-based calculations.
None of this proves a record is correct. It gives a scheduled Crexi Real Estate Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
What is the cost for 1,000 Crexi property results?
On Apify's free plan, 1,000 results cost $2.00 in result charges. This is the highest tier price, and users on paid plans pay less. Note that this does not include platform usage fees or the run-start fee, which is charged every time a run begins regardless of whether results are returned.
Is a proxy required for scraping Crexi?
No proxy is required for the primary data path. The Actor communicates with Crexi's public search API and functions from datacenter IPs. You only need a proxy if you enable the browser fallback path, in which case the Apify Residential (US) group is recommended.
How reliable is the Crexi Real Estate Scraper for automation?
The Actor has a strong track record, with 240 of 274 public runs in the last 30 days finishing successfully. Only about 4 in a hundred runs failed or timed out during that period, making it suitable for scheduled inventory tracking.
Can I filter by specific cities like Houston or Los Angeles?
The input schema supports filtering by state rather than by city. To obtain data for a specific city, you should run the scraper for the entire state and then filter your results locally using the city field included in every record.
Why are some prices missing from the scraped data?
Sellers on Crexi often list properties as Negotiable or hide the price. If you do not set a minPrice or maxPrice, these records are returned with the price field omitted. When price filters are active, unpriced listings are automatically excluded to ensure filter accuracy.
Where to go next
When you are ready to run it, open Crexi Real Estate Scraper on Apify; the free plan covers up to 2,500 results a month.
Start with the Crexi Real Estate Scraper Actor page for the current input schema, pricing tier, and run history.
It is part of the Real Estate Scrapers, which puts every related Actor on one page with its price and run history.
If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:
- Property listing scrapers covers 25 Actors in this family.
Readers running Crexi Real Estate Scraper commonly pair it with:
- LoopNet.com Commercial Real Estate Scraper: Scrape commercial real estate listings, broker profiles, and businesses for sale from LoopNet.com.
- Zameen Real Estate Scraper: Scrape Pakistani real estate listings from zameen.com - houses, plots, and commercial property for sale or rent.
- Lamudi Real Estate Scraper: Scrape real estate listings from lamudi.com.ph - condos, houses, apartments, land and commercial property for sale or rent across the Philippines.
- Domain.com.au Real Estate Scraper: Scrape property listings from Domain.com.au with addresses, prices, bedrooms, images, inspections, agents.
- Property Finder Scraper: Scrape property listings from Property Finder (UAE, Saudi Arabia, Qatar, Bahrain, Egypt).
- Imovirtual Real Estate Scraper: Scrape property listings from Imovirtual.com - Portugal's #1 real estate portal.
- Rightmove Property Scraper: Scrape Rightmove - UK's largest property portal.
- Zoopla UK Property Scraper: Scrape Zoopla.co.uk for-sale and to-rent property listings with price, bedrooms, bathrooms, address, postcode, agent, images, description, features.
Related guides:
- United Real Estate Homes for Sale Scraper: 3 Practical Use Cases
- ZonaProp Scraper: Operating Playbooks and Workflows
- Idealista Scraper Playbooks: 3 Ways to Extract Real Estate Data
- StreetEasy Scraper: Operational Workflows and Playbooks
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-23.
Actor last updated by its maintainers on 2026-08-07.
Run outcome figures cover the 30 day public window ending 2026-09-23.
● Featured actors
Crexi Real Estate Scraper
Scrapes commercial real estate listings from Crexi.com including property details, pricing, location, images, and investment metrics.
Run on Apify ↗