Guides

How to Scrape LoopNet Commercial Real Estate Listings

LoopNet is the largest commercial real estate marketplace, which makes it a rich public source of CRE listing data: property, address, asking rent or price, size, type, and broker across markets nationwide. This guide covers what a listing holds, where the data lives, why the site is defended, and how to turn it into a clean CRE feed without babysitting a scraper. The worked example uses a real LoopNet search.

DADataScrape TeamSeptember 2, 2026Updated September 24, 20265 min read

What data a LoopNet listing holds

Each listing carries the property and the space on offer. On a real search for office space for lease in Austin, the market returned more than 750 properties, with asking rents ranging from about 12 to 40 dollars per square foot per year and spaces up to roughly 48,797 square feet. One listing was 515 Congress Ave, Austin, TX 78701, an office space for lease. The address, property type, asking rent, size, and listing type are the fields that matter, and each listing also carries a stable id you dedupe on.

Where the data actually lives

LoopNet serves its search results through an internal JSON endpoint, loopnet.com/services/search, whose payload carries the listing placards along with rich per-listing attributes: city, state, ZIP, property type, exposure tier, and a listing id, held in structured fields rather than only in the rendered map. Reading that JSON is cleaner than scraping the map view, since it gives you the address, type, and location for every result in one response.

Skip the build, get the feed

Send us your LoopNet target and we will scrape a real sample and send it back, no signup.

Get a free sample

The anti-bot reality

LoopNet is a CoStar property, and it sits behind Akamai. In our own testing a proxied browser could not load the site at all, and only a normal Chrome session returned the data. That protection is the real barrier: the listing data is public and structured, but automated and proxied access is blocked, so a naive request gets a challenge rather than properties. Reliable collection means handling that layer with the right session behaviour and keeping it working as the protection changes.

Turning it into a CRE feed

For commercial real estate work you want one row per listing id, captured per market and property type, keeping the address, asking rent, size, space available, type, and broker. Refresh on a schedule so you catch new listings and price changes, and store each run with a date so you can see how long a space sits and how asking rents move, which is often the intelligence that matters more than a single snapshot.

Build it yourself or have it delivered

For one market, a careful session against the search endpoint can get you a sample. At scale and over time, the Akamai layer, the paging, and the markup changes turn it into a standing maintenance job. Once you need several markets refreshed on a schedule, a done-for-you feed is usually cheaper than the upkeep. You tell us the markets and property types, and we deliver a clean CRE feed keyed on the listing id and keep it running.

Where each field lives in the services/search JSON

LoopNet's search response is a single JSON payload with everything the results page needs. MetaState.TotalResultCount gives the size of the market, in our search more than 750 office properties in Austin. The listings themselves sit in SearchPlacards.Html, and each placard is tagged with rich per-listing attributes: a listing id, the city, state, and ZIP, the property type name (Office, Retail, Industrial and so on), the space use, and an exposure tier that reflects how prominently the listing is promoted. The listing id is the stable key you deduplicate on across pages and refreshes. Paging walks the result set to pull every property rather than the first screen, and because the whole thing is behind Akamai, the real engineering is reaching this response at all, not reading it once you have it.

Step by step: reading a LoopNet search

LoopNet serves its search results through an internal JSON endpoint that its own frontend calls, so the cleanest read is that response. Here it is on a real search, office space for lease in Austin, which returned more than 750 properties. The catch, covered right after, is that the site is behind Akamai and will not load for a proxied browser at all.

python
import requests

# LoopNet's frontend loads results from this internal JSON endpoint.
url = "https://www.loopnet.com/services/search"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}

data = requests.get(url, headers=headers).json()
print(data["MetaState"]["TotalResultCount"], "properties")
# Each placard carries the address, property type, asking rent, and size.
Property515 Congress Ave
LocationAustin, TX 78701
Property typeOffice
Listing typeFor lease
Market results750+ properties
Asking rents (market)~$12 to $40 / SF / year

A sample of the clean data we deliver for one product.

The response is clean, but reaching it is the problem: LoopNet is a CoStar site behind Akamai, and in our testing a proxied browser could not load it at all, only a normal Chrome session returned the data. Getting a real, complete result means handling that protection, paging through each market and property type, and keeping it working as the defence changes. We run that for you and deliver a clean CRE feed keyed on the listing id.

Fields worth capturing from LoopNet

  • Property name / title
  • Full address
  • City / state / ZIP
  • Asking rent or price
  • Rent basis (per SF / year)
  • Space available (SF)
  • Property type
  • Listing type (lease / sale)
  • Broker / company
  • Listing ID
  • Images

Frequently asked questions

Want a LoopNet feed without the build?

Send us the products or pages you need, and we will deliver a clean feed and maintain it. Start with a free sample.

Get a Free Sample