> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scrapeunblocker.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Scrape idealista property listings (Spain, Italy, Portugal)

> Searches idealista (idealista.com, idealista.it, idealista.pt) for `location` - or takes any idealista search `url` - and returns the listings as JSON: `id`, `url`, `title`, `price` + `currency` (+ `pricePeriod` for rentals), `originalPrice` and `priceDropPercent` after a price cut, `pricePerM2`, `area`, `rooms`, `floor`, `lift`, `exterior`, `parking`, `description`, `tags`, `images`, `imageCount`, `multimedia` (plan, video, 3D tour), `agency` and `professional`. Filter by `operation` (sale / rent), `property_type`, price and size ranges, `rooms`, `bathrooms` and `features`, order with `sort`, and collect up to `max_results` across pages (30 per page; idealista shows at most 60 pages per search). A search with no match answers 200 with an empty `listings`. Billed one unit per page fetched (`pagesFetched`).



## OpenAPI

````yaml /api-reference/openapi.json post /realestate/idealista
openapi: 3.1.0
info:
  title: ScrapeUnblocker API
  description: >-
    Public API for the ScrapeUnblocker proxy/anti-bot service. Authenticate
    every request with the `x-scrapeunblocker-key` header. Documented here:
    page-source extraction, Google SERP scraping, image fetch, and the dedicated
    plugin endpoints (search engines, marketplaces, reviews, travel, social and
    more). All other paths exist for internal operations and are intentionally
    hidden from this spec.
  version: 3.0.0
servers:
  - url: https://api.scrapeunblocker.com
    description: Production
security: []
paths:
  /realestate/idealista:
    post:
      tags:
        - Plugins
      summary: Scrape idealista property listings (Spain, Italy, Portugal)
      description: >-
        Searches idealista (idealista.com, idealista.it, idealista.pt) for
        `location` - or takes any idealista search `url` - and returns the
        listings as JSON: `id`, `url`, `title`, `price` + `currency` (+
        `pricePeriod` for rentals), `originalPrice` and `priceDropPercent` after
        a price cut, `pricePerM2`, `area`, `rooms`, `floor`, `lift`, `exterior`,
        `parking`, `description`, `tags`, `images`, `imageCount`, `multimedia`
        (plan, video, 3D tour), `agency` and `professional`. Filter by
        `operation` (sale / rent), `property_type`, price and size ranges,
        `rooms`, `bathrooms` and `features`, order with `sort`, and collect up
        to `max_results` across pages (30 per page; idealista shows at most 60
        pages per search). A search with no match answers 200 with an empty
        `listings`. Billed one unit per page fetched (`pagesFetched`).
      operationId: idealista_search_realestate_idealista_post
      parameters:
        - name: url
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Any idealista search URL (idealista.com, idealista.it or
              idealista.pt) with its filters, e.g.
              https://www.idealista.com/alquiler-viviendas/barcelona-barcelona/con-precio-hasta_2000,de-dos-dormitorios/.
              Overrides location and the filter parameters.
            title: Url
          description: >-
            Any idealista search URL (idealista.com, idealista.it or
            idealista.pt) with its filters, e.g.
            https://www.idealista.com/alquiler-viviendas/barcelona-barcelona/con-precio-hasta_2000,de-dos-dormitorios/.
            Overrides location and the filter parameters.
        - name: location
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Location as idealista writes it in its URLs: a municipality
              ('madrid-madrid', 'barcelona-barcelona', 'milano-milano',
              'lisboa'), a district ('madrid/centro', 'lisboa/arroios') or a
              province ('malaga-provincia'). Required unless url is given.
            title: Location
          description: >-
            Location as idealista writes it in its URLs: a municipality
            ('madrid-madrid', 'barcelona-barcelona', 'milano-milano', 'lisboa'),
            a district ('madrid/centro', 'lisboa/arroios') or a province
            ('malaga-provincia'). Required unless url is given.
        - name: country
          in: query
          required: false
          schema:
            type: string
            description: es, it, pt (idealista.com / .it / .pt).
            default: es
            title: Country
          description: es, it, pt (idealista.com / .it / .pt).
        - name: operation
          in: query
          required: false
          schema:
            type: string
            description: sale or rent.
            default: sale
            title: Operation
          description: sale or rent.
        - name: property_type
          in: query
          required: false
          schema:
            type: string
            description: >-
              One of: homes, new_homes, offices, premises, garages, lands,
              storage, buildings, rooms.
            default: homes
            title: Property Type
          description: >-
            One of: homes, new_homes, offices, premises, garages, lands,
            storage, buildings, rooms.
        - name: min_price
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: Minimum price in EUR (monthly rent with operation=rent).
            title: Min Price
          description: Minimum price in EUR (monthly rent with operation=rent).
        - name: max_price
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: Maximum price in EUR.
            title: Max Price
          description: Maximum price in EUR.
        - name: min_size
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: Minimum area in m².
            title: Min Size
          description: Minimum area in m².
        - name: max_size
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: Maximum area in m².
            title: Max Size
          description: Maximum area in m².
        - name: rooms
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Comma-separated room counts: bedrooms in Spain (0 = studio ... 4 =
              four or more) and Portugal (T0 ... T4+), total rooms in Italy (1
              ... 5 = five or more). E.g. '2,3'.
            title: Rooms
          description: >-
            Comma-separated room counts: bedrooms in Spain (0 = studio ... 4 =
            four or more) and Portugal (T0 ... T4+), total rooms in Italy (1 ...
            5 = five or more). E.g. '2,3'.
        - name: bathrooms
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Comma-separated 1, 2, 3 (3 = three or more).
            title: Bathrooms
          description: Comma-separated 1, 2, 3 (3 = three or more).
        - name: features
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Comma-separated: lift, terrace, balcony, garage, pool, garden,
              air_conditioning, storage_room, fitted_wardrobes, accessible,
              luxury, new_construction, good_condition, to_renovate.
            title: Features
          description: >-
            Comma-separated: lift, terrace, balcony, garage, pool, garden,
            air_conditioning, storage_room, fitted_wardrobes, accessible,
            luxury, new_construction, good_condition, to_renovate.
        - name: sort
          in: query
          required: false
          schema:
            type: string
            description: >-
              One of: relevance, price_asc, price_desc, newest, oldest,
              size_asc, size_desc, price_per_m2_asc, price_per_m2_desc,
              biggest_drop.
            default: relevance
            title: Sort
          description: >-
            One of: relevance, price_asc, price_desc, newest, oldest, size_asc,
            size_desc, price_per_m2_asc, price_per_m2_desc, biggest_drop.
        - name: page
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: >-
              1-based results page to start from (30 listings per page, at most
              60). Use the `nextPage` of a previous response to continue.
            title: Page
          description: >-
            1-based results page to start from (30 listings per page, at most
            60). Use the `nextPage` of a previous response to continue.
        - name: max_results
          in: query
          required: false
          schema:
            type: integer
            description: >-
              How many listings to collect across pages (1-300); each page
              fetched is one billed unit.
            default: 30
            title: Max Results
          description: >-
            How many listings to collect across pages (1-300); each page fetched
            is one billed unit.
        - name: proxy_country
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Proxy country the request is sent from (ISO-2). Leave blank for
              the exit chosen for the site.
            title: Proxy Country
          description: >-
            Proxy country the request is sent from (ISO-2). Leave blank for the
            exit chosen for the site.
      responses:
        '200':
          description: JSON with a `listings` array, `totalResults` and `nextPage`.
          content:
            application/json:
              schema: {}
        '400':
          description: Invalid parameters.
        '404':
          description: idealista has no such search (unknown location or URL).
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '502':
          description: >-
            Blocked by idealista on every attempt, no results page returned, or
            idealista did not answer in time.
      security:
        - ScrapeUnblockerKey: []
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ScrapeUnblockerKey:
      type: apiKey
      in: header
      name: x-scrapeunblocker-key
      description: Your ScrapeUnblocker API key. Apply on every request.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.