Scraping European real estate data from 46 portals
18 August 2026
Property portals are national. Belgians search on Immoweb, the Dutch on Funda, Spaniards on Idealista, Brits on Rightmove. Every country has its own market leader, and none of them cover the neighbours.
That makes cross-border property research annoying. Comparing what €300,000 buys in Valencia against Porto or Kraków means searching separate sites in separate languages, and the Polish one prices in złoty. Every portal has its own idea of what a listing looks like. And the filters differ: some portals let you filter by price and surface in their search, others support neither.
European Property Search is an Apify actor that queries 46 residential property portals across 24 countries in parallel and returns one deduplicated feed, with every price converted to EUR and every listing in the same schema.
What it does
The actor is a meta-scraper. It sits on top of the individual national portal scrapers we publish on the Apify Store and launches the ones you select in parallel, each through a residential proxy in the portal's own country. Then it merges the results.
- Every listing is normalized to a common schema: title, listing type, property type, price, surface, bedrooms, location, URL, and the portal it came from.
- Prices are converted to EUR using European Central Bank reference rates, fetched live at the start of every run. The native price and currency stay on the record.
- Where a listing exposes its surface, price-per-m2 is computed in EUR, so a flat in Budapest and a flat in Dublin compare on the same number.
- Duplicates are collapsed by listing URL.
- The feed is sorted by EUR price, cheapest first, and ends with a summary item that says which portals answered, which failed, how many duplicates were removed, and how many listings the filters excluded.
You choose the coverage with two inputs. portals picks sites by name, countries restricts by country, and they combine. Leave both empty and it runs all 46.
Filtering
The portals disagree on what you can filter. Some support a price range in their own search, some support surface, some support neither. A scraper that only forwards your filter to each site gives you a feed where the bound holds on some portals and not on others.
The actor forwards each filter to the portals that support it, because filtering at the source wastes less scraping. But it also enforces the price, size and bedroom bounds a second time after the merge, on the normalized values. A maxPrice of 300,000 is checked against the EUR-converted price of every listing, whatever currency it arrived in and whatever the source portal's own search can do. A listing whose price could not be read is excluded when a price bound is set, because it cannot be confirmed to match.
Example
Houses for sale up to €300,000, on Immoweb and Idealista:
{
"portals": ["Immoweb", "Idealista"],
"listingType": "sale",
"propertyType": "house",
"maxPrice": 300000,
"maxItemsPerPortal": 25,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
} Both portals are queried at the same time. The run returns up to 25 listings per portal, each one a house for sale at €300,000 or less, in this shape:
{
"itemTitle": "Renovated townhouse with garden",
"listingType": "sale",
"propertyType": "house",
"price": 289000,
"currency": "EUR",
"priceEur": 289000,
"surface": 142,
"pricePerSqmEur": 2035,
"bedrooms": 3,
"location": "Gent",
"country": "BE",
"url": "https://...",
"source": "Immoweb",
"imageUrl": "https://...",
"scrapedAt": "2026-08-18T09:00:00.000Z"
} Every run scrapes the portals live.
Limits
searchQuerytakes a location. You can search "Gent" or "Barcelona", but not "penthouse" or "sea view". The portals search by place; usepropertyTypeand the numeric filters to narrow by kind.- A city name only exists on the portals of its own country. When you search a specific city, add its country in
countries, otherwise the other portals fall back to their default city. - Sweden, Norway, Greece, Croatia and Latvia are not covered yet. The coverage grows as we add national scrapers.
- "Price on request" listings have no
priceEur. When you set a price bound, they are excluded. - Field coverage depends on the portal. Not every site exposes surface or bedrooms, so
pricePerSqmEuris only present where surface is known. - A portal can be blocked or time out. It then shows up under
portalsFailedin the summary, the other portals are unaffected, and a rerun usually recovers it.
Cost
The actor charges a start fee per run. The portal scrapers it launches each bill their own per-result price, exactly as if you ran them directly. The ceiling is maxItemsPerPortal times the number of portals, so 5 portals at 20 items each bills at most 100 results. The cost of a run settles once it has finished successfully.
The actor is on the Apify Store: apify.com/studio-amba/european-property-search