{
  "openapi": "3.0.1",
  "info": {
    "title": "Idealista Scraper: Real Estate Price History & Removed Listings",
    "description": "Idealista listings with their history, an idealista API for real estate data in Spain, Italy and Portugal: first seen, days on market, price history and the day idealista removed each listing. Rental and sale searches by URL or place name, details and photos, listing watch. No login.",
    "version": "0.1",
    "x-build-id": "YNQzpOQKb1mGxf9ZP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/moxlade~idealista-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-moxlade-idealista-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/moxlade~idealista-scraper/runs": {
      "post": {
        "operationId": "runs-sync-moxlade-idealista-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/moxlade~idealista-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-moxlade-idealista-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "idealista search pages, one per line, on idealista.com, idealista.it or idealista.pt: the place, the operation, the property type, the filters and the sort as idealista's own search page shows them (e.g. `https://www.idealista.com/alquiler-viviendas/barcelona-barcelona/?ordenado-por=fecha-publicacion-desc`). Every page of the search is read up to `maxItems`. A listing link in this list is read as a watched listing.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Place name or postal code",
            "maxLength": 80,
            "type": "string",
            "description": "A place as you would type it into idealista's search box (`Barcelona`, `Sitges`, `08001`, `Milano`, `Lisboa`), resolved by idealista's own suggestions to its first match; with `country`, `operation` and `propertyType` below. Empty when you give search URLs."
          },
          "country": {
            "title": "Market",
            "enum": [
              "es",
              "it",
              "pt"
            ],
            "type": "string",
            "description": "The market of `location`, and of a bare listing id in `listingUrls`. A search or listing URL carries its own host.",
            "default": "es"
          },
          "operation": {
            "title": "Operation",
            "enum": [
              "rent",
              "sale"
            ],
            "type": "string",
            "description": "With `location`: rent or sale. A search URL carries its own operation.",
            "default": "rent"
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "homes",
              "rooms"
            ],
            "type": "string",
            "description": "With `location`: homes or rooms. Every other type idealista lists (offices, garages, land, premises, new developments) is read from its search URL.",
            "default": "homes"
          },
          "listingUrls": {
            "title": "Listing URLs or ids to watch",
            "type": "array",
            "description": "Listing pages (`https://www.idealista.com/inmueble/112816892/`, the .it `/immobile/` and .pt `/imovel/` forms) or bare ids (read on `country`'s host), one per line. Each is read live: a live listing comes back with every detail field; a removed one comes back with status `removed` and the date idealista shows.",
            "items": {
              "type": "string"
            }
          },
          "removedSince": {
            "title": "Removed since (gone mode)",
            "pattern": "^([0-9]{4}-[0-9]{2}-[0-9]{2})?$",
            "type": "string",
            "description": "Gone mode: with search URLs, return the listings of those areas that went away on or after this day (YYYY-MM-DD), each with idealista's own removal date, the last asking price and the days it was listed — instead of the live listings. The list comes from the corpus's sweeps of the area: an area never swept before has nothing to report yet."
          },
          "removedUntil": {
            "title": "Removed until",
            "pattern": "^([0-9]{4}-[0-9]{2}-[0-9]{2})?$",
            "type": "string",
            "description": "Gone mode: the end of the window (YYYY-MM-DD, inclusive). Empty = today."
          },
          "includeDetails": {
            "title": "Read each listing's page",
            "type": "boolean",
            "description": "Add the detail page's fields to every search row: the full description, every photo with its room tag, the floor plans, the feature lists, bathrooms, furnished / terrace / parking / air conditioning / pool flags, the energy letters, the coordinates, the reference, the day idealista last updated the listing, and the agency's phone (agency listings only). One extra page per listing; a watched listing always has them.",
            "default": false
          },
          "descriptionLanguage": {
            "title": "Description language",
            "enum": [
              "en",
              "es",
              "ca",
              "it",
              "pt",
              "fr",
              "de",
              "nl",
              "da",
              "fi",
              "no",
              "pl",
              "ro",
              "ru",
              "sv",
              "el",
              "zh",
              "uk"
            ],
            "type": "string",
            "description": "With includeDetails (and on watched listings): add the description translated into this language, as idealista's own language switch on the listing page serves it (`description_translated`, `description_language`). Empty = the original text only."
          },
          "maxAgeHours": {
            "title": "Answer from the corpus when younger than (hours)",
            "minimum": 0,
            "maximum": 720,
            "type": "integer",
            "description": "A search is answered from the corpus (our stored copy of the area, shared by every run) when the area's last complete sweep is younger than this many hours; otherwise idealista is read live and the corpus updated. 0 = always read live. Every row says which path answered (`read_from`) and when the listing was read (`read_at`).",
            "default": 24
          },
          "maxItems": {
            "title": "Maximum charged rows",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "Stop after this many charged rows across every search and watched listing (free rows do not count). 0 = no cap: the whole search to its last page.",
            "default": 100
          },
          "onlyNew": {
            "title": "Only listings no earlier run delivered",
            "type": "boolean",
            "description": "With a saved task on a schedule: deliver only the listings no earlier run of the same memory delivered (a listing delivered before is skipped, never re-delivered or re-charged). The memory is named by `stateStoreName`, or derived from the search URLs.",
            "default": false
          },
          "stateStoreName": {
            "title": "Memory name",
            "pattern": "^[A-Za-z0-9._-]{0,80}$",
            "type": "string",
            "description": "A name for the memory `onlyNew` uses, so the same saved task finds it run after run. Optional: without it the name is derived from the search URLs."
          },
          "proxyUrl": {
            "title": "Your own proxy (optional)",
            "type": "string",
            "description": "Optional. Your own residential proxy as `scheme://user:pass@host:port`, used in front of the Actor's own exits. It must pin one IP for the run (a sticky session) and be in the market's country: idealista's cookie is bound to the exit that minted it."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}