{
  "openapi": "3.0.1",
  "info": {
    "title": "willhaben Jobs Scraper - Salary & Company VAT ID",
    "description": "Scrape willhaben.at jobs (Austria) as an API: salary parsed into numbers, employment type, position, remote work, full description plus company VAT ID (UID), industry and size for B2B leads. Only new jobs mode for daily job alerts. Duplicates are free.",
    "version": "0.1",
    "x-build-id": "vAn2OiTA0qf9EcGiF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/aidnurs~willhaben-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-aidnurs-willhaben-jobs-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-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-aidnurs-willhaben-jobs-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-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-aidnurs-willhaben-jobs-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": {
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "What to search for, e.g. job title or skill (\"Data Engineer\", \"Buchhaltung\"). Leave empty for all jobs."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City or district in Austria, e.g. \"Wien\", \"Graz\", \"Linz\". Leave empty for all locations."
          },
          "regions": {
            "title": "Federal states",
            "type": "array",
            "description": "Limit to one or more federal states (Bundesländer). Leave empty for all of Austria (plus the few DE/CH jobs willhaben lists).",
            "items": {
              "type": "string",
              "enum": [
                "Wien",
                "Niederösterreich",
                "Oberösterreich",
                "Steiermark",
                "Tirol",
                "Salzburg",
                "Kärnten",
                "Vorarlberg",
                "Burgenland",
                "Deutschland",
                "Schweiz"
              ]
            }
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of jobs to save. You only pay for jobs saved to the dataset.",
            "default": 50
          },
          "includeDetails": {
            "title": "Include full job description",
            "type": "boolean",
            "description": "Open every job page to add the full description, company VAT ID, industry, size and address, remote work flag, language skills, apply link and expiry date.",
            "default": true
          },
          "includePersonalData": {
            "title": "Include personal data",
            "type": "boolean",
            "description": "Off by default: phone numbers and personal e-mails inside job texts are masked ([phone removed], [email removed]; role mailboxes like jobs@ or office@ stay), and contact-person names, direct phones and e-mails are not saved.<br><br>Turn it on to get everything the site shows publicly, including the contact person's name, phone and e-mail where the employer published them.<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
          },
          "jobFields": {
            "title": "Job fields",
            "type": "array",
            "description": "Filter by professional field (Berufsfeld/Bereich).",
            "items": {
              "type": "string",
              "enum": [
                "Assistenz / Sekretariat / Sachbearbeitung",
                "Aus- und Weiterbildung / Pädagogik / Forschung",
                "Beratung / Consulting / Recht",
                "Einkauf / Logistik / Transport",
                "Facilitymanagement / Sicherheit / Reinigung",
                "Finanzen / Rechnungswesen / Controlling",
                "Gastgewerbe / Tourismus / Freizeit / Hilfskräfte",
                "Handwerk / Gewerbliche Berufe",
                "IT / EDV",
                "Management / Geschäftsführung",
                "Marketing / Medien / PR / Grafik / Kultur",
                "Öffentlicher Dienst",
                "Personalwesen / HR",
                "Pflege / Soziales / Gesundheit",
                "Produktion / Fertigung",
                "Technische Berufe / Engineering / Architektur",
                "Vertrieb / Handel"
              ]
            }
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Filter by employment type (Vollzeit, Teilzeit, ...).",
            "items": {
              "type": "string",
              "enum": [
                "Vollzeit",
                "Teilzeit",
                "Freiberuflich",
                "Geringfügig"
              ]
            }
          },
          "positions": {
            "title": "Position level",
            "type": "array",
            "description": "Filter by position (staff, team lead, management, internship, ...).",
            "items": {
              "type": "string",
              "enum": [
                "Mitarbeiter:in",
                "Gruppen-/Teamleitung",
                "Leitung/Management",
                "Projektmanagement",
                "Lehre",
                "Praktikum",
                "Traineeship"
              ]
            }
          },
          "companyType": {
            "title": "Employer type",
            "enum": [
              "",
              "direct_employer",
              "agency"
            ],
            "type": "string",
            "description": "Only direct employers or only staffing agencies (Personaldienstleister).",
            "default": ""
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "",
              "last_24_hours",
              "last_72_hours",
              "last_week"
            ],
            "type": "string",
            "description": "Only jobs published recently.",
            "default": ""
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "newest",
              "relevance"
            ],
            "type": "string",
            "description": "Order of search results.",
            "default": "newest"
          },
          "startUrls": {
            "title": "Search URLs (optional)",
            "type": "array",
            "description": "Paste willhaben job-search URLs (https://www.willhaben.at/jobs/suche?...) with filters already set on the website. When given, the search fields above are ignored.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "onlyNewJobs": {
            "title": "Only new jobs since last run",
            "type": "boolean",
            "description": "Remember job IDs between runs and return only jobs you have not received yet. Ideal for scheduled runs and job alerts. Already-seen jobs are never charged.",
            "default": false
          },
          "stateKey": {
            "title": "Monitoring key",
            "type": "string",
            "description": "Name of the memory used by 'Only new jobs'. 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}