Idealista Scraper avatar

Idealista Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Idealista Scraper

Idealista Scraper

Scrape real estate listings from Idealista.com. Extract property prices, locations, features, photos, and agent contacts for Spain, Italy, and Portugal.

Pricing

from $1.00 / 1,000 results

Rating

1.0

(1)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

1

Bookmarked

105

Total users

7

Monthly active users

2 days ago

Last modified

Share

Extract real estate listing data from Idealista.com across Spain, Italy, and Portugal. Get property prices, sizes, locations, features, photos, and agent contacts for homes, offices, garages, new developments, and more.

What It Does

  • Scrape property listings for sale or rent across all property types
  • Support for Spain (idealista.com), Italy (idealista.it), and Portugal (idealista.pt)
  • 30+ data fields per listing including price, size, location, features, and agency info
  • All property types: homes, offices, premises, garages, lands, storage rooms, buildings, bedrooms
  • Automatic pagination — collects all available pages up to your configured maximum
  • Mirror-first cloud fetching that avoids slow browser sessions for normal runs
  • Export to JSON, CSV, Excel, or XML

Input

FieldTypeRequiredDefaultDescription
locationstringYes*madrid-madridCity or area slug from Idealista URLs (e.g., madrid-madrid, barcelona-barcelona, lisboa, roma-roma)
operationstringNosaleListing type: sale or rent
propertyTypestringNohomesProperty type (see list below)
countrystringNoesTarget country: es (Spain), pt (Portugal), it (Italy)
maxItemsintegerNo100Maximum listings to scrape (max 1,800 per search)
startUrlsarrayYes*Direct Idealista search URLs — overrides location/operation/propertyType
proxyConfigurationobjectNoApify ProxyKeep the default proxy settings for best cloud reliability

* At least one of location or startUrls is required.

Property Types

ValueDescription
homesApartments, houses, villas
newDevelopmentsOff-plan and new-build developments
officesOffice spaces
premisesCommercial premises / retail units
garagesGarages and parking spaces
landsPlots and land
storageRoomsStorage rooms (trasteros)
buildingsEntire buildings
bedroomsRooms for rent

Example Input

{
"location": "madrid-madrid",
"operation": "sale",
"propertyType": "homes",
"country": "es",
"maxItems": 50
}

Location Slug Reference

Find your slug by searching on Idealista and copying the location segment from the URL:

CountryLocationSlug
SpainMadridmadrid-madrid
SpainBarcelonabarcelona-barcelona
SpainSevillesevilla-sevilla
SpainValenciavalencia-valencia
SpainMarbellamarbella-malaga
SpainMálagamalaga-malaga
PortugalLisbonlisboa
PortugalPortoporto
PortugalFarofaro
ItalyRomeroma-roma
ItalyMilanmilano-milano
ItalyFlorencefirenze-firenze

You can also paste a full Idealista URL directly into the location field, or use startUrls to scrape multiple search pages at once.

Output

Each property listing produces one dataset record. This version scrapes search-result cards (not individual property detail pages), so fields are split below into what the search page reliably exposes vs. what would need a detail-page visit (see Limitations).

Core Fields (reliably populated)

FieldTypeDescription
propertyCodestringIdealista property ID
urlstringFull URL to the property listing page
sourceUrlstringSame canonical property URL, included for standard dataset consumers
recordTypestringlisting for property listing records
priceintegerListing price in EUR
priceByAreaintegerPrice per square meter in EUR
currencystringCurrency code (EUR)
sizeintegerProperty size in m²
roomsintegerNumber of bedrooms
bathroomsintegerNumber of bathrooms (from the card, or parsed from the description text)
floorstringFloor level (e.g., 4ª planta exterior con ascensor)
exteriorbooleanExterior-facing property
descriptionstringListing description text as shown on the search card

Location Fields (reliably populated)

FieldTypeDescription
addressstringStreet address or location label as shown on the card
municipalitystringCity or municipality, parsed from the address
districtstringDistrict or neighbourhood, parsed from the address
countrystringCountry code: es, pt, or it

Media Fields (reliably populated)

FieldTypeDescription
thumbnailstringPrimary listing photo URL
numPhotosintegerTotal number of photos in the card's gallery

Feature Fields (reliably populated)

FieldTypeDescription
hasLiftbooleanBuilding has an elevator
hasSwimmingPoolbooleanProperty has a pool
hasTerracebooleanProperty has a terrace
hasAirConditioningbooleanProperty has air conditioning
hasBoxRoombooleanIncludes a storage room (trastero)
hasGardenbooleanProperty has a garden
hasParkingSpaceobject{ hasParkingSpace, isParkingSpaceIncludedInPrice } — detected from card text

Contact Fields (reliably populated)

FieldTypeDescription
contactInfoobjectAgency details: { commercialName, agencyLogo }

Status & Classification Fields (reliably populated)

FieldTypeDescription
propertyTypestringProperty type (homes, offices, etc.) — from your search input
operationstringsale or rent — from your search input
newDevelopmentbooleanNew construction development, detected from card text
topPlusbooleanTop Plus premium placement, detected from card styling
scrapedAtstringISO 8601 UTC timestamp of scrape

Fields not available from search cards

Idealista's search-result cards don't expose these — they require visiting each property's individual detail page, which this version doesn't do yet (see Limitations):

province, latitude, longitude, showAddress, locationId, multimedia, hasVideo, has3DTour, has360, hasStaging, hasPlan, status, newProperty, externalReference, detailedType, topNewDevelopment, visualHighlight, urgentVisualHighlight, preferenceHighlight, topHighlight.

Sample Output

{
"propertyCode": "107795847",
"url": "https://www.idealista.com/inmueble/107795847/",
"sourceUrl": "https://www.idealista.com/inmueble/107795847/",
"recordType": "listing",
"price": 1160000,
"priceByArea": 5321,
"currency": "EUR",
"size": 218,
"rooms": 3,
"bathrooms": 2,
"floor": "4ª planta exterior con ascensor",
"exterior": true,
"description": "Espectacular piso en venta en el barrio de Salamanca...",
"address": "Piso en Calle de Jorge Juan, Recoletos, Madrid",
"municipality": "Madrid",
"district": "Recoletos",
"country": "es",
"thumbnail": "https://img3.idealista.com/blur/WEB_LISTING/0/id.pro.es.image.master/...",
"numPhotos": 24,
"hasLift": true,
"hasTerrace": true,
"hasAirConditioning": true,
"hasParkingSpace": {
"hasParkingSpace": true,
"isParkingSpaceIncludedInPrice": false
},
"contactInfo": {
"commercialName": "Engel & Völkers Madrid",
"agencyLogo": "https://img3.idealista.com/..."
},
"propertyType": "homes",
"operation": "sale",
"newDevelopment": false,
"topPlus": false,
"scrapedAt": "2026-06-23T10:00:00+00:00"
}

When the run finds nothing

If a run ends with 0 listings, the run's status message explains why:

  • All attempts blocked — Idealista or the mirror blocked every fetch attempt. This is usually temporary; keep the default proxy settings and try again.
  • No listings extracted — the page had no results, most often because the location slug is wrong. Check the Location Slug Reference table above — Italy requires Italian names (roma-roma, not rome), and Portugal uses Portuguese names (lisboa, not lisbon).
  • No URLs to processstartUrls only contained individual property detail pages, which this actor doesn't scrape yet (search result pages only).

Check the run's Status Message in the Apify Console for the specific reason.

Use Cases

  • Market analysis: Track property prices and trends across Spanish, Italian, and Portuguese cities
  • Investment research: Compare prices per square meter across neighbourhoods and districts
  • Competitive monitoring: Track competitor agency listings and pricing strategies
  • Lead generation: Collect agency contact details for real estate businesses
  • Portfolio management: Monitor listings in specific areas for property management firms
  • Price alerts: Run on a schedule to detect new listings or price changes

Limitations

  • Search pages only: The stable cloud path scrapes search-result cards. Individual property detail pages are not supported yet.
  • Search result cap: Idealista caps search results at ~1,800 listings (60 pages) per query. Split large cities into districts for broader coverage.
  • Rate limits: The scraper uses polite delays between pages. Small runs usually finish in under a minute.
  • No individual property pages: This version scrapes search result cards. Full detail pages (phone numbers, more photos) require navigating to each property URL individually.

FAQ

Do I need a login or cookies? No. Idealista listings are publicly accessible — no account required.

Why does the input include proxy settings? Cloud traffic can be blocked by Idealista or by the mirror. The actor keeps Apify Proxy enabled by default and uses it only when needed for reliable public-page access.

Which countries are supported? Spain (idealista.com), Portugal (idealista.pt), and Italy (idealista.it).

What property types can I scrape? Homes, new developments, offices, commercial premises, garages, plots/land, storage rooms, entire buildings, and rooms for rent.

How do I find the location slug? Search on Idealista and look at the URL. For idealista.com/venta-viviendas/madrid-madrid/, the slug is madrid-madrid. For Portugal: idealista.pt/comprar-casas/lisboa/lisboa. For Italy: idealista.it/vendita-case/roma-roma/roma-roma.

Why are some fields missing from the output? Fields are omitted when they have no value. For example, coordinates appear only when Idealista exposes them, and features like pool or terrace are only included when they are mentioned in the listing card.

How many listings can I scrape? Up to 1,800 per search query (Idealista's hard cap). For large cities, split the search by district or neighbourhood to get broader coverage.

How fast is the scraper? Small runs usually finish in under a minute. Larger runs depend on pagination depth and mirror response time.

Can I scrape multiple cities in one run? Yes — use startUrls to provide multiple search page URLs (one per city or district). The actor scrapes them in sequence up to maxItems total.

What if the run finishes with 0 listings? Check the run's Status Message — it explains whether Idealista blocked every attempt (temporary; try again) or the location slug returned no results.