{
  "openapi": "3.0.1",
  "info": {
    "title": "Willhaben.at Scraper: Real Estate, Cars, Marketplace & Jobs",
    "description": "Austria's Willhaben.at in one actor: real estate (rent/sale), vehicles (cars, motorcycles, vans, caravans), the Marktplatz (13M+ items, keyword search) and job ads with salary and company data. Province filters, built-in delta mode.",
    "version": "0.1",
    "x-build-id": "REu41hRLdtayzMqbL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/artsiom_k~willhaben-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-artsiom_k-willhaben-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/artsiom_k~willhaben-scraper/runs": {
      "post": {
        "operationId": "runs-sync-artsiom_k-willhaben-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/artsiom_k~willhaben-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-artsiom_k-willhaben-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": [
          "category"
        ],
        "properties": {
          "category": {
            "title": "Category",
            "enum": [
              "apartment_rent",
              "apartment_sale",
              "house_rent",
              "house_sale",
              "land",
              "commercial_rent",
              "commercial_sale",
              "auto",
              "motorrad",
              "nutzfahrzeuge",
              "wohnwagen_wohnmobile",
              "marktplatz",
              "jobs"
            ],
            "type": "string",
            "description": "Which Willhaben.at search to scrape: a real-estate category (apartments, houses, land, commercial), a vehicle category (cars, motorcycles, commercial vehicles, caravans & motorhomes), the Marktplatz (new and second-hand goods) or Jobs.",
            "default": "apartment_rent"
          },
          "keyword": {
            "title": "Keyword (Marketplace & Jobs)",
            "type": "string",
            "description": "Marketplace: a search term, as in Willhaben's own search box (e.g. \"iphone 15\"). Jobs: words that must appear in the job title (e.g. \"buchhalter\"). Ignored for real estate and vehicles. Leave empty for everything."
          },
          "marketplaceCategory": {
            "title": "Marketplace category",
            "enum": [
              "all",
              "antiquitaeten-kunst",
              "baby-kind",
              "beauty-gesundheit-wellness",
              "boote-yachten-jetskis",
              "buecher-filme-musik",
              "computer-software",
              "dienstleistungen",
              "freizeit-instrumente-kulinarik",
              "games-konsolen",
              "haus-garten-werkstatt",
              "kameras-tv-multimedia",
              "kfz-zubehoer-motorradteile",
              "mode-accessoires",
              "smartphones-telefonie",
              "spielen-spielzeug",
              "sport-sportgeraete",
              "tiere-tierbedarf",
              "uhren-schmuck",
              "wohnen-haushalt-gastronomie"
            ],
            "type": "string",
            "description": "Marketplace only: limit the search to one top-level Willhaben Marktplatz category.",
            "default": "all"
          },
          "includeDetails": {
            "title": "Full descriptions (Marketplace)",
            "type": "boolean",
            "description": "Marketplace only: also open each listing page to get the full description instead of the ~300-character snippet from the search results. Slower: one extra request per listing. Jobs always include the full description and company details.",
            "default": false
          },
          "region": {
            "title": "Region",
            "enum": [
              "all",
              "wien",
              "niederoesterreich",
              "oberoesterreich",
              "steiermark",
              "tirol",
              "kaernten",
              "salzburg",
              "vorarlberg",
              "burgenland"
            ],
            "type": "string",
            "description": "Restrict the search to one Austrian province, or scrape the whole country. For jobs, a province works only together with a keyword (a job matches if one of its locations is in the province). Note: changing this between runs starts a fresh incremental-mode baseline.",
            "default": "all"
          },
          "rows": {
            "title": "Rows per page",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many listings Willhaben returns per search page (real estate, vehicles, marketplace).",
            "default": 200
          },
          "maxPages": {
            "title": "Max pages",
            "type": "integer",
            "description": "Safety cap on the number of search pages fetched. Leave empty to paginate to completion. Note: a capped run cannot detect delisted listings and does not update the incremental-mode baseline."
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after pushing this many dataset items. Defaults to 50 — a fast, cheap preview, and what keeps an unconfigured run within Apify's automated 5-minute QA check. Raise it or clear it (set to null) for a full run.",
            "default": 50
          },
          "delaySeconds": {
            "title": "Delay between page requests (seconds)",
            "minimum": 0,
            "type": "number",
            "description": "Politeness delay between consecutive search-page requests (real estate, vehicles, marketplace).",
            "default": 3.5
          },
          "maxConcurrency": {
            "title": "Parallel page requests (Marketplace details & Jobs)",
            "minimum": 1,
            "maximum": 32,
            "type": "integer",
            "description": "How many listing or job pages are fetched at the same time (each through its own residential IP).",
            "default": 16
          },
          "impersonate": {
            "title": "TLS impersonation target",
            "type": "string",
            "description": "Optional curl_cffi browser TLS-impersonation target (e.g. \"chrome124\"), used if Willhaben starts blocking plain requests. Leave empty for plain requests."
          },
          "mode": {
            "title": "Incremental mode",
            "enum": [
              "auto",
              "full",
              "incremental"
            ],
            "type": "string",
            "description": "\"auto\" (recommended): full scan on the first run for a given category/area, incremental (new/changed only) afterwards. \"full\": always push every listing and refresh the baseline — schedule this periodically to catch delistings. \"incremental\": always push only new/changed listings.",
            "default": "auto"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy configuration for Willhaben's search API (real estate, vehicles, marketplace search). Confirmed by testing: Willhaben returns HTTP 403 to Apify's default (shared datacenter) proxy pool, while a direct connection from the Actor's own container works fine. Leave this off unless you start seeing blocks. Job pages and marketplace listing pages (Full descriptions) always go through Apify's Residential proxy, whatever is set here.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}