
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Scrape Crexi commercial real estate listings for sale and for lease: asking price, size, address and coordinates, brokers and brokerages with licenses, images, descriptions, documents and lease suites.
Scrape commercial real estate listings from Crexi (crexi.com), for sale and for lease, in seconds. Get asking price, size, full address with coordinates, property type, description, highlights, images, documents, lease suites and every listing broker with brokerage and license. Search by city, county, state or ZIP with filters, or paste crexi.com URLs. No Crexi account or cookies needed.
Austin, TX, Florida, Travis County, TX, 78701) or paste Crexi URLs.| Field | Description |
|---|---|
locations | City, ST, a state, a county or a ZIP code |
listingType | sale, lease or both |
startUrls | crexi.com search pages, listing pages and broker profiles (/profile/...) |
maxResults | Total listings to save (0 = no limit) |
propertyTypes | Retail, Multifamily, Office, Industrial, Land, Hospitality, ... |
minPrice / maxPrice, minCapRate / maxCapRate | For-sale filters |
minSqft / maxSqft, keyword, auctionsOnly, opportunityZoneOnly | Other filters |
includeDetails | Full listing data, brokers, images (default on) |
includeBrokerProfiles | Add each broker's public profile stats |
{
"locations": ["Austin, TX", "Miami, FL"],
"listingType": "sale",
"propertyTypes": ["Retail"],
"minCapRate": 6,
"maxResults": 100
}
One row per listing. Main fields:
| Field | Description |
|---|---|
name, url, listingType, status | Listing title, page, sale or lease, status |
propertyTypes, subtypes, investmentType | What the property is |
askingPrice, pricePerSqFt, capRate, noi | Pricing (cap rate and NOI where public, see Limits) |
squareFootage, lotSizeAcres, units, yearBuilt, buildingClass, zoning | Property facts |
address, city, county, stateCode, zip, latitude, longitude | Location |
brokerName, brokerageName, brokerLicense, brokers[] | Listing brokers with brokerage, website, office address and licenses |
baseRate, rentableSqFtMin/Max, suites[] | Lease rates and available spaces |
description, highlights, facts, images[], documents[] | Listing content |
activatedOn, updatedOn, offersDueOn | Dates |
{
"id": 2518953,
"url": "https://www.crexi.com/properties/2518953/texas-w-north-loop-property-for-sale",
"listingType": "sale",
"name": "W. North Loop Property For Sale",
"status": "Active",
"propertyTypes": ["Office", "Special Purpose", "Land"],
"investmentType": "Owner/User",
"askingPrice": 1100000,
"pricePerSqFt": 750.34,
"squareFootage": 1466,
"lotSizeAcres": 0.29,
"buildingClass": "C",
"address": "1406 W. North Loop Blvd",
"city": "Austin",
"county": "Travis County",
"stateCode": "TX",
"zip": "78756",
"latitude": 30.3246412,
"longitude": -97.7364454,
"brokerageName": "StreetFront Commercial",
"brokerName": "Jordan Sample",
"brokerLicense": "000000",
"brokers": [
{
"name": "Jordan Sample",
"profileUrl": "https://www.crexi.com/profile/jordansample",
"brokerage": "StreetFront Commercial",
"brokerageWebsite": "https://www.streetfrontcommercial.com/",
"licenses": [{ "number": "000000", "state": "TX", "type": "Real Estate Broker" }]
}
],
"images": ["https://crexi.com/images/format=auto,width=3000,height=2000/assets/2518953/....jpg"],
"activatedOn": "2026-07-28T16:02:11Z"
}
$1.50 per 1,000 listings ($0.0015 per listing), with no start fee. Platform usage (compute and proxy traffic) is billed separately and is small: datacenter proxies are enough for Crexi.
Example: 1,000 detailed listings ≈ $1.50 in listing fees plus a few cents of usage.
Is it legal to scrape Crexi? The scraper reads only public listing data that Crexi shows to any visitor without an account. Check Crexi's terms and your local laws for your use case.
Do I need a Crexi login or proxies? No login, no cookies. The default datacenter proxy works well.
How many results can I get? As many as Crexi has for your search. Crexi serves at most 1,500 results per query, so bigger searches are split by state, property type and price or size automatically.
Why are cap rate, NOI or year built sometimes empty? Crexi hides some facts from logged-out visitors. When the broker states a cap rate or NOI in the listing text, the scraper extracts it and marks capRateSource: "description". The loginOnlyFields column lists the facts Crexi hid on each listing.
Can I get broker phone numbers and emails? Crexi does not show them to logged-out visitors, so they are not included. You get each broker's name, brokerage, brokerage website and office address, license and profile link.
Can I schedule it or use the API? Yes. Schedule runs to track new listings, and call the actor from the API or integrations.
documents field shows which exist).placeIds in a search URL) can't be read; enter the city, county, state or ZIP under Locations instead.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
locationsarrayOptionalLocations
US places to search: 'City, ST' (e.g. 'Austin, TX'), a state ('Florida' or 'FL'), a county ('Travis County, TX') or a 5-digit ZIP code.
listingTypeenumOptionaldefault "sale"Listing type
Properties for sale, spaces for lease, or both (location searches and broker profiles).
startUrlsarrayOptionalCrexi URLs
Optional crexi.com URLs: search pages (https://www.crexi.com/properties?... or /lease/properties?...), listing pages (/properties/{id}/... or /lease/properties/{id}/...) and broker profiles (/profile/{name}). Search filters in the URL are applied.
maxResultsintegerOptionaldefault 20Max results
Maximum number of listings to save in total. 0 means no limit.
maxResultsPerSearchintegerOptionalMax results per search
Optional cap for each location, search URL or broker profile. Leave empty for no per-search cap.
propertyTypesarrayOptionalProperty types
Only these property types. Leave empty for all types.
keywordstringOptionalKeyword
Free-text search, e.g. a tenant ('Starbucks') or a feature ('drive-thru').
minPriceintegerOptionalMin asking price (USD)
For-sale listings only. Setting a price range excludes unpriced listings.
maxPriceintegerOptionalMax asking price (USD)
For-sale listings only.
minCapRatenumberOptionalMin cap rate (%)
For-sale listings only, e.g. 6.5. Crexi filters by the broker's cap rate even where it hides the number from logged-out visitors.
maxCapRatenumberOptionalMax cap rate (%)
For-sale listings only.
minSqftintegerOptionalMin size (sq ft)
Building size for sale listings, available space for lease listings.
maxSqftintegerOptionalMax size (sq ft)
Maximum size in square feet.
auctionsOnlybooleanOptionaldefault falseAuctions only
Only for-sale listings sold by auction.
opportunityZoneOnlybooleanOptionaldefault falseOpportunity zones only
Only for-sale listings in a federal Opportunity Zone.
sortByenumOptionaldefault "relevance"Sort by
Order of results. Very large searches are split into smaller ones, so the order only holds within each part.
includeDetailsbooleanOptionaldefault trueInclude listing details
Fetch each listing's page data: full description, highlights, facts table, all brokers with licenses and brokerage, all images, documents, suites for lease listings. Turn off for faster, search-card-only rows.
includeBrokerProfilesbooleanOptionaldefault falseInclude broker profiles
Add each broker's public profile (markets, specialty, active and closed deal counts) to the brokers list. One extra request per unique broker.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy
Datacenter proxies work well for Crexi.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | number | null | Crexi listing id |
| url | string | null | Listing page |
| listingType | string | null | sale or lease |
| name | string | null | Listing title |
| tagline | string | null | Short description |
| status | string | null | Status |
| propertyTypes | array | null | Property types |
| subtypes | array | null | Subtypes |
| investmentType | string | null | Investment type |
| askingPrice | number | null | Asking price (USD) |
| isUnpriced | boolean | null | Unpriced listing |
| pricePerSqFt | number | null | Price per sq ft |
| capRate | number | null | Cap rate (%) |
| capRateSource | string | null | listing or description |
| noi | number | null | Net operating income |
| noiSource | string | null | listing or description |
| squareFootage | number | null | Building size (sq ft) |
| lotSizeAcres | number | null | Lot size (acres) |
| units | number | null | Units |
| yearBuilt | number | null | Year built |
| buildingClass | string | null | Class |
| tenancy | string | null | Tenancy |
| tenants | array | null | Tenants / brands |
| zoning | string | null | Zoning |
| saleCondition | string | null | Sale condition |
| rentableSqFtMin | number | null | Smallest space (lease) |
| rentableSqFtMax | number | null | Largest space (lease) |
| baseRate | string | null | Base rate (lease) |
| baseRatePerSqFtYearMin | number | null | Min rate $/sq ft/yr |
| baseRatePerSqFtYearMax | number | null | Max rate $/sq ft/yr |
| rateType | string | null | Rate type |
| numberOfSuites | number | null | Spaces available |
| suites | array | null | Spaces for lease |
| address | string | null | Street address |
| city | string | null | City |
| county | string | null | County |
| state | string | null | State |
| stateCode | string | null | State code |
| zip | string | null | ZIP |
| fullAddress | string | null | Full address |
| latitude | number | null | Latitude |
| longitude | number | null | Longitude |
| addressHidden | boolean | null | Address hidden by broker |
| otherLocations | array | null | Other addresses (portfolios) |
| brokerageName | string | null | Brokerage |
| brokerageLogoUrl | string | null | Brokerage logo |
| brokerName | string | null | Lead broker |
| brokerProfileUrl | string | null | Lead broker profile |
| brokerLicense | string | null | Lead broker license |
| brokers | array | null | All listing brokers |
| brokerOfRecord | object | null | Broker of record |
| auctioneer | string | null | Auctioneer |
| offersDueOn | string | null | Offers / auction due |
| description | string | null | Marketing description |
| highlights | string | null | Investment highlights |
| facts | object | null | Facts table as shown on the listing |
| loginOnlyFields | array | null | Facts Crexi shows only to signed-in users |
| thumbnailUrl | string | null | Thumbnail |
| images | array | null | Image URLs |
| numberOfImages | number | null | Images |
| hasVideo | boolean | null | Has video |
| hasVirtualTour | boolean | null | Has virtual tour |
| hasOM | boolean | null | Has offering memorandum |
| hasFlyer | boolean | null | Has flyer |
| documents | array | null | Documents and access |
| isInOpportunityZone | boolean | null | Opportunity zone |
| isNew | boolean | null | New listing |
| createdOn | string | null | Created |
| activatedOn | string | null | Listed on |
| updatedOn | string | null | Updated |
| source | string | null | Input that found it |
| scrapedAt | string | null | Scraped at |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Listing | One saved Crexi listing. | $0.0015 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('roamandroof/crexi-scraper').call({
"locations": [
"Austin, TX"
],
"startUrls": [],
"maxResults": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run roamandroof/crexi-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=roamandroof/crexi-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Listings with full property details.
Lease listings with details.
Newest listings within a price range.
Property details plus the listing brokers.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.