Three national property portals, three Actors, and almost nothing in common below the surface. Fotocasa in Spain, Imobiliare.ro in Romania and Zigbang in South Korea all show a signed-out visitor a list of properties with a price, a size and a map pin. How that list reaches a scraper, how deep it goes, who the advertiser is and what the price even means differ on every axis. This guide puts the three side by side so the differences are decisions rather than surprises.
Three portals, three access routes
Fotocasa loads its search results from a JSON endpoint on a separate host, web.gw.fotocasa.es, which answered without authentication, cookies or special headers when measured. The Fotocasa Scraper reads that endpoint with plain HTTP, no browser, no proxy by default.
Zigbang is an app-first rental platform whose website reads a public JSON API on apis.zigbang.com. The Zigbang Scraper reads it the same way — plain HTTP, no login — and in 54 platform runs it was never refused.
Imobiliare.ro used to be the same story and stopped being so in October 2026, when the portal put DataDome bot protection in front of every search and listing page. Plain clients now get HTTP 403 from data-centre and residential IPs alike, so the Imobiliare.ro Scraper opens a real browser session through residential IPs and reads results inside it. It does not solve CAPTCHAs; a route that gets one is dropped. The details are in the Imobiliare.ro guide.
What each portal publishes
Fill rates below are from each Actor's own measurement, with its sample. They describe the shape of each portal's data on the day measured, not a ranking — the samples were taken on different dates with different search mixes. Why the sample size travels with every number is explained in measured fill rates, not promises.
| Field | Fotocasa (n = 3,184) | Imobiliare.ro (n = 480) | Zigbang (n = 718) |
|---|---|---|---|
| Price | 100%, EUR | 100%, currency per row | 100% for the deal type, KRW |
| Surface | 99.9% | 94.2% total, 82.5% usable | 100%, m² and pyeong |
| Rooms | 67.9% | 78.5% | Room layout on detail pages, 100% |
| Coordinates | 100% | From the map: 60/60 and 74/100 on two searches | 100%, map point |
| Numeric floor | 45.7% | About 99% on apartments | 72.8% |
| Fields per row (median) | 45 of 78 | 66 | Not published with a sample |
Each portal also has something the others do not. Fotocasa gives an eight-level location tree with a numeric ID at every level and tags photos by the room they show. Imobiliare.ro gives year built, construction stage and days on market. Zigbang gives the parcel number Korean land registers use and the registration number of the licensed broker behind every listing.
Where a single search stops
None of the three hands over its whole inventory to one query, and each stops differently:
- Fotocasa stops returning new listings after page 392 — about 11,760 at 30 per page — and then repeats the same 30 with HTTP 200. The Actor detects the end by duplicate IDs and splits large searches along the location tree.
- Imobiliare.ro pages through at most 9,990 results per search. Bucharest apartments for sale alone held about 26,000, so the Actor continues by sub-location.
- Zigbang is searched by a centre and a radius, from 0.2 to 20 km, with a cap of 10,000 rows per run. Coverage is a question of choosing the area well.
The pattern is the same one Zonaprop's coverage ceiling forces in Argentina: coverage comes from more, narrower searches, never from paging deeper into a broad one.
What each robots.txt says
The three files, fetched on 10 October 2026, say three very different things, and the three Actors do not treat them the same way. This project's general position is in reading robots.txt as a specification; what follows is what these three Actors actually do, stated plainly.
- Fotocasa. The robots.txt on
www.fotocasa.eshas 297Disallowlines, including every search page from/l/2onward. The listing API hostweb.gw.fotocasa.esreturned 404 for robots.txt, which under RFC 9309 means a crawler may access any resource there. Listings come from that host. Detail pages come fromwww, where paths under Madrid, Barcelona and Valencia are disallowed; the Actor honours that only whenrespectRobotsTxtis on, and it is off by default. - Imobiliare.ro. The file allows search pages 2 to 10 and disallows deeper pages, any filter or sort parameter,
/api/and/map/*. The Actor pages beyond page 10, uses filters and sort orders, and requests the map for coordinates: it does not apply robots.txt as a filter. - Zigbang. Both
www.zigbang.comandapis.zigbang.comdisallow everything for user agents other than a list of named search engines, and the main file opens with a notice that crawling is prohibited without express written permission. The Actor does not apply robots.txt as a filter.
Private advertisers and personal data
An agency's phone is published for the purpose of being called. A private seller's is not the same kind of data, and the three portals have very different shares of private sellers:
- Fotocasa: 11.7% of 2,164 listings sampled in rural provinces, where private advertisers concentrate. Fotocasa published a phone for none of the 253 private advertisers in that sample, and the Actor redacts their contact fields anyway — including phone numbers typed into the description.
- Imobiliare.ro: 81 of 480 advertisers (16.9%), reaching 55% on Bucharest rentals. Name, account and any phone or e-mail in the text are hidden by default.
- Zigbang: 718 of 718 detail pages carried a brokerage registration number. No private advertiser was observed; if one appears, their contacts are removed by default.
The reasoning under the GDPR, Article 14 in particular, is the same one set out for personal data in classifieds.
Why the prices do not compare
Fotocasa and Imobiliare.ro rows are asking prices, almost always in euros, with a sale price or a rent per period. That is already two quantities that should never share a mean.
Zigbang adds a third. A Korean listing is monthly rent (월세: a deposit plus a monthly payment), jeonse (전세: a large returnable deposit and no monthly rent) or sale (매매). A jeonse deposit of several hundred million won is neither a rent nor a price, and averaging it with either produces a number that describes nothing. Keep deal_type as a grouping column, always.
Which portal answers which question
- Spanish asking prices, agencies or energy certificates: how to scrape Fotocasa.
- Romanian city prices, time on market or developers: how to scrape Imobiliare.ro.
- Korean rents, jeonse deposits or licensed brokers: the Zigbang guide — and, for local businesses rather than housing, Naver versus Google Maps in Korea.
