{
  "openapi": "3.0.1",
  "info": {
    "title": "Immobilienscout24 (.de|.ch|.at) Only$1.75💰 Search-Detail-Agent",
    "description": "💰$1.75 per 1,000. Extract comprehensive German real estate data: property details (rent, size, rooms, location), high-res images, agent info with verification status, pricing insights, amenities (balcony, kitchen, cellar), contact forms, market analytics, and 40+ targeting parameters for research.",
    "version": "0.0",
    "x-build-id": "nwXzGuloOhGkeQsA3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~immobilienscout24-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-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/memo23~immobilienscout24-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-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/memo23~immobilienscout24-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-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",
        "required": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "URLs to scrape. **Germany:** search (`.../Suche/...`), expose (`.../expose/{id}`), **makler profile** (`.../anbieter/profil/{slug}`) — loads **residential BUY then RENT** listings via the agency API and merges `clientFields` + full mobile expose JSON. If the profile HTML is blocked, add `?realtorEncryptedId=...` (opaque id from `.../anbieter/contact/{slug}/{id}`, often ~32 chars). **Austria:** `immobilienscout24.at/regional/...`. Mix `.de` / `.at` in one run.",
            "items": {
              "type": "string"
            }
          },
          "monitoringMode": {
            "title": "Run in monitoring mode where only newly listings compared to previous runs will be scraped",
            "type": "boolean",
            "description": "If checked, it will only scrape newly listings compared to what has been scraped in previous runs.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time.",
            "default": 10
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 100
          },
          "excludeSections": {
            "title": "Exclude the `sections` block",
            "type": "boolean",
            "description": "Drop the per-listing `sections` array from each dataset row. This is the largest part of the payload (~70% of DE rows). The key data inside it — finance costs, image captions, available-from, fair-price rating — is already lifted into `normalized` (financeCosts, media[].caption, availableFrom, fairPrice). Turn this on to dramatically shrink output if you only consume the `normalized` block + a few `basicInfo` fields.",
            "default": false
          },
          "excludeZipCodeShapes": {
            "title": "Exclude `zipCodeShapes` (map polygons)",
            "type": "boolean",
            "description": "Drop just the `zipCodeShapes` polygon coordinates inside sections (typically 4-5 KB per listing of map polygon geometry you don't need unless you're rendering maps). Independent of `excludeSections` — surgical strip that keeps the rest of sections.",
            "default": false
          },
          "excludeTracking": {
            "title": "Exclude the `tracking` block",
            "type": "boolean",
            "description": "Drop the per-listing `tracking` object. Small (~500 B) but rarely useful to downstream consumers.",
            "default": false
          },
          "allowApproximateCoords": {
            "title": "Allow approximate (cluster-center) coordinates",
            "type": "boolean",
            "description": "OFF by default. With this off, `address.latitude/longitude` are filled only when ImmoScout returned a per-listing point (precise) — cluster-center coords (shared across many listings, off by hundreds of metres) are left null. Every coord-bearing row gets an `address.coordinatePrecision` tag ('exact' / 'approximate' / null) so downstream code can filter. Turning this ON fills in the cluster-center coords too, still flagged as 'approximate'.",
            "default": false
          },
          "geocodeAddresses": {
            "title": "Geocode decoded addresses for rooftop coordinates",
            "type": "boolean",
            "description": "OFF by default. When ON, listings whose street + house number we decoded (from `obj_telekomInternetUrlAddition` or the free-text description scan) but lack a per-listing coordinate are geocoded via the configured provider. Rooftop or street-level hits land in `address.latitude/longitude` with `coordinatePrecision: 'rooftop' | 'street'` and `coordinateSource: 'geocoder-photon' | 'geocoder-mapbox' | 'geocoder-google'`. City/locality-level hits are rejected as too coarse. Two-layer cache (in-memory + Apify KV `geocoder-cache`) keeps repeat addresses from re-hitting the provider.",
            "default": false
          },
          "geocoderProvider": {
            "title": "Geocoder provider",
            "enum": [
              "photon",
              "mapbox",
              "google"
            ],
            "type": "string",
            "description": "Which geocoder to use when `geocodeAddresses: true`. **Photon** (default, free, no key needed — Komoot's OSM-based service, ~10 req/sec). **MapBox** ($0.50 / 1k, higher rate, set `geocoderApiKey` to your `pk.…` token). **Google** ($5 / 1k, set `geocoderApiKey` to your Maps API key).",
            "default": "photon"
          },
          "geocoderApiKey": {
            "title": "Geocoder API key",
            "type": "string",
            "description": "API key for `geocoderProvider: 'mapbox'` or `'google'`. Ignored when using Photon. Stored in the run as a plaintext input — for production use Apify's input secrets feature."
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}