European Commercial Property Search - 33 Portals
Pricing
from $1.20 / 1,000 result scrapeds
European Commercial Property Search - 33 Portals
Search 33 European commercial real-estate portals in a single run. Offices, retail, industrial, land. Unified feed with EUR prices and comparable per-m2 rates.
Pricing
from $1.20 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
European Commercial Property Search
Search thirty-three European commercial real-estate portals in a single run. This actor queries each portal in parallel, normalizes every listing to a common schema, converts prices to EUR using live ECB rates, computes a comparable per-m2 rate where the quote allows it, and removes duplicates. Offices, retail, industrial, land, hospitality and investment property across 20 countries in one feed.
Commercial portals quote prices in wildly different units: EUR per m2 per year in France, pounds per sq ft per annum in the UK, kroner per m2 per year in Scandinavia, monthly totals in Poland and Belgium, yearly totals in Denmark, and "price on application" everywhere. This actor keeps the raw quote exactly as the portal published it and adds a normalized comparison layer on top, so an office in Manchester and an office in Warsaw can be compared on the same number.
No login. No cookies. No account.
What it does
- Searches up to 33 European commercial-property portals at once, across 20 countries. The full list is in the table below.
- Lets you run any subset of portals you choose, on their own or combined with a country filter.
- Filters by listing type (sale/rent), segment, price and surface, applied consistently across every portal.
- Normalizes every listing to a common schema (title, listing type, segment, price, surface, location).
- Preserves each portal's raw price, currency and quote unit, converts to EUR with live European Central Bank rates, and computes a comparable
annualPricePerSqmEur(rentals) orpricePerSqmEur(sales) where the quote unit is unambiguous. - Converts sq ft, acre and hectare surfaces to m2.
- Deduplicates by listing URL.
Portals covered
All 33 portals, with the country code to use in countries, the exact name to use in portals, which side of the market the portal serves, which segments it can filter on, the currency its listings arrive in (everything is also converted to EUR), and an example searchQuery. Use any city or region in the portal's own country, in its native spelling.
| Country | Portal | Website | Sale / rent | Segments | Currency | Example searchQuery |
|---|---|---|---|---|---|---|
| AT | OfficeRentInfo.at | officerentinfo.at | rent only | office | EUR | Vienna |
| AT | Willhaben Gewerbe | willhaben.at | both | office, retail, industrial, land, hospitality | EUR | Graz |
| BE | Immoweb Commercial | immoweb.be | both | office, retail, industrial, land | EUR | Gent |
| BE | OfficeRentInfo.be | officerentinfo.be | rent only | office, industrial | EUR | Brussels |
| BE | Spotto | spotto.be | both | office, retail, industrial, land, hospitality | EUR | Leuven |
| CZ | OfficeRentInfo.cz | officerentinfo.cz | rent only | office, industrial | CZK | Prague |
| DK | Ejendomstorvet | ejendomstorvet.dk | both | office, retail, industrial, land, hospitality | DKK | København |
| DK | Lokalebasen | lokalebasen.dk | both | office, retail, industrial, land | DKK | Aarhus |
| FI | Toimitilat.fi | toimitilat.fi | both | office, retail, industrial, land | EUR | Helsinki |
| FR | BureauxLocaux | bureauxlocaux.com | both | office, retail, industrial, land | EUR | Paris |
| FR | Geolocaux | geolocaux.com | both | office, retail, industrial, land | EUR | Lyon |
| FR | OfficeRentInfo.fr | officerentinfo.fr | rent only | office, industrial | EUR | Paris |
| FR | SeLoger Bureaux & Commerces | seloger.com | both | office, retail, industrial, land | EUR | Bordeaux |
| GB | LoopNet UK | loopnet.co.uk | both | no segment filter | GBP | london |
| GB | NovaLoca | novaloca.com | both | office, retail, industrial, land, hospitality | GBP | Manchester |
| GB | OfficeRentInfo.co.uk | officerentinfo.co.uk | rent only | office | GBP | London |
| GB | Rightmove Commercial | rightmove.co.uk | both | office, retail, industrial, land | GBP | London |
| GB | Zoopla Commercial | zoopla.co.uk | both | office, retail, industrial, land, hospitality | GBP | Leeds |
| GR | xe.gr Commercial | xe.gr | both | office, retail, industrial, land | EUR | Αθήνα |
| HR | OfficeRentInfo.com.hr | officerentinfo.com.hr | rent only | office | EUR | Zagreb |
| HU | OfficeRentInfo.hu | officerentinfo.hu | rent only | office, industrial | HUF | Budapest |
| IE | Commercial.ie | commercial.ie | both | office, retail, industrial, land, hospitality, investment | EUR | Dublin |
| IE | Daft Commercial | daft.ie | both | office, retail, industrial, land, hospitality, investment | EUR | Cork |
| IT | Commerciali.it | commerciali.it | both | office, retail, industrial, hospitality | EUR | Milano |
| LU | OfficeRentInfo.lu | officerentinfo.lu | rent only | office, industrial | EUR | Luxembourg |
| NL | Funda in Business | fundainbusiness.nl | both | office, retail, industrial, land, hospitality, investment | EUR | Amsterdam |
| NO | Finn Næring | finn.no | both | office, retail, industrial, hospitality | NOK | Oslo |
| PL | OfficeRentInfo.pl | officerentinfo.pl | rent only | office, industrial | EUR | Warsaw |
| PL | Otodom Commercial | otodom.pl | both | office, retail, industrial, land | PLN | Warszawa |
| RO | OfficeRentInfo.ro | officerentinfo.ro | rent only | office, industrial | EUR | Bucharest |
| RS | OfficeRentInfo.rs | officerentinfo.rs | rent only | office, industrial | EUR | Belgrade |
| SE | Objektvision | objektvision.se | both | office, retail, industrial, land | SEK | Stockholm |
| SK | OfficeRentInfo.sk | officerentinfo.sk | rent only | office, industrial | EUR | Bratislava |
Portal names in the portals input are matched case-insensitively, and the scraper slug works too ("spotto-scraper" or "spotto" both select Spotto; "officerentinfo" selects the whole OfficeRentInfo network). Rent-only portals are skipped on a sale run, and portals that cannot filter a requested segment are skipped on that segment's run, so a filtered run never bills you for listings from the wrong part of the market.
A few portals serve one side of the market by default when listingType is left empty: Rightmove Commercial, Zoopla Commercial and Daft Commercial return sale listings, and LoopNet UK, Objektvision, Commerciali.it, Willhaben Gewerbe and Otodom Commercial return rentals. Set listingType explicitly when you need a specific side from these portals.
Germany, Switzerland and Spain are not covered yet.
Choosing which portals to run
Two inputs decide which portals a run queries, and they combine:
portalspicks specific sites by name, in any combination (for example["Spotto", "Immoweb Commercial"]). Leave it empty for all portals.countriesrestricts to portals in those countries (for example["DK", "FI"]).
Give both and the run uses the intersection. Give neither and it runs all 33.
Filtering listings
| Filter | What it does |
|---|---|
listingType | sale or rent. Empty returns both. Translated to each portal's own filter (for-sale/to-rent on Zoopla, transaction on LoopNet). Rent-only portals are skipped on a sale run. |
segment | office, retail, industrial, land, hospitality or investment. Translated to each portal's own category (kontor on the Danish and Swedish portals, bureau on Geolocaux, uffici on Commerciali.it, warehouse on Otodom). Portals without the requested segment are skipped. |
minPrice / maxPrice | Price bounds in EUR. For sales they apply to the sale total; for rentals to the ANNUALIZED rent total (monthly quotes x12, weekly x52, per-m2 quotes x surface). A listing whose price cannot be normalized is excluded when a bound is set. |
minSize / maxSize | Floor-area bounds in m2, enforced on the normalized surface (sq ft converted). |
How to scrape European commercial real estate data
- Set Search Location (
searchQuery) to a city or region, for exampleDublin. This is a location, not a keyword. Leave it empty to let each portal use its own default scope, which is the better choice when you query several countries at once. - Choose your coverage: pick specific sites with Portals, or restrict to Countries, or both. Leave both empty for all 33.
- Add any Filters you need: listing type, segment, price range, surface range.
- Set Max Items Per Portal to control how many listings are pulled from each portal.
- Run the actor. Each portal is queried in parallel, listings are normalized, priced in EUR, filtered and deduplicated.
- Open the dataset. Each row is one unique commercial listing with the portal it came from, the raw quote, and the comparable per-m2 rate where one could be computed.
Input
| Field | Type | Description |
|---|---|---|
searchQuery | string | Location (city or region) passed to every selected portal. Not a keyword. Empty uses each portal's default scope. |
countries | array | Optional country filter. Empty means all countries. |
portals | array | Optional list of portal names to run. Empty means all portals in the selected countries. |
listingType | string | sale or rent. Empty returns both. |
segment | string | office, retail, industrial, land, hospitality or investment. Empty returns all segments. |
minPrice / maxPrice | integer | Price bounds in EUR (sale totals, annualized rent totals). |
minSize / maxSize | integer | Floor-area bounds in m2. |
maxItemsPerPortal | integer | Max listings per portal (1-200, default 20). |
timeoutPerPortalSecs | integer | Max seconds to wait per portal (30-600, default 120). |
proxyConfiguration | object | Proxy settings passed to the underlying scrapers, geo-scoped per portal automatically. Residential is used by default and recommended. |
Example input
Offices for rent across Belgium:
{"countries": ["BE"],"listingType": "rent","segment": "office","maxItemsPerPortal": 25,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Industrial space on the two Danish portals only, up to 2,000 m2:
{"portals": ["Ejendomstorvet", "Lokalebasen"],"segment": "industrial","maxSize": 2000,"maxItemsPerPortal": 50,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Output
Each item in the dataset is one unique commercial listing:
{"itemTitle": "Kontorlejemål i København SV","listingType": "rent","segment": "kontor","price": 875,"currency": "DKK","priceUnit": "kr/m2/år","priceText": null,"priceEur": 117.25,"annualPricePerSqmEur": 117.25,"pricePerSqmEur": null,"surface": 452,"location": "København SV","country": "DK","url": "https://...","source": "Lokalebasen","imageUrl": "https://...","scrapedAt": "2026-08-18T09:00:00.000Z"}
| Field | Description |
|---|---|
itemTitle | Listing title. |
listingType | Sale or rent, as the portal reports it. |
segment | Commercial segment, as the portal labels it (kontor, bureau, office, ...). |
price / currency / priceUnit / priceText | The raw quote exactly as the portal published it. |
priceEur | The quoted number converted to EUR, still in the portal's own unit. |
annualPricePerSqmEur | Comparable rent: EUR per m2 per YEAR. Computed from the quote unit (per-sq-ft x10.7639, monthly x12, weekly x52, totals divided by surface). Null when the unit is ambiguous. |
pricePerSqmEur | Comparable sale price: EUR per m2. Null when it cannot be derived. |
surface | Floor area in m2 (sq ft, acres and hectares converted). |
location | City or address, if available. |
country | ISO country code of the source portal. |
url | Link to the original listing. |
source | Name of the portal the listing came from. |
scrapedAt | ISO 8601 timestamp. |
A final __SUMMARY__ item lists which portals answered, which failed, the totals before and after dedup and filtering, and comparablePriceCoverage (the share of returned listings that carry a comparable per-m2 rate).
Price normalization
Commercial quotes are not comparable as published. The same office floor can be quoted as EUR/m2/year in Paris, GBP per sq ft per annum in London, kr/m2/år in Stockholm, a monthly total in Warsaw, or a yearly total in Copenhagen. The actor parses each portal's quote unit and converts:
- per-sq-ft rates to per-m2 (x10.7639)
- monthly rates to annual (x12), weekly to annual (x52)
- total rents to per-m2 where the listing exposes its surface
- every currency to EUR with live ECB reference rates
The result is one number per rental (annualPricePerSqmEur) and one per sale (pricePerSqmEur) that means the same thing everywhere. When the quote unit is ambiguous (a bare "per sq ft" with no period, an Italian rent quote that mixes monthly and annual figures, a "price on application"), the comparable stays null. The raw price, currency and unit are always preserved, so nothing is lost and nothing is guessed.
"Price on application" is normal in this vertical. Expect a meaningful share of listings without a price on every portal; the summary's comparablePriceCoverage tells you exactly what a run yielded.
Use cases
- Cross-border office, retail and industrial market research with one comparable rent metric.
- Rent benchmarking per m2 across European cities and countries.
- Feeding a commercial-property aggregator or dashboard with EUR-normalized listings from a chosen set of portals.
- Sourcing investment property and land across 20 markets in one query.
Pricing and cost
This actor charges its own start fee and a small per-result fee. The portal scrapers it launches each bill their own per-result price to your account on top, exactly as if you ran them directly. The ceiling is maxItemsPerPortal times the number of portals you run. A run's usage cost only settles after the run reports SUCCEEDED; a mid-run reading undercounts it.
Two portals fetch detail pages for complete price data (the OfficeRentInfo network and Geolocaux), which costs one extra request per listing on those portals. This is what makes their rent figures usable and is already reflected in their per-result price.
Notes
- This is a meta-actor. It orchestrates our individual national commercial-property scrapers and runs them in parallel.
- Field and filter coverage depends on each portal. Not every portal exposes surface or a usable quote unit. Price and size bounds are still enforced afterwards on the normalized values, so the returned set always respects them.
searchQueryis a location, not a keyword. Usesegmentand the numeric filters to narrow by type.- Residential proxies are used by default, geo-scoped to each portal's country, and give the most reliable results.
FAQ
Why do some listings have no annualPricePerSqmEur?
Either the portal published no price ("price on application" is common in commercial property), or the quote unit was ambiguous and converting it would mean guessing. The raw price, currency and priceUnit are always kept, so you can apply your own rules.
How is a UK "£32.50 per sq ft per annum" made comparable? Multiplied by 10.7639 to get per-m2, converted to EUR at the live ECB rate. A bare "per sq ft" without a stated period is left unconverted, because assuming a period would be a guess.
Do I need an account or API key for any of the portals? No. Every portal is scraped without a login, and there is nothing to configure beyond the input fields above.
I searched "Gent" across all portals and most returned other cities. Why?
A city name only exists on the portals of its own country. The other portals fall back to their default scope. When you search a specific city, add its country in countries.
Can I run just one portal?
Yes. Set portals to one name from the table, for example ["Objektvision"]. The run then behaves like that single scraper, plus EUR conversion, the normalized schema and the comparable per-m2 rate.
Why is a portal listed under portalsFailed in the summary?
It was blocked, timed out, or returned nothing usable for your query. The other portals are unaffected and the run still succeeds. A rerun usually recovers it; for slow portals, raise timeoutPerPortalSecs.
Why was a portal skipped from my run entirely? Either it only serves one side of the market (the OfficeRentInfo network is rent-only) and you filtered for the other, or it cannot filter the segment you asked for (LoopNet UK has no segment filter at all). Skipping avoids billing you for listings you did not ask for.
How much does a run cost?
A start fee plus a small per-result fee for this actor, plus each portal scraper's own per-result price for the listings it returns. The ceiling is maxItemsPerPortal times the number of portals you run. The cost settles once the run has finished successfully.
How fresh is the data? Every run scrapes the portals live. Nothing is served from a cached index.
Why is there no portal for Germany or Spain? Their national commercial portals need credentials the meta cannot supply on your account. The table above is the current coverage; it grows as portals become callable credential-free.