{
  "openapi": "3.0.1",
  "info": {
    "title": "Immowelt Scraper",
    "description": "Scrape Immowelt.de - one of Germany's largest real-estate portals. Search rental and for-sale apartments and houses by city, price, rooms, living space, and amenities, or scrape a specific Immowelt search-results URL.",
    "version": "1.0",
    "x-build-id": "LGcfr99JUhDqF6mia"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/crawlerbros~immowelt-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-crawlerbros-immowelt-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/crawlerbros~immowelt-scraper/runs": {
      "post": {
        "operationId": "runs-sync-crawlerbros-immowelt-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/crawlerbros~immowelt-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-crawlerbros-immowelt-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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "byUrl"
            ],
            "type": "string",
            "description": "How to find listings.",
            "default": "search"
          },
          "city": {
            "title": "City (mode=search)",
            "type": "string",
            "description": "German city or town name, e.g. `Berlin`, `München`, `Hamburg`, `Köln`, `Frankfurt am Main`.",
            "default": "Berlin"
          },
          "distributionType": {
            "title": "Rent or buy (mode=search)",
            "enum": [
              "mieten",
              "kaufen"
            ],
            "type": "string",
            "description": "Whether to search rental or for-sale listings.",
            "default": "mieten"
          },
          "estateType": {
            "title": "Property type (mode=search)",
            "enum": [
              "wohnung",
              "haus",
              "grundstueck",
              "wohnen_auf_zeit",
              "buero",
              "einzelhandel",
              "lager_produktion",
              "gastronomie",
              "landwirtschaft"
            ],
            "type": "string",
            "description": "Broad property category to search. 'Temporary / furnished living (Wohnen auf Zeit)' is immowelt's furnished short-/mid-term rental category (spans apartments and houses) — it is rent-only, so Rent or buy is automatically switched to 'For rent' for it. The four commercial categories (Office, Retail, Storage / production, Gastronomy & hospitality) are immowelt's business real-estate ('Gewerbeimmobilien') categories. 'Agricultural / forestry land' is a separate, low-volume category (typically a handful of listings per city, since farmland/forestry parcels are rural) for both buying and (rarely) renting land- and forestry-use plots. Property sub-type / Additional features are not applied server-side for 'Temporary / furnished living', any commercial category, or 'Agricultural / forestry land' (price/rooms/area filters still apply).",
            "default": "wohnung"
          },
          "estateSubType": {
            "title": "Property sub-type (mode=search)",
            "enum": [
              "",
              "loft",
              "maisonette",
              "penthouse",
              "terrace_apartment",
              "single_family_house",
              "semi_detached_house",
              "multi_family_house",
              "bungalow",
              "villa",
              "town_house",
              "farm_house",
              "manor_house",
              "terrace_house",
              "castle",
              "leisure_land",
              "commercial_land"
            ],
            "type": "string",
            "description": "Optional narrower property sub-type. Apartment sub-types only apply when Property type = Apartment; house sub-types only apply when Property type = House; plot sub-types only apply when Property type = Plot / land. Not applicable when Property type = Temporary / furnished living, any commercial category (Office, Retail, Storage / production, Gastronomy & hospitality), or Agricultural / forestry land.",
            "default": ""
          },
          "minPrice": {
            "title": "Min price (EUR)",
            "minimum": 0,
            "maximum": 50000000,
            "type": "integer",
            "description": "Minimum monthly cold rent (mieten) or purchase price (kaufen) in EUR."
          },
          "maxPrice": {
            "title": "Max price (EUR)",
            "minimum": 0,
            "maximum": 50000000,
            "type": "integer",
            "description": "Maximum monthly cold rent (mieten) or purchase price (kaufen) in EUR."
          },
          "minRooms": {
            "title": "Min rooms",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Only listings with at least this many rooms. Set equal to Max rooms for an exact room count."
          },
          "maxRooms": {
            "title": "Max rooms",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Only listings with at most this many rooms."
          },
          "minArea": {
            "title": "Min living space / plot size (m²)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Drop listings smaller than this, in square meters (living space for apartments/houses, usable floor area for commercial categories, plot size for Grundstück / Agricultural / forestry land — the latter can run into the millions of m² for large forest tracts)."
          },
          "maxArea": {
            "title": "Max living space / plot size (m²)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Drop listings larger than this, in square meters (living space for apartments/houses, usable floor area for commercial categories, plot size for Grundstück / Agricultural / forestry land — the latter can run into the millions of m² for large forest tracts)."
          },
          "energyClass": {
            "title": "Energy efficiency class",
            "type": "array",
            "description": "Only keep listings with one of the selected German energy efficiency classes (A+ = most efficient, H = least efficient). Applied client-side against the energy class immowelt.de publishes for each listing — not every listing discloses one, so this filter drops listings with no disclosed energy class.",
            "items": {
              "type": "string",
              "enum": [
                "A+",
                "A",
                "B",
                "C",
                "D",
                "E",
                "F",
                "G",
                "H"
              ],
              "enumTitles": [
                "A+ (most efficient)",
                "A",
                "B",
                "C",
                "D",
                "E",
                "F",
                "G",
                "H (least efficient)"
              ]
            },
            "default": []
          },
          "excludeGroundFloor": {
            "title": "Exclude ground-floor listings",
            "type": "boolean",
            "description": "Skip apartments/houses located on the ground floor. Has no effect for property types that don't disclose a floor (Plot / land, commercial categories).",
            "default": false
          },
          "features": {
            "title": "Additional features",
            "type": "array",
            "description": "Extra amenity/feature to require (only one is applied per run — see note below, and the run's status message will say when the requested feature isn't filterable for the chosen property type). Verified reliable combinations: `Balcony / terrace`, `Garden`, and `Furnished` work for Apartment and House; `Parking space` only for House; `Fitted kitchen`, `Wheelchair accessible`, `WBS required`, `Shared flat (WG)`, `Swap apartment`, `Top floor`, and `Ground floor` only for Apartment. `Cellar / basement`, `Pool`, `Private offers only`, and `Needs renovation` are not reliably filterable by immowelt.de for any property type currently. None are supported for Plot / land, Temporary / furnished living, Agricultural / forestry land, or any commercial category.",
            "items": {
              "type": "string",
              "enum": [
                "balcony_terrace",
                "garden",
                "cellar",
                "parking",
                "pool",
                "new_build",
                "private_offer_only",
                "needs_renovation",
                "fitted_kitchen",
                "furnished",
                "wheelchair_accessible",
                "wbs_required",
                "shared_flat",
                "swap_apartment",
                "top_floor",
                "ground_floor"
              ],
              "enumTitles": [
                "Balcony / terrace",
                "Garden",
                "Cellar / basement",
                "Parking space",
                "Pool",
                "New build",
                "Private offers only (no agents)",
                "Needs renovation",
                "Fitted kitchen",
                "Furnished",
                "Wheelchair accessible",
                "WBS required (subsidized housing)",
                "Shared flat (WG)",
                "Swap apartment (Tauschwohnung)",
                "Top floor",
                "Ground floor"
              ]
            },
            "default": []
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "",
              "priceAsc",
              "priceDesc",
              "areaAsc",
              "areaDesc",
              "pricePerSqmAsc",
              "pricePerSqmDesc",
              "roomsAsc",
              "roomsDesc",
              "newest"
            ],
            "type": "string",
            "description": "Re-order the returned listings. Immowelt only returns its first results page over plain HTTP, so this sorts within that page (useful when Max items is lower than the page size) rather than re-querying the whole site.",
            "default": ""
          },
          "searchUrl": {
            "title": "Search URL (mode=byUrl)",
            "type": "string",
            "description": "A full Immowelt search-results URL, e.g. `https://www.immowelt.de/suche/mieten/wohnung/berlin/berlin-10115/ad08de8634`. Build one on immowelt.de using any filter combination, then paste it here."
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "Hard cap on emitted records. Immowelt search-result pages return up to ~30-40 listings per query (varies by city/property type), so values above 40 have no additional effect.",
            "default": 20
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}