Idealista Scraper avatar

Idealista Scraper

Pricing

from $0.40 / 1,000 results

Go to Apify Store
Idealista Scraper

Idealista Scraper

Scrape Idealista search results and listing detail pages from Spain, Italy, and Portugal using request-only HTTP with browser TLS impersonation. Supports pagination, optional detail enrichment, price-range splitting, search monitoring, and coverage reports.

Pricing

from $0.40 / 1,000 results

Rating

0.0

(0)

Developer

Kelopr

Kelopr

Maintained by Community

Actor stats

0

Bookmarked

31

Total users

11

Monthly active users

2 days ago

Last modified

Share

Idealista Scraper - Listings, Prices & Advertiser Phones cover

Every property, every price signal, and every available advertiser contact โ€” exported as structured JSON.

Scrape Idealista properties from Spain, Italy, and Portugal with prices, advertiser phones, locations, photos, pagination, detail enrichment, monitoring, and coverage reports. Request-only, no login.

All examples below use fictional DEMO-* identifiers, reserved .test domains, and masked contact details. They do not represent real people, listings, products, or companies.

๐Ÿš€ What this Actor does

  • Flexible collection: AUTO, SEARCH, DETAIL, Monitoring.
  • Structured output: clean JSON records organized into overview, pricing, contacts, location views.
  • Production-ready: concurrency, retries, proxy support, limits, and source-aware diagnostics are exposed through the Actor input.
  • Easy automation: run from the Apify Console, API, schedules, webhooks, Make, Zapier, or any HTTP client.

๐ŸŽ›๏ธ Modes and workflows

Mode or workflowWhat it does
AUTODetect whether each input is a search page, detail page, listing ID, or prior dataset.
SEARCHPaginate search pages, split saturated price ranges when enabled, and optionally enrich every listing.
DETAILFetch exact property URLs or IDs and return the richest listing record available.
MonitoringCompare a named snapshot and label new, changed, unchanged, or removed properties.

๐Ÿ’ก Common use cases

  • Property comps and price-per-area analysis
  • Advertiser and agency lead generation
  • Listing inventory and price-change monitoring

๐Ÿ“ฅ Input schema

Configure the Actor in the Input tab or send the same JSON through the API. Fields not needed for your workflow can be omitted.

FieldTypeDescriptionDefault
modestring๐Ÿ”€ Auto-detect (recommended) routes every target by type and can run SEARCH and DETAIL together when your input is mixed. Force a mode only when every target belongs to that mode. Allowed: AUTO, SEARCH, DETAIL.AUTO
searchUrlsarray๐Ÿ”Ž Idealista search / result URLs from idealista.com, idealista.it or idealista.pt. Any filters already in the URL (location, rooms, priceโ€ฆ) are respected. Used in SEARCH mode.โ€”
detailUrlsarray๐Ÿ“„ Individual property page URLs (e.g. โ€ฆ/inmueble/106387165/). Used in DETAIL mode.โ€”
startUrlsarray๐Ÿงฉ Mixed bag of Idealista URLs. Search URLs feed SEARCH mode, detail URLs feed DETAIL mode โ€” handy when you don't want to sort them yourself.[]
listingIdsarray<string>๐Ÿ†” Raw Idealista listing IDs (the number in the URL). They are turned into detail URLs using the Country + Language settings below. Used in DETAIL mode.[]
datasetIdstring๐Ÿ—‚๏ธ Re-scrape a previous run: pick a dataset and the actor pulls propertyId / adId / url / detailUrl from every item. Used in DETAIL mode.โ€”
countrystring๐ŸŒ Country used when building URLs from a location slug or listing IDs. Allowed: ES, IT, PT.ES
operationstring๐Ÿท๏ธ Buy, rent or new-development โ€” used only when building search URLs from a location slug. Allowed: SALE, RENT, NEW_DEVELOPMENT.SALE
locationSlugstring๐Ÿ“ A single Idealista location slug, e.g. madrid-madrid, milano-milano, lisboa. For exact filters prefer pasting a Search URL instead.โ€”
locationSlugsarray<string>๐Ÿ“ Several location slugs at once โ€” one search URL is generated per slug.[]
languagestring๐Ÿ—ฃ๏ธ Language segment for generated URLs. Use en for English output where Idealista offers it (e.g. โ€ฆ/en/โ€ฆ).en
minPriceinteger๐Ÿ’ถ Only listings at or above this price. Replaces any price filter already present in the search URL.โ€”
maxPriceinteger๐Ÿ’ถ Only listings at or below this price. Replaces any price filter already present in the search URL.โ€”
maxItemsinteger๐Ÿ”ข Hard cap on how many property rows are saved. Set 0 for unlimited.100
maxPagesPerSearchinteger๐Ÿ“„ How many result pages to walk for each search URL (or price range). Idealista shows ~30 listings per page.3
maxDetailUrlsinteger๐Ÿ”ข Cap on how many URLs DETAIL mode collects from inputs/datasets. Set 0 for no cap.0
enablePriceSplittingboolean๐Ÿช“ Idealista caps big searches at a limited number of pages. Turn this on to slice a broad search into price bands, grab far more listings, and get a coverage report per band.false
maxSplitDepthinteger๐Ÿช“ How aggressively to keep splitting a price band that still has more pages than the page cap. Higher = more coverage, more requests.1
includeDetailsbooleanโž• Fetch each listing's detail page during a SEARCH run to add full description, features, photos, coordinates and more. Slower โ€” one extra request per listing (parallelised up to Max concurrency).false
rawOutputboolean๐Ÿงช Add the parsed raw JS config objects (_rawConfig, _rawMapConfig) to detail records. For debugging / power users.false
monitoringboolean๐Ÿ” Compare this run against the previous snapshot and label every listing new / unchanged / price_changed / removed.false
monitoringStoreNamestring๐Ÿ’พ Named key-value store that holds the snapshots between runs. Use a distinct name per saved search.idealista-monitoring
proxyobject๐ŸŒ Idealista is behind DataDome, so residential proxies are strongly recommended. Defaults to Apify Residential; datacenter / no-proxy runs are almost always challenged.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}
preferDirectboolean๐Ÿ’ธ Try one direct request first. If it succeeds, the run avoids residential traffic; if DataDome blocks it, the Actor automatically falls back to the configured proxy.true
maxConcurrencyintegerโšก How many detail requests run in parallel (DETAIL mode and includeDetails enrichment). Lower it if you see blocking.5
maxRetriesinteger๐Ÿ” General retry budget per request (network hiccups, unexpected statuses).4
maxProxyRetriesinteger๐Ÿ” Retry budget dedicated to proxy / transport failures, with a fresh proxy each time.4
maxBlockRetriesinteger๐Ÿ›ก๏ธ Retry budget dedicated to DataDome challenge pages โ€” each retry rotates the session/IP.4
requestTimeoutSecsintegerโฑ๏ธ Per-request timeout in seconds.30
failOnSearchErrorboolean๐Ÿšจ Off by default: a failing search URL is logged as an error row and remaining URLs continue. Turn on to stop the remaining search URLs safely after the first error; the run still finishes successfully with diagnostics.false
impersonateProfilestring๐ŸŽญ curl_cffi browser fingerprint for HTML pages. Safari currently passes Idealista best โ€” change only if you know what you're doing.safari
acceptLanguagestring๐Ÿ—ฃ๏ธ HTTP Accept-Language header sent with each request.en-US,en;q=0.9

โ–ถ๏ธ Example input

{
"mode": "SEARCH",
"searchUrls": [
"https://www.idealista.com/en/venta-viviendas/demo-city/"
],
"maxItems": 50,
"includeDetails": true,
"monitoring": true,
"monitoringStoreName": "demo-market-watch"
}

๐Ÿ“ฆ Output schema

Each successful item is written to the default dataset. Select a dataset view in the Apify Console or export the full dataset as JSON, CSV, Excel, XML, or RSS.

overview โ€” Properties

A compact table for fast scanning and export.

Fields: _recordType, propertyId, changeStatus, title, subtitle, thumbnail, price, priceValue, priceByAreaValue, currency, sizeM2, bedrooms, bathrooms, floorNumber, condition, yearBuilt, hasLift, hasTerrace, hasBalcony, hasAirConditioning, heatingType, energyConsumptionValue, energyEmissionsValue, address, city, province, photoCount, isHighlighted, hasVideo, has3DTour, advertiserName, phone, phoneFormatted, phoneRequiresLogin, secondaryPhone, url, scrapedAt

pricing โ€” Pricing & size

Price-focused records for analysis and monitoring.

Fields: propertyId, title, thumbnail, price, priceValue, priceByArea, priceByAreaValue, currency, sizeM2, bedrooms, bathrooms, operation, typology, url

contacts โ€” Advertiser & contacts

Public contact evidence and normalized contact fields.

Fields: propertyId, title, advertiserLogo, advertiserName, advertiserUrl, ownerType, phone, phoneFormatted, phoneLocal, phonePrefix, phoneRequiresLogin, secondaryPhone, url

location โ€” Location

Normalized property location fields.

Fields: propertyId, title, address, neighborhood, district, city, province, country, latitude, longitude, url

๐Ÿ“ค Example output

{
"_recordType": "property",
"propertyId": "DEMO-106387",
"changeStatus": "new",
"title": "Demo two-bedroom apartment",
"price": "โ‚ฌ325,000",
"priceValue": 325000,
"currency": "EUR",
"sizeM2": 86,
"bedrooms": 2,
"bathrooms": 2,
"phoneFormatted": "+34 600 XXX XXX",
"url": "https://www.idealista.com/inmueble/DEMO-106387/"
}

Missing source values are returned as null, empty arrays, or documented availability/status fields; the Actor does not invent unavailable source data.

๐Ÿ”Œ API example

Replace the placeholder with an Apify token and send the same input used in the Console:

curl -X POST "https://api.apify.com/v2/acts/trakk~idealista-scraper/runs?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"mode": "SEARCH", "searchUrls": ["https://www.idealista.com/en/venta-viviendas/demo-city/"], "maxItems": 50, "includeDetails": true, "monitoring": true, "monitoringStoreName": "demo-market-watch"}'

For synchronous integrations, use the run-sync-get-dataset-items API endpoint. For larger jobs, start an asynchronous run and consume its default dataset when the run succeeds.

๐Ÿงฉ Automation and exports

  • Schedule recurring runs from the Apify Console.
  • Trigger downstream systems with webhooks when a run succeeds or fails.
  • Reuse named monitoring keys or stores where the selected workflow supports change tracking.
  • Export dataset views to JSON, CSV, Excel, XML, or RSS, or access items through the Apify API.

โ“ FAQ

Do I need a login or browser session?

Use only the inputs shown in the Actor schema. If authentication or cookies are supported, the relevant encrypted field is explicitly available in the Input tab; otherwise no account is required.

Why can some fields be empty?

Source pages vary by region, content type, privacy settings, and availability. Optional enrichment also depends on the selected mode. Empty values are preserved honestly instead of being guessed.

How should I run this at scale?

Start with a small representative input, inspect the dataset and cost, then raise item limits and concurrency gradually. Use Apify Proxy when the schema exposes it, and use schedules plus monitoring keys for recurring collection.

Is the example data real?

No. Every example in this README is intentionally fictional and uses demo identifiers, reserved domains, or masked contact values.