If you need public on-market commercial real estate listings in a spreadsheet or API, KazKN's LoopNet + Crexi Scraper is a practical CoStar alternative. It searches both platforms, merges the results, removes cross-platform duplicates, and normalizes price, size, and cap rate for $18 per 1,000 results. It is not a replacement for CoStar's full enterprise and private-data feature set; it is for brokers, acquisition teams, and analysts who need exportable public listings.
When this CoStar alternative fits
The best fit is a team that repeatedly rebuilds a market spreadsheet from public listings. A small broker might need current asking prices and broker details for one city. An acquisition analyst might need building size, NOI, cap rate, and days on market for a weekly review.
In those cases, paying for each returned listing can be a better match than buying a broad enterprise system. The tool covers public on-market inventory from LoopNet and Crexi, not private or off-market ownership data.
| What you need | Reasonable choice |
|---|---|
| Public LoopNet and Crexi listings in one file | LoopNet + Crexi Scraper |
| CoStar's broader enterprise and private-data features | CoStar is the closer fit |
| A few listings checked once | Manual collection may be enough |
| A custom pipeline controlled by your developers | A DIY script, with its maintenance work |
This is deliberately not a like-for-like comparison. The question is whether your workflow needs public listing rows or a wider enterprise data product.
Your options: manual collection, DIY, or a hosted tool
Collect listings by hand
Manual collection means running searches on each site, copying the listings, and reconciling properties that appear twice. It gives you direct control over every row and can work for a very small, occasional search. The recurring work is the drawback: two searches, two layouts, duplicate properties, and inconsistent price, size, and cap-rate formats.
Write your own commercial real estate data scraper
A DIY script gives your team control over collection, storage, and transformations. You also own the operational work: source changes, access restrictions, retries, field normalization, deduplication, and monitoring. You must separately review each site's terms and decide which requests and uses are permitted.
This route makes sense when custom requirements justify maintaining the pipeline. A script that only copies pages still does not solve the spreadsheet problem unless it also produces consistent, comparable rows.
Use a hosted, pay-per-result tool
The hosted option runs the collection and normalization for you. This actor searches LoopNet and Crexi, selects the most complete record when it identifies a cross-platform match, and marks the other platform in also_listed_on. Results go to an Apify dataset that you can export as CSV, Excel, or JSON, or retrieve through an API.
Is there an official API?
I could not confirm a public official CoStar API for this exact public-listing export workflow from the sources reviewed. The actor also does not claim to be an official LoopNet or Crexi API. It is a scraper hosted on Apify, and the API described below starts that actor and reads its output dataset.
That distinction matters when searching for a commercial real estate listings API: API access to scraper output is not the same as an API provided or endorsed by the listing site.
Run the LoopNet + Crexi Scraper step by step
- Open the LoopNet + Crexi Scraper tool page and open the actor on Apify.
- For a manual US search, enter a state and, optionally, a city or county. The example below uses Dallas, Texas.
- Choose LoopNet, Crexi, or both. Manual mode uses both sources by default. Sale listings are the default transaction type; filters for asset class, price, cap rate, and building size are also available.
- Set
maxResultsPerSource. The value is a maximum target for each selected source, not a guaranteed final row count. - Keep
deduplicateenabled to merge likely cross-platform matches. It defaults totrue. - Decide whether you need optional listing-detail enrichment for public broker contacts and richer details. It is disabled by default and billed separately when enabled and actually applied to a row.
- Start the run, review its status and returned rows, then export the dataset or read it through the API.
A smaller result set can reflect limited qualifying inventory, rows removed by filters, or cross-platform deduplication. Check the run summary rather than treating the requested maximum as a delivery promise.
Reuse an existing LoopNet or Crexi search
You can supply official LoopNet or Crexi search or listing URLs through startUrls instead of using manual fields. Supported URLs take priority: they determine the source and search criteria, and manual fields are ignored. URL mode is capped at 200 results per source. Some advanced source filters cannot be reproduced exactly, so review the run status for partial results and confirm that the returned listings still match your intent.
Call the commercial real estate listings API with Python
Install the official Apify Python client and set an Apify API token in your environment:
python -m pip install apify-client export APIFY_TOKEN="your_apify_token" This example uses the actor's real Dallas input and waits for the run before reading the default dataset:
import os from apify_client import ApifyClient client = ApifyClient(os.environ["APIFY_TOKEN"]) run_input = { "city": "Dallas", "state": "TX", "maxResultsPerSource": 100, } run = client.actor( "kazkn/commercial-real-estate-brokerage-intel" ).call(run_input=run_input) items = client.dataset(run["defaultDatasetId"]).list_items().items for item in items: print(item.get("listing_url"), item.get("asking_price_or_rent")) The explicit input avoids relying on console prefills. Because sourcesEnabled and transactionTypes are omitted, the documented defaults apply: both sources and sale listings. The returned items are Python dictionaries ready for your own CSV process, database loader, or analysis code.
Output fields and a real example row
The dataset keeps the source link alongside normalized property and financial fields. Availability still depends on what each public listing declares.
| Field | What it contains |
|---|---|
source | loopnet or crexi |
listing_url | Link to the public listing |
also_listed_on | The other platform when the property appears on both |
market | City and state of the search |
address | Full street address |
asset_class | Office, retail, industrial, multifamily, and more |
sub_type | Finer property type, such as loft or creative space |
building_size_sqft | Building size in square feet |
asking_price_or_rent | Asking price or rent as shown by the source |
noi | Net operating income when the listing declares it |
cap_rate | Listed cap rate, or one computed from declared NOI and price |
price_per_sqft | Price per square foot |
days_on_market | Days on market when the source shows it |
broker_name | Listing broker, when public |
broker_company | Brokerage firm |
broker_phone | Public phone, or marked as not publicly discoverable |
Here is a masked real output row:
{ "address": "Richardson, TX 75080", "asking_price_or_rent": "$3,250,000", "city": "Richardson", "building_size_sqft": "226,723", "source": "loopnet", "state": "TX", "zip": "75080", "market": "Richardson, TX", "transaction_type": "sale", "asking_amount_usd": "3,250,000" } For cap rates, the actor passes through a source-listed value or calculates NOI divided by asking price when both are declared. It does not expose a model-only estimate as a fact. Verify source values before underwriting or making an investment decision.
What a run costs
The result price is $18 per 1,000 results, which is $0.018 per returned unique listing. Cross-platform duplicates are merged rather than delivered as separate primary rows.
| Returned unique listings | Result charges |
|---|---|
| 100 | $1.80 |
| 250 | $4.50 |
| 1,000 | $18.00 |
The README also lists a $0.06 actor-start charge on the Apify Free plan. At that plan's $18 per 1,000 result rate, a run returning 100 unique listings costs $1.80 in result charges plus $0.06 to start, or $1.86 before optional enrichment or monitoring charges. Prices can vary by Apify plan.
With the Dallas example, maxResultsPerSource: 100 does not mean you will receive or pay for exactly 200 rows. Available inventory, explicit filters, and duplicate removal affect the final count. Optional listing-detail enrichment is a separate per-enriched-row event, so leave it off when you only need the base listing export.
What are the rules?
Public commercial real estate data can still be protected by contractual terms and applicable law. Public access does not automatically grant permission for automated collection, redistribution, or every commercial use. Review the current LoopNet and Crexi terms, comply with access controls, and assess your intended use. Do not treat a technical ability to retrieve a page as legal permission.
Broker names, companies, phone numbers, and other contact details can be personal data even when published for business purposes. If GDPR applies to your processing, identify a lawful basis, collect only what you need, define retention, secure the data, and handle applicable individual rights. Keep the source URL so your team can review provenance and check corrections or removal requests.
This article is general information, not legal advice. Ask a qualified lawyer about your sources, locations, and use case, especially before large-scale redistribution or outreach.
FAQ
Is this a complete CoStar replacement?
No. It is a CoStar alternative for public on-market listing collection and export. Teams needing CoStar's full enterprise and private-data feature set should not expect this actor to replace it.
Is this an official CoStar, LoopNet, or Crexi API?
No. It is an Apify-hosted scraper with API access to runs and datasets. No public official source API for this exact workflow could be confirmed from the reviewed material.
Does it include private or off-market properties?
No. Its stated scope is public listings from LoopNet and Crexi. It is designed for market scans, acquisition lists, broker-lead review, and repeatable exports of that public inventory.
Why are cap rate or broker phone fields sometimes unavailable?
The actor depends on source-declared information. It calculates cap rate only when declared NOI and price support the calculation, and it marks broker phone details as not publicly discoverable when it cannot find a public number. It does not invent missing values.
Can a small broker use it for a weekly market file?
Yes. A broker can run the same market search, export the normalized dataset, and review new or existing listings without copying from two platforms by hand. Apify scheduling and the actor's monitoring mode are also documented for recurring checks.
Try it: commercial-real-estate-brokerage-intel on Apify
Originally published on kazkndata.com.