Idealista Scraper — Block-Resistant (ES, PT, IT) avatar

Idealista Scraper — Block-Resistant (ES, PT, IT)

Pricing

from $1.80 / 1,000 listing scrapeds

Go to Apify Store
Idealista Scraper — Block-Resistant (ES, PT, IT)

Idealista Scraper — Block-Resistant (ES, PT, IT)

Scrape real estate listings from Idealista Spain, Portugal and Italy.

Pricing

from $1.80 / 1,000 listing scrapeds

Rating

5.0

(1)

Developer

viralanalyzer

viralanalyzer

Maintained by Community

Actor stats

0

Bookmarked

17

Total users

3

Monthly active users

13 days ago

Last modified

Categories

Share

Idealista Spain, Portugal & Italy Real Estate Scraper 🏠 Sale, Rent & Rooms

English | Português


English

Extract real estate listings from Idealista.com (Spain), Idealista.pt (Portugal), and Idealista.it (Italy). Houses, apartments, commercial locals, land plots, or shared rooms: the search URL is built from your filters, the result pages are read card by card, and pagination follows the "next" link until your limit is reached.

This Actor uses Pay-Per-Event (PPE) pricing — you pay per listing written to your dataset, with no monthly subscription and no upfront fee.

What each listing carries

Data comes from the search result cards, not from opening each property page. That is what makes a run fast, and it is also what sets the boundary: a field that the card does not print is not in the output. The full field list is 17 items, shown below.

Features

  • 🌐 Multi-Country Support: Idealista Spain, Portugal, and Italy, each with its own URL grammar and Accept-Language header.
  • 🏢 All Property Types: Apartments, Houses, Shared Rooms, Land, and Commercial offices.
  • 🔑 Transaction Modes: buying (Sale), renting, and roommate sharing (Rooms).
  • 💰 Pay-Per-Event Billing: charged per listing saved. A blocked run saves a diagnostic row and charges nothing.
  • 🛡️ Anti-Bot Handling: stealth launch flags, cookie-consent click, randomized settle, plus screenshot and HTML dumps to the Key-Value Store on every block.
  • Card Fields: ID, title, formatted and numeric price, price per m², area, bedrooms, floor, lift, advertiser, location text, image list, listing URL, country.

Input Parameters

FieldTypeDescriptionDefault
urlStringDirect Idealista search URL. Overrides other filters.""
countryStringCountry site to scrape (es, pt, it)."es"
transactionTypeStringsale (Buy), rent (Rent), or share (Shared rooms). Shapes the URL; not copied into the output item."sale"
propertyTypeStringall, apartments, houses, rooms, commercial, land. Shapes the URL; not copied into the output item."all"
locationStringCity or region slug (e.g. madrid, lisboa, porto)."madrid"
priceMinIntegerMinimum price in Euros.None
priceMaxIntegerMaximum price in Euros.None
maxListingsIntegerMaximum number of listings to extract.100
proxyConfigurationObjectProxy configuration. Residential proxy highly recommended.{"useApifyProxy": true}

Output Example

Every item has exactly these 17 fields:

{
"id": "104859384",
"title": "Piso en venta en calle de Alcalá, Goya, Madrid",
"priceFormatted": "450.000 €",
"area": 85,
"bedrooms": 2,
"floor": "3º",
"hasLift": true,
"advertiser": "Altea Real Estate",
"location": "Goya, Madrid",
"images": [
"https://img3.idealista.com/blur/web_gallery-m-d/0/id.pro.es.image.bundle.webp"
],
"imageCount": 12,
"url": "https://www.idealista.com/inmueble/104859384/",
"source": "Idealista",
"country": "ES",
"price": 450000,
"pricePerSqm": 5294.12,
"scrapedAt": "2026-05-23T06:20:00.000Z"
}
FieldTypeHow it is produced
idstringDigits from the /inmueble/, /imovel/ or /immobile/ path. When the link has no such segment, a random idealista-xxxxxxxxx placeholder is used instead
titlestringText of the card's title link
priceFormattedstringPrice text exactly as printed on the card
areanumber | nullFirst number in the card detail containing
bedroomsnumber | nullFirst number in the detail containing hab / quarto / stanza / dorm
floorstring | nullRaw text of the detail containing º, planta, piano, bajo or r/c
hasLiftboolean | nulltrue / false from the ascensor / elevador / ascensore detail; null when the card says nothing about it
advertiserstringAlt/title text of the agency logo. Defaults to the literal "Private Owner" when no logo is on the card
locationstringRaw text of the card's description block, truncated at 300 characters
imagesstring[]http image sources on the card, logos filtered out
imageCountnumberLength of images — photos visible on the card, not the total in the gallery
urlstringAbsolute listing URL
sourcestringConstant Idealista
countrystringES, PT or IT, from your country input
pricenumber | nullpriceFormatted with every non-digit stripped
pricePerSqmnumber | nullprice / area, rounded to 2 decimals; null when either side is missing
scrapedAtstringISO-8601 extraction timestamp

Use Cases

  • 📊 Market Valuation: track asking prices and €/m² across Spanish, Portuguese and Italian cities.
  • 🎯 Lead Generation: separate agency listings from "Private Owner" cards and follow the listing URL.
  • 💼 Investment Analysis: compare €/m² between sale and rent runs for the same location slug.

✅ Capabilities & Limits

Stated up front, so you do not pay a run to find out.

Built here: Datadome serves its challenge with HTTP 200, so status codes cannot detect the block. The actor flags it by <title> — exactly idealista.com means blocked. That path ends SUCCEEDED with a DIAGNOSTIC_GUIDE row and no PPE charge, while zero listings on a genuinely clean page hard-fails. A "successful" run holding one diagnostic item means you were blocked and paid nothing.

Input / featureSupportedNotes
urlDirect search URL from Idealista.com, Idealista.pt, or Idealista.it. If provided, the filters below are ignored.
countryIdealista site to scrape from. Echoed into the item as country.
transactionType⚠️Selects the URL path (venta/alquiler, comprar/arrendar, vendita/affitto). It is not written into the output item.
propertyType⚠️Selects the URL path (pisos, chalets, habitaciones, locales, terrenos, …). It is not written into the output item.
locationSlug of the location. Examples: madrid, barcelona, lisboa, porto, milano, roma. Defaults to madrid.
priceMin / priceMaxPrice filter in Euros, applied in the search URL.
Result volume (maxListings)⚠️Each result page holds about 30 listings; the actor follows "next" until the cap.
Proxy⚠️Apify RESIDENTIAL proxy strongly recommended. A WEB_UNLOCKER_PROXY_URL secret, when configured, takes priority over the input proxy.
Bathroom countNot emitted. There is no bathrooms field. Idealista search cards print area, bedrooms and floor — the bathroom count lives on the property detail page, which this actor does not open.
Energy certificateNot emitted. There is no energyCertificate field. The efficiency rating is a detail-page attribute, not a search-card one.
City as a separate fieldNot emitted. Use location (raw card text) or the location input you sent.
Advertiser phone / e-mailNever collected.
Description, full gallery, floor planNot emitted. images holds only what the card renders, and imageCount counts those.
Listing publication dateNot emitted. scrapedAt is the extraction time, not the posting time.

FAQ

Q: Do I need a proxy to run this scraper?
A: Yes. Idealista uses heavy anti-bot protections. Use Apify Residential Proxies or a Web Unlocker endpoint in the proxy configuration settings.

Q: How does the Pay-Per-Event model work?
A: You are charged per listing saved to your dataset. A run that returns zero results because of a block costs nothing.

Q: Why is there no bathroom count or energy rating?
A: Both live on the individual property page. This actor reads search result cards, which keeps runs fast and cheap but caps the field list at the 17 above.


Português

Extraia anúncios imobiliários do Idealista.com (Espanha), Idealista.pt (Portugal) e Idealista.it (Itália). Casas, apartamentos, escritórios comerciais, terrenos ou quartos partilhados: a URL de pesquisa é montada a partir dos seus filtros, as páginas de resultados são lidas card a card, e a paginação segue o link "seguinte" até ao seu limite.

Este Actor utiliza cobrança Pay-Per-Event (PPE) — paga por anúncio gravado no seu dataset, sem subscrição mensal e sem taxa inicial.

O que cada anúncio traz

Os dados vêm dos cards da página de resultados, não da página individual de cada imóvel. É isso que torna o run rápido, e é também o que define a fronteira: campo que o card não imprime não sai no output. A lista completa tem 17 campos.

Funcionalidades

  • 🌐 Suporte Multi-País: portais de Espanha, Portugal e Itália, cada um com a sua gramática de URL e cabeçalho Accept-Language.
  • 🏢 Todos os Tipos de Propriedade: Apartamentos, Casas, Quartos Partilhados, Terrenos e Escritórios/Lojas.
  • 🔑 Modos de Transação: Compra (Venda), Arrendamento e Quartos (Partilhar).
  • 💰 Cobrança Pay-Per-Event: cobrada por anúncio gravado. Run bloqueado grava um diagnóstico e não cobra nada.
  • 🛡️ Tratamento Anti-Bot: flags de camuflagem no launch, clique no consentimento de cookies, espera aleatória, mais screenshot e HTML no Key-Value Store a cada bloqueio.
  • Campos do Card: ID, título, preço formatado e numérico, preço por m², área, quartos, andar, elevador, anunciante, texto de localização, lista de imagens, URL do anúncio, país.

Parâmetros de Entrada

CampoTipoDescriçãoPadrão
urlStringURL direta de pesquisa do Idealista. Ignora outros filtros.""
countryStringPortal de país a extrair (es, pt, it)."es"
transactionTypeStringsale (Venda), rent (Arrendamento) ou share (Quartos). Define a URL; não é copiado para o item de saída."sale"
propertyTypeStringall, apartments, houses, rooms, commercial, land. Define a URL; não é copiado para o item de saída."all"
locationStringTermo ou slug da localidade (ex: lisboa, porto, madrid)."madrid"
priceMinIntegerPreço mínimo em Euros.Nenhum
priceMaxIntegerPreço máximo em Euros.Nenhum
maxListingsIntegerNúmero máximo de anúncios a extrair.100
proxyConfigurationObjectConfigurações de proxy. Proxy residencial recomendado.{"useApifyProxy": true}

Exemplo de Saída

Cada item tem exatamente estes 17 campos:

{
"id": "104859384",
"title": "Piso en venta en calle de Alcalá, Goya, Madrid",
"priceFormatted": "450.000 €",
"area": 85,
"bedrooms": 2,
"floor": "3º",
"hasLift": true,
"advertiser": "Altea Real Estate",
"location": "Goya, Madrid",
"images": [
"https://img3.idealista.com/blur/web_gallery-m-d/0/id.pro.es.image.bundle.webp"
],
"imageCount": 12,
"url": "https://www.idealista.com/inmueble/104859384/",
"source": "Idealista",
"country": "ES",
"price": 450000,
"pricePerSqm": 5294.12,
"scrapedAt": "2026-05-23T06:20:00.000Z"
}
CampoTipoComo é produzido
idstringDígitos do caminho /inmueble/, /imovel/ ou /immobile/. Sem esse segmento, entra um marcador aleatório idealista-xxxxxxxxx
titlestringTexto do link de título do card
priceFormattedstringPreço tal como impresso no card
areanumber | nullPrimeiro número no detalhe que contém
bedroomsnumber | nullPrimeiro número no detalhe que contém hab / quarto / stanza / dorm
floorstring | nullTexto bruto do detalhe com º, planta, piano, bajo ou r/c
hasLiftboolean | nulltrue / false a partir do detalhe ascensor / elevador / ascensore; null quando o card nada diz
advertiserstringAlt/title do logo da agência. Vira o literal "Private Owner" quando não há logo no card
locationstringTexto bruto do bloco de descrição do card, cortado em 300 caracteres
imagesstring[]Fontes de imagem http do card, com logos filtrados
imageCountnumberTamanho de images — fotos visíveis no card, não o total da galeria
urlstringURL absoluta do anúncio
sourcestringConstante Idealista
countrystringES, PT ou IT, vindo do seu input country
pricenumber | nullpriceFormatted sem nenhum caractere não-numérico
pricePerSqmnumber | nullprice / area, arredondado a 2 casas; null quando falta um dos lados
scrapedAtstringTimestamp ISO-8601 da extração

Casos de Uso

  • 📊 Avaliação de Mercado: acompanhe preços pedidos e €/m² em cidades de Espanha, Portugal e Itália.
  • 🎯 Geração de Leads: separe anúncios de agência dos cards "Private Owner" e siga a URL do anúncio.
  • 💼 Análise de Investimento: compare €/m² entre um run de venda e um de arrendamento para a mesma localidade.

✅ Capacidades e Limites

Declarado antes da compra, para não gastar um run a descobrir.

Como funciona aqui: o Datadome serve o desafio com HTTP 200, então o código de status não deteta o bloqueio. O actor sinaliza pelo <title> — exatamente idealista.com significa bloqueado. Esse caminho termina SUCCEEDED com uma linha DIAGNOSTIC_GUIDE e sem cobrança PPE, enquanto zero anúncios numa página genuinamente limpa falha de forma dura. Um run "bem-sucedido" com um único item de diagnóstico significa que foi bloqueado e não pagou nada.

Entrada / recursoSuportadoObservações
urlURL direta do Idealista.com, Idealista.pt ou Idealista.it. Quando preenchida, os filtros abaixo são ignorados.
countryPortal a extrair. Volta no item como country.
transactionType⚠️Escolhe o caminho da URL (venta/alquiler, comprar/arrendar, vendita/affitto). Não é gravado no item de saída.
propertyType⚠️Escolhe o caminho da URL (pisos, chalets, habitaciones, locales, terrenos, …). Não é gravado no item de saída.
locationSlug da localidade: madrid, barcelona, lisboa, porto, milano, roma. Padrão madrid.
priceMin / priceMaxFiltro de preço em Euros, aplicado na URL de pesquisa.
Volume (maxListings)⚠️Cada página tem cerca de 30 anúncios; o actor segue o "seguinte" até ao teto.
Proxy⚠️Proxy RESIDENCIAL da Apify fortemente recomendado. O segredo WEB_UNLOCKER_PROXY_URL, quando configurado, tem prioridade sobre o proxy do input.
Número de casas de banhoNão é emitido. Não existe campo bathrooms. O card de pesquisa do Idealista imprime área, quartos e andar — o número de casas de banho fica na página de detalhe do imóvel, que este actor não abre.
Certificado energéticoNão é emitido. Não existe campo energyCertificate. A classificação energética é atributo da página de detalhe, não do card de pesquisa.
Cidade como campo próprioNão é emitida. Use location (texto bruto do card) ou o input location que enviou.
Telefone / e-mail do anuncianteNunca são recolhidos.
Descrição, galeria completa, plantaNão são emitidas. images traz só o que o card renderiza, e imageCount conta essas.
Data de publicação do anúncioNão é emitida. scrapedAt é a hora da extração, não a da publicação.

FAQ

P: Preciso de proxy para rodar este scraper?
R: Sim. O Idealista implementa bloqueios rígidos. Use os Proxies Residenciais da Apify ou um endpoint Web Unlocker.

P: Porque não há número de casas de banho nem certificado energético?
R: Ambos vivem na página individual do imóvel. Este actor lê os cards da página de resultados, o que mantém o run rápido e barato, mas limita a lista aos 17 campos acima.


💰 Pricing / Preços

This actor uses Pay Per Event (PPE) pricing. The rate depends on your Apify plan tier:

Plan tierPer listing scrapedPer 1,000
Free$0.003$3.00
Bronze$0.0025$2.50
Silver$0.002$2.00
Gold$0.0018$1.80
Platinum$0.0014$1.40
Diamond$0.001$1.00

You are never charged for a run that returned nothing. When the source blocks and nothing is extracted, the actor returns a labeled diagnostic and charges no PPE event.

Changelog

  • 2026-08-27: Documentação alinhada ao output real — o exemplo de saída passou a listar os 17 campos efetivamente gravados; bathrooms e energyCertificate foram marcados como não emitidos na tabela de limites.
  • v1.0.0 (2026-05-23): Lançamento oficial do Idealista Multi-Country Scraper com cobrança PPE direta e suporte a Espanha, Portugal e Itália.