{
  "openapi": "3.0.1",
  "info": {
    "title": "Immowelt Scraper: Rents, Prices and Energy Data",
    "description": "Scrape Immowelt property ads in Germany and Austria by town, postal code, radius or filters, or paste search links, no login. Rows carry cold and warm rent or price, price per m2, living space, rooms, floor, energy class, place, photos and the agency's phones. Monitor new ads and price changes.",
    "version": "0.1",
    "x-build-id": "WQbXz9VWDGOT8JHkj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~immowelt-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-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/automation_craft~immowelt-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-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/automation_craft~immowelt-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-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",
        "properties": {
          "country": {
            "title": "Country",
            "enum": [
              "de",
              "at"
            ],
            "type": "string",
            "description": "Which Immowelt site to read: Germany (immowelt.de, the default) or Austria (immowelt.at). Places, links and ad links of the other country are refused with a free row."
          },
          "places": {
            "title": "Places",
            "type": "array",
            "description": "Cities, towns, districts, quarters, counties, states or postal codes, as you would type them on Immowelt: Berlin, Hamburg, Prenzlauer Berg, Landkreis München, Bayern, 10115 (Austria: Wien, Linz, 1010). A name must match exactly one Immowelt place (add the postal code when several share it: Neustadt 67433); a name that matches none or several gives a free row with the candidates. An Austrian postal code is searched as the towns that list it, each ad checked on its own postal code. Immowelt place codes (AD08DE8634) are accepted too.",
            "items": {
              "type": "string"
            }
          },
          "radiusKm": {
            "title": "Radius around each place (km)",
            "minimum": 1,
            "maximum": 100,
            "type": "number",
            "description": "Search a circle of this many km around the centre of each place instead of the place itself (Immowelt's own radius search, 1 to 100 km in steps of 0.5). A place given by its code is refused with this option (its centre is not known); give it by name."
          },
          "searchAreas": {
            "title": "Search areas (circles or polygons)",
            "type": "array",
            "description": "Your own areas, one search each: a circle {\"lat\": 52.52, \"lng\": 13.41, \"radiusKm\": 3} or a polygon {\"polygon\": [[52.50, 13.30], [52.50, 13.50], [52.60, 13.40]]} (3 to 200 [lat, lng] corners). Up to 20 areas, inside Germany or Austria."
          },
          "transaction": {
            "title": "Rent, buy or auctions",
            "enum": [
              "rent",
              "buy",
              "foreclosure",
              "auction"
            ],
            "type": "string",
            "description": "Ads for rent, for sale, foreclosure auctions or other auctions. Default rent."
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Default apartment and house.",
            "items": {
              "type": "string",
              "enum": [
                "apartment",
                "house",
                "plot",
                "parking",
                "office",
                "retail",
                "hotel_restaurant",
                "warehouse",
                "agricultural",
                "building",
                "other",
                "senior"
              ],
              "enumTitles": [
                "Apartment (Wohnung)",
                "House (Haus)",
                "Plot (Grundstück)",
                "Parking or garage",
                "Office (Büro, Praxis)",
                "Retail (Laden, Einzelhandel)",
                "Hotel or restaurant (Gastronomie)",
                "Warehouse or production (Halle, Produktion)",
                "Agriculture or forestry",
                "Investment building (Rendite)",
                "Other",
                "Senior living (Wohnen im Alter)"
              ]
            }
          },
          "propertySubTypes": {
            "title": "Property sub types",
            "type": "array",
            "description": "Only these sub types, as Immowelt names them (penthouse, loft, maisonette types, single_family_house, terrace_house, villa, studio, flatsharing_room ...). Checked again on every row that shows its sub type.",
            "items": {
              "type": "string",
              "enum": [
                "agriculture_company",
                "agriculture_forestry",
                "apart_hotel",
                "apartment_house",
                "assisted_living",
                "atelier",
                "barge",
                "bed_n_breakfast",
                "boat_dock",
                "boutique",
                "bungalow",
                "cafe_bar_pub",
                "campsite",
                "car_park",
                "carport",
                "castle",
                "chalet",
                "club_discotheque",
                "commercial",
                "commercial_parc",
                "commercial_villa",
                "corner_terrace_house",
                "country_cottage",
                "coworking",
                "double_garage",
                "duplex",
                "end_terrace_house",
                "farm_ranch",
                "farmhouse",
                "fields",
                "finca",
                "fishing",
                "flatsharing_room",
                "forestry",
                "garage",
                "garage_area",
                "garage_repair",
                "garden_house",
                "gardening",
                "gite",
                "holiday_park",
                "hotel",
                "house_park",
                "house_to_build",
                "house_to_build_with_plot",
                "hunting",
                "industry",
                "kiosk",
                "kot",
                "lakeside_property",
                "large_town_house",
                "leisure",
                "leisure_facility",
                "living",
                "living_and_commercial",
                "living_and_commercial_building",
                "loft",
                "loft_atelier",
                "logistics_center",
                "manor_house",
                "mansion",
                "meadow",
                "medical",
                "medical_building",
                "medical_care",
                "medical_floor",
                "mid_terrace_house",
                "mill",
                "misc_agriculture",
                "misc_storage",
                "miscellaneous",
                "mixed",
                "mixed_use_building_commercial",
                "mobile_home",
                "mountain_hut",
                "multi_family_house",
                "multi_storey",
                "office_building",
                "office_centre",
                "office_space",
                "office_storage_building",
                "open_space",
                "orchard",
                "outdoor_space",
                "outside",
                "parking_area",
                "pavilion",
                "penthouse",
                "production_hall",
                "residential_complex",
                "restaurant",
                "riding",
                "rustico",
                "sales_area",
                "semidetached_house",
                "shared_office",
                "shopping_centre",
                "showroom_space",
                "single_family_house",
                "single_office",
                "special_real_estate",
                "special_use",
                "static_caravan",
                "store",
                "street_parking",
                "structure",
                "studio",
                "terrace",
                "terrace_house",
                "town_house",
                "underground_garage",
                "underground_parking_space",
                "unfinished_attic_space",
                "villa",
                "warehouse_hall",
                "winery"
              ],
              "enumTitles": [
                "Agriculture Company",
                "Agriculture Forestry",
                "Apart Hotel",
                "Apartment House",
                "Assisted Living",
                "Atelier",
                "Barge",
                "Bed N Breakfast",
                "Boat Dock",
                "Boutique",
                "Bungalow",
                "Cafe Bar Pub",
                "Campsite",
                "Car Park",
                "Carport",
                "Castle",
                "Chalet",
                "Club Discotheque",
                "Commercial",
                "Commercial Parc",
                "Commercial Villa",
                "Corner Terrace House",
                "Country Cottage",
                "Coworking",
                "Double Garage",
                "Duplex",
                "End Terrace House",
                "Farm Ranch",
                "Farmhouse",
                "Fields",
                "Finca",
                "Fishing",
                "Flatsharing Room",
                "Forestry",
                "Garage",
                "Garage Area",
                "Garage Repair",
                "Garden House",
                "Gardening",
                "Gite",
                "Holiday Park",
                "Hotel",
                "House Park",
                "House To Build",
                "House To Build With Plot",
                "Hunting",
                "Industry",
                "Kiosk",
                "Kot",
                "Lakeside Property",
                "Large Town House",
                "Leisure",
                "Leisure Facility",
                "Living",
                "Living And Commercial",
                "Living And Commercial Building",
                "Loft",
                "Loft Atelier",
                "Logistics Center",
                "Manor House",
                "Mansion",
                "Meadow",
                "Medical",
                "Medical Building",
                "Medical Care",
                "Medical Floor",
                "Mid Terrace House",
                "Mill",
                "Misc Agriculture",
                "Misc Storage",
                "Miscellaneous",
                "Mixed",
                "Mixed Use Building Commercial",
                "Mobile Home",
                "Mountain Hut",
                "Multi Family House",
                "Multi Storey",
                "Office Building",
                "Office Centre",
                "Office Space",
                "Office Storage Building",
                "Open Space",
                "Orchard",
                "Outdoor Space",
                "Outside",
                "Parking Area",
                "Pavilion",
                "Penthouse",
                "Production Hall",
                "Residential Complex",
                "Restaurant",
                "Riding",
                "Rustico",
                "Sales Area",
                "Semidetached House",
                "Shared Office",
                "Shopping Centre",
                "Showroom Space",
                "Single Family House",
                "Single Office",
                "Special Real Estate",
                "Special Use",
                "Static Caravan",
                "Store",
                "Street Parking",
                "Structure",
                "Studio",
                "Terrace",
                "Terrace House",
                "Town House",
                "Underground Garage",
                "Underground Parking Space",
                "Unfinished Attic Space",
                "Villa",
                "Warehouse Hall",
                "Winery"
              ]
            }
          },
          "projectTypes": {
            "title": "Kinds of offer",
            "type": "array",
            "description": "Immowelt's own kinds of offer. Rent: standard, new_build, flatshare, swap, temporary. Buy: resale, new_build, investment, projected, life_annuity. Default every kind (Immowelt's own default rental search includes apartment swap ads, Tauschwohnung, which are many in some cities; leave out swap to skip them).",
            "items": {
              "type": "string",
              "enum": [
                "standard",
                "new_build",
                "flatshare",
                "swap",
                "temporary",
                "resale",
                "investment",
                "projected",
                "life_annuity"
              ],
              "enumTitles": [
                "Rent: standard rental",
                "Rent or buy: new build (Neubau)",
                "Rent: flatshare (WG)",
                "Rent: apartment swap (Tauschwohnung)",
                "Rent: temporary living (Wohnen auf Zeit)",
                "Buy: resale (Bestand)",
                "Buy: investment (Kapitalanlage)",
                "Buy: projected (in planning)",
                "Buy: life annuity (Leibrente, few ads)"
              ]
            }
          },
          "minPrice": {
            "title": "Minimum price or rent (EUR)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "The lowest purchase price, or the lowest monthly cold rent (Kaltmiete) of a rental (the warm rent with the next setting)."
          },
          "maxPrice": {
            "title": "Maximum price or rent (EUR)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "The highest purchase price, or the highest monthly cold rent (Kaltmiete) of a rental (the warm rent with the next setting)."
          },
          "rentPriceType": {
            "title": "Rent filter applies to",
            "enum": [
              "cold",
              "warm"
            ],
            "type": "string",
            "description": "Rentals with a minimum or maximum price: which rent the range applies to."
          },
          "minPricePerSqm": {
            "title": "Minimum price per m2 (EUR)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "The lowest price per square metre, checked on every row (Immowelt's own figure on a sale, else the price divided by the living space). An ad without one is left out, free."
          },
          "maxPricePerSqm": {
            "title": "Maximum price per m2 (EUR)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "The highest price per square metre, checked on every row. An ad without one is left out, free."
          },
          "minLivingSpace": {
            "title": "Minimum living space (m2)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "The smallest living space (Wohnfläche) in square metres."
          },
          "maxLivingSpace": {
            "title": "Maximum living space (m2)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "The largest living space in square metres."
          },
          "minPlotSpace": {
            "title": "Minimum plot (m2)",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "The smallest plot (Grundstück) in square metres."
          },
          "maxPlotSpace": {
            "title": "Maximum plot (m2)",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "The largest plot in square metres."
          },
          "minRooms": {
            "title": "Minimum rooms (Zimmer)",
            "minimum": 0,
            "maximum": 100,
            "type": "number",
            "description": "The fewest rooms (halves allowed: 2.5)."
          },
          "maxRooms": {
            "title": "Maximum rooms (Zimmer)",
            "minimum": 0,
            "maximum": 100,
            "type": "number",
            "description": "The most rooms (halves allowed: 3.5)."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms (Schlafzimmer)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "The fewest bedrooms. Few Immowelt ads state a bedroom count (new build units mostly), and Immowelt leaves out every ad without one: this narrows a search to a small part of its ads."
          },
          "maxBedrooms": {
            "title": "Maximum bedrooms (Schlafzimmer)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "The most bedrooms. Only ads that state a bedroom count are kept (see the minimum)."
          },
          "minYearBuilt": {
            "title": "Built in or after",
            "minimum": 1000,
            "maximum": 2100,
            "type": "integer",
            "description": "The earliest year of construction (Immowelt applies it; the year shows on rows with Listing details)."
          },
          "maxYearBuilt": {
            "title": "Built in or before",
            "minimum": 1000,
            "maximum": 2100,
            "type": "integer",
            "description": "The latest year of construction."
          },
          "minFloor": {
            "title": "Lowest floor",
            "minimum": -5,
            "maximum": 100,
            "type": "integer",
            "description": "Only apartments on this floor or higher (0 = ground floor), checked on every row; an ad that shows no floor is left out, free."
          },
          "maxFloor": {
            "title": "Highest floor",
            "minimum": -5,
            "maximum": 100,
            "type": "integer",
            "description": "Only apartments on this floor or lower, checked on every row; an ad that shows no floor is left out, free."
          },
          "energyClasses": {
            "title": "Energy classes",
            "type": "array",
            "description": "Only ads with one of these energy efficiency classes (checked on every row). With \"none\" (ads that show no class, which Immowelt cannot search) the classes are checked in code only, so more results pages are read.",
            "items": {
              "type": "string",
              "enum": [
                "a++",
                "a+",
                "a",
                "b",
                "c",
                "d",
                "e",
                "f",
                "g",
                "h",
                "none"
              ],
              "enumTitles": [
                "A++",
                "A+",
                "A",
                "B",
                "C",
                "D",
                "E",
                "F",
                "G",
                "H",
                "No energy class shown"
              ]
            }
          },
          "energySources": {
            "title": "Energy sources (with Listing details)",
            "type": "array",
            "description": "Only ads whose heating runs on one of these energy sources (Energieträger). The source shows only in the ad's full record, so this needs Listing details: the record of each candidate is read and an ad whose record names another source, or none, is left out free (its details read is not billed).",
            "items": {
              "type": "string",
              "enum": [
                "gas",
                "oil",
                "district_heating",
                "electric",
                "heat_pump",
                "solar",
                "wood",
                "pellets",
                "coal",
                "liquid_gas",
                "geothermal",
                "bioenergy",
                "wind"
              ],
              "enumTitles": [
                "Gas",
                "Oil",
                "District heating (Fernwärme)",
                "Electricity",
                "Heat pump",
                "Solar",
                "Wood",
                "Pellets",
                "Coal",
                "Liquid gas",
                "Geothermal",
                "Bioenergy",
                "Wind"
              ]
            }
          },
          "detailFeatures": {
            "title": "Features of the full ad (with Listing details)",
            "type": "array",
            "description": "Only ads whose full record shows every one of these features. Immowelt's search has no filter for them, so this needs Listing details: the record of each candidate is read and an ad whose record does not show the feature is left out free (its details read is not billed).",
            "items": {
              "type": "string",
              "enum": [
                "rented",
                "heritage_depreciation",
                "fully_developed",
                "partly_developed",
                "undeveloped",
                "flat_share_possible"
              ],
              "enumTitles": [
                "Rented out (vermietet)",
                "Listed building tax relief (Denkmalschutz-AfA)",
                "Plot fully developed (voll erschlossen)",
                "Plot partly developed (teilerschlossen)",
                "Plot undeveloped (unerschlossen)",
                "Suitable for a flat share (WG-geeignet)"
              ]
            }
          },
          "excludeDetailFeatures": {
            "title": "Leave out features of the full ad (with Listing details)",
            "type": "array",
            "description": "Leave out ads whose full record shows any of these features (no rented out flats, for instance). Needs Listing details; an ad left out is free (its details read is not billed), an ad whose record does not show the feature is kept.",
            "items": {
              "type": "string",
              "enum": [
                "rented",
                "heritage_depreciation",
                "fully_developed",
                "partly_developed",
                "undeveloped",
                "flat_share_possible"
              ],
              "enumTitles": [
                "Rented out (vermietet)",
                "Listed building tax relief (Denkmalschutz-AfA)",
                "Plot fully developed (voll erschlossen)",
                "Plot partly developed (teilerschlossen)",
                "Plot undeveloped (unerschlossen)",
                "Suitable for a flat share (WG-geeignet)"
              ]
            }
          },
          "features": {
            "title": "Features (must have)",
            "type": "array",
            "description": "Only ads with every one of these features.",
            "items": {
              "type": "string",
              "enum": [
                "balcony_terrace",
                "garden",
                "cellar",
                "elevator",
                "fitted_kitchen",
                "parking_garage",
                "bathtub",
                "bathroom_window",
                "air_conditioning",
                "pets_allowed",
                "step_free_access",
                "vacant",
                "commission_free",
                "swimming_pool",
                "assisted_living",
                "exclusive"
              ],
              "enumTitles": [
                "Balcony or terrace",
                "Garden",
                "Cellar",
                "Elevator",
                "Fitted kitchen (Einbauküche)",
                "Parking or garage",
                "Bathtub",
                "Bathroom with window",
                "Air conditioning",
                "Pets allowed",
                "Step free access (barrierefrei)",
                "Vacant",
                "Commission free (provisionsfrei)",
                "Swimming pool",
                "Assisted living",
                "Exclusive"
              ]
            }
          },
          "excludeFeatures": {
            "title": "Features to leave out",
            "type": "array",
            "description": "Leave out ads with any of these features (no swimming pool ads, no assisted living). The search narrowed to each feature is listed first and its ads are left out (not billed as rows); each results page of that list (up to 200 ads) is billed as a Results page. A narrowed search above 10,000 ads refuses that search with a free row.",
            "items": {
              "type": "string",
              "enum": [
                "balcony_terrace",
                "garden",
                "cellar",
                "elevator",
                "fitted_kitchen",
                "parking_garage",
                "bathtub",
                "bathroom_window",
                "air_conditioning",
                "pets_allowed",
                "step_free_access",
                "vacant",
                "commission_free",
                "swimming_pool",
                "assisted_living",
                "exclusive"
              ],
              "enumTitles": [
                "Balcony or terrace",
                "Garden",
                "Cellar",
                "Elevator",
                "Fitted kitchen (Einbauküche)",
                "Parking or garage",
                "Bathtub",
                "Bathroom with window",
                "Air conditioning",
                "Pets allowed",
                "Step free access (barrierefrei)",
                "Vacant",
                "Commission free (provisionsfrei)",
                "Swimming pool",
                "Assisted living",
                "Exclusive"
              ]
            }
          },
          "heatingTypes": {
            "title": "Heating",
            "type": "array",
            "description": "Only ads with one of these heating types.",
            "items": {
              "type": "string",
              "enum": [
                "central",
                "storey",
                "underfloor",
                "heat_pump",
                "solar_power",
                "solar_heat",
                "photovoltaic_panels",
                "thermic_panels"
              ],
              "enumTitles": [
                "Central",
                "Storey (Etagenheizung)",
                "Underfloor",
                "Heat pump",
                "Solar power",
                "Solar heat",
                "Photovoltaic panels",
                "Thermal panels"
              ]
            }
          },
          "floors": {
            "title": "Only these positions",
            "type": "array",
            "description": "Only apartments on these positions in the building.",
            "items": {
              "type": "string",
              "enum": [
                "ground_floor",
                "top_floor",
                "basement"
              ],
              "enumTitles": [
                "Ground floor (Erdgeschoss)",
                "Top floor (Dachgeschoss)",
                "Basement (Souterrain)"
              ]
            }
          },
          "excludeFloors": {
            "title": "Leave out these positions",
            "type": "array",
            "description": "Leave out apartments on these positions (no ground floor flats).",
            "items": {
              "type": "string",
              "enum": [
                "ground_floor",
                "top_floor",
                "basement"
              ],
              "enumTitles": [
                "Ground floor (no Erdgeschoss)",
                "Top floor",
                "Basement"
              ]
            }
          },
          "furnished": {
            "title": "Furnished (rentals)",
            "enum": [
              "any",
              "furnished",
              "partly_furnished",
              "furnished_or_partly",
              "unfurnished"
            ],
            "type": "string",
            "description": "Rentals only."
          },
          "availableBefore": {
            "title": "Available before (rentals)",
            "type": "string",
            "description": "Rentals available on or before this date (YYYY-MM-DD)."
          },
          "availableBeforeIncludeUndated": {
            "title": "Also rentals without a date",
            "type": "boolean",
            "description": "With Available before: also rentals that state no availability date (Immowelt's own loose mode)."
          },
          "sellerType": {
            "title": "Seller",
            "enum": [
              "any",
              "private",
              "professional"
            ],
            "type": "string",
            "description": "Private sellers or professionals only (checked on every row)."
          },
          "conditions": {
            "title": "Condition",
            "type": "array",
            "description": "Only ads in one of these conditions, as Immowelt records them.",
            "items": {
              "type": "string",
              "enum": [
                "first_time_use",
                "first_time_use_after_refurbishment",
                "mint_condition",
                "fully_renovated",
                "partly_renovated",
                "refurbished",
                "modernised",
                "restructured",
                "well_kept",
                "needs_renovation",
                "ripe_for_demolition",
                "projected",
                "negotiable"
              ],
              "enumTitles": [
                "First time use (Erstbezug)",
                "First use after refurbishment",
                "Mint condition",
                "Fully renovated",
                "Partly renovated",
                "Refurbished (saniert)",
                "Modernised",
                "Restructured",
                "Well kept (gepflegt)",
                "Needs renovation",
                "Ripe for demolition",
                "Projected",
                "Negotiable"
              ]
            }
          },
          "wbs": {
            "title": "WBS (rentals)",
            "enum": [
              "any",
              "required",
              "not_required"
            ],
            "type": "string",
            "description": "Rentals that need a housing entitlement certificate (WBS), or those that do not."
          },
          "saleWithGoodwill": {
            "title": "Business sale with goodwill (sales)",
            "enum": [
              "any",
              "only",
              "exclude"
            ],
            "type": "string",
            "description": "Sales of commercial property: only those Immowelt marks as a business sale with goodwill, or none of them."
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Words Immowelt looks for in the ad text (Balkon, Altbau, Garten). Up to 10, each up to 60 characters.",
            "items": {
              "type": "string"
            }
          },
          "keywordsMatch": {
            "title": "Keywords must match",
            "enum": [
              "all",
              "any"
            ],
            "type": "string",
            "description": "With several keywords: all of them (default), or any of them (each place or area is then searched once per keyword, an ad found twice delivered once)."
          },
          "excludeKeywords": {
            "title": "Keywords to leave out",
            "type": "array",
            "description": "Leave out ads whose text holds any of these words, judged by Immowelt's own text search (the same as Keywords): the search narrowed to each word is listed first and its ads are left out (not billed as rows); each results page of that list (up to 200 ads) is billed as a Results page. Up to 10.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Only ads first published in the last N days. The search is read newest first and stops once a page's newest ad is well older than that."
          },
          "postedWithinHours": {
            "title": "Posted within (hours)",
            "minimum": 1,
            "maximum": 8760,
            "type": "integer",
            "description": "Only ads first published in the last N hours (instead of days). Not with a monitor, which reads every ad updated since its last run."
          },
          "minDaysOnMarket": {
            "title": "On the market for at least (days)",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Only ads first published at least N days ago. Each row also carries daysOnMarket."
          },
          "withPhoneOnly": {
            "title": "With a phone number only",
            "type": "boolean",
            "description": "Only ads whose card shows a phone number."
          },
          "withPhotosOnly": {
            "title": "With photos only",
            "type": "boolean",
            "description": "Only ads that show at least one photo."
          },
          "excludeAdIds": {
            "title": "Ads to leave out",
            "type": "array",
            "description": "Immowelt ad ids, older ids (UUIDs) or links you already have; they are skipped, free. Up to 10,000.",
            "items": {
              "type": "string"
            }
          },
          "excludeDatasetIds": {
            "title": "Datasets of ads to leave out",
            "type": "array",
            "description": "Ids of your Apify datasets (an earlier run of this Actor, or any dataset whose rows carry an Immowelt ad id, older id or link in \"id\", \"legacyId\" or \"url\"): their ads are skipped, free. Up to 10 datasets and 200,000 ads; a dataset that cannot be read stops the run before any paid work. Only the datasets picked here are readable to the run (limited permissions)."
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "newest",
              "oldest",
              "relevance",
              "price_low",
              "price_high",
              "price_per_sqm_low",
              "price_per_sqm_high",
              "living_space_low",
              "living_space_high",
              "rooms_low",
              "rooms_high"
            ],
            "type": "string",
            "description": "The order of a search. Newest first sorts on the ad's last update; oldest first reads a search of up to 10,000 ads from its last page back (Immowelt has no such order of its own), a larger one in price order. Past the first 10,000 ads of one order the search goes on in price order. A pasted link keeps its own order unless you set one here. Default newest first."
          },
          "maxItems": {
            "title": "Maximum rows",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "The most paid rows the run delivers (ad rows, price change and removed rows, agency rows together). Default 100."
          },
          "maxItemsPerSearch": {
            "title": "Maximum rows per search",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "The most rows one search, link or agency delivers."
          },
          "maxPagesPerSearch": {
            "title": "Maximum results pages per search",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "The most results pages (up to 200 ads each) one search reads, the pages that list the ads to leave out included."
          },
          "searchUrls": {
            "title": "Immowelt search links",
            "type": "array",
            "description": "Search links copied from Immowelt: a filtered search (https://www.immowelt.de/classified-search?...) or a search page without filters (https://www.immowelt.de/suche/mieten/wohnung/...). Every page is read. A link that carries a parameter Immowelt's search does not know, a page above 1, or filters in a /suche/ address (Immowelt ignores them there) is refused with a free row. Immonet links are refused: Immonet was folded into Immowelt on 2026-01-23.",
            "items": {
              "type": "string"
            }
          },
          "adUrls": {
            "title": "Ad links, ids or new build projects",
            "type": "array",
            "description": "Ads to read directly: Immowelt ad links (expose, wl-cdp), 12 character ids, older ids (UUIDs), or new build project links (https://www.immowelt.de/projekte/expose/...), whose units are delivered as ads. An ad Immowelt no longer has is a free row. Up to 5,000.",
            "items": {
              "type": "string"
            }
          },
          "agencyUrls": {
            "title": "Agency links",
            "type": "array",
            "description": "Agency pages on Immowelt (https://www.immowelt.de/profil/<id>) or their ids. Each gives one agency row and, with the switch below, the agency's ads.",
            "items": {
              "type": "string"
            }
          },
          "includeAgencyListings": {
            "title": "Also deliver the agency's ads",
            "type": "boolean",
            "description": "For each agency link, also deliver the ads its page lists (its default list, usually its sale ads; the coverage row gives the agency's counts). Default on."
          },
          "agencyDirectory": {
            "title": "Agency directory towns",
            "type": "array",
            "description": "Towns whose real estate agencies you want (Berlin, Frankfurt am Main) or Immowelt directory links (https://www.immowelt.de/makler/berlin). Every agency of the town's directory page gives one agency row (Agency profile), in the page's order.",
            "items": {
              "type": "string"
            }
          },
          "includeDetails": {
            "title": "Listing details",
            "type": "boolean",
            "description": "Read each delivered ad's full record: the whole description in its sections and the area description, GPS position (of the address when published, else the centre of the area Immowelt shows), deposit, service charges, heating and operating costs, purchase price, buyer commission and purchase costs, the energy certificate (type, validity, class and value), heating and energy source, year built, condition, last modernisation, every feature, floor plans and videos. Billed as Listing details per row."
          },
          "includeAgencyProfiles": {
            "title": "Agency profiles on ad rows",
            "type": "boolean",
            "description": "Add the agency's public profile to its ad rows: e-mail, phones, fax, website, register number and court, VAT number, description, listing counts, reviews. Read and billed once per agency per run, with its first row."
          },
          "includePersonalData": {
            "title": "Include personal data",
            "type": "boolean",
            "description": "Off by default. On: a private seller's shown name and phone numbers (privateSellerName, privateSellerPhones), an agent's own name on agency ads (contactName), the phone numbers and e-mail addresses found in the description (descriptionPhones, descriptionEmails) and an agency's legal representatives (legalRepresentative) are delivered as Immowelt shows them logged out. Off: those fields are empty, and so are their copies in rawData (the card's contact title when it names a person, a private seller's phone numbers, the record's contact block). With the switch on or off, titles, headlines, descriptions and the record's price lines are delivered as readable plain text (typographic dashes, the minus sign, the curly apostrophe and single quotes (’ ‘) and special spaces turned into plain ASCII, soft hyphens and zero width spaces and joiners removed, HTML tags and the usual HTML entities turned into text, runs of ordinary spaces and tabs collapsed to one), up to generous lengths; every other short text (the price as shown, features, an ad row's agency address, reviews) gets the same character changes without the HTML reading; an agency page's address, legal address and opening hours come as Immowelt writes them; nothing is masked; rawData keeps Immowelt's objects as served. The README's Personal data section has the details. You are responsible for using personal data lawfully (GDPR included)."
          },
          "includeRawData": {
            "title": "Include Immowelt's raw data",
            "type": "boolean",
            "description": "Add Immowelt's own card object (and the ad's record with Listing details) to each ad row as rawData. With personal data off, the person fields in it are left out (see includePersonalData). Larger rows; no extra charge."
          },
          "descriptionMaxLength": {
            "title": "Cut descriptions at (characters)",
            "minimum": 50,
            "maximum": 30000,
            "type": "integer",
            "description": "Cut the description texts of each row at this many characters (at a word, marked ...). Default the whole text."
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html",
              "markdown"
            ],
            "type": "string",
            "description": "The description is always plain text; html or markdown adds descriptionHtml or descriptionMarkdown."
          },
          "omitEmptyFields": {
            "title": "Leave out empty fields",
            "type": "boolean",
            "description": "Leave out the fields of an ad row that are empty (null, an empty text or list). The fields that identify the row are always kept."
          },
          "flattenOutput": {
            "title": "Flatten nested fields",
            "type": "boolean",
            "description": "Write nested objects as dotted keys (listingDetails.energy.energyClass), handy for spreadsheets."
          },
          "outputFields": {
            "title": "Only these fields",
            "type": "array",
            "description": "Keep only these top level fields of an ad row (price, coldRent, livingSpace, url ...); the fields that identify the row and the add-on data you pay for (listingDetails, agencyProfile) are always kept.",
            "items": {
              "type": "string"
            }
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "A short name of your choice (letters, digits, spaces and . _ , - : # ( ), up to 60 characters). One name belongs to one set of settings."
          },
          "trackChanges": {
            "title": "Track changes and removals",
            "type": "boolean",
            "description": "With a monitor: an ad it delivered before whose price (or another watched field, below) changed is delivered again with what changed, an ad Immowelt no longer serves is reported as removed and a removed ad that comes back as reappeared (all billed as Listing). Removals need every id of the searches listed each run, every results page billed."
          },
          "changeFields": {
            "title": "Changes to watch",
            "type": "array",
            "description": "With trackChanges: which changes of a known ad deliver it again (billed as Listing). A price change row carries the previous price, the change in euros and percent and the price history. Default price only.",
            "items": {
              "type": "string",
              "enum": [
                "price",
                "warm_rent",
                "living_space",
                "rooms",
                "energy_class",
                "floor",
                "description",
                "photos"
              ],
              "enumTitles": [
                "Price (or cold rent)",
                "Warm rent",
                "Living space",
                "Rooms",
                "Energy class",
                "Floor",
                "Description",
                "Photos"
              ]
            }
          },
          "includeUnchanged": {
            "title": "Also deliver unchanged ads",
            "type": "boolean",
            "description": "With trackChanges: known ads met again without a watched change are delivered too, free, marked unchanged (they never count toward the maximum). Not with Energy sources: an unchanged ad is read from its card alone, so its energy source cannot be checked."
          },
          "flagReposts": {
            "title": "Flag reposts",
            "type": "boolean",
            "description": "With trackChanges: a new ad that describes the same property as an ad this monitor reported removed (same kind, transaction, postal code, living space to the m2, rooms and published street) carries repost.repostOf with the removed ad's id and last price. Billed as a new ad."
          },
          "skipReposts": {
            "title": "Leave out reposts",
            "type": "boolean",
            "description": "With trackChanges: such a repost is left out, free (counted in the coverage row), instead of flagged."
          },
          "webhookUrl": {
            "title": "Webhook address",
            "type": "string",
            "description": "An https address the run posts its new rows to (JSON, up to 100 rows a call, at most 1,000 a run, with a plain text summary in the field \"text\")."
          },
          "webhookSecret": {
            "title": "Webhook secret",
            "type": "string",
            "description": "Optional: each call then carries an x-signature-sha256 header, the HMAC SHA-256 of the body with this secret (16 to 200 letters, digits and - _ . ~, with at least one letter and one digit)."
          },
          "webhookHeaders": {
            "title": "Webhook headers",
            "type": "object",
            "description": "Optional: up to 5 headers sent with each webhook call ({\"Authorization\": \"Bearer ...\"}), each value 8 to 500 characters; treated as secrets."
          },
          "slackWebhookUrl": {
            "title": "Slack incoming webhook",
            "type": "string",
            "description": "A Slack incoming webhook address (https://hooks.slack.com/...): the run posts its first new rows as messages, one line per ad (at most 30 lines)."
          },
          "discordWebhookUrl": {
            "title": "Discord webhook",
            "type": "string",
            "description": "A Discord channel webhook address (https://discord.com/api/webhooks/...): the run posts its first new rows as messages, one line per ad (at most 30 lines)."
          },
          "whatsappPhoneNumberId": {
            "title": "WhatsApp phone number id",
            "type": "string",
            "description": "The phone number id of your WhatsApp Business app (WhatsApp Cloud API); with the token and the recipient below, the run sends one message per new row (at most 30). WhatsApp delivers free text only inside a conversation the recipient opened in the last 24 hours."
          },
          "whatsappAccessToken": {
            "title": "WhatsApp access token",
            "type": "string",
            "description": "The access token of your WhatsApp Business app."
          },
          "whatsappTo": {
            "title": "WhatsApp recipient",
            "type": "string",
            "description": "The phone number the messages go to, in international form (+491701234567)."
          },
          "telegramBotToken": {
            "title": "Telegram bot token",
            "type": "string",
            "description": "Your own bot's token from BotFather; the run sends one message per new row (at most 30)."
          },
          "telegramChatId": {
            "title": "Telegram chat id",
            "type": "string",
            "description": "The chat id (a number) or channel name (@name) your bot posts to."
          },
          "notifyOnlyChanges": {
            "title": "Notify only changes",
            "type": "boolean",
            "description": "With trackChanges: the notifications carry only change and removed rows, not new ads."
          },
          "notificationMaxRows": {
            "title": "Rows per notification channel",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "The most rows each notification channel sends (default: 1,000 for the webhook, 30 for the chat channels)."
          },
          "failIfIncomplete": {
            "title": "Fail the run when something was not read",
            "type": "boolean",
            "description": "Mark the run failed when a search, link or agency could not be read to its end for a reason other than your own limits. The rows delivered stay."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify residential proxies are used by default and included in the price (Germany unless you choose a country). Immowelt refuses datacenter addresses, so other Apify groups are refused; your own proxy links (http://user:password@host:port, the password 12 characters or more with letters and digits, no space) can be given instead."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}