{
  "openapi": "3.0.1",
  "info": {
    "title": "Arbeitsagentur Jobs Scraper - German Federal Jobbörse",
    "description": "Scrape the German Federal Employment Agency Jobbörse: ~929,000 live vacancies with employer, PLZ/city, pay, contract type, start date and a per-job Zeitarbeit (Arbeitnehmerüberlassung) flag no rival exposes. Auto-splits past the site's 10,000-row query ceiling. No login, no API key.",
    "version": "0.1",
    "x-build-id": "zr7RvKUhqcuP4ns45"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~arbeitsagentur-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-arbeitsagentur-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/scrapersdelight~arbeitsagentur-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-arbeitsagentur-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/scrapersdelight~arbeitsagentur-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-arbeitsagentur-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": {
          "searchTerms": {
            "title": "Search terms (was)",
            "type": "array",
            "description": "Free-text job titles or keywords, exactly as you would type them into the Jobbörse search box (<code>was=</code>). Each term is crawled separately and the results are merged and de-duplicated. Leave empty to crawl the whole corpus for the selected offer types.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Paste Jobbörse URLs",
            "type": "array",
            "description": "Build the search you want on arbeitsagentur.de and paste the URL here. Every query parameter is honoured verbatim, including filters this schema does not expose. A <code>/jobsuche/jobdetail/&lt;referenznummer&gt;</code> link is fetched as a single job.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "locations": {
            "title": "Locations (wo)",
            "type": "array",
            "description": "City, postal code, or federal state (<code>wo=</code>). Six state names collide with same-named towns — use the disambiguating form <code>Hessen (Bundesland)</code>, <code>Sachsen (Bundesland)</code>, <code>Brandenburg (Bundesland)</code>, <code>Bremen (Bundesland)</code>, <code>Berlin (Bundesland)</code>, <code>Hamburg (Bundesland)</code> when you mean the state.",
            "items": {
              "type": "string"
            }
          },
          "radiusKm": {
            "title": "Search radius in km (umkreis)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Radius around each location. The site accepts only 0, 5, 10, 25, 50, 100 and 200 — any other number is rounded down to the nearest allowed value. Ignored when no location is set.",
            "default": 25
          },
          "offerTypes": {
            "title": "Offer types (angebotsart)",
            "uniqueItems": true,
            "type": "array",
            "description": "Which kinds of vacancy to crawl. Measured corpus sizes on 2026-09-04: Arbeit 743,291 · Ausbildung & duales Studium 169,995 · Praktikum & Trainee 14,481 · Selbständigkeit 3,184. One request is issued per type — the site's semicolon multi-value is unreliable for this parameter.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "4",
                "34",
                "2"
              ],
              "enumTitles": [
                "Arbeit — regular jobs (1)",
                "Ausbildung & duales Studium (4)",
                "Praktikum & Trainee (34)",
                "Selbständigkeit (2)"
              ]
            },
            "default": [
              "1"
            ]
          },
          "publishedWithinDays": {
            "title": "Published within (veroeffentlichtseit)",
            "enum": [
              "",
              "0",
              "1",
              "7",
              "14",
              "28"
            ],
            "type": "string",
            "description": "Only vacancies first published within this window. The site honours ONLY these values — any other number is silently ignored and returns the unfiltered set. This is the filter that turns the actor into a daily new-vacancy feed.",
            "default": ""
          },
          "workingTimes": {
            "title": "Working time (arbeitszeit)",
            "uniqueItems": true,
            "type": "array",
            "description": "Working-time filters, combined as a union (the site joins them with a semicolon — verified live: vz 1,348 + tz 1,029 → vz;tz 1,408).",
            "items": {
              "type": "string",
              "enum": [
                "vz",
                "tz",
                "ho",
                "mj",
                "snw"
              ],
              "enumTitles": [
                "Vollzeit — full time (vz)",
                "Teilzeit — part time (tz)",
                "Home Office / Telearbeit (ho)",
                "Minijob / geringfügig (mj)",
                "Schicht, Nacht, Wochenende (snw)"
              ]
            },
            "default": []
          },
          "contractType": {
            "title": "Contract type (befristung)",
            "enum": [
              "any",
              "befristet",
              "unbefristet"
            ],
            "type": "string",
            "description": "Fixed-term or permanent. Note the site expects the numeric codes 1 and 2 — the words BEFRISTET / UNBEFRISTET return zero rows, and this actor sends the codes for you.",
            "default": "any"
          },
          "occupationFields": {
            "title": "Occupation fields (berufsfeld)",
            "type": "array",
            "description": "Exact German Berufsfeld strings, e.g. <code>Krankenpflege, Rettungsdienst und Geburtshilfe</code> or <code>Softwareentwicklung und Programmierung</code>. Only the exact vocabulary the site uses filters — you can read the valid values for any search from its own facet list on the Jobbörse results page.",
            "items": {
              "type": "string"
            }
          },
          "occupations": {
            "title": "Occupations (beruf)",
            "type": "array",
            "description": "Exact normalised BA occupation titles, e.g. <code>Pflegefachmann/-frau (Gesundheits- und Krankenpflege)</code>. Narrower than an occupation field.",
            "items": {
              "type": "string"
            }
          },
          "employerName": {
            "title": "Employer name (arbeitgeber)",
            "type": "string",
            "description": "EXACT registered company name — this filter is not fuzzy. <code>Vivantes Netzwerk für Gesundheit GmbH</code> returns 320 rows; <code>Charité</code> returns 0."
          },
          "temporaryStaffing": {
            "title": "Zeitarbeit / Arbeitnehmerüberlassung",
            "enum": [
              "any",
              "exclude",
              "only"
            ],
            "type": "string",
            "description": "Whether temp-staffing agency postings are included. <b>Exclude</b> uses the site's own <code>zeitarbeit</code> filter (measured: 1,581 → 813 rows, and every dropped row sampled was flagged istArbeitnehmerUeberlassung=true). <b>Only</b> returns the complement — the agency postings themselves — by crawling both sets and taking the difference, which costs roughly twice the requests. Turn on \"Fetch job details\" with either setting to have every row verified against the official flag.",
            "default": "any"
          },
          "includePrivatePlacement": {
            "title": "Include private placement agencies (pav)",
            "type": "boolean",
            "description": "Private Arbeitsvermittlung offers are EXCLUDED by the site by default; switching this on ADDS them (measured 1,521 → 1,717 rows).",
            "default": false
          },
          "disabilityFriendly": {
            "title": "Suitable for people with disabilities (behinderung)",
            "type": "boolean",
            "description": "Only postings flagged as suitable for applicants with a disability. A narrow filter — it cut one 1,521-row search to 1.",
            "default": false
          },
          "sortBy": {
            "title": "Sort order (sort)",
            "enum": [
              "relevanz",
              "veroeffdatum",
              "entfernung"
            ],
            "type": "string",
            "description": "Result ordering. Only these three change anything — every other value falls back to relevance.",
            "default": "relevanz"
          },
          "maxItems": {
            "title": "Max jobs to return",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on billed rows across the whole run — your spend guard rail. Set 0 for unlimited.",
            "default": 50
          },
          "fetchJobDetails": {
            "title": "Fetch job details",
            "type": "boolean",
            "description": "One extra request per job to its detail page, adding the full job-ad text, the employer's street address, the Zeitarbeit and private-placement flags, the required education level and the syndicating partner job board. Billed as a second event.",
            "default": false
          },
          "maxDetailFetches": {
            "title": "Max detail fetches",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on detail-page requests, so enrichment cannot outrun your budget. 0 = enrich every returned job.",
            "default": 0
          },
          "autoSlice": {
            "title": "Auto-split queries over 10,000 hits",
            "type": "boolean",
            "description": "The site's search backend refuses to page past 10,000 rows for ANY single query (page 400 is the last one that returns data). With this on, a bigger query is split automatically — by federal state, then publication window, then Berufsfeld / Beruf, then contract type and working time — and the pieces are merged and de-duplicated. Without it, a big search silently stops at 10,000.",
            "default": true
          },
          "maxPagesPerQuery": {
            "title": "Max pages per query",
            "minimum": 1,
            "maximum": 400,
            "type": "integer",
            "description": "25 jobs per page; 400 pages is the site's own hard ceiling and the maximum accepted here.",
            "default": 400
          },
          "flattenLocation": {
            "title": "Flat location columns",
            "type": "boolean",
            "description": "Emit plz / ort / region / land / strasse / latitude / longitude as flat columns instead of the nested stellenlokationen array, so the rows import straight into a CRM or spreadsheet.",
            "default": true
          },
          "translateFieldNames": {
            "title": "Add English field aliases",
            "type": "boolean",
            "description": "Add English-named copies of every field (jobTitle, employer, city, postalCode, publishedAt, isTemporaryStaffing …) alongside the original German keys.",
            "default": true
          },
          "includeRawJson": {
            "title": "Include the raw source objects",
            "type": "boolean",
            "description": "Attach the untouched ergebnisliste (and jobdetail) objects under <code>raw</code>, for any field this actor does not map.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify datacenter proxies are enough — measured over 200+ calls with no CAPTCHA, no Cloudflare and no rate limiting. Switch to RESIDENTIAL with country DE only if you see failures.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrent requests",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "Kept deliberately low — this is a public federal service. Measured latency: 3.6 s median, 12.5 s p90.",
            "default": 5
          },
          "maxRequestRetries": {
            "title": "Max retries per request",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "About 5% of responses come back HTTP 200 with an empty page state. Those are retried, never treated as \"no results\" — leave at least 3 here.",
            "default": 3
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}