Idealista is the property portal that the scraping forums have given up on, and it is the clearest case in our whole measurement table of the browser being the wrong tool. On 28 September 2026 idealista.it answered a plain HTTP client with a browser TLS profile, through an Italian residential exit, with 200 OK, 101,680 bytes and 1,180 words: the full head, the h1, the canonical, the whole server-rendered home. The rendered pass, from the same exit, returned zero words after 38.5 seconds. The setting that works on Idealista is residential, plain HTTP, country=it, never render: the browser adds 35 seconds per page and nothing to parse. When you need listings rather than pages, the idealista_search collector returned 10 Milan sale listings with price, size, price per square metre and agency in 5.5 seconds.
Plain HTTP reads 1,180 words; the browser reads nothing
Idealista serves its home fully rendered on the server, and a plain HTTP client with a real Chrome or Firefox TLS fingerprint gets all of it: the seo_audit tool in our MCP server returned the title, the meta description, a self-referencing canonical, the h1 "Mi sembra piccola" and 1,180 words on the no-JS pass, in a single attempt, from Italy and again from Spain. The rendered pass from the same exit came back after 38.5 seconds with zero words. The plain client is the right client on this site, and it is ten times faster.
| Fetch (28 September 2026) | Status | Bytes returned | Time | Words | Notes |
|---|---|---|---|---|---|
| idealista.it, plain HTTP, Italian exit | 200 | 101,680 | 3.8 s | 1,180 | Title, description, canonical, h1; robots meta noodp; no JSON-LD |
| idealista.it, plain HTTP, Spanish exit | 200 | n/a | 11.1 s (audit) | 1,180 | Identical Italian page; no redirect to idealista.com |
| idealista.it, rendered pass, Italian exit | n/a | n/a | 38.5 s | 0 | Nothing to parse; skip the browser |
| idealista.it/robots.txt | 200 | 12,678 | 0.3 s | n/a | Served from a Fastly cache, 24-hour max-age |
| idealista.it/news/ | 200 | 239,826 | 4.7 s | 4,901 | The news section, a Drupal site, fully open over plain HTTP |
This inverts the rule most guides teach. On Idealista the more capable client is the one that gets less. A headless browser exposes canvas, WebGL and automation surfaces that a real visitor's browser does not present the same way; a plain client exposes a TLS handshake and headers, and those we make indistinguishable from a real browser. We measured the same pattern on 26 September, 1,159 words over plain HTTP against zero rendered, so it is stable across days. Do not render Idealista. It costs ten times the wait and returns nothing.
The exit country does not change the page, so pin it for the session
Idealista runs three sites, idealista.com for Spain, idealista.it for Italy and idealista.pt for Portugal, and the country is in the domain. From a Spanish residential exit, idealista.it returned the same Italian title, the same h1 and the same 1,180 words with no redirect. The number that changes when you pick the wrong exit is zero. What the exit does change is how the site reads your session: IP reputation counts alongside the fingerprint, and a residential address in the market the site serves is the profile of its actual readers. Use country=it for idealista.it, country=es for idealista.com, and keep one exit country for the length of a job.
The Reddit thread that ranks first for "idealista scraper" asks what setup still works and answers itself in the top comment, which names the site's bot-protection vendor and its TLS, canvas and WebGL checks. The measurement above is the practical consequence of that answer. If the checks are on browser surfaces, do not bring a browser. Bring a residential exit and a client whose TLS handshake is a real browser's, and read the server-rendered HTML, which on this site is complete.
What robots.txt opens, and where the official API lives
Idealista's robots.txt is 12,678 bytes and, unusually, it leaves pagination open: the line that would disallow /*/pagina- is present but commented out. What it closes is depth of filtering and ordering: any sale or rental URL with more than three comma-separated filters, every ?ordine= sort, the map-list view, /ajax/, /utente/, /preferiti/, the photo and virtual-tour sub-pages of a listing, and the per-language directories except a whitelist of search and landing paths in each of fifteen languages. A crawler that reads city and district listing pages, paginates them, and opens listings is inside the file; one that composes four filters or sorts by price is not.
Idealista also publishes an official API. The developer portal at developers.idealista.com exists, the autocomplete for "idealista api" is full of "pricing", "request", "free" and "python", and the portal's pages load only in a browser, so we read it as a person and not as a fetch. For a product that needs Idealista data at scale and on Idealista's terms, that access request is the route, and no proxy setting replaces it. For public-page research at a human pace, what follows is the cost.
The collector returns ten Milan listings in 5.5 seconds
We ran the Idealista collector once on 28 September 2026 with location milano-milano, site it, operation sale and max_results 10. It delivered 10 rows in 5.51 seconds. Each row carries the listing id, title with type and street or zone, listing URL, price as shown and as a number, price per square metre where the card shows it, size in square metres, the detail chips as shown, the agency, a description and the thumbnail.
| Field in the run | What came back for 10 rows |
|---|---|
| Price | 10 of 10, from 219,000 € for a 43 m² two-room flat to 1,750,000 € for a 300 m² detached house |
| Size | 10 of 10 in square metres, 43 to 300 |
| Price per m² | 6 of 10 shown on the card, from 2,571 €/m² in Affori to 7,700 €/m² near Solari |
| Agency | 10 of 10 named, six different agencies |
| Detail chips | Rooms, floor, lift, box or garage on every row, as Idealista states them |
| Zone | Affori, Barona, Istria, Soderini, Stadera, Bovisasca, Giambellino, Garegnano, San Vittore, Porta Vittoria |
At $0.001 per delivered listing the run cost one cent. Price per square metre is the field that turns a listing feed into a market index, and it is worth knowing that Idealista shows it on 6 cards out of 10; the collector returns it where shown and leaves it null where not, rather than computing a number the site did not state. The rooms count sits inside the detail chips ("3 locali") rather than a separate field, which is where a parser should read it.
Cost math with real numbers
Prices from our pricing page: residential Basic $0.80/GB, Premium $2.20/GB, the web scraping API from $0.0002 per page and the Idealista collector at $0.001 per delivered listing. One gigabyte is counted as 10^9 bytes.
| Approach | Bytes per page | Pages per GB | Cost per 1,000 |
|---|---|---|---|
| Plain HTTP over residential Basic ($0.80/GB) | 101,680 | about 9,835 | about $0.08 per 1,000 pages |
| Plain HTTP over residential Premium ($2.20/GB) | 101,680 | about 9,835 | about $0.22 per 1,000 pages |
| Rendered over residential | n/a | n/a | Zero words delivered, 38.5 seconds per page, nothing to price |
| Web scraping API, plain HTTP | n/a | n/a | $0.20 per 1,000 pages |
| idealista_search collector | n/a | n/a | $1.00 per 1,000 listings, price, size, €/m² and agency parsed |
At 101,680 bytes for 1,180 words, Idealista's home is the best byte-per-word ratio in this family, about 86 bytes a word against 8,800 on Vinted. Byte figures are decoded HTML; wire transfer after compression is lower (the compressed body was 18,463 bytes) and headers add a little back. The saving to point at is the row that reads "nothing delivered": every rendering minute spent on this site is a minute paid for zero words. For the German classifieds site where the fence is in robots.txt rather than in the fingerprint, see Kleinanzeigen through residential proxies.
The setting that works on Idealista
- Network: residential, Basic at $0.80/GB. A residential exit in the site's own market returned the full page on the first attempt from Italy and from Spain.
- Fetch mode: engine: tls, plain HTTP with a browser TLS profile, and never render. 1,180 words in 3.8 seconds; the rendered pass returns zero words in 38.5 seconds, so skipping the browser saves 35 seconds a page.
- Country: country=it for idealista.it. The page is the same from Spain (1,180 words, no redirect), so the exit is pinned so that IP reputation and session match the market, not for access.
- When the proxy is not enough: the idealista_search collector, 10 listings in 5.5 seconds with price, size, price per square metre and agency, $0.001 per delivered listing; for data on Idealista's own terms, the access request at its developer portal.
- Every account gets $2 of free API usage per month, and failed requests are never billed.