LoopNet APIloopnet.com ↗
Search LoopNet commercial listings by location and property type, retrieve listing details with pricing and broker contacts, and look up broker profiles via API.
What is the LoopNet API?
The LoopNet API covers 4 endpoints for accessing commercial real estate data: search listings by location and property type with search_listings, pull full property facts and broker contact links with get_listing_detail, find agents in a market with search_brokers, and retrieve individual broker profiles including phone numbers and professional designations with get_broker_profile.
curl -X GET 'https://api.parse.bot/scraper/15d7f889-d88e-4c3d-8aff-7a3a3bd288f9/search_listings?location=los-angeles-ca&page_index=1&property_type=commercial-real-estate&transaction_type=for-sale' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace loopnet-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: LoopNet Commercial Real Estate — search listings, drill into details, find brokers."""
from parse_apis.loopnet_commercial_real_estate_api import (
LoopNet, PropertyType, TransactionType, ListingNotFound
)
client = LoopNet()
# Search for office listings for sale in Los Angeles
for listing in client.listingsummaries.search(
location="los-angeles-ca",
property_type=PropertyType.OFFICE,
transaction_type=TransactionType.FOR_SALE,
limit=5,
):
print(listing.address, listing.city, listing.state)
# Drill into the first result's full details
summary = client.listingsummaries.search(location="new-york-ny", limit=1).first()
if summary:
detail = summary.details()
print(detail.name, detail.price, detail.description)
# Search brokers and get a profile
broker = client.brokersummaries.search(location="Los Angeles, CA", limit=1).first()
if broker:
profile = broker.details()
print(profile.name, profile.company, profile.direct_phone)
# Typed error handling for a missing listing
try:
bad = client.listingsummaries.search(location="chicago-il", limit=1).first()
if bad:
bad.details()
except ListingNotFound as exc:
print(f"Listing gone: {exc}")
print("exercised: listingsummaries.search / details / brokersummaries.search / broker.details")
Search for commercial real estate listings by location. Returns paginated results with listing names, addresses, and IDs. Each page returns up to 25 listings. Use page_index to paginate through results. The location slug format uses city-state hyphenated lowercase (e.g. 'los-angeles-ca'). Property type and transaction type narrow results.
| Param | Type | Description |
|---|---|---|
| locationrequired | string | Location slug in city-state format (e.g., 'los-angeles-ca', 'new-york-ny', 'chicago-il'). |
| max_acres | string | Maximum acres filter for land searches. |
| min_acres | string | Minimum acres filter for land searches. |
| page_index | integer | Page number for pagination, starting at 1. |
| property_type | string | Property type slug. |
| transaction_type | string | Transaction type. |
{
"type": "object",
"fields": {
"count": "integer total number of listings returned on this page",
"listings": "array of listing objects each containing id, name, url, address, city, and state"
},
"sample": {
"data": {
"count": 25,
"listings": [
{
"id": "37277760",
"url": "https://www.loopnet.com/Listing/7210-S-Western-Ave-Los-Angeles-CA/37277760/",
"city": "Los Angeles",
"name": "Entitled Retail Development/Multi-Family Use",
"state": "CA",
"address": "7210 S Western Ave"
},
{
"id": "40081899",
"url": "https://www.loopnet.com/Listing/2080-Belgrave-Ave-Huntington-Park-CA/40081899/",
"city": "Huntington Park",
"name": "Value-Add Warehouse Off The Alameda Corridor",
"state": "CA",
"address": "2080 Belgrave Ave"
}
]
},
"status": "success"
}
}About the LoopNet API
Search and Listing Data
The search_listings endpoint accepts a location slug in city-state format (e.g., los-angeles-ca) along with optional filters for property_type (office, retail, industrial, land, and others), transaction_type (for-sale or for-lease), acreage range via min_acres / max_acres, and a page_index for pagination. Results include an array of listing objects, each carrying an id, name, url, address, city, and state alongside a count of listings returned on that page.
Listing Detail
get_listing_detail takes a listing_id (obtainable from search_listings results) and an optional slug. The response surfaces the listing price, a description, an images array, an address object, a properties map of key-value property facts (square footage, zoning, lot size, year built, and similar fields as published on the listing), and a broker_links array of full URLs pointing to associated broker profiles.
Broker Search and Profiles
search_brokers accepts a location string in City, ST format and returns a brokers array of objects with profile_url and name, plus a total count. get_broker_profile takes a profile_url and returns the broker's name, company, phones array, direct_phone, and designations array. The phones array contains numbers in XXX-XXX-XXXX format as found on the profile page.
Coverage Notes
All fields are conditional on availability in the source listing or profile — the API documents fallback behavior explicitly. The properties object on listing detail pages reflects the facts published per listing, so available keys vary by property type and what the listing agent has filled in.
The LoopNet API is a managed, monitored endpoint for loopnet.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when loopnet.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official loopnet.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate commercial-for-sale inventory by city to populate a market comparison dashboard using
search_listingswithtransaction_type: for-sale. - Extract property facts (square footage, zoning, year built) from
get_listing_detailto feed a deal-screening model. - Build a broker discovery tool by combining
search_brokersresults with detailed contact data fromget_broker_profile. - Monitor new industrial listings in a target market by polling
search_listingswithproperty_type: industrialand tracking new listing IDs. - Compile broker phone and designation data from
get_broker_profileto enrich a CRM with verified contact details. - Retrieve
broker_linksfrom listing details to map which brokers are most active in a given market segment. - Filter land listings within an acreage range using
min_acresandmax_acresto surface development parcels for a specific project size.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does LoopNet offer an official developer API?+
What does `get_listing_detail` return beyond basic address and price?+
properties object containing key-value property facts as published on the listing page — fields like square footage, zoning, lot size, and year built vary by listing. It also includes an images array, a description string, and a broker_links array of full profile URLs for associated brokers.How does pagination work in `search_listings`?+
page_index to step through result pages. Each response includes a count reflecting how many listings were returned on that page. There is no explicit total-results count across all pages in the response.Does the API return lease rate details or price per square foot?+
get_listing_detail endpoint returns a price string when the listing publishes one, but granular lease rate breakdowns (price per square foot, rent escalation schedules) are not exposed as discrete fields. You can fork this API on Parse and revise get_listing_detail to parse additional fields if that data appears on specific listing pages.Can I search listings by multiple property types in one request?+
search_listings accepts a single property_type value per request. Multi-type queries in one call are not currently supported. You can fork this API on Parse and revise the endpoint to accept and merge results across multiple property types.