{
  "openapi": "3.0.1",
  "info": {
    "title": "ImmoScout24.ch Scraper — Switzerland Property Listings",
    "description": "Scrape immoscout24.ch, Switzerland's largest property portal. Rent and buy listings with CHF net and gross rent, rooms, m2, GPS, photos and the advertising agency.",
    "version": "1.0",
    "x-build-id": "PgwPycgQIPN9jJzGC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~immoscout24-ch-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-immoscout24-ch-property-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/sian.agency~immoscout24-ch-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-immoscout24-ch-property-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/sian.agency~immoscout24-ch-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-immoscout24-ch-property-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": {
          "operation": {
            "title": "🎯 What do you want to scrape?",
            "enum": [
              "search",
              "detail"
            ],
            "type": "string",
            "description": "Search Swiss listings by location and filters, or read one listing's full record including the advertising agency and the federal building-register IDs.",
            "default": "search"
          },
          "locations": {
            "title": "📍 Locations",
            "type": "array",
            "description": "Where to search in Switzerland. Give city or municipality names (Zürich, Genf, Basel, Bern, Lausanne, Lugano), 4-digit postcodes (8001, 1204, 4051), canton names (Kanton Zürich, Kanton Waadt) or `Liechtenstein`. German spelling is what the portal indexes, so Zürich and Genf both work; a full immoscout24.ch search URL pasted from your browser works too, in any of the four languages. Each entry is resolved against the portal's own location index, so a wrong name comes back as a clear message…",
            "default": [
              "Zürich"
            ],
            "items": {
              "type": "string"
            }
          },
          "listingUrls": {
            "title": "🔗 Listing URLs or IDs",
            "type": "array",
            "description": "Only for the Listing Detail operation. Paste immoscout24.ch listing URLs (https://www.immoscout24.ch/mieten/4002086141 or https://www.immoscout24.ch/de/d/wohnung-mieten-zuerich/4002086141) or the bare listing IDs. Ignored by the Property Search operation, which takes locations instead.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "transactionType": {
            "title": "🤝 Rent or buy",
            "enum": [
              "rent",
              "buy"
            ],
            "type": "string",
            "description": "Rentals carry a monthly gross rent and, where the advertiser published the split, the net rent and the Nebenkosten on top. Sales carry an asking price; Swiss advertisers often publish a sale 'on request', which comes back as an empty price rather than a made-up number.",
            "default": "rent"
          },
          "propertyCategory": {
            "title": "🏠 Property category",
            "enum": [
              "all",
              "apartment",
              "house"
            ],
            "type": "string",
            "description": "Which section of the portal to search. 'Everything residential' is the widest net and is what most market studies want; the other two map to the portal's own apartment and house sections.",
            "default": "all"
          },
          "maxResults": {
            "title": "🔢 Max listings",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Stop after this many listings across every location in the run. One request returns 20 listings, so a run finishes at the first request that crosses your limit. The portal itself stops paging at page 50, so a single location yields at most 1,000 listings — split a big search by postcode or price band to go past that.",
            "default": 60
          },
          "descriptionLanguage": {
            "title": "🗣️ Description language",
            "enum": [
              "original",
              "de",
              "fr",
              "it",
              "en"
            ],
            "type": "string",
            "description": "Swiss advertisers write in German, French or Italian, and the portal machine-translates most listings into the other three. Pick a language and every row carries that version where it exists, falling back to the original otherwise; `descriptionIsMachineTranslated` tells you which you got. This changes only the description and title text — the listings that match, and every other field, are identical in all four languages.",
            "default": "original"
          },
          "includeDetails": {
            "title": "📄 Add agency and building-register details",
            "type": "boolean",
            "description": "Open each listing's own page to add the advertising agency's legal name, postal address, website and profile, the move-in date, the advertiser's reference number and the Swiss federal building and property register IDs (EGID and EGRID) that let you join a listing to cadastral and energy records. Costs one extra request per listing and bills the Listing Detail event on top of the listing row, so nobody pays for detail they did not ask for.",
            "default": false
          },
          "minPrice": {
            "title": "💵 Min price (CHF)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price to include, in Swiss francs. 0 means no lower bound. For rentals this is the monthly gross rent.",
            "default": 0
          },
          "maxPrice": {
            "title": "💰 Max price (CHF)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price to include, in Swiss francs. 0 means no upper bound. Pairing this with a minimum is also how you split a search that would otherwise hit the portal's 1,000-listing paging ceiling.",
            "default": 0
          },
          "minRooms": {
            "title": "🚪 Min rooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Only listings with at least this many rooms. Swiss room counts are halves (2.5, 3.5, 4.5) and the portal rounds this filter to the nearest half itself. 0 means no minimum.",
            "default": 0
          },
          "maxRooms": {
            "title": "🚪 Max rooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Only listings with at most this many rooms. 0 means no maximum.",
            "default": 0
          },
          "minLivingSpace": {
            "title": "📐 Min living space (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum Wohnfläche in square metres. 0 means no minimum.",
            "default": 0
          },
          "maxLivingSpace": {
            "title": "📐 Max living space (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum Wohnfläche in square metres. 0 means no maximum.",
            "default": 0
          },
          "petsAllowed": {
            "title": "🐾 Pets allowed only",
            "type": "boolean",
            "description": "Restrict to listings the advertiser has marked as allowing animals. Swiss rental adverts state this explicitly, which is why it is a filter here rather than a keyword search.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}