LoopNet $1.2๐Ÿ’ฐ URL | Search | Enriched Output avatar

LoopNet $1.2๐Ÿ’ฐ URL | Search | Enriched Output

Pricing

from $1.20 / 1,000 results

Go to Apify Store
LoopNet $1.2๐Ÿ’ฐ URL | Search | Enriched Output

LoopNet $1.2๐Ÿ’ฐ URL | Search | Enriched Output

From $1.2/1K. Scrape LoopNet across the US including office, retail, industrial, multifamily, land, and hotels. Search by city or URL. Extract 25+ fields such as address, price, size, broker contact, and photos, with optional detail enrichment for cap rate, year built, class, and description.

Pricing

from $1.20 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

35

Total users

8

Monthly active users

9 days ago

Last modified

Share

LoopNet Commercial Properties Scraper

Pull commercial property listings from LoopNet across the United States, Canada (loopnet.com) and the United Kingdom / international markets (loopnet.co.uk): offices, retail, industrial, multifamily, land, hotels and more. Search by location or paste your own LoopNet URLs. Returns 30+ fields per listing including address, price, size, broker contacts, photos and a full description. Tuned for fast, low-cost, stable runs.

Why this scraper

  • Two markets, one actor. Choose loopnet.com (US / Canada) or loopnet.co.uk (UK / international); URL mode auto-detects the site per link.
  • Rich results without extra fetches. On the UK site every result already carries title, address, size range, full description and broker names, so the default run is fast and cheap with detail fetching off.
  • 30+ fields per listing: location, price, size, year built, building class, broker contacts, photos, coordinates and more.
  • Two modes: search by location and filters, or paste specific search / listing URLs (multiple URLs supported).
  • Resilient connections. Connections are managed automatically to keep results flowing.
  • Predictable cost. One small default result cap, per-record output, and an optional per-listing detail surcharge only when you turn detail fetching on.

Data you get

Sample shape, values are illustrative placeholders, not from a live listing.

FieldExample
id00000001
urlhttps://www.loopnet.co.uk/listing/sample-road-london/00000001/
titleSample Logistics Park, Unit 1
listingTypefor-lease
propertyTypeindustrial-properties
listingTypeNameIndustrial to Let
addressRawLondon, AA0 0AA
cityLondon
zipCodeAA0 0AA
countryGB
pricenull
priceRawยฃ00.00 - ยฃ00.00 sq ft pa
sizeSqftMin1000
sizeSqftMax25000
size1,000 - 25,000 sq ft
brokerNames["Sample Agency", "Example Partners"]
descriptionFull listing description text appears here.
primaryPhotohttps://images.loopnet.co.uk/i2/000000000/117/sample.jpg
stateCA (US listings; UK uses postcode)
latitude / longitude51.5000 / -0.1000 (US: included by default; UK: with detail fetch)
brokerPhone+440000000000 (with detail fetch)
scrapedAt2026-01-01T00:00:00.000Z
changeTypeNEW (only present when incrementalMode is on โ€” see below)
changedFields, firstSeenAt, lastSeenAtincremental mode only

How to use

Search the UK site (nationwide industrial to let):

{
"mode": "search",
"site": "co-uk",
"locations": ["united-kingdom"],
"listingType": "for-lease",
"propertyType": "industrial-properties",
"maxListings": 20
}

Search a specific UK city (use the full location slug):

{
"mode": "search",
"site": "co-uk",
"locations": ["london-england--united-kingdom"],
"listingType": "for-lease",
"maxListings": 20
}

Search the US site (loopnet.com), on Apify Residential:

{
"mode": "search",
"site": "com",
"locations": ["los-angeles-ca", "new-york-ny"],
"listingType": "for-sale",
"propertyType": "office-space",
"maxListings": 30,
"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Paste your own URLs (site auto-detected per link). The price, size and sort filters still apply to each pasted search URL, so you can narrow a link you copied out of the browser:

{
"mode": "url",
"urls": [
"https://www.loopnet.co.uk/search/commercial-property/london-england--united-kingdom/for-rent/",
"https://www.loopnet.co.uk/search/office-space/manchester-gtm--united-kingdom/for-rent/"
],
"minSqft": 2000,
"sortBy": "size-desc",
"maxListings": 50
}

Input parameters

ParameterTypeDefaultDescription
modestringsearchsearch builds URLs from the search fields below; url passes through your URLs. The price, size and sort filters apply in both modes.
sitestringcomcom for US / Canada, co-uk for UK / international. Auto-detected in URL mode.
locationsarray["los-angeles-ca"]Search mode only. Location slugs. US: los-angeles-ca. UK: united-kingdom or london-england--united-kingdom. Ignored in URL mode, where each pasted URL carries its own location.
listingTypestringfor-saleSearch mode only. for-sale, for-lease (For Rent on the UK site), or auction (US only). Ignored in URL mode, where the listing type is read from each pasted URL.
propertyTypestringall-commercialSearch mode only. Office, retail, industrial, multifamily, land, hotels, and more. Ignored in URL mode, where the property type is read from each pasted URL.
minPrice / maxPriceintegernoneApplies in both search mode and URL mode. Price range, applied to every results page walked, including pasted search URLs. Listings with no total price shown (a per sq ft or per month rent) are kept.
minSqft / maxSqftintegernoneApplies in both search mode and URL mode. Size range, applied to every results page walked, including pasted search URLs. Listings with no size shown are kept.
sortBystringdefaultApplies in both search mode and URL mode. Most recent, price or size ordering of the listings collected from each results page.
urlsarraysampleURL mode only. Multiple URLs supported. The search-mode fields above are ignored, but the price, size and sort fields still apply to every pasted search URL. A pasted individual listing URL is saved as-is, unfiltered.
fetchDetailsbooleanfalseAdds coordinates, street, broker phone and JSON-LD fields per listing.
maxPagesinteger(empty)Safety ceiling on results pages per location/URL. Leave empty to walk every result page.
maxListingsinteger20Stop after this many listings. 0 = unlimited.
resumeFromRunIdstring(empty)A previous run ID or dataset ID to continue a full-catalogue walk across separate runs. Listings already collected there (matched by id) are skipped, so this run only saves the new ones.
incrementalModebooleanfalseTurn on for recurring/scheduled monitoring of the SAME search. Classifies each listing as NEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED against the actor's own remembered state, instead of you pasting a run/dataset ID every time.
stateKeystring(empty)Incremental mode only. Names a monitoring campaign so its state stays stable, or to deliberately share state across differently-configured runs. Leave empty to derive a key automatically from the site/locations/filters/fetchDetails.
emitUnchangedbooleanfalseIncremental mode only. Also return (and bill) listings that have not changed since the last run, marked UNCHANGED.
emitExpiredbooleanfalseIncremental mode only. Also return (and bill) listings that were tracked before but are no longer found, marked EXPIRED. Only produced once a run fully scans the tracked search.
proxyobjectResidentialConnection settings, see below.

Resuming a full-catalogue walk

For an unbounded pull (maxPages empty, maxListings: 0), two things protect a long run:

  • resumeFromRunId lets you continue in a brand-new run: paste the ID of a previous run (or its dataset), and this run skips every listing id already saved there, appending only new listings.
  • A checkpoint is saved automatically as the run progresses. If the run is interrupted by an Apify platform migration or you click Resurrect on a failed run, it picks back up in the same run without re-saving (or re-charging for) listings it already collected. No input is needed for this; it's automatic.

Incremental & dedup mode (recurring monitoring)

Distinct from resumeFromRunId above, which continues ONE specific interrupted run. incrementalMode is for scheduling this actor to run the SAME search again and again (daily/weekly) and getting only what changed:

  • The first run returns every matching listing marked changeType: "NEW".
  • Later runs normally return only NEW, UPDATED, and REAPPEARED listings โ€” unchanged listings are suppressed (not pushed, not billed) unless you turn on emitUnchanged.
  • Every dataset row gains changeType, changedFields, firstSeenAt, and lastSeenAt while incremental mode is on. With it off, output is unchanged.
  • State is kept per stateKey (or an automatic hash of site/locations/filters/fetchDetails) in a dedicated key-value store, so it never costs extra requests against LoopNet.
  • A detail page is still fetched (and used to compute the change fingerprint) for a listing that turns out UNCHANGED, but that listing is neither pushed nor charged the detail-enrichment surcharge.
  • emitExpired only fires once a run has fully scanned the tracked search โ€” a page-capped, resumed, or partial run leaves previously-tracked listings' state as-is instead of guessing they are gone.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape โ€” the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record โ€” not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify โ†’ Settings โ†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Output example

Sample shape, values are illustrative placeholders, not from a live listing.

{
"id": "00000001",
"url": "https://www.loopnet.co.uk/listing/sample-road-london/00000001/",
"title": "Sample Logistics Park, Unit 1",
"listingType": "for-lease",
"propertyType": "industrial-properties",
"listingTypeName": "Industrial to Let",
"addressRaw": "London, AA0 0AA",
"city": "London",
"state": null,
"zipCode": "AA0 0AA",
"country": "GB",
"price": null,
"priceRaw": "ยฃ00.00 - ยฃ00.00 sq ft pa",
"priceUnit": "per_sqft_year",
"size": "1,000 - 25,000 sq ft",
"sizeSqftMin": 1000,
"sizeSqftMax": 25000,
"brokerNames": ["Sample Agency", "Example Partners"],
"description": "Full listing description text appears here.",
"primaryPhoto": "https://images.loopnet.co.uk/i2/000000000/117/sample.jpg",
"latitude": 51.5000,
"longitude": -0.1000,
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Connection

This actor needs Apify Residential proxy (Starter plan or higher). Both sites work on the Residential default; regional connections are handled automatically, so leave the connection as is for most runs.

  • loopnet.co.uk (UK / international) runs on Apify Residential out of the box.
  • loopnet.com (US / Canada) also runs on Apify Residential. If a US run occasionally returns zero results during heavy traffic periods, simply re-run, or optionally supply your own residential proxy URLs in the connection field (proxyUrls) for extra headroom.

If a run returns zero results, the dataset includes a single record noting what to adjust.