{
  "openapi": "3.0.1",
  "info": {
    "title": "ImmobilienScout24 Scraper — Germany & Austria Rents",
    "description": "Scrape ImmobilienScout24 apartments and houses for rent and sale in Germany and Austria. Get price, €/m², rooms, energy class, GPS, photos, and private vs Makler. Paste a search or expose URL. API alternative for Python, Node.js, and MCP.",
    "version": "0.1",
    "x-build-id": "xDRCQhBMxN5fdrL8Z"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/crawloop~immobilienscout24-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-crawloop-immobilienscout24-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/crawloop~immobilienscout24-scraper/runs": {
      "post": {
        "operationId": "runs-sync-crawloop-immobilienscout24-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/crawloop~immobilienscout24-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-crawloop-immobilienscout24-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": {
          "includePhones": {
            "title": "Include public advertiser phone numbers",
            "type": "boolean",
            "description": "Off by default. Enable only when you have a lawful basis to process phone numbers already present in public listing data. Contact-unlock flows are never automated.",
            "default": false
          },
          "startUrls": {
            "title": "Start URLs (search or expose)",
            "type": "array",
            "description": "Paste ImmobilienScout24.de search or expose URLs, or immobilienscout24.at /regional/ URLs. Filters in the URL are applied automatically. immoscout24.ch is not covered.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "geocodes": {
            "title": "Region (city or /de/... path)",
            "type": "string",
            "description": "Used only when Start URLs are empty. City name (Berlin, Munich, Wien, Graz, …) or a geocode path such as /de/bayern/muenchen or /at/wien/wien."
          },
          "transactionType": {
            "title": "Rent or buy",
            "enum": [
              "rent",
              "buy"
            ],
            "type": "string",
            "description": "Builder only. Rent (mieten) or buy (kaufen).",
            "default": "rent"
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "apartment",
              "house",
              "plot",
              "garage",
              "flatshare",
              "shortterm",
              "investment"
            ],
            "type": "string",
            "description": "Builder only. Apartment, house, plot, garage, flatshare, short-term, or investment. Commercial (office, retail, hall) is not available: the mobile API does not return those as listing rows.",
            "default": "apartment"
          },
          "minPrice": {
            "title": "Min price (€)",
            "type": "integer",
            "description": "Minimum monthly rent or purchase price in euros. Builder only, or ignored when the Start URL already has a price filter."
          },
          "maxPrice": {
            "title": "Max price (€)",
            "type": "integer",
            "description": "Maximum monthly rent or purchase price in euros."
          },
          "minRooms": {
            "title": "Min rooms",
            "type": "number",
            "description": "Minimum room count (Zimmer), e.g. 2."
          },
          "maxRooms": {
            "title": "Max rooms",
            "type": "number",
            "description": "Maximum room count (Zimmer), e.g. 4."
          },
          "minLivingSpace": {
            "title": "Min living space (m²)",
            "type": "integer",
            "description": "Minimum Wohnfläche in square metres."
          },
          "maxLivingSpace": {
            "title": "Max living space (m²)",
            "type": "integer",
            "description": "Maximum Wohnfläche in square metres."
          },
          "energyEfficiencyClasses": {
            "title": "Energy classes",
            "type": "string",
            "description": "Builder only. Comma-separated classes as the site sends them, for example A_PLUS,A,B. Ignored for plots and garages."
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Builder only. Value copied from an ImmobilienScout24 search URL (publishedafter), for example a date or the site's own token."
          },
          "sorting": {
            "title": "Sort",
            "type": "string",
            "description": "Builder only. Sorting value from a search URL. 2 is the site's newest-first sort."
          },
          "maxItems": {
            "title": "Max listings",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of listings to save per run.",
            "default": 50
          },
          "includeDetails": {
            "title": "Scrape full expose details",
            "type": "boolean",
            "description": "Fetch each listing's expose JSON for costs, energy certificate, description, features, agent name/company, and price-drop fields. Turn off for faster search-card output.",
            "default": true
          },
          "onlyPrivate": {
            "title": "Private sellers only (no Makler)",
            "type": "boolean",
            "description": "Keep only private-owner listings (isPrivate=true). Useful for FSBO lead generation.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor mode (new / price-changed only)",
            "type": "boolean",
            "description": "On scheduled re-runs, save only listings that are new or whose price changed. Each run reads monitorMaxPages search pages (default 2). Removed listings are saved only when those pages cover the whole result set. State is kept in a named key-value store.",
            "default": false
          },
          "monitorMaxPages": {
            "title": "Monitor pages per run",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Monitor mode only. Search pages to read each run. Default 2 keeps a scheduled tick cheap. Raise it only for a small result set when you want removed listings.",
            "default": 2
          },
          "maxConcurrency": {
            "title": "Max concurrent detail requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many expose requests to run in parallel. Default 8.",
            "default": 8
          },
          "monitorStateStore": {
            "title": "Monitor state store",
            "type": "string",
            "description": "Named key-value store for monitor mode. Default is24-monitor. Use a different name to keep two watches apart."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy. RESIDENTIAL with country DE is the supported setup. The same German mobile API serves Germany and Austria.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "DE"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}