Idealista Scraper - Spain, Italy & Portugal Real Estate Data
Pricing
from $0.50 / 1,000 results
Idealista Scraper - Spain, Italy & Portugal Real Estate Data
Scrape property listings from Idealista (idealista.com, .it, .pt): price, price/m², size, rooms, bathrooms, floor, GPS coordinates, energy rating, description, photos and agency contacts.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
Ahmed Jasarevic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a few seconds ago
Last modified
Categories
Share
Idealista Property Scraper — Spain, Italy & Portugal Real Estate Listings
Scrape Idealista property listings from idealista.com (Spain), idealista.it (Italy) and idealista.pt (Portugal) in one run. Extract the full listing record: title, price, price per m², size, rooms, bathrooms, floor, location, neighborhood, district, city, GPS coordinates, energy rating, year built, price history, description, photos, and agency contact details (name, phone, website, address).
Built on the Apify platform — get results as a clean JSON/CSV/Excel dataset via API, schedule recurring runs, and integrate with any workflow.
Why use this actor?
- One actor, three markets — Spain, Italy and Portugal share the same Idealista layout; this actor handles all three with a single input.
- Investor-grade data — price history, price per m², community fees, property tax and energy rating are exactly what market analysts and investors need.
- Agency lead generation — every record includes the listing agency's name, phone, website and address, perfect for real estate agencies, relocation services and proptech startups.
- Hybrid browser + HTTP engine — a stealthy Camoufox browser (anti-detect Firefox) solves Idealista's DataDome challenge once per sticky residential IP. The harvested
datadomecookie, exact User-Agent and Accept-Language are then replayed by Impit clients (real Firefox TLS/HTTP2 fingerprints) over plain HTTP — roughly 20x faster than browser-per-page scraping at a fraction of the compute cost. - Self-healing sessions — if DataDome blocks or rate-limits a session, it is retired automatically, a fresh proxy session is warmed in the browser, and the affected requests are retried — no manual intervention.
- Safe by default — hard caps on pages, items and browser launches; free users get a 10-listing preview.
How to use
- Open the actor on Apify and click Start.
- Pick the country (Spain / Italy / Portugal), operation (sale / rent) and property type.
- Optionally enter a location slug (e.g.
madrid,barcelona,milano,roma,lisboa,porto) or paste custom start URLs. - Set max listings and max search pages, then run.
- Download the dataset as JSON, HTML, CSV or Excel, or pull it via the Apify API.
Input
| Field | Type | Description |
|---|---|---|
country | select | spain (idealista.com), italy (idealista.it) or portugal (idealista.pt) |
operation | select | sale or rent |
propertyType | select | homes, apartments, houses/villas, offices, shops/premises, garages, land |
location | string | City/district SEO slug, e.g. madrid, milano, lisboa (empty = whole country) |
maxItems | number | Max listings to scrape (default 50) |
maxPages | number | Max search result pages to crawl (default 5, ~30 listings/page) |
sessions | number | Browser-warmed proxy sessions (default 2, max 8) |
maxConcurrency | number | Parallel HTTP requests across sessions (default 8, max 16) |
requestDelayMs | number | Min delay between requests on the same session (default 900 ms) |
fetchDetails | bool | Visit each listing's detail page for the full record (default ON; OFF = much faster, fewer fields) |
startUrls | array | Custom Idealista search or listing URLs (overrides the fields above) |
debugSaveHtml | bool | Save raw HTML of key pages to the key-value store for debugging |
proxy | proxy | Apify proxy config; Residential group recommended |
Example input:
{"country": "spain","operation": "sale","propertyType": "apartments","location": "madrid","maxItems": 100,"maxPages": 5,"sessions": 3,"maxConcurrency": 8,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Output
Each dataset item is one listing. Example:
{"id": "123456789","url": "https://www.idealista.com/inmueble/123456789/","title": "Piso en calle Gran Vía, Madrid Capital","price": 350000,"pricePerSqm": 2917,"currency": "EUR","size": 120,"rooms": 3,"bathrooms": 2,"floor": "2ª planta","location": "Calle Gran Vía, Madrid Capital","neighborhood": "Gran Vía","district": "Centro","city": "Madrid Capital","province": "Madrid","country": "Spain","latitude": 40.4203,"longitude": -3.7058,"energyRating": "E","yearBuilt": 1960,"priceHistory": [{ "date": "2025-06-01", "price": 365000 }],"description": "Piso luminoso en pleno centro...","photos": ["https://img3.idealista.com/foto/123456789.jpg"],"agency": {"name": "Inmobiliaria Ejemplo","phone": "910000000","website": "https://www.inmobiliaria-ejemplo.com","address": "Calle Mayor 1, Madrid"},"features": { "rooms": "3", "bathrooms": "2", "size": "120 m²", "condition": "Buen estado" }}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Data table
| Field | Description |
|---|---|
id / url | Listing ID and canonical URL |
title | Listing headline |
price / pricePerSqm / currency | Price, price per m², currency |
size / rooms / bathrooms / floor | Property dimensions |
location / neighborhood / district / city / province / country | Full location hierarchy |
latitude / longitude | GPS coordinates |
energyRating / yearBuilt | Energy certificate and construction year |
priceHistory | Array of { date, price } entries |
description | Full listing description |
photos | Full-resolution photo URLs |
agency | { name, phone, website, address } |
features | All feature-item key/value pairs (condition, orientation, heating, etc.) |
reference / communityFees / propertyTax | Advert reference and recurring costs |
How much does it cost to scrape Idealista?
- Free tier: every run scrapes up to 10 listings at no charge.
- Paid runs: billed by Apify compute units. The browser is only used for the short DataDome-solving step per session; everything else is fast HTTP, so a run of ~100 listings typically costs a few hundredths of a dollar in compute. Residential proxy traffic is billed per GB by Apify — keep
maxItems/maxPagesmodest to control cost. - Runs are bounded:
maxItems,maxPages, a hard cap on browser launches, and per-session request pacing mean a run can never spin out of control.
Tips
- Use Residential proxy — Idealista's DataDome protection blocks datacenter IPs. The actor defaults to the
RESIDENTIALApify proxy group. Each new IP gets its DataDome challenge solved once in the Camoufox browser; when a cookie expires or a block is detected, that session is retired and a fresh one is warmed automatically. - Empty location = whole country — with no
location, Idealista serves a landing page without a listing grid; the actor automatically discovers and crawls the zone search pages linked from it. For targeted runs, set a city/province slug (e.g.madrid) for maximum speed. - Tune speed vs. stealth — more
sessionsand highermaxConcurrencyfinish faster but spread more load; if you see frequent "Session blocked" warnings, increaserequestDelayMsor lowermaxConcurrency. - Tune speed vs. richness — with
fetchDetails: falsethe actor extracts ~30 listings per search-page request straight from the result cards (title, price, size, rooms, floor, description snippet, agency, photos): 50 listings in a couple of requests instead of 50+. Turn it on (default) for the full record including GPS coordinates, energy rating and complete descriptions. - Start small — test with
maxItems: 10on one city before scaling to a full country crawl. - Custom URLs — you can paste any Idealista search URL (e.g. a filtered search with price/rooms constraints) into
startUrlsand the actor will follow it and its pagination. - Debugging — enable
debugSaveHtmlto store the raw HTML of the first search page in the run's key-value store. - Schedule it — use Apify's scheduler to track price changes over time; combine with the
priceHistoryfield for market analysis.
FAQ, disclaimers and support
- Is scraping Idealista legal? Scraping publicly available data may be subject to the website's Terms of Service and local law. You are responsible for how you use the data. This actor respects
robots.txtand rate limits. - Why do some fields come back empty? Idealista hides some data (e.g. phone numbers behind a click, price history only on some listings). The actor extracts everything that is publicly visible on the page.
- Idealista blocks my run — make sure Residential proxy is enabled; if you still see blocks, the site may have tightened protection — open an issue and we'll update the actor.
- How does the DataDome bypass work? Idealista server-renders every page, so all data (including JSON-LD) is in the raw HTML. DataDome serves a JS challenge to first-time visitors, which a pure HTTP client cannot execute — so the actor runs one Camoufox (anti-detect Firefox) visit per sticky residential IP to solve it, then harvests the
datadomecookie together with the browser's exact User-Agent and Accept-Language. All subsequent requests on that IP go over plain HTTP through Impit, which reproduces Firefox's TLS and HTTP/2 fingerprints, so the traffic stays consistent with the browser that earned the cookie. Expired cookies and blocks are detected and re-solved automatically. - Need a custom version? Contact us for tailored extraction, additional markets, or integration with your pipeline.