LoopNet + Crexi Scraper · CRE Listings · CoStar Alternative avatar

LoopNet + Crexi Scraper · CRE Listings · CoStar Alternative

Pricing

from $5.00 / 1,000 results

Go to Apify Store
LoopNet + Crexi Scraper · CRE Listings · CoStar Alternative

LoopNet + Crexi Scraper · CRE Listings · CoStar Alternative

LoopNet + Crexi scraper for CRE listings. Normalizes cap rates, deduplicates cross-platform, and returns broker names/companies plus phone/email when public. Days-on-market included when source-available. $5 per 1K results.

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

KazKN

KazKN

Maintained by Community

Actor stats

2

Bookmarked

105

Total users

42

Monthly active users

an hour ago

Last modified

Share

LoopNet Scraper + Crexi Scraper for Commercial Real Estate Listings

Commercial Real Estate Brokerage Intel is a LoopNet scraper, Crexi scraper, and commercial real estate listings scraper built for brokers, investors, acquisition teams, analysts, and lead generation teams that need clean CRE data without rebuilding spreadsheets by hand.

Use it as a lightweight commercial real estate API and CoStar alternative for public on-market listings. One Apify run searches LoopNet and Crexi, normalizes key fields, deduplicates cross-platform listings, calculates cap-rate intelligence, tracks days on market when available, and enriches broker identity plus phone/email when publicly discoverable.

Best for: CRE broker leads, market scans, acquisition lists, cap rate data API workflows, broker contact scraper workflows, CSV exports, Google Sheets, CRM enrichment, and daily monitoring.

Video Tutorial — See It in Action

Watch the full demo — from LoopNet + Crexi search to one clean commercial real estate dataset in about 2 minutes.


API examples, GitHub repo, and workflows

Need to run this actor from Python, Node.js, cURL, Google Sheets, a CRM, or a daily monitoring job?

Use the public GitHub resource hub:

GitHub repo GitHub Pages

The repo includes:

  • Python, Node.js, and cURL examples
  • Google Sheets-ready export workflow
  • broker lead review workflow
  • daily CRE deal-flow monitoring example
  • sample JSON and CSV output
  • guides for deduplicating LoopNet + Crexi listings and building a clean market file

Start here: LoopNet + Crexi Listings API examples


What this actor does

NeedWhat you get
LoopNet scraperPublic LoopNet commercial real estate listings with normalized output
Crexi scraperPublic Crexi listings in the same dataset format
Commercial real estate APIStructured rows you can export as CSV, Excel, JSON, or connect to workflows
Commercial real estate listings scraperSearch by city, state, asset class, price, cap rate, square footage, and more
CoStar alternativePay-per-result public listing intelligence for teams that do not need a heavy enterprise UI
CRE broker leadsBroker names, companies, and public phone/email when discoverable from source/detail pages
Cap rate data APIListed, implied, recomputed, or estimated cap-rate fields with provenance
Days on market commercial real estateDays-on-market values when the source exposes a usable listing date
Broker contact scraperBroker contact fields separated into clean columns for outreach review

Why brokers use it

Brokers and acquisition teams often live between two tabs: LoopNet and Crexi. They search one market, repeat the search on the other platform, copy listings, clean duplicates, compare cap rates, hunt for days on market, and rebuild the same spreadsheet again.

This actor turns that workflow into one Apify run:

  1. Choose a market such as Austin, Dallas, Phoenix, Miami, Chicago, Los Angeles, or New York.
  2. Select LoopNet, Crexi, or both.
  3. Pick asset classes and filters.
  4. Run the actor.
  5. Export one clean dataset for Google Sheets, Excel, a CRM, a data warehouse, or underwriting.

Quick output preview

{
"source": "loopnet",
"source_listing_id": "29769721",
"listing_url": "https://www.loopnet.com/Listing/29769721/",
"market": "Austin, TX",
"state": "TX",
"city": "Austin",
"zip": "78702",
"address": "2921 E 17th St, Austin, TX 78702",
"asset_class": "office",
"sub_type": "Loft/Creative Space",
"building_size_sqft": 7500,
"asking_price_or_rent": "$2,500,000",
"pricing_status": "listed sale price",
"asking_amount_usd": 2500000,
"asking_amount_basis": "sale asking price",
"noi": "$187,500",
"noi_source": "estimated_from_asset_class_median",
"cap_rate": "7.5%",
"cap_rate_source": "asset_class_median",
"price_per_sqft": "$333/SF",
"lot_size_acres": "not publicly available",
"days_on_market": 32,
"days_on_market_source": "listed_at",
"status": "active",
"broker_name": "Isaac Gutierrez",
"broker_company": "ECR",
"broker_phone": "not publicly discoverable",
"broker_email": "not publicly discoverable",
"broker_contact_status": "broker identity available; phone/email not publicly discoverable",
"also_listed_on": "crexi",
"data_quality_notes": "broker_phone_email_unavailable_from_source"
}

Quick start

Search LoopNet + Crexi by city and state

{
"city": "Austin",
"state": "TX",
"sourcesEnabled": ["loopnet", "crexi"],
"assetClasses": ["office", "retail"],
"priceMin": 500000,
"priceMax": 5000000,
"maxResultsPerSource": 200
}

Search an entire state without a city

{
"state": "Nevada",
"sourcesEnabled": ["loopnet", "crexi"],
"maxResultsPerSource": 100
}

Two-letter codes, English state names, and common French state names such as Géorgie are normalized automatically. A city or county is optional and narrows the statewide search when supplied.

Daily monitoring for new CRE listings

{
"city": "Dallas",
"state": "TX",
"sourcesEnabled": ["loopnet", "crexi"],
"monitoringMode": true,
"maxResultsPerSource": 1000
}

Run on an Apify schedule. The actor maintains an internal snapshot per query and emits only listings not seen in previous runs.

Track listings that disappeared or changed status

{
"city": "Phoenix",
"state": "AZ",
"transactionTrackingMode": true
}

Useful for commercial real estate teams that want to monitor possible sold, leased, under-contract, removed, or off-market changes.

Scrape specific LoopNet or Crexi URLs

{
"startUrls": [
{ "url": "https://www.loopnet.com/Listing/12345678/example-property/" },
{ "url": "https://www.crexi.com/properties/87654321/example-listing" }
]
}

Crexi search URLs are scraped as supplied, including URLs containing placeIds. No Google Places API key is required. Crexi uses its public API or native browser path only; Bright Data is reserved for LoopNet. A Crexi URL runs Crexi only; a LoopNet URL runs LoopNet only. To run both sources, provide URLs from each platform. You can provide more than ten URLs; duplicates are removed and URL task allocation is bounded by the selected result cap. When at least one supported URL is supplied, form fields and sourcesEnabled are ignored: the recognized URLs determine the platforms and their criteria. URL mode is capped at 200 results per source.

Every active URL criterion is protected by an exact-filter contract. Readable source facts are rechecked before quota. Rich or future Crexi filters that cannot be reconstructed safely use the exact Crexi page to capture and replay Crexi's own search payload through its free public API. LoopNet preserves opaque criteria such as sk byte-for-byte and requires response evidence that the same query context survived. Missing proof, redirects, blocks, or ambiguous captures fail closed instead of widening the search.

Input suppliedCrexiLoopNet
Crexi URL onlyScrapes that exact Crexi URLNot started
LoopNet URL onlyNot startedScrapes that exact LoopNet URL
Crexi URL + LoopNet URLScrapes its own URLScrapes its own URL
Crexi URL + City + StateScrapes the exact Crexi URLDoes not run
State onlyUses a statewide form searchUses a statewide form search
City + State onlyUses a form searchUses a form search

sourcesEnabled is an allow-list only in form mode. Direct LoopNet and Crexi URLs select their matching source in URL mode, even if a stale saved form selection says otherwise.

In form mode, explicit numeric filters are applied to the final normalized rows. In URL mode, the supplied source page is authoritative; readable facts are rechecked when comparable data exists, while opaque filters remain source-authoritative only after exact response proof. If a comparable value required by a decoded filter is unavailable or non-finite, that row is excluded. Lease price filters compare an annual lease amount.


Key features

  • LoopNet + Crexi aggregation: search both sources in one run.
  • Cross-platform deduplication: output one primary record and mark also_listed_on when the same property appears elsewhere.
  • Cap-rate normalization: recompute, pass through, imply, or estimate cap rates depending on source data.
  • NOI provenance: separate declared NOI from implied or estimated NOI.
  • Days on market: include days_on_market when a usable listing date is exposed.
  • Broker contact fields: broker name, company, public phone, and public email when discoverable from the listing source or public detail page.
  • Spreadsheet-friendly output: export to CSV, Excel, JSON, Google Sheets, CRM, Zapier, Make, or your own database.
  • Broker-ready calculated fields: market, unified price/rent, asking amount basis, estimated annual/monthly rent, rent per sqft/year, lot acres, price per unit, source count, and cross-listed flags.
  • Output sorting: sort the export by building size, asking amount, or days-on-market before it reaches your spreadsheet.
  • Monitoring mode: run daily or weekly to detect new public listings in target markets, with change columns like change_type, first_seen_at, and change_detected_at.
  • Transaction tracking mode: detect listings that disappeared or changed status between runs, useful for removed, sold, leased, or under-contract signals.
  • Dataset views: output columns are organized for overview, financial review, and broker contacts.

The intelligence layer

Cap-rate normalization

Commercial real estate listing data is inconsistent. Some listings declare NOI, some declare cap rate, some expose only asking price, and some expose neither. This actor adds a cap-rate intelligence layer so your team can compare listings more quickly.

Source dataActionOutput
NOI and price declaredRecompute cap rate as NOI / price x 100cap_rate_estimated: false
Cap rate declaredPass through listed cap rate and derive implied NOI when possiblecap_rate_estimated: false
Price known but NOI/cap rate missingEstimate with asset-class mediancap_rate_estimated: true
No price and no cap rateMark pricing/cap-rate as unavailable instead of leaving ambiguous blankscap_rate: "not publicly available"

This makes the actor useful as a cap rate data API for underwriting preparation, market scans, and broker lead triage.

Days-on-market commercial real estate data

When LoopNet or Crexi exposes a usable listing date, the actor calculates days_on_market and includes days_on_market_source. This helps brokers and investors identify stale listings, recently added deals, and markets where inventory is sitting longer than expected.

Cross-platform deduplication

The same property can appear on LoopNet and Crexi. The actor computes a stable dedup_key, groups matching listings, picks the most complete record as the primary row, and marks the other platform in also_listed_on.

Example:

{
"source": "loopnet",
"address": "2141 E Camelback Rd, Phoenix, AZ",
"also_listed_on": "crexi"
}

This is the difference between a raw scraper and a dataset your team can actually scan.


Who this is for

PersonaUse case
CRE brokersBuild CRE broker leads and outreach lists from public listings
Investment sales teamsMonitor new listings by market, asset class, and price range
Acquisition teamsExport LoopNet + Crexi data into underwriting workflows
REITs and family officesTrack markets weekly without manual copy-paste
Lenders and appraisersReview days-on-market and asking-price signals
Data teamsUse Apify as a commercial real estate API feeding sheets, CRM, or warehouse tables
Lead generation teamsUse broker contact scraper fields where public contact data is discoverable

Pricing

Pay-per-event on Apify Store.

EventPriceWhen
Actor start$0.05 / runOnce per scrape job
Result$0.005 / listingEach unique listing returned
Listing detail enrichment$0.005 / enriched listingOnly when includeListingDetails: true and the row is actually enriched
Monitoring mode run$1.00 / runOnly when monitoringMode: true

Example costs:

VolumeWithout detailsWith details
100 listings$0.55$1.05
1,000 listings$5.05$10.05
10,000 listings$50.05$100.05
25,000 listings / month~$125 / month~$250 / month

Monitoring mode adds $1.00 per run when enabled.

Scheduled monitoring with Apify Tasks

The actor can already be scheduled through Apify Tasks. A typical workflow is:

  1. Create a task for one market, for example Miami retail listings.
  2. Enable monitoringMode for new-listing alerts, or transactionTrackingMode for removed/closed-listing signals.
  3. Set a daily, twice-weekly, or weekly schedule in Apify.
  4. Export the dataset to CSV/API/Google Sheets, or connect it to a CRM or warehouse.

Monitoring runs keep an internal snapshot for the same search criteria, then return only the delta on later runs.


Output schema

Each dataset row includes the fields most CRE teams need for scanning, filtering, underwriting, and outreach:

{
source: "loopnet" | "crexi",
source_listing_id: string,
listing_url: string,
scraped_at: string,
market: string,
state: string,
city: string,
zip: string,
address: string,
asset_class:
| "office" | "retail" | "industrial" | "multifamily"
| "land" | "hotel" | "mixed-use" | "specialty" | "unknown",
sub_type: string,
building_size_sqft: number | string,
total_available_sqft: number | string,
units: number | string,
year_built: number | string,
lot_size_sqft: number | string,
asking_price_or_rent: string,
pricing_status: string,
asking_amount_usd: number | string,
asking_amount_basis: string,
noi: string,
noi_source: string,
cap_rate: string,
cap_rate_source: string,
price_per_sqft: string,
price_per_unit: string,
rent_per_sqft_per_year: string,
estimated_annual_rent: string,
estimated_monthly_rent: string,
days_on_market: number | string,
days_on_market_source: string,
status:
| "active" | "under_contract" | "sold" | "leased"
| "removed" | "off_market" | "unknown",
broker_name: string,
broker_company: string,
broker_phone: string,
broker_email: string,
broker_profile_url: string,
broker_contact_status: string,
enrichment_status: string,
dedup_key: string,
is_cross_listed: "yes" | "no",
source_count: number,
also_listed_on: string,
same_source_duplicate_count: number,
data_quality_notes: string
}

FAQ

Is this a LoopNet scraper?

Yes. It extracts public LoopNet commercial real estate listings and returns structured fields such as address, asset class, price, square footage, cap rate data, days on market when available, and broker details when publicly exposed.

Is this a Crexi scraper?

Yes. It extracts public Crexi listings and normalizes them into the same schema as LoopNet so both sources can be reviewed in one dataset.

Is this a commercial real estate API?

It can be used like a commercial real estate API through Apify. You can run the actor via API, schedule it, export datasets, connect webhooks, and send results to Google Sheets, Zapier, Make, a CRM, or your own backend.

Is it a CoStar alternative?

It is a lightweight CoStar alternative for public on-market listing workflows, especially for SMB brokers and acquisition teams that want pay-per-result data exports. It is not a replacement for every enterprise CoStar feature or private/off-market database.

Does it include broker contacts?

The actor includes broker names and companies when available. Public phone numbers and emails are included when they are discoverable from the source listing or public detail page. If the source gates the contact behind login or does not publish it, the CSV keeps the broker columns and marks the contact status as not publicly discoverable.

Can I use it for CRE broker leads?

Yes. Many users run it as a CRE broker leads workflow: filter a market, export listings, review broker contact fields, deduplicate properties, and send clean rows into a CRM.

Does it calculate days on market?

Yes, when the source exposes a usable listing date. The actor includes days_on_market and days_on_market_source to make the value transparent.

Does it estimate cap rate and NOI?

Yes. When declared data is missing but enough information exists, the actor can estimate cap rate or NOI using asset-class medians. Estimated values are clearly flagged with fields such as cap_rate_estimated, cap_rate_source, and noi_source.

Does it deduplicate LoopNet and Crexi listings?

Yes. The actor groups likely matching properties and marks cross-platform duplicates with also_listed_on, so your team does not chase the same deal twice.

Can I run it on a schedule?

Yes. Use Apify Scheduler with monitoringMode: true for daily or weekly new-listing monitoring.

Which markets are supported?

The actor is designed for USA and Canada commercial real estate listings available through LoopNet and Crexi public search/listing pages.


Technical notes

  • Stack: Apify SDK v3, Crawlee v3, TypeScript, Node.js
  • Sources: public LoopNet and Crexi listing data
  • Output: Apify Dataset with CSV, Excel, JSON, API, and integrations
  • Anti-blocking: Apify proxy support
  • Best use: public on-market listing intelligence, not private off-market ownership data

Support

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

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