Imobiliare.ro is one of Romania's main property portals: apartments, studios, houses, land, commercial space and offices, for sale and for rent, in every county. Until October 2026 it could be read with plain HTTP requests. Then it could not, and that change shapes everything else about scraping it.
What changed in October 2026
In early October imobiliare.ro put DataDome bot protection in front of all searches and listing pages. Plain HTTP clients started receiving HTTP 403 — from Apify's data-centre IPs and from residential IPs alike. The home page, the RSS feed and the sitemaps stayed open, but none of them carry listing data.
The Imobiliare.ro Scraper answered with a different route, not a workaround of a login: there is still no account and no session cookie of anyone's. Each run opens a real browser session through residential IPs that exit outside Romania, racing two routes and keeping the one that passes, and then reads the results from inside that page. If a route is served a CAPTCHA, the Actor drops it. It never solves one, and if every route were served one, the run would stop and say so.
The cost of that is time and memory: the session takes 20 to 60 seconds to open, and the default memory is 4 GB. The default 100-listing run finished in 48 seconds on build 0.2.7, with a peak of 1,254 MB.
What a listing row holds
From search results alone, a listing row carries a median of 66 filled fields, measured on 480 listings across 14 searches on 23 September 2026:
| Field | Fill rate (n = 480) |
|---|---|
price, currency, description, images | 100% |
price_period | 99.4% |
days_on_market | 98.8% |
surface_m2 | 94.2% |
usable_surface_m2 | 82.5% |
year_built | 78.8% |
rooms | 78.5% (100% on apartments and houses) |
metro_distance_m | 23.1% (44% on Bucharest rentals) |
previous_price | 4.6% |
That sample predates the bot protection. A smaller re-measurement on the browser-based build 0.2.7 on 6 October gave a median of 74 fields on 100 listing rows — higher, but on a fifth of the sample, so the 480-row figure stays the published one. Why the smaller, better number does not replace it is the subject of measured fill rates, not promises.
Step 1 — choose a location the site knows
The location is the path segment of an imobiliare.ro search URL: bucuresti, bucuresti/sector-1, judetul-cluj/cluj-napoca, judetul-timis/timisoara. Empty means all of Romania.
{
"offerType": "rent",
"propertyType": "apartments",
"location": "judetul-cluj/cluj-napoca",
"sort": "latest",
"maxItems": 60
}Filters follow the same rule as on Fotocasa: only those verified to change the result are offered. A maximum price of 100,000 EUR cut Bucharest apartments for sale from 25,983 to 5,733.
Step 2 — plan around 9,990 results
The site pages through at most 9,990 results for one search, at 30 per page. Bucharest apartments for sale held about 26,000 when measured, so one search reaches well under half of them. Above the ceiling the Actor continues by sub-location — Bucharest by sector, for example — and maxItems stays a hard cap on what is delivered.
Step 3 — listing pages and coordinates
Coordinates do not need listing pages. One extra request per search reads the portal's map, which knows every listing on searches under 10,000 results, at no extra charge. On a Cluj-Napoca search that gave coordinates on 60 of 60 rows; on a Bucharest search of about 26,000 it gave 74 of 100, because the map returns at most 10,000 pins.
includeDetails adds creation, publication and modification dates (60 of 60), bathrooms (58 of 60), street address (44 of 60), every characteristic and amenity, and the agency's legal name and address (51 of 60). A listing page costs about 20 times the bandwidth of a search result and is slower behind the protection, so it is off by default. With listing pages the median was 82 fields on 60 rows in the 6 October re-measurement — the lower of the two measurements taken.
Private sellers and the GDPR
Private persons were 81 of the 480 advertisers measured, 16.9%, and up to 55% on Bucharest rentals. On their rows the advertiser name is the person's own name, and 7.8% of those 81 descriptions contained a phone number.
By default the Actor nulls the name, account and agency fields on those rows, strips phone numbers and e-mails from the title and description, and flags the row seller_contact_redacted. Any seller type it cannot classify is treated as private. Agencies and developers are always delivered in full. It never presses the portal's “show phone” button for anyone. includePrivateSellerContact exists for users who have a lawful basis to process that data under the GDPR; Romania's supervisory authority is the ANSPDCP.
robots.txt and the terms
The robots.txt fetched on 10 October 2026 has 69 Disallow and 11 Allow lines. It allows search pages 2 to 10 and disallows the rest:
Disallow: /*page=*
Disallow: /*price=*
Disallow: /*sort=*
Disallow: /api/
Disallow: /map/*
Allow: /*?page=2$
...
Allow: /*?page=10$The Actor pages beyond page 10, uses filter and sort parameters, and reads the map for coordinates. It does not apply robots.txt as a filter, and this page says so rather than leaving it to be discovered. That is a different position from the one described in reading robots.txt as a specification, and the difference is stated here rather than left to be assumed.
The site's terms and conditions contain one explicit clause against automated extraction, in the section on ImoAI, the portal's AI assistant: it forbids crawling or scraping ImoAI's answers. The Actor does not use ImoAI and never creates an account.
What a run costs
$0.0012 per listing, $0.0025 per listing page, $0.0012 per agency, and a start fee of $0.005 per GB of memory — $0.02 at the default 4 GB, which covers opening the browser session. A thousand listings costs $1.22 including the start; with listing pages, $3.72. Duplicates and error rows are not charged, and a maximum-cost setting stops the run cleanly without delivering a row it did not charge.
For how Imobiliare.ro compares with the Spanish and Korean portals, see the three portals compared.
