ActorStack.dev
Real estateLead generationv0.2.7updated 6 October 2026

Imobiliare.ro Scraper — Romania Real Estate & Agencies

No login. No CAPTCHA solving. Private sellers redacted by default.

Extracts property listings for sale and rent, and the agencies and developers behind them, from Imobiliare.ro anywhere in Romania. Since imobiliare.ro put bot protection in front of its searches in October 2026, every run opens a real browser session through residential IPs and then reads the results inside it; it never solves a CAPTCHA.

oswaldocarabano/imobiliare-ro-scraper

input.json
{
  "offerType": "rent",
  "propertyType": "apartments",
  "location": "judetul-cluj/cluj-napoca",
  "sort": "latest",
  "maxItems": 60,
  "includeDetails": false
}
Version
v0.2.7
Memory
4096 MB
Browser
yes
Proxy
Residential, built in, exiting outside Romania

Short answer

The Imobiliare.ro Scraper extracts Romanian property listings from imobiliare.ro without a login: EUR price with its period, usable and total surface, rooms, floor, year built, the full description, photos, GPS coordinates from the portal map and the advertiser, with a median of 66 filled fields per row measured on 480 listings across 14 searches. Pricing is $0.0012 per listing, $0.0025 per optional listing page and $0.0012 per agency, plus a start fee of $0.005 per GB of memory — $0.02 per run at the default 4 GB.

Key points

  • The Imobiliare.ro Scraper delivered a median of 66 filled fields per listing row on 480 listings across 14 searches, measured on 23 September 2026.
  • Imobiliare.ro put DataDome bot protection in front of every search and listing page in October 2026, so each run now opens a real browser session through residential IPs exiting outside Romania.
  • Private persons were 81 of 480 advertisers (16.9%), and the Imobiliare.ro Scraper hides their name, account and any phone or e-mail written in the description by default.
  • Imobiliare.ro pages through at most 9,990 results per search, so the Actor continues by sub-location above that; Bucharest apartments for sale alone held about 26,000 listings.
  • An unknown location makes imobiliare.ro silently return the whole country, and the Actor turns that into an uncharged error row instead of wrong data.
  • GPS coordinates come from one extra map request per search: 60 of 60 rows on a Cluj-Napoca search, 74 of 100 on a Bucharest search with more than 10,000 results.
On this page11 sections

What it does

Extracts property listings for sale and rent, and the agencies and developers behind them, from Imobiliare.ro anywhere in Romania. Since imobiliare.ro put bot protection in front of its searches in October 2026, every run opens a real browser session through residential IPs and then reads the results inside it; it never solves a CAPTCHA.

output — one row
{
  "row_type": "listing",
  "id": 41530318,
  "url": "https://www.imobiliare.ro/oferta/apartament-de-vanzare-sector-1-pipera-2-camere-3-41530318",
  "offer_type": "sale",
  "property_type": "apartment",
  "price": 126929,
  "currency": "EUR",
  "price_period": "total",
  "rooms": 2,
  "usable_surface_m2": 44.8,
  "floor": 2,
  "total_floors": 5,
  "year_built": 2026,
  "city": "Sector 1",
  "area": "Pipera",
  "latitude": 44.4965276,
  "longitude": 26.1223332,
  "seller_type": "developer",
  "agency_name": "BECALI IMOBILIARE",
  "image_count": 20,
  "days_on_market": 5
}

Why this one

A wrong location is an error, not the whole country

Imobiliare.ro answers a location slug it does not know with the national result set and HTTP 200. A scraper that trusts the response bills you for listings from the wrong city. The Imobiliare.ro Scraper detects the substitution and returns an error row that is never charged.

Private sellers redacted, agencies complete

About one advertiser in six on imobiliare.ro is a private person, and up to 55% on Bucharest rentals. For those rows the Imobiliare.ro Scraper nulls the name and account and strips phone numbers and e-mails from the text unless you enable `includePrivateSellerContact`. Agencies and developers are always delivered in full. Any seller type it cannot classify is treated as private.

A browser, but no CAPTCHA solving

The portal's protection now challenges plain HTTP clients from data centres and from residential IPs alike. The Imobiliare.ro Scraper opens a real browser session, keeps the route that passes, and if a route is served a CAPTCHA it drops that route rather than solving it. If the protection ever serves a CAPTCHA to every route, the run stops and says so.

Use cases

  • Track asking prices and price per square metre for apartments in Bucharest, Cluj-Napoca, Timișoara, Iași or Brașov, by sector and neighbourhood.
  • Follow price cuts through `previous_price` and time on market through `days_on_market`.
  • Measure rent levels in Bucharest and Cluj with the price period on every row.
  • Build a list of Romanian real estate agencies and developers with IDs, logos and profile URLs.
  • Feed a valuation model with surfaces, floor, year built, construction stage and coordinates.

Input

Every field has a default, and the defaults are deliberately small so a first run is cheap enough to inspect before you commit to a sweep. This table mirrors the Actor's own input schema field for field.

FieldDefaultWhat it does
outputTypeselect"listings"What to extract`listings` or `agencies`. One row type per run. Private sellers never become agency rows.
offerTypeselect"sale"Operation`sale` or `rent`.
propertyTypeselect"apartments"Property type`apartments`, `studios`, `houses`, `land`, `commercial` or `offices`. Land exists only for sale and offices only for rent.
locationstring"bucuresti"LocationThe location part of an imobiliare.ro search URL: `bucuresti`, `bucuresti/sector-1`, `judetul-cluj/cluj-napoca`. Empty searches all of Romania. An unknown location becomes an error row.
startUrlsstring[][]Search URLsimobiliare.ro search result URLs with any filters set on the site, instead of the fields above.
sortselect"default"Sort by`default`, `latest`, `lowest-price` or `highest-price` — only orders verified to change the result.
minPriceinteger—Minimum / maximum price (EUR)With `maxPrice` and `rooms`. Verified: a 100,000 EUR maximum cut Bucharest apartments from 25,983 to 5,733.
maxItemsinteger100Maximum rowsHard cap on rows delivered, up to 100,000.
includeDetailsbooleanfalseAlso scrape each listing pageAdds creation, publication and modification dates, street, bathrooms, characteristics, amenities and the agency's legal name, address and agents. About 20 times the bandwidth of a search result, billed separately.
includeCoordinatesbooleantrueAdd coordinates from the mapOne extra request per search adds latitude and longitude to every listing the portal map knows about. No extra charge.
includePrivateSellerContactbooleanfalseInclude private sellers' namespersonal dataOff by default. Turn it on only if you have a lawful basis to process personal data under the GDPR.
maxConcurrencyinteger3Maximum concurrency1 to 8. A burst of 36 requests, 8 in parallel, got no refusals; 3 stays well below that.

Output and fill rates

A field being in the schema is not the same as it having a value. The percentages below were counted on real runs; the sample sizes are in Measurements. Anything not listed here is not promised.

FieldFilledMeaning
idinteger100%imobiliare.ro listing ID, with `url`, `title`, `offer_type`, `property_type` and `category`.
pricenumber100%Asking price, with `currency` (100%).
price_periodstring99.4%`total` for a sale, a period for a rent.
price_per_sqmnumber18.1%As published by the portal; 100% on land.
previous_pricenumber4.6%With `price_change_direction`: set when the price changed.
roomsinteger78.5%100% on apartments and houses.
usable_surface_m2number82.5%Usable surface.
surface_m2number94.2%Total surface.
year_builtinteger78.8%Year of construction.
construction_stagestring79%Finished, under construction and similar.
location_pathstring[]100%With `county`, `city`, `area` and `address`.
latitudenumbernot measuredWith `longitude`, from the portal map. Depends on search size: 60/60 in Cluj-Napoca, 74/100 in Bucharest.
metro_distance_mnumber23.1%With `metro_walk_minutes`. 44% on Bucharest rentals.
descriptionstring100%The full listing description.
imagesstring[]100%Every photo URL, with `image_count`.
seller_typestringnot measured`agency`, `developer` or `private`.
agency_namestringnot measuredWith `agency_id` and `agency_slug`. The README reports 100% on 480 rows, counted before private-seller redaction; redacted rows carry null.
agent_namestringnot measuredThe agent named on the listing. Null on redacted private-seller rows.
days_on_marketinteger98.8%Days since the listing appeared.
street_addressstring73.3%Listing pages only: 44 of 60 measured.
date_createddatetime100%Listing pages only, with `date_published` and `date_modified`: 60 of 60.

Every key is always present. A field that exists but is empty comes back as explicit null, so a parser never has to guess.

Datasets

Different record types go to different datasets, so the main table never carries columns that are blank on most rows.

  • defaultOne row per listing, or one per agency with `outputType: agencies`; error rows carry `row_type: error`.billed
  • RUN_SUMMARY (key-value store)Counts of rows, listing pages, error rows and requests.never billed

Pricing

Pay per delivered result. Charges are applied as each row is produced rather than in a lump at the end, so an aborted run bills only for what it actually gave you.

EventPriceNotes
apify-actor-startActor start$0.005One event per GB of memory, minimum one: $0.02 per run at the default 4 GB. Covers opening the browser session.
listingListing delivered$0.0012One property row. Duplicates within a run and error rows are not charged.
listing-detailListing page data$0.0025Adds the listing page to a row. Only with `includeDetails`.
agencyAgency delivered$0.0012One agency or developer row, with `outputType: agencies`.

Measurements

Each figure is shown with the method that produced it. A benchmark without a method is a marketing claim wearing a number's clothes.

Fill-rate sample

480 listings, 14 searches

Measured on 23 September 2026. Every listing fill rate on this page comes from that sample unless another n is stated.

Fields per row

Median 66; 82 with listing pages

66 on the 480-listing sample. With listing pages the README states 84 (n = 60, 23 September); a re-measurement on build 0.2.7 on 6 October gave 82 (n = 60), and the lower figure is the one published.

Private advertisers

81 of 480 (16.9%)

Counted on the fill-rate sample. The share varies by facet, reaching 55% on Bucharest rentals.

Coordinates from the map

60/60 Cluj-Napoca; 74/100 Bucharest

Two searches. The Bucharest one held about 26,000 results and the map returns at most 10,000 pins.

Run time

100 listings in 48 seconds

Default input on build 0.2.7 at 4,096 MB on the Apify platform, most of it opening the browser session. Peak memory 1,254 MB.

Per-search ceiling

9,990 results

The deepest the site pages for one search. Above it the Actor continues by sub-location.

What it will not do

Stated plainly so you can judge fit before spending anything.

  • One row type per run: listings or agencies.
  • Imobiliare.ro pages through at most 9,990 results per search; larger searches are split by sub-location.
  • Map coordinates are capped at 10,000 pins per search, which is why a 26,000-result Bucharest search returned coordinates on 74 of 100 rows.
  • Only search-page URLs are accepted in `startUrls`; a single listing URL is rejected with an error row.
  • The browser session takes 20 to 60 seconds to open, so even a small run is not instant.
  • If the portal's protection serves a CAPTCHA to every route, the Actor stops rather than solving it.

Privacy

  • Agencies and developers are delivered in full: they are businesses advertising for the purpose of being contacted.
  • Private sellers' name, account and any phone number or e-mail written in the description are hidden by default; the row is flagged `seller_contact_redacted`.
  • `includePrivateSellerContact` exists for users with a lawful basis under the GDPR, and enabling it is their decision.
  • The Actor never logs in and never presses the portal's "show phone" button.
  • Removal requests: privacy@actorstack.dev

See also the data removal process.

Frequently asked questions

Does the Imobiliare.ro Scraper need a login or a proxy?
The Imobiliare.ro Scraper needs no login and no proxy of your own. It brings its own residential route, which imobiliare.ro's bot protection now requires, and opens a real browser session through it at the start of every run.
Are Imobiliare.ro prices in EUR?
Almost always, but the Imobiliare.ro Scraper never assumes it: every row carries its own `currency` field next to `price`, and `price_period` says whether the figure is a total sale price or a rent for a period.
Does the Imobiliare.ro Scraper return private sellers' phone numbers?
No. Private persons were 81 of 480 advertisers measured, and by default the Actor hides their name and account and strips any phone or e-mail written in the description. It never presses the portal's show-phone button for anyone.
Why does a short Imobiliare.ro run still take close to a minute?
Each run first opens a real browser session through residential IPs, which typically takes 20 to 60 seconds, because imobiliare.ro's protection blocks plain HTTP clients. The default 100-listing run finished in 48 seconds on build 0.2.7.
What happens if I give the Imobiliare.ro Scraper a location it does not know?
imobiliare.ro answers an unknown location with the whole country and HTTP 200. The Actor detects that substitution and returns an error row that is never charged, instead of a dataset of listings from the wrong place.

Guides for this Actor