LoopNet $1.2๐ฐ URL | Search | Enriched Output
Pricing
from $1.20 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
31
Total users
11
Monthly active users
2 days ago
Last modified
Categories
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.
| Field | Example |
|---|---|
| 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 |
| zipCode | AA0 0AA |
| country | GB |
| price | null |
| priceRaw | ยฃ00.00 - ยฃ00.00 sq ft pa |
| sizeSqftMin | 1000 |
| sizeSqftMax | 25000 |
| size | 1,000 - 25,000 sq ft |
| brokerNames | ["Sample Agency", "Example Partners"] |
| description | Full listing description text appears here. |
| primaryPhoto | https://images.loopnet.co.uk/i2/000000000/117/sample.jpg |
| state | CA (US listings; UK uses postcode) |
| latitude / longitude | 51.5000 / -0.1000 (US: included by default; UK: with detail fetch) |
| brokerPhone | +440000000000 (with detail fetch) |
| scrapedAt | 2026-01-01T00:00:00.000Z |
| changeType | NEW (only present when incrementalMode is on โ see below) |
| changedFields, firstSeenAt, lastSeenAt | incremental 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):
{"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/"],"maxListings": 50}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| mode | string | search | search builds URLs from filters; url passes through your URLs. |
| site | string | com | com for US / Canada, co-uk for UK / international. Auto-detected in URL mode. |
| locations | array | ["los-angeles-ca"] | Location slugs. US: los-angeles-ca. UK: united-kingdom or london-england--united-kingdom. |
| listingType | string | for-sale | for-sale, for-lease (For Rent on the UK site), or auction (US only). |
| propertyType | string | all-commercial | Office, retail, industrial, multifamily, land, hotels, and more. |
| minPrice / maxPrice | integer | none | Price range filter (applied to results). |
| minSqft / maxSqft | integer | none | Size range filter (applied to results). |
| sortBy | string | default | Most recent, price or size ordering. |
| urls | array | sample | URL mode only. Multiple URLs supported. |
| fetchDetails | boolean | false | Adds coordinates, street, broker phone and JSON-LD fields per listing. |
| maxPages | integer | (empty) | Safety ceiling on results pages per location/URL. Leave empty to walk every result page. |
| maxListings | integer | 20 | Stop after this many listings. 0 = unlimited. |
| resumeFromRunId | string | (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. |
| incrementalMode | boolean | false | Turn 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. |
| stateKey | string | (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. |
| emitUnchanged | boolean | false | Incremental mode only. Also return (and bill) listings that have not changed since the last run, marked UNCHANGED. |
| emitExpired | boolean | false | Incremental 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. |
| proxy | object | Residential | Connection settings, see below. |
Resuming a full-catalogue walk
For an unbounded pull (maxPages empty, maxListings: 0), two things protect a long run:
resumeFromRunIdlets you continue in a brand-new run: paste the ID of a previous run (or its dataset), and this run skips every listingidalready 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, andREAPPEAREDlistings โ unchanged listings are suppressed (not pushed, not billed) unless you turn onemitUnchanged. - Every dataset row gains
changeType,changedFields,firstSeenAt, andlastSeenAtwhile 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.
emitExpiredonly 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.
- Authorize a connector once under Apify โ Settings โ Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto 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.