Idealista Scraper - Spain Rental Listings
Pricing
from $1.65 / 1,000 listing scrapeds
Idealista Scraper - Spain Rental Listings
Scrape Spain rental listings from idealista.com search URLs: monthly rent, rooms, m2, price per m2, floor and lift, neighbourhood, agency, listing date, price drops and photos. Homes, rooms, offices, premises and garages for rent. Independent tool, not affiliated with idealista.
Pricing
from $1.65 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by idealista or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "idealista" is referenced only to describe the publicly available website this Actor collects data from.
Scrape rental listings from idealista.com, Spain's largest property portal, straight into JSON, CSV or Excel. Paste any idealista.com rental search - flats and houses, rooms in shared flats, offices, retail premises or garage spaces, in any city, district or neighbourhood - and get clean rows with the monthly rent, rooms, size, price per m2, floor with exterior/interior and lift, street and neighbourhood, agency, listing date, price drops and a full-size photo.
Rentals only. idealista does not serve its sale listings or individual listing pages to automated tools, so this Actor covers rental searches (and new-build developments). If you paste a sale search, it is skipped before any request is made and costs nothing, and the run tells you so.
Why this idealista scraper?
| This Actor | Copying listings by hand | |
|---|---|---|
| Every rental type: homes, rooms, offices, premises, garages | Yes | Yes, one page at a time |
| Monthly rent, m2, rooms, floor, lift, exterior as separate columns | Yes | You retype them |
| Street, neighbourhood and city split out of the title | Yes | No |
| Price per m2 computed for every listing | Yes | No |
| Price drops: previous price and % cut | Yes | Visible, not exportable |
| Listing date for fresh listings ("2 horas" becomes a real date) | Yes | No |
| Duplicates across overlapping searches removed | Yes | No |
| Runs on a schedule and exports to Sheets, CSV, JSON or an API | Yes | No |
| No account, proxies or API key on your side | Yes | - |
What you get
| Field | Type | Meaning |
|---|---|---|
id | string | idealista listing id |
title | string | Listing headline, e.g. "Piso en Calle de Fray Luis de León, 3, Palos de la Frontera, Madrid" |
url | string | Canonical idealista.com/inmueble/<id>/ link (query strings stripped, so it de-duplicates cleanly) |
price | number | Monthly rent in EUR (the starting price on new-build developments) |
currency | string | Always EUR |
rooms | number | Bedrooms (habitaciones); on a room listing, the bedrooms in the shared flat |
areaSqm | number | Size in m2 |
pricePerSqm | number | Rent divided by size, computed for you |
floor | string | Floor line exactly as shown, e.g. "3ª planta exterior con ascensor" |
description | string | The description teaser idealista prints on the results card |
agent | string | Advertising agency, when it shows its brand on the card |
isNew | boolean | true on new-build listings |
tags | array | Badges such as Alquiler de temporada, Gastos incluidos, Lujo |
image | string | Cover photo, full size |
sourceUrl | string | The search URL the row came from |
scrapedAt | string | ISO timestamp of the fetch |
operation | string | rent (or sale for new-build developments) |
priceUnit | string | month for rentals, starting-price for developments |
propertyType | string | Piso, Ático, Estudio, Habitación, Oficina, Local, Garaje ... |
street / neighborhood / city | string | Address parts split from the title (the street is shown only when the advertiser publishes it) |
floorNumber | number | Numeric floor (0 for ground floor) |
exterior | boolean | true exterior, false interior |
hasElevator | boolean | Lift in the building |
parkingIncluded | boolean | true when the rent includes a garage space |
smokingAllowed | boolean | Room listings: whether smoking is allowed |
features | array | Other card details: flatmates, garage options, "A pie de calle", parking-space size ... |
previousPrice / priceDropPercent | number | Previous rent and % cut, when the price has dropped |
listedText / listedDate | string | When the listing went up, as shown ("2 horas", "01 oct") and as a YYYY-MM-DD date |
isProfessional | boolean | Professional advertiser (agency or operator) vs private |
agentUrl / agentLogo | string | The agency's idealista page and logo |
imageCount | number | Number of photos on the listing |
hasVideo / hasVirtualTour / hasFloorPlan | boolean | Media available on the listing |
onlineBooking | boolean | The listing can be requested and booked online |
type | string | Record type, always listing |
Use cases
- Rent comparables - pull every flat in a barrio with
pricePerSqmcomputed and compare like for like. - Rental market monitoring - schedule a daily run per city and track new supply with
listedDate. - Price-drop alerts - filter on
previousPrice/priceDropPercentto catch landlords cutting the rent. - Room and flat-share research - rooms, flatmates, smoking rules and online booking in one table.
- Commercial property scouting - offices, retail premises and garage spaces for rent, with size and rent per m2.
- Agency intelligence - see which agencies list what, where, and at what price level.
- Feeding AI agents and data pipelines - clean JSON with stable field names.
How to use
- Open idealista.com, choose Alquilar (rent), the property type and the area you want.
- Set any filters you like (price, size, bedrooms, lift, terrace ...) and copy the URL from your browser.
- Paste it into idealista.com rental search URLs (one per line, as many as you want) and set Max pages per URL.
- Run the Actor and download the results as JSON, CSV, Excel or HTML, or pull them over the API.
Input
{"startUrls": ["https://www.idealista.com/alquiler-viviendas/madrid-madrid/"],"maxPagesPerUrl": 5,"maxItems": 1000}
- idealista.com rental search URLs - every filter you set on the site is carried through, because the Actor scrapes exactly the URL you give it.
- Import URLs from a file - paste a whole list, or give a single link to a public
.txt/.csv, a Google Sheet or Drive link, or an Apify key-value-store record. Blank lines and#comments are ignored. - Max pages per URL - about 30 listings per page (default 10 pages).
- Max listings - overall cap across all URLs.
- Output fields - tick only the columns you want and every record is trimmed to exactly those.
Leave everything empty and the run scrapes a one-page sample rental search, so you can see the output first.
Which idealista URLs work
| Search | URL pattern | Works |
|---|---|---|
| Homes for rent | idealista.com/alquiler-viviendas/<area>/ | Yes |
| Rooms in shared flats | idealista.com/alquiler-habitacion/<area>/ | Yes |
| Offices for rent | idealista.com/alquiler-oficinas/<area>/ | Yes |
| Retail premises for rent | idealista.com/alquiler-locales/<area>/ | Yes |
| Garage spaces for rent | idealista.com/alquiler-garajes/<area>/ | Yes |
| New-build developments | idealista.com/venta-obranueva/<area>/ | Yes |
| Any of the above with filters | the same paths with idealista's filter segments | Yes |
| Homes or property for sale | idealista.com/venta-viviendas/... and other venta- searches | No - skipped, $0 |
| A single listing page | idealista.com/inmueble/<id>/ | No - skipped, $0 |
Output
One real row (description shortened):
{"type": "listing","id": "112726159","title": "Piso en Calle de Fray Luis de León, 3, Palos de la Frontera, Madrid","url": "https://www.idealista.com/inmueble/112726159/","price": 2000,"currency": "EUR","rooms": 2,"areaSqm": 88,"pricePerSqm": 23,"floor": "1ª planta exterior con ascensor","description": "Be Premium ofrece en alquiler fabuloso piso muy cercano a la estación de Atocha...","agent": "Be Premium Real Estate","isNew": null,"tags": ["Alquiler de temporada"],"image": "https://img4.idealista.com/blur/WEB_DETAIL/0/id.pro.es.image.master/ae/9f/a8/1479992445.jpg","sourceUrl": "https://www.idealista.com/alquiler-viviendas/madrid-madrid/","scrapedAt": "2026-10-03T19:49:36.060Z","operation": "rent","priceUnit": "month","propertyType": "Piso","street": "Calle de Fray Luis de León, 3","neighborhood": "Palos de la Frontera","city": "Madrid","floorNumber": 1,"exterior": true,"hasElevator": true,"parkingIncluded": true,"smokingAllowed": null,"features": ["Garaje incluido"],"previousPrice": null,"priceDropPercent": null,"listedText": "2 horas","listedDate": "2026-10-03","isProfessional": true,"agentUrl": "https://www.idealista.com/pro/be-premium-real-estate/","agentLogo": "https://st3.idealista.com/d1/84/d7/be-premium-real-estate.gif","imageCount": 48,"hasVideo": true,"hasVirtualTour": false,"hasFloorPlan": false,"onlineBooking": false}
The Listings view shows title, rent, type, size, neighbourhood, city and link as a table; every field is always in the full dataset behind it.
Good to know
- Rental searches only. Sale searches and single-listing pages are skipped before any request, at no cost. Mixed lists are fine: the rental URLs are scraped and the run's status message names what was skipped.
- Data comes from the search-results cards. That keeps runs fast and cheap across thousands of listings. The description is idealista's own card teaser (it can end mid-sentence), and you get the cover photo plus the photo count rather than the full gallery.
- Some fields only exist for some listings.
agentis filled when the agency shows its brand on the card (private advertisers and unbranded agencies have none;isProfessionalstill tells you which is which). Floor, lift and exterior apply to homes;roomsdoes not apply to offices or garages;smokingAllowedappears on room listings;listedDateappears on recently posted listings;previousPriceonly when the rent has dropped. Missing values arenull, never guessed. streetis shown only when the advertiser publishes it. Neighbourhood and city are always there.- "Newest first" sorting is not available. idealista refuses that one sort order to automated tools, so the Actor removes it from the URL (your search and filters stay as they are) and says so in the status message. Other sort orders, such as price or biggest price drops, work.
- A wrong address is reported, not retried. If idealista answers "404 Not Found" for a URL, the run tells you to check the address and moves on.
- Pagination and duplicates are handled. The Actor follows idealista's own paging up to your limit, stops at the end of the search, and drops listings already seen in the same run, so overlapping searches cost nothing extra.
- If idealista refuses requests during a run, the Actor retries on fresh connections, then stops and says so in the status message. You are only charged for listings actually saved.
How much does it cost to scrape idealista?
This Actor uses Apify's pay-per-event pricing: you are charged only for the results it delivers, with no monthly rental and no start fee. The events it can charge are:
- Listing scraped - One idealista.com property listing: price, price/m2, rooms, area, floor, agent, description and image.
The current price of each event is shown on the Pricing tab of this page. Set a maximum total charge on the run if you want a hard cap on spend, and use the input limits to control how much the Actor fetches.
Automate & schedule
Run this Actor on autopilot and pull results into your own stack:
- Apify API - start runs, fetch datasets and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python - official SDKs.
- Schedules - run it hourly, daily or weekly and keep your dataset current.
- Webhooks - trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/idealista-scraper').call({"startUrls": ["https://www.idealista.com/alquiler-viviendas/madrid-madrid/"],"maxPagesPerUrl": 1});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} records`);
Integrate with any app
Connect the dataset to thousands of apps - no code required:
- Make - multi-step automation scenarios.
- Zapier - push new records straight into your CRM or spreadsheet.
- Slack - get notified when a scheduled run finds something new.
- Google Drive / Sheets - auto-export every run to a spreadsheet.
- Airbyte - pipe results into your data warehouse.
- GitHub - trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. You can call this Actor from Claude, ChatGPT or any agent framework through the Apify MCP server - describe the data you need and let the assistant run this Actor for you.
Agent-ready: autonomous payments (x402 & Skyfire)
This actor is agent-ready: AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:
- x402: an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server, with no account and no API key.
- Skyfire: agent-to-service payments for fully autonomous AI-agent workflows.
Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.
More scrapers from scrapesage
Related Actors in the same category:
- Real Estate Scraper for Redfin - Listings, Sold Comps & Leads
- BizBuySell Scraper - Businesses For Sale & Broker Leads
- VivaReal & ZAP Imóveis Scraper - Brazil Real Estate
- PropertyGuru Scraper - Singapore Property & Agent Leads
- Airbnb Scraper & Market Monitor
Tips
- Big cities: idealista shows about 30 listings per page. To cover a large city in depth, paste one search per
district (for example
alquiler-viviendas/madrid/chamberi/) instead of one city-wide search. - Daily new-listing feed: schedule a daily run over the pages you need and keep the rows whose
listedDateis today. - Lean exports: use Output fields to keep only the columns your spreadsheet needs.
FAQ
How is this Actor billed? Pay-per-event: you pay only for the results it delivers, with no monthly rental and no start fee. The per-event price is shown on the Pricing tab.
Can I schedule it and get results automatically? Yes - create a Schedule and add a webhook or an integration (Google Sheets, Slack, Make, Zapier) to push each run's dataset wherever you need it.
Which export formats are available? Every run's dataset can be downloaded as JSON, CSV, Excel (XLSX), XML, HTML or RSS from the Apify Console or the API.
Can I run it from code or an AI agent? Yes - through the Apify API and client libraries, or from Claude, ChatGPT and other assistants via the Apify MCP server.
Is it legal to scrape idealista? This Actor collects publicly available data only. You are responsible for using the output in compliance with applicable laws (including data-protection law where personal data is involved) and the source's terms. See the Disclaimer below.
Is this an official idealista tool? No. It is an independent, third-party Actor with no affiliation to, endorsement by or sponsorship from idealista. See the Disclaimer below.
Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by idealista or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.
"idealista" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official idealista product, is not authorised or certified by idealista, and does not distribute idealista software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.
Need help?
Open an issue on the Actor's Issues tab, or visit the Apify help center. Feature requests are welcome - this Actor is actively maintained.