Crexi Scraper for Commercial Real Estate avatar

Crexi Scraper for Commercial Real Estate

Pricing

from $3.00 / 1,000 validated crexi listings

Go to Apify Store
Crexi Scraper for Commercial Real Estate

Crexi Scraper for Commercial Real Estate

Scrape public Crexi commercial real estate listings for sale or lease by market or official URL. Filter by asset class, price, cap rate, and size, then optionally enrich with public listing and broker details. No Crexi cookies or connected session required.

Pricing

from $3.00 / 1,000 validated crexi listings

Rating

0.0

(0)

Developer

KazKN

KazKN

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Crexi search input flowing through public-data validation into a structured listing table

The Crexi Scraper for Commercial Real Estate Listings collects public Crexi sale and lease listings and turns them into a clean, structured Apify Dataset. Search a US market manually or paste an official Crexi URL, apply asset-class, price, cap-rate, and size filters, then optionally enrich each row with public property and broker details.

This is an unofficial Crexi scraper, not an official Crexi API. This unofficial Actor is not affiliated with, sponsored by, or endorsed by Crexi. It works without Crexi cookies, a connected Crexi session, a Crexi API key, or user-supplied scraping credentials.

Apify Store Pay per event Public data No login

Best for: commercial real estate market research, CRE deal sourcing, acquisition lists, broker lead review, cap-rate analysis, public listing exports, Google Sheets/CSV/Excel workflows, CRM enrichment, and data pipelines.

Explore the Actor: Run Actor Β· Input Β· Output Β· Pricing Β· API Β· Examples Β· Support

πŸ” Need LoopNet and Crexi together? Use Commercial Real Estate Brokerage Intelligence β€” LoopNet + Crexi to scrape both platforms in one workflow, normalize the records, and export one broker-ready market file. Choose this Actor when you want a Crexi-only run.

Four-step Crexi workflow: search, filter, validate, and export

These are original conceptual illustrations generated for this Actor, not Crexi screenshots. They explain the public-data workflow and do not imply Crexi endorsement.

Workflow at a glance: 🌐 public Crexi search or URL β†’ 🎯 transaction, asset, price, cap-rate, and size filters β†’ βœ… validation and deduplication β†’ πŸ“Š Dataset, API, Google Sheets, CSV, or Excel.

What can this Crexi scraper do?

NeedWhat you get
Crexi scraperPublic Crexi commercial real estate listings in a flat, normalized dataset
Commercial real estate APIStructured rows accessible through Apify API, integrations, exports, and webhooks
Commercial real estate listings scraperSearch by state, city or county, asset class, price, cap rate, size, and transaction type
Sale listings scraperPublic for-sale listings with asking price, property, financial, and source fields when available
Lease listings scraperPublic for-lease spaces with comparable annual rent and property fields when available
Broker data workflowPublic broker name, company, profile, phone, email, and license fields only when sufficiently proven
Cap-rate dataSource-listed cap rate or a comparable rate calculated from source-declared NOI and asking price
Spreadsheet-ready exportDownload JSON, CSV, Excel, XML, RSS, or connect the Dataset to a workflow

Why use this Crexi commercial real estate scraper?

Commercial real estate teams often repeat the same manual process: open a market, copy listing details, clean the rows, check the asking price, and review broker information. This Actor turns that public Crexi workflow into one repeatable Apify run.

  1. πŸ”Ž Search a market such as Austin, Dallas, Phoenix, Miami, Chicago, Los Angeles, or New York.
  2. πŸ’Ό Choose for-sale listings, for-lease spaces, or both.
  3. 🎯 Add only the filters that matter: asset class, price or rent, cap rate, and building size.
  4. πŸ“‹ Keep public listing and broker enrichment optional so broad exports stay fast.
  5. βœ… Receive validated rows plus a sanitized RUN_SUMMARY that explains completion or shortage.
  6. πŸ“€ Export the Dataset to a spreadsheet, CRM, warehouse, BI tool, or your own API.

Apify adds the operational layer around the scraper: a point-and-click Input tab, API access, Dataset exports, scheduling, integrations, retries, run history, and spend controls. The Crexi V1 itself intentionally does not claim authenticated data, closed-sale verification, private ownership data, monitoring, or transaction tracking.

A public Crexi API alternative for market research

If you need structured public Crexi listings without building a browser workflow yourself, this Actor provides a point-and-click and API-accessible alternative for market research, acquisition screening, broker review, and spreadsheet exports. For broader workflow examples and a combined market-file use case, see the LoopNet + Crexi Listings API resource hub.

How to scrape Crexi listings

  1. Open the Input tab.
  2. Choose manual search or URL mode.
  3. For manual mode, enter a US state and optionally a city or county.
  4. Select sale, lease, or both, then add the filters you need.
  5. For URL mode, paste one or more complete public Crexi search or direct listing URLs.
  6. Start with a small maxResults value and keep public detail enrichment disabled for the first connectivity check.
  7. Run the Actor and inspect both the Dataset and the RUN_SUMMARY record.
  8. Download the output or consume it through the Apify API.

Run the Crexi scraper through the Apify API

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client
.actor('kazkn/crexi-search-actor')
.call({
state: 'TX',
city: 'Austin',
transactionTypes: ['sale'],
assetClasses: ['office'],
maxResults: 10,
includeListingDetails: false,
});
console.log('Dataset ID: ' + run.defaultDatasetId);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("kazkn/crexi-search-actor").call(run_input={
"state": "TX",
"city": "Austin",
"transactionTypes": ["sale"],
"assetClasses": ["office"],
"maxResults": 10,
"includeListingDetails": False,
})
print(run["defaultDatasetId"])

cURL

curl -X POST \
"https://api.apify.com/v2/acts/kazkn~crexi-search-actor/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"state": "TX",
"city": "Austin",
"transactionTypes": ["sale"],
"assetClasses": ["office"],
"maxResults": 10,
"includeListingDetails": false
}'

Input

The Input tab contains the complete schema, tooltips, accepted values, and friendly Console labels. Use the table below as a quick reference.

Input fieldPurposeDefault or rule
stateUS state code or English state name for manual modeRequired for manual searches
cityOptional city or county inside the selected stateEmpty means statewide search
assetClassesFilter office, retail, industrial, multifamily, land, hotel, mixed-use, or specialtyEmpty includes supported classes
transactionTypesSelect sale, lease, or bothsale
maxResultsGlobal target for valid rows200; it is not an inventory guarantee
includeListingDetailsFetch additional public listing and broker fieldsfalse
startUrlsOfficial public Crexi search or direct listing URLsEmpty; URL mode takes priority
priceMin, priceMaxSale price or comparable annual lease-rent bounds in USDOptional, inclusive
capRateMin, capRateMaxNormalized cap-rate bounds expressed as percentagesOptional, inclusive
buildingSizeMin, buildingSizeMaxBuilding or available-space bounds in square feetOptional, inclusive
outputSortByOrder rows by source order, size, asking amount, or days on marketsource_default

Unknown fields and contradictory ranges are rejected before collection starts. The Console prefills are interface helpers; API callers should provide the values they need explicitly.

Manual mode

How to scrape Crexi manually

Manual mode creates a bounded public search for the selected state, optional city or county, transaction types, asset classes, numeric filters, and result target. Sale and lease rows remain distinguishable through transaction_type.

City and state example

{
"state": "TX",
"city": "Austin",
"transactionTypes": ["sale", "lease"],
"assetClasses": ["office", "industrial"],
"priceMin": 1000000,
"buildingSizeMin": 5000,
"maxResults": 100,
"includeListingDetails": false
}

State-only example

{
"state": "Nevada",
"transactionTypes": ["sale"],
"maxResults": 50,
"outputSortBy": "asking_amount_asc"
}

Authoritative URL mode

When startUrls contains a recognized official Crexi URL, URL mode is authoritative. Manual location, transaction, asset-class, and numeric fields cannot broaden or rewrite that URL's contract.

The Actor accepts public Crexi search URLs and direct listing URLs. Each URL keeps its own immutable search contract. Duplicate listing IDs and canonical URLs are removed before output.

{
"startUrls": [
{
"url": "https://www.crexi.com/properties/123456/example-office"
}
],
"maxResults": 25,
"includeListingDetails": true
}

URL mode is capped at 200 rows per run. Malformed, contradictory, unsafe, redirected, or unresolved URLs fail closed. If an advanced URL criterion cannot be represented exactly, supported criteria are preserved and the run is marked partial rather than silently claiming an exact match.

For an official URL that contains a criterion the V1 contract cannot represent exactly, the Actor uses a bounded best-effort interpretation: supported constraints remain enforced, unsupported constraints are reported, and the run status makes the limitation visible.

Input suppliedBehavior
Official Crexi search URLScrapes the supplied public search and preserves supported URL criteria
Direct Crexi listing URLScrapes the supplied listing and returns its canonical public record
Crexi URL plus manual fieldsThe URL remains authoritative; manual fields do not broaden it
No URLUses manual state/city, transaction, asset, numeric, and sort inputs
Multiple URLsKeeps each URL's contract and deduplicates repeated listing IDs or canonical URLs

Key features

  • Manual market search: state-wide, city, or county searches using public Crexi inventory.
  • URL-first scraping: paste the exact public Crexi search or listing URL you already configured.
  • Sale and lease support: request either transaction type or both in one run.
  • Commercial asset filters: office, retail, industrial, multifamily, land, hotel, mixed-use, and specialty.
  • Numeric filters: price or annual lease rent, cap rate, and building or available-space size.
  • Output sorting: order final rows by source order, building size, asking amount, or days on market.
  • Public enrichment: request additional listing and broker facts without making private-data claims.
  • Validated dataset: flat scalar rows with explicit not public values when the source does not expose a fact.
  • Run transparency: complete, partial, and technical_failure statuses in RUN_SUMMARY.
  • Apify workflow support: API access, Dataset exports, schedules, integrations, run history, and spend limits.

Output

Results are written to the run's default Apify Dataset. Use the Output tab to inspect the schema, then download the Dataset as JSON, CSV, Excel, XML, or RSS, or access it through the Apify API and integrations.

What data can this Crexi scraper extract?

Data groupRepresentative fields
Identitysource, source_listing_id, listing_url, scraped_at
Locationaddress, city, state, zip, country, market
Transactiontransaction_type, status, asking_price_or_rent, currency
Financialsasking_amount_usd, price_per_sqft, price_per_unit, rent_per_sqft_per_year, estimated_annual_rent, estimated_monthly_rent, noi, cap_rate
Propertyasset_class, sub_type, building_size_sqft, total_available_sqft, lot_size_sqft, lot_size_acres, units, year_built, days_on_market
Public brokerage databroker_name, broker_company, broker_company_website, broker_phone, broker_email, broker_profile_url, broker_license_numbers
Quality and enrichmentenrichment_status, data_quality_notes

If Crexi does not expose a fact publicly, the value remains not public. The Actor does not invent a value merely to fill a column.

Output example

{
"source": "crexi",
"source_listing_id": "123456",
"listing_url": "https://www.crexi.com/properties/123456/example-office",
"transaction_type": "sale",
"asset_class": "office",
"status": "active",
"address": "100 Congress Ave, Austin, TX 78701",
"city": "Austin",
"state": "TX",
"asking_price_or_rent": "$1,500,000",
"currency": "USD",
"asking_amount_usd": 1500000,
"building_size_sqft": 10000,
"cap_rate": "6%",
"broker_name": "not public",
"broker_company": "not public",
"enrichment_status": "search_only",
"scraped_at": "2026-01-01T00:00:00.000Z"
}

The example is illustrative. Field availability depends on the public listing, the transaction type, the selected filters, and whether public detail enrichment is enabled.

Output field reference

Each row is a flat scalar record designed for spreadsheets, APIs, CRM imports, and BI tools.

{
source: "crexi",
source_listing_id: string,
listing_url: string,
scraped_at: string,
address: string,
city: string,
state: string,
zip: string,
country: string,
market: string,
transaction_type: "sale" | "lease",
asset_class: string,
sub_type: string,
status: string,
asking_price_or_rent: string,
currency: string,
asking_amount_usd: number | string,
price_per_sqft: string,
price_per_unit: string,
rent_per_sqft_per_year: string,
estimated_annual_rent: string,
estimated_monthly_rent: string,
noi: string,
cap_rate: string,
building_size_sqft: number | string,
total_available_sqft: number | string,
lot_size_sqft: number | string,
lot_size_acres: number | string,
units: number | string,
year_built: number | string,
days_on_market: number | string,
broker_name: string,
broker_company: string,
broker_company_website: string,
broker_phone: string,
broker_email: string,
broker_profile_url: string,
broker_license_numbers: string,
enrichment_status: string,
data_quality_notes: string
}

Public enrichment

Public listing and broker enrichment

Set includeListingDetails to true to request additional public detail pages and endpoints. Enrichment is bounded by the run deadline and may add property, company, broker, phone, email, profile, or license fields only when the public evidence is sufficiently matched.

Missing or weakly matched facts remain not public. The V1 does not access authenticated contact data, gated account data, or private datasets. Keep enrichment disabled for the fastest broad market export.

Completion and failures

Completion, partial runs, and failures

The RUN_SUMMARY key-value record contains a sanitized status, row counts, and bounded task outcomes:

  • complete: the requested target was reached, or a natural inventory shortage was proven.
  • partial: compliant rows were preserved, but a deadline, technical limit, or representable-URL limitation prevents a complete claim.
  • technical_failure: no usable row survived a total collection incident.

The Actor never pads results with off-filter listings. A platform SUCCEEDED status is not a data-quality guarantee; inspect the stored input, logs, Dataset, filters, uniqueness, and RUN_SUMMARY together.

Who is this Crexi scraper for?

PersonaUse case
CRE brokersReview public inventory, asking terms, and broker identity by market
Investment sales teamsBuild sale and lease market scans with repeatable filters
Acquisition teamsExport property rows into underwriting and diligence workflows
REITs and family officesCompare public inventory without rebuilding the same spreadsheet
Lenders and appraisersReview asking-price, size, cap-rate, and market signals
Data teamsUse the Dataset as a commercial real estate API source
Lead-generation teamsReview public broker fields where the source exposes them

Try the Crexi scraper with a small run

For a first validation, use a narrow city search with maxResults: 10 and includeListingDetails: false. This confirms connectivity, filters, output shape, and cost before you scale to a larger market.

Apify account credits and any plan-specific discounts are shown in the live Store interface. Always check the Pricing tab before starting a large export.

Pricing

This Actor uses Apify's pay-per-event model. The current Store configuration is intentionally simple:

EventCurrent priceWhen
Actor start$0.00005 per runOnce when the scraping run starts
Validated Crexi listing$0.003 per listingEach validated row written to the default Dataset
Public enrichmentIncluded in the listing eventNo separate V1 contact-unlock event
Platform usage pass-throughDisabledThe Store does not add a separate platform-usage charge in the current configuration

Approximate event cost:

Validated listingsListing charges
10$0.03
100$0.30
1,000$3.00

The exact customer price can vary with Apify plan discounts. The live Pricing tab is authoritative. Do not confuse a requested maxResults target with a guaranteed number of billable rows: only validated rows written to the Dataset trigger the result event.

Tips for reliable runs

  • Start with maxResults: 10 for a quick public-data check.
  • Use one state and one city or county for a focused manual search.
  • Keep includeListingDetails disabled for the fastest bulk export.
  • Use a complete official URL when you already configured a precise Crexi search.
  • Keep the URL query parameters intact; URL mode is authoritative.
  • Use outputSortBy when a spreadsheet or review workflow needs predictable ordering.
  • Split very broad markets into smaller runs instead of requesting an unnecessarily large target.
  • Treat fewer rows as a possible natural shortage or strict filter result; consult RUN_SUMMARY before changing the query.
  • Review the Dataset and sanitized summary together rather than relying only on the platform run badge.

This Actor is an unofficial tool for public data. It does not bypass a login, request cookies, or collect private account data. You are responsible for choosing a lawful purpose, respecting Crexi's terms, handling personal data appropriately, and complying with applicable privacy, copyright, and data-protection rules.

Public broker fields can still contain personal data. Use only information you have a legitimate reason to process, protect exported data, and consult qualified legal counsel when your use case is uncertain. This section is general information, not legal advice.

Security

The Actor uses public Crexi pages and endpoints without cookies or a connected session. It does not request user-supplied scraping credentials. Public URLs and outbound targets are validated, and diagnostics exclude query strings, raw response bodies, and secrets.

The Actor never claims that an unavailable public value is known. Unsupported or unsafe URL inputs fail closed instead of being silently redirected into a broader search.

Limits

Known boundaries

  • 🧭 Manual searches require a US state; city and county matching depends on public Crexi inventory.
  • πŸ”— URL mode returns at most 200 rows per run.
  • πŸ”’ maxResults is a target, not a promise that enough matching public listings exist.
  • πŸ“‹ Public broker contacts are optional and never guaranteed.
  • πŸ•’ Enrichment and very broad searches can take longer than a small filtered run.
  • 🧾 Sold, closed, off-market, authenticated, and private datasets are outside V1.
  • πŸ—“οΈ Monitoring and transaction tracking are outside V1 and reserved for a future version.
  • πŸ”„ Crexi can change its public pages or endpoints; future changes may reduce fields or require maintenance.

FAQ

What does the Crexi scraper do?

It searches public Crexi commercial real estate listings by market or official URL, filters sale and lease results, normalizes the rows, and writes them to an Apify Dataset.

How do I scrape Crexi listings?

Open the Input tab, choose manual mode or URL mode, provide a state or public Crexi URL, select the filters you need, and run the Actor. The numbered tutorial above shows the recommended first run.

Do I need a Crexi login, cookies, or an API key?

No. The Actor uses public Crexi pages and endpoints without a connected Crexi session, Crexi cookies, or a user-supplied Crexi API key. You still need an Apify account to run an Apify Actor.

Is this an official Crexi API?

No. This is an unofficial public-data scraper. Crexi's official API offerings and commercial agreements are separate from this Actor. Do not represent this Actor as affiliated with or endorsed by Crexi.

Can I scrape both sale and lease listings?

Yes. Select sale, lease, or both. Each row keeps a normalized transaction_type so sale and lease records remain distinguishable.

Can I paste a Crexi URL?

Yes. Paste a public search or direct listing URL in startUrls. URL mode is authoritative and preserves the supported filters represented by each URL.

How much does it cost to scrape Crexi?

The current price is $0.00005 per run start plus $0.003 per validated listing. For example, 100 validated listings cost approximately $0.30 in result events, before any plan-specific Store discount. Check the live Pricing tab for the price shown to your account.

Is the Crexi scraper free?

You can test it with a small run and the credits available on your Apify account. The Store shows the applicable allowance, event price, and any plan discount before you scale up.

Why did I receive fewer rows than maxResults?

maxResults is a target. Restrictive filters, a naturally small market, missing public values required by a numeric filter, an access challenge, or a deadline can produce fewer valid rows. RUN_SUMMARY explains whether the result is complete or partial.

Does it include broker phone numbers and emails?

Only when the source or a public detail page exposes them and the value can be matched confidently to the listing. If a contact is gated, missing, or ambiguous, the Dataset keeps the field explicit instead of inventing a value.

Can I use the Actor for monitoring or transaction tracking?

Not in V1. You can schedule ordinary runs and compare Datasets yourself, but dedicated monitoring and transaction-tracking features are reserved for a future version.

Can I export the results to CSV or Excel?

Yes. Apify lets you download the default Dataset as JSON, CSV, Excel, XML, or RSS, and connect it to APIs, webhooks, integrations, Google Sheets, warehouses, spreadsheets, and CRMs.

Can I scrape LoopNet and Crexi together?

Not with this Crexi-only Actor. Use Commercial Real Estate Brokerage Intelligence β€” LoopNet + Crexi when you want both platforms scraped, normalized, and exported together. This Actor remains focused on the standalone Crexi workflow.

Where can I report a problem?

Open an Apify issue with the run ID, a redacted input, the RUN_SUMMARY status, and the expected result. Never send credentials, cookies, tokens, private contact data, or copied remote response bodies.

Other commercial real estate Actors

Comparison of the Crexi-only workflow with the combined LoopNet and Crexi market-file workflow

This original comparison illustration makes the difference between Crexi-only scraping and simultaneous LoopNet + Crexi scraping immediately clear.

ActorWhen to choose it
Crexi ScraperCrexi-only public listing search, filtering, and optional enrichment
Commercial Real Estate Brokerage Intelligence β€” LoopNet + CrexiScrape LoopNet and Crexi together, normalize the records, and export a broker-ready market file

Use the Crexi-only Actor when source isolation, a simple input form, and transparent per-listing pricing are the priority.

For a visual overview of the combined workflow, watch the short LoopNet + Crexi demo on the broader Actor page.

Technical notes

  • Stack: Apify SDK, Crawlee, TypeScript, and Node.js.
  • Source: public Crexi listing pages and public endpoints.
  • Output: Apify Dataset plus a sanitized RUN_SUMMARY key-value record.
  • Input: manual state/city search or authoritative official URL mode.
  • Enrichment: bounded public listing and broker enrichment only.
  • API: standard Apify Actor API, Dataset API, exports, schedules, and integrations.

Support

Open an issue on Apify for bugs, feature requests, additional fields, custom exports, or market-specific improvements.

If this Actor helps your workflow, an honest Apify review helps other commercial real estate teams evaluate it and helps prioritize maintenance.

Built for teams that want cleaner public Crexi data without rebuilding the same commercial real estate spreadsheet every morning.