Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Idealista Scraper icon

Idealista Scraper

Scrape Idealista listings in Spain, Italy and Portugal: price, size m2, rooms, floor, neighbourhood, seller type and photos. No account needed.

141 runs on Apify $0.0012 per listing ($1.2 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchUrls, maxItems, includeDetails (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0012 per listing = $1.2 per 1,000

You are charged forWhenPrice
Listing scrapedOne property listing written to the dataset. Sample rows and diagnostic rows are never charged.$0.0012

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-17, and they are what you are actually charged.

Inputs

FieldWhat it doesType
searchUrlsOne or more Idealista search URLs copied from your browser - www.idealista.com (Spain), www.idealista.it (Italy) or www.idealista.pt (Portugal). Up to 20 per run. Any filters already in the URL are kept, so this is the most precise way to ask. If you fill this in, the filter fields below are ignored.array
maxItemsTotal listings to return across all searches. The budget is shared evenly between them, so two searches and 100 rows gives you 50 of each. Keep it low while you are testing - you pay per listing.integer
includeDetailsOff by default. Turn it on to also open every listing page, which adds the bathroom count, the full untruncated description and the complete photo gallery. It costs one extra request per listing, so the run takes roughly ten times longer. The price per listing is unchanged.boolean
countryWhich Idealista site to search. Used only when you are not passing search URLs.string
operationWhether to search properties for sale or for rent.string
locationThe location slug Idealista itself uses, taken from the address bar of a search on the site - for example madrid-madrid, barcelona-barcelona, valencia-valencia, milano-milano, roma-roma, lisboa or porto.string
propertyTypeHomes works for all three countries. Commercial premises, garages and land are available for Spain only - for those in Italy or Portugal, paste a search URL instead.string
minPriceLowest price to include, in euros. Leave empty for no lower bound.integer
maxPriceHighest price to include, in euros. Leave empty for no upper bound.integer
minSizeSmallest floor area to include, in square metres.integer
maxSizeLargest floor area to include, in square metres.integer
minRoomsMinimum number of bedrooms, 1 to 4, where 4 means four or more. Spain and Portugal only - Idealista Italy has no bedroom filter in its URLs, so this is ignored there and the run tells you so.integer
sortByWhich listings come first. When the search holds more listings than your maximum, this decides which ones you get. Idealista Portugal has no price per m2 order, and biggest or smallest work on searches for sale only.string
gardenOnly homes with a garden. On Idealista Italy that means a private or a shared one.boolean
swimmingPoolOnly homes with a swimming pool.boolean
balconyOnly homes with a balcony. Tick terrace as well and you get homes that have both.boolean
terraceOnly homes with a terrace.boolean
seaViewsOnly homes with sea views. An inland place just comes back empty.boolean
exteriorOnly homes facing outwards rather than onto an inner courtyard. Idealista Italy and Portugal have no such filter, so a run that asks for it there stops before fetching anything.boolean
airConditioningOnly homes with air conditioning.boolean
accessibleOnly homes adapted for people with reduced mobility.boolean
petsAllowedOnly rentals that accept pets. Idealista offers this on rentals in Spain and Italy only.boolean
onlyFlatsOnly flats, leaving out houses, penthouses and duplexes.boolean
newDevelopmentOnly new builds.boolean
luxuryOnly homes Idealista labels as luxury.boolean
bankOwnedOnly homes sold by banks, usually repossessions. There are few of them, often a handful per city. Idealista Italy has no such filter.boolean
floorPlanOnly listings that include a floor plan.boolean
virtualTourOnly listings with a virtual tour.boolean
proxyUrlsLeave this empty for a normal run. Fill it in only if you want the traffic to leave through proxy servers you already pay for, one URL per line, in the form http://user:pass@host:port.array

What you get

A structured dataset — each result includes fields like:

listingIdtitlepricecurrencypriceLabelpricePerM2sizeM2roomsbathroomsfloorhasLiftaddressneighbourhoodcity

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

Idealista Scraper: property listings from Spain, Italy and Portugal, no account needed

Paste an Idealista search URL straight out of your browser, or describe the search with country, location, buy or rent, price and size. Every listing comes back as a row: price, price per m2, size, rooms, floor, address, neighbourhood, whether the advertiser is an agency or a private seller, the photos and the link.

One thing to decide up front. Bathrooms, the full description and the whole photo gallery live on the listing page, not on the search results, so getting them means opening every listing and a run that takes roughly ten times longer.

InputIdealista search URLs, or country plus location and filters
OutputOne row per listing
Ceiling3,000 listings per run, about 1,800 per search
Account neededNone
Price$1.20 per 1,000 listings, flat on every plan

🏠 What Idealista Scraper does

Three country sites, one set of columns: idealista.com for Spain, idealista.it for Italy and idealista.pt for Portugal. A row from Madrid and a row from Milan have the same keys.

There are two ways to ask. The precise one is a search URL: run the search on the site, get it looking right, copy the address bar. Every filter already in that URL is kept, including the ones this actor has no field for. Up to 20 URLs in a run.

The other way is the filter fields. Leave the URL list empty, pick a country, an operation and a location slug, and the run builds the search for you. Only the location is required. The slug is the piece Idealista itself uses in the address, like madrid-madrid, barcelona-barcelona, milano-milano or lisboa.

📥 What you give it

Every field is optional. Run it with the input empty and you get one labelled sample row back.

{
  "searchUrls": [
    "https://www.idealista.com/venta-viviendas/madrid-madrid/",
    "https://www.idealista.it/affitto-case/milano-milano/"
  ],
  "maxItems": 200
}
FieldDefaultWhat it is
searchUrlsnoneUp to 20 Idealista search URLs. Filling this in makes the filter fields below irrelevant.
maxItems50Total listings for the run, 1 to 3,000, split evenly between your searches.
includeDetailsfalseOpens every listing page as well, which adds bathrooms, the full description and the complete photo set. Much slower. The price per listing does not change.
countryeses, it or pt. Only used when you are not passing URLs.
operationbuybuy or rent.
locationnoneThe location slug Idealista uses in its own addresses.
propertyTypehomeshomes everywhere. premises, garages and land are Spain only.
minPrice, maxPricenoneIn euros.
minSize, maxSizenoneFloor area in square metres.
minRoomsnone1 to 4, where 4 means four or more. Spain and Portugal only.
sortByrelevanceWhich listings come first: lowestPrice, highestPrice, lowestPricePerM2, highestPricePerM2, biggest or smallest. Portugal has no price per m2 order, and biggest and smallest are for searches for sale only.
garden, swimmingPool, balcony, terrace, seaViews, airConditioning, accessible, onlyFlats, newDevelopment, luxury, floorPlan, virtualTourfalseMust-have options, on all three sites. Tick several and a home has to have all of them. onlyFlats leaves out houses, penthouses and duplexes.
exteriorfalseHomes facing outwards rather than onto an inner courtyard. Spain only.
petsAllowedfalseRentals that accept pets. Spain and Italy only.
bankOwnedfalseHomes sold by banks. Spain and Portugal only, and there are few of them.
proxyUrlsnoneLeave it empty for a normal run. It is there for callers who want traffic to leave through servers they already pay for, as http://user:pass@host:port.

Idealista Italy has no bedroom filter in its URLs. Set minRooms on an Italian search and the run tells you it was dropped, with a FILTER_UNSUPPORTED row, rather than pretending it applied it. Same story for commercial premises, garages and land outside Spain: paste a search URL instead.

The sort order and must-have options work on homes, in the filter fields only. A URL in searchUrls, or an option that country's site lacks, stops the run with a free BAD_INPUT row before anything is fetched, so you never pay for the search without it.

📤 What you get back

A real row, from run WRZcZ8cP4XevFvEST:

{
  "ok": true,
  "charged": true,
  "recordType": "listing",
  "listingId": "106387165",
  "title": "Penthouse in Calle de Alcalá, 145, Goya, Madrid",
  "price": 3390000,
  "currency": "EUR",
  "priceLabel": "total",
  "pricePerM2": 12890,
  "sizeM2": 263,
  "rooms": 4,
  "bathrooms": null,
  "floor": "5th floor exterior with lift",
  "hasLift": true,
  "address": "Calle de Alcalá, 145, Goya, Madrid",
  "neighbourhood": "Goya",
  "city": "Madrid",
  "country": "Spain",
  "operation": "buy",
  "propertyType": "Penthouse",
  "advertiserType": "agency",
  "agencyName": "Walter Haus Madrid",
  "description": "We present to you EXCLUSIVELY a unique property on the top floor of a royal ...",
  "features": [],
  "tags": ["Luxury"],
  "images": ["https://img4.idealista.com/blur/480_360_mq/0/id.pro.es.image.master/b3/28/..."],
  "imageCount": 1,
  "listingUrl": "https://www.idealista.com/inmueble/106387165/",
  "searchUrl": "https://www.idealista.com/venta-viviendas/madrid-madrid/",
  "updatedText": null,
  "scrapedAt": "2026-09-21T01:37:54.388Z"
}

That row came without the detail pass, so bathrooms is null, there is one photo, and the description is the card's shortened one.

FieldWhat it is
listingIdIdealista's id. Your dedupe key across runs.
price, priceLabelA number plus total for a sale or per month for a rental, so you never have to parse a string to tell them apart.
advertiserType, agencyNameagency or private. The name comes with the first.
floorText as the site writes it, not a number, because it carries "exterior", "with lift" and "ground floor" too. hasLift is pulled out of it separately.
city, neighbourhoodSplit out of the listing title.
searchUrlWhich of your searches produced the row.
updatedTextIdealista's "updated on" line. It is usually absent, so this is usually null.

🧾 Reading the output

Three kinds of row.

RowHow to spot itBilled
A listingrecordType: "listing"yes
The sample row_sample: true, and only when the input named no searchno
A diagnosticrecordType: "diagnostic" and ok: falseno

charged is set when the row is built, a moment before the charge goes out, so read it as "this is a real row" rather than as a receipt. A failed charge adds a CHARGE_ERROR diagnostic at the end.

The Console's default table has no column for errorCode, so diagnostics look like blank lines there. Download the JSON to read them.

CodeWhat it means
NO_RESULTSThe search ran and matched nothing, or ran out of pages. Loosen a filter.
NOT_FOUNDPage one of that search does not exist. Usually a location slug that Idealista does not use.
BAD_INPUTA URL in searchUrls is not an Idealista address, and the other URLs still run. Or a sort order or must-have option that search cannot use, and the run stopped before fetching anything.
FILTER_UNSUPPORTEDA filter you set does not exist on that country's site and was dropped.
BLOCKEDIdealista would not serve that page on this attempt.
NETWORKThe page could not be fetched. Re-run it.
PROXY_INPUT_ADJUSTEDSomething in your proxyUrls was not usable and was adjusted.

▶️ How to run it

1. Run your search on idealista.com, .it or .pt until the results look right, then copy the address. 2. Open Idealista Scraper, click Try for free, and paste it into Idealista search URLs. 3. Or leave that empty and fill in Country, Buy or rent and Location. 4. Set Maximum listings. Keep it low on the first run. 5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$1.20 per 1,000 listings. The same rate on every Apify plan, with no volume tiers.

One charge per listing row. A property that turns up in two of your searches is charged once. Promoted slots and advert blocks that are not real listings are dropped before anything is billed, and neither the sample row nor any diagnostic row is charged. Turning on the detail pass does not change the price per listing.

💡 What people use it for

  • Tracking asking prices in a neighbourhood week by week, keyed on listingId.
  • Pulling comparables before valuing or pricing a property.
  • Splitting a market by advertiserType to see what share is agency stock and what is private.
  • Watching rentals in one city across all three countries in a single sheet.

🚧 What it does not do

  • No contact details. No phone numbers, no email addresses. agencyName is the name only.
  • No coordinates. Address, neighbourhood and city, as published.
  • bathrooms and the full description need the detail pass. Without it, bathrooms are null and

the description is the shortened card version.

  • updatedText is usually null, because most listings do not publish one.
  • minRooms does not work on Italy. That country's search URLs have no bedroom filter.
  • No newest-first order. Rows carry no date to check it by.
  • Commercial premises, garages and land are Spain only in the filter fields. Use a search URL for

the others.

  • About 1,800 listings per search, because the site stops paging at 60 pages. Split a big area

into smaller searches, by district or by price band, to get past it.

  • 20 search URLs and 3,000 listings in one run.
  • Current listings only. No sold prices, no history, no archive of what a flat used to ask.
  • Photos are the URLs Idealista serves, not downloaded files.

🧭 Which property scraper do you need?

If you wantUse
Spain, Italy or Portugal on IdealistaThis one
Spain on FotocasaFotocasa Scraper
The United States on ZillowZillow Scraper
The United States on Realtor.comRealtor.com Scraper
Brazil on VivaReal and ZAPVivaReal & ZAP Imóveis Scraper

❓ Questions people ask

Do I need an Idealista account or an API key? No. Nothing to paste in, nothing to renew.

Which is better, a URL or the filter fields? A URL, every time. It keeps filters this actor has no field for, and it is exactly the search you already checked on the site.

Where do I find the location slug? In the address bar after you search on Idealista. In https://www.idealista.com/venta-viviendas/madrid-madrid/ the slug is madrid-madrid.

Can I mix countries in one run? Yes, by putting URLs from different Idealista sites in searchUrls. Each row says which country it came from.

Why did I get fewer listings than I asked for? Either the search has that many, or it reached the 60-page limit. Split the area into smaller searches and run them together.

Is this legal? These are public listing pages. Rows carry agency names and property addresses, which data-protection law can cover, so have a reason for collecting them. Apify's write-up on scraping and the law is a fair start, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and the exact search URL or filters you used. A diagnostic row's errorCode and searchUrl usually name the search that went wrong.