# Idealista Scraper API — $0.001 per listing

> Idealista Scraper API: Property listings from Idealista Spain/Italy/Portugal — price. $0.001 per delivered listing, nothing delivered means nothing charged.

[Home](https://quanticdata.io/)/[Collectors](https://quanticdata.io/collectors/)/*Idealista Scraper API*

# Idealista Scraper API

An Idealista scraper API for Spain, Italy and Portugal: pass a location slug or a listing URL and get one row per property — title, price as shown and parsed, price per m², rooms, size in m², the detail chips, description excerpt, listing agency and thumbnail. Sale or rent, per country site.

[Get my free API key](https://app.quanticdata.io/register) [See the request](/collectors/idealista-scraper-api/#integration)

$0.001 per delivered listing · $2 free every month · Failed runs never billed

POST /v1/scraper/collectors/idealista_search/run

```
$ curl $QD/idealista_search/run \
    -H "Authorization: Bearer $QD_API_KEY" \
    -d '{"location": "madrid-madrid", "operation": "sale", "site": "es", "max_results": 30}'
{ "status": "done", "count": 30,
  "results": [
    {
      "listing_id": "…",
      "title": "…",
      "url": "…",
      "price": "…" } ],
  "cost": 0.03 }
# 30 listings × $0.001 · nothing delivered, nothing charged
```

**$0.001 / listing**2,000 listings on the free $2 every month

**Semantic input**location, operation, site — no URL lists

**Up to 100**listings per run, pagination handled for you

**No browser**read over HTTP/TLS — cheaper and faster than rendering

On this page: [What it is](/collectors/idealista-scraper-api/#what) [Output fields](/collectors/idealista-scraper-api/#output) [Inputs](/collectors/idealista-scraper-api/#input) [Pricing](/collectors/idealista-scraper-api/#pricing) [Integration](/collectors/idealista-scraper-api/#integration) [Use cases](/collectors/idealista-scraper-api/#use-cases) [Versus the alternatives](/collectors/idealista-scraper-api/#compare) [FAQ](/collectors/idealista-scraper-api/#faq)

## What an Idealista scraper API does

Idealista runs three national sites and this collector treats them as one input: `site` picks es, it or pt, `operation` picks sale or rent, and the location is either a slug like "madrid-madrid" or a full results URL you paste to read exactly that search. The address zone and property type arrive already joined into the listing `title`.

Money is returned in two shapes because a portal shows it in one: `price` is the string as printed, `price_value` the parsed number, and `price_per_m2` the ratio as Idealista displays it. Listings from an agency carry the `agency` name; private ads leave it null rather than inventing a seller, and the on-card `details` chips (floor, elevator, condition) are kept verbatim.

Input is meaning, not a URL *location* *operation* *site* *max_results*

## What one listing looks like

Every delivered listing carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.

| Field | Type | What it holds |
| --- | --- | --- |
| `rank` | integer | 1-based position. |
| `listing_id` | string · nullable | Idealista listing id. |
| `title` | string | Listing title (type + street/zone). |
| `url` | string · nullable | Listing URL. |
| `price` | string · nullable | Price as shown. |
| `price_value` | number · nullable | Parsed price. |
| `price_per_m2` | string · nullable | Price per m² as shown. |
| `rooms` | integer · nullable | Rooms. |
| `size_m2` | number · nullable | Size in m². |
| `details` | string[] | Detail chips as shown (floor, elevator…). |
| `description` | string · nullable | Listing description excerpt. |
| `agency` | string · nullable | Listing agency (null for private). |
| `thumbnail` | string · nullable | First photo. |

## Inputs

The whole request. Anything you leave out falls back to the default shown in the catalog.

| Input | Type | Required | What it does |
| --- | --- | --- | --- |
| `location` | string | yes | Idealista location slug ("madrid-madrid") or a full listing URL. |
| `operation` | string | no | sale (default) or rent. One of: `sale`, `rent`. |
| `site` | string | no | Country site: es (default), it, pt. One of: `es`, `it`, `pt`. |
| `max_results` | integer | no | How many listings to deliver at most (1–100). You pay only for delivered listings. |

Pricing

## Idealista Scraper API pricing

$0.001 per delivered listing. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 2,000 listings before you spend anything.

**$0.001**per delivered listing*$0.8 per 1,000 delivered listings*

**2,000 listings**on the free allowance*$2 every month, no card*

**Zero rows**zero charge*blocks, captchas and retries are on us*

**−30%**on volume tiers*the catalog returns your key's price*

### Pay as you go

$0/mo

- $2 free credit / month

- 60 requests / min

- List unit prices

### Starter

$19/mo

- $15 free credit / month

- 300 requests / min

- 10% off unit prices

Most popular

### Growth

$79/mo

- $50 free credit / month

- 600 requests / min

- 20% off unit prices

### Scale

$299/mo

- $250 free credit / month

- 1,200 requests / min

- 30% off unit prices

Same wallet, same key and same $2 monthly allowance as every other [Data API](https://quanticdata.io/web-data-api-for-ai/). Prices are launch pricing read live from the billing config — `GET /v1/scraper/collectors` returns the price your key actually pays.

Integration

## One POST, typed rows

Base URL `https://api.quanticdata.io/v1`, Bearer auth, the same key as every other Data API. Endpoint: `POST /v1/scraper/collectors/idealista_search/run`.

```
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/idealista_search/run \
  -H "Authorization: Bearer $QD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"location":"madrid-madrid","operation":"sale","site":"es","max_results":30}'
```

```
import requests

r = requests.post(
    "https://api.quanticdata.io/v1/scraper/collectors/idealista_search/run",
    headers={"Authorization": f"Bearer {QD_API_KEY}"},
    json={
        "location": "madrid-madrid",
        "operation": "sale",
        "site": "es",
        "max_results": 30
    },
    timeout=120,
)
for row in r.json()["payload"]["results"]:
    print(row)
```

```
const res = await fetch(
  "https://api.quanticdata.io/v1/scraper/collectors/idealista_search/run",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.QD_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({"location":"madrid-madrid","operation":"sale","site":"es","max_results":30}),
  },
);
const { payload } = await res.json();
console.table(payload.results);
```

```
claude mcp add quantumproxies \
  -e QUANTUMPROXIES_API_KEY=qd_live_your_key_here \
  -- npx -y quantumproxies-mcp

# then, in the chat:
> run the idealista_search collector with location="madrid-madrid" and operation="sale"
```

## What people build with the Idealista scraper API

Three shapes of work this endpoint was designed around.

### Iberian market analysis

Build price-per-m² distributions for a city from rows, across the Spanish, Italian and Portuguese sites.

### Rent-versus-buy

Run the same location for sale and for rent and compare what each side of the market asks.

### Agency mapping

See which agencies list a zone and at what price, with private ads separated out.

## Idealista Scraper API versus rolling your own

The differences that actually cost time when you build this in-house.

|  | DIY scraper | This collector |
| --- | --- | --- |
| Three sites | One domain hardcoded per scraper | es, it and pt from one field |
| Location input | Only a URL you must find | A slug or a pasted results URL |
| Private listings | A guessed or blank agency | agency null, kept honest |

## FAQ

Questions we get about the Idealista scraper API.

[Something else? Ask us →](mailto:hello@quanticdata.io)

### Does Idealista offer a public data API?

Its API is gated behind an application and approval that most requests never clear. This collector reads the public results page, so you work from a location slug or URL instead of waiting on credentials.

### How do I specify the location?

Use Idealista's own slug — "madrid-madrid", "barcelona-barcelona" — or paste a full results URL and the collector reads exactly that search, including any filters already in it.

### Which countries and operations are covered?

The three Idealista markets — Spain (es), Italy (it) and Portugal (pt) — each for sale or rent via `operation`. There is no fourth site; Idealista does not operate one.

### Is there a free Idealista scraper API?

Every account gets $2 of credit every month with no card, which is about 2,000 delivered listings on this endpoint at $0.001 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.

### How much does one run cost?

Multiply the rows you actually receive by $0.001. A run capped at 100 listings — the maximum for this collector — costs $0.1 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and `GET /v1/scraper/collectors` returns the price your key actually pays.

## Run the Idealista scraper API now

$2 of free credit every month, no card. Your key returns its own prices from `GET /v1/scraper/collectors`.

[Get my free API key](https://app.quanticdata.io/register)

Related: [All 65 collectors](https://quanticdata.io/collectors/) [Zillow scraper API](https://quanticdata.io/collectors/zillow-scraper-api/) [Kleinanzeigen Scraper API](https://quanticdata.io/collectors/kleinanzeigen-scraper-api/) [Business directory API](https://quanticdata.io/collectors/business-directory-api/) [Autotrader Scraper API](https://quanticdata.io/collectors/autotrader-scraper-api/) [Documentation](https://quanticdata.io/docs/)

---

Source: https://quanticdata.io/collectors/idealista-scraper-api/ · Site index for AI: https://quanticdata.io/llms.txt
