{
  "openapi": "3.0.1",
  "info": {
    "title": "willhaben Immobilien Scraper - Austria Real Estate",
    "description": "Scrape willhaben.at real estate (Austria): apartments, houses, land, commercial for rent or sale. Price, €/m², area, rooms, district, agency, photos; optional operating costs, energy certificate, year built. Only-new mode, duplicates free, private sellers protected.",
    "version": "0.1",
    "x-build-id": "WSygz3B7QILjEgras"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/aidnurs~willhaben-immo-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-aidnurs-willhaben-immo-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/aidnurs~willhaben-immo-scraper/runs": {
      "post": {
        "operationId": "runs-sync-aidnurs-willhaben-immo-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/aidnurs~willhaben-immo-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-aidnurs-willhaben-immo-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": {
          "propertyType": {
            "title": "Property type",
            "enum": [
              "rent-apartment",
              "buy-apartment",
              "rent-house",
              "buy-house",
              "land",
              "rent-commercial",
              "buy-commercial",
              "rent-holiday",
              "buy-holiday",
              "new-build-project",
              "other"
            ],
            "type": "string",
            "description": "What to search for. Ignored when Search URLs are given.",
            "default": "rent-apartment"
          },
          "state": {
            "title": "Federal state",
            "enum": [
              "",
              "wien",
              "niederoesterreich",
              "oberoesterreich",
              "steiermark",
              "tirol",
              "salzburg",
              "kaernten",
              "vorarlberg",
              "burgenland"
            ],
            "type": "string",
            "description": "Bundesland. Leave empty for all of Austria.",
            "default": ""
          },
          "districts": {
            "title": "Districts (Bezirke)",
            "type": "array",
            "description": "Optional. One or more districts: a name (\"Neubau\", \"Graz-Umgebung\", \"Mödling\", \"St. Pölten\"), a Vienna postcode or district number (\"1070\", \"10\"), any other 4-digit postcode (\"8010\", filtered by postcode), or a willhaben areaId (\"117229\"). Ambiguous names (\"Land\") are rejected with a hint. Leave empty for the whole federal state.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Optional. Words that must appear in the title or the first lines of the description. Commas mean OR, spaces mean AND, a minus excludes: \"balkon, terrasse\", \"altbau lift\", \"-befristet\". Umlauts work either way (Küche = kueche)."
          },
          "priceMin": {
            "title": "Min price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Monthly rent for rentals, purchase price for sales."
          },
          "priceMax": {
            "title": "Max price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Monthly rent for rentals, purchase price for sales. With a price filter the Actor sorts by price and stops early, so it stays fast and cheap."
          },
          "areaMin": {
            "title": "Min area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Living area; usable area or plot area when there is no living area."
          },
          "areaMax": {
            "title": "Max area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Living area; usable area or plot area when there is no living area."
          },
          "roomsMin": {
            "title": "Min rooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of rooms."
          },
          "sellerType": {
            "title": "Seller",
            "enum": [
              "all",
              "private",
              "agency"
            ],
            "type": "string",
            "description": "Private sellers, real estate agencies (incl. developers) or both.",
            "default": "all"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "newest",
              "priceAsc",
              "priceDesc",
              "areaAsc",
              "areaDesc"
            ],
            "type": "string",
            "description": "Order of results. Newest first is used automatically for 'Only new listings'.",
            "default": "newest"
          },
          "maxItems": {
            "title": "Max listings",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of listings to save. You only pay for listings saved to the dataset.",
            "default": 500
          },
          "includeDetails": {
            "title": "Include details",
            "type": "boolean",
            "description": "Open every listing to add the full description, operating costs (Betriebskosten), deposit, commission, energy certificate (HWB, fGEE), year built, heating, condition, availability, features and the agency's website and address. Charged as an extra event per listing; about 10× slower.",
            "default": false
          },
          "includePersonalData": {
            "title": "Include personal data",
            "type": "boolean",
            "description": "Off by default: for private sellers the output has no name, no phone, no street and no profile ID, house numbers in their texts are masked, and their coordinates are rounded to about 1 km. Phone numbers and personal e-mails inside descriptions are masked ([phone removed], [email removed]; role mailboxes like office@ stay). Agency contact persons and phones are not saved.<br><br>Turn it on to get everything the site shows publicly: the contact name and phone of private sellers and agency brokers (contact fields need 'Include details'), the street, exact coordinates and unmasked descriptions.<br><br>⚠️ This returns personal data. You're responsible for having a legal basis to collect and use it under privacy laws (e.g. GDPR).",
            "default": false
          },
          "startUrls": {
            "title": "Search URLs (optional)",
            "type": "array",
            "description": "Paste willhaben real estate search URLs straight from your browser (https://www.willhaben.at/iad/immobilien/...). When given, the search fields above are ignored, but Keywords and the filters still apply. Filters that willhaben's robots.txt does not allow crawlers to send (price, area, keyword, private/agency, property sub-type, features, last 48 hours) are removed from the request and applied by the Actor itself. A URL with a filter the Actor cannot apply is skipped with an error.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "onlyNew": {
            "title": "Only new listings since last run",
            "type": "boolean",
            "description": "Remember listing IDs between runs and return only listings you have not received yet. Ideal for scheduled runs and alerts. Already-seen listings are never charged; the run stops as soon as it reaches listings older than the previous run.",
            "default": false
          },
          "stateKey": {
            "title": "Monitoring key",
            "type": "string",
            "description": "Name of the memory used by 'Only new listings'. Use a different key for each saved search.",
            "default": "default"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave as is. The Actor runs without a proxy and switches to an Austrian residential proxy by itself if willhaben rate-limits it, at no extra cost to you. Only custom proxy URLs (your own proxies) are used from this field.",
            "default": {
              "useApifyProxy": 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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}