{
  "openapi": "3.0.1",
  "info": {
    "title": "Arbeitsagentur Scraper - German Jobs & Employers",
    "description": "Scrape the Arbeitsagentur Jobboerse, Germany’s federal job board with 700,000+ live positions: title, employer, address with coordinates, federal state, working-time model, contract duration, entry date and the full description. Filter by term, city, radius, offer type and more.",
    "version": "0.1",
    "x-build-id": "PaticmAKZH8biS9Yg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~arbeitsagentur-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-arbeitsagentur-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/scrapesage~arbeitsagentur-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-arbeitsagentur-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/scrapesage~arbeitsagentur-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-arbeitsagentur-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",
            "type": "array",
            "description": "What to search for, one term per line - a job title, a profession or a skill (for example <code>entwickler</code>, <code>pflegefachkraft</code>, <code>elektroniker</code>). Each term is searched separately and the results are merged and de-duplicated. Leave it empty and set a location or profession field instead to sweep everything in that area.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Jobboerse URLs (search pages or single jobs)",
            "type": "array",
            "description": "Paste Jobboerse search URLs straight from your browser and every filter already in them is kept while the actor pages through the results. Single job URLs (.../jobsuche/jobdetail/...) also work. You can type them, upload a file, or link a remote text file.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "urlsFromFile": {
            "title": "...or paste / link a file of URLs",
            "type": "string",
            "description": "A block of Jobboerse URLs, one per line - or a single link to a .txt / .csv file, a Google Sheet or a Drive file containing them. Blank lines, # comments, quotes and extra CSV columns are tolerated and duplicates are removed."
          },
          "location": {
            "title": "Location (city or postcode)",
            "type": "string",
            "description": "A German city or postcode to search around, for example <code>Berlin</code>, <code>Munchen</code> or <code>80331</code>. Combine with the radius below."
          },
          "radiusKm": {
            "title": "Search radius around that location",
            "enum": [
              "",
              "0",
              "5",
              "10",
              "15",
              "25",
              "50",
              "100",
              "200"
            ],
            "type": "string",
            "description": "How far around the location to search, in kilometres. Only applies when a location is set. These are the radii the Jobboerse itself offers.",
            "default": ""
          },
          "offerTypes": {
            "title": "Type of offer",
            "type": "array",
            "description": "What kind of position to return. The Jobboerse carries far more than salaried jobs - apprenticeships and dual study places are a large, distinct market.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "4",
                "34",
                "2"
              ],
              "enumTitles": [
                "Employment / Arbeit (1)",
                "Apprenticeship & dual study / Ausbildung (4)",
                "Internship & trainee / Praktikum (34)",
                "Self-employment / Selbstandigkeit (2)"
              ]
            },
            "default": [
              "1"
            ]
          },
          "workingTimes": {
            "title": "Working-time model",
            "type": "array",
            "description": "Filter by how the work is scheduled. <code>Home Office</code> is the Jobboerse's own remote/telework flag.",
            "items": {
              "type": "string",
              "enum": [
                "vz",
                "tz",
                "ho",
                "snw",
                "mj"
              ],
              "enumTitles": [
                "Full time / Vollzeit (vz)",
                "Part time / Teilzeit (tz)",
                "Home office / Telearbeit (ho)",
                "Shift, night or weekend (snw)",
                "Mini-job (mj)"
              ]
            }
          },
          "contractType": {
            "title": "Contract duration",
            "enum": [
              "",
              "2",
              "1"
            ],
            "type": "string",
            "description": "Fixed-term or permanent, as the employer declared it.",
            "default": ""
          },
          "publishedWithinDays": {
            "title": "Published within",
            "enum": [
              "",
              "0",
              "1",
              "3",
              "7",
              "14",
              "28"
            ],
            "type": "string",
            "description": "Only jobs first published in the last N days. These are the windows the Jobboerse itself supports, so an unsupported value cannot be sent.",
            "default": ""
          },
          "excludeTempAgencies": {
            "title": "Exclude temp / staffing agencies (Zeitarbeit)",
            "type": "boolean",
            "description": "Staffing agencies post a large share of the board. Turn this on to see only direct employers - it typically removes about a third of results.",
            "default": false
          },
          "accessibleOnly": {
            "title": "Only jobs suitable for people with disabilities",
            "type": "boolean",
            "description": "The Jobboerse flags positions explicitly open to applicants with a disability.",
            "default": false
          },
          "professionField": {
            "title": "Profession field (Berufsfeld)",
            "type": "string",
            "description": "A Jobboerse profession field to sweep, for example <code>Informatik</code>, <code>Pflege</code>, <code>Elektrotechnik</code> or <code>Softwareentwicklung und Programmierung</code>. Use it instead of a search term to cover a whole sector."
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "veroeffdatum",
              "relevanz",
              "aktualitaet",
              "eintrittsdatum"
            ],
            "type": "string",
            "description": "Newest publication is best for monitoring and lead lists; relevance is best for a targeted search.",
            "default": "veroeffdatum"
          },
          "cities": {
            "title": "Keep only these cities",
            "type": "array",
            "description": "Exact city names, applied after the search - useful when a radius pulls in neighbouring towns you do not want.",
            "items": {
              "type": "string"
            }
          },
          "postalCodePrefixes": {
            "title": "Keep only these postcode prefixes",
            "type": "array",
            "description": "One or more leading digits of a German postcode, for example <code>10</code> for Berlin or <code>80</code> for Munich.",
            "items": {
              "type": "string"
            }
          },
          "regions": {
            "title": "Keep only these federal states",
            "type": "array",
            "description": "Filter by Bundesland after the search. Every job record carries both the raw code and a readable English name.",
            "items": {
              "type": "string",
              "enum": [
                "BADEN_WUERTTEMBERG",
                "BAYERN",
                "BERLIN",
                "BRANDENBURG",
                "BREMEN",
                "HAMBURG",
                "HESSEN",
                "MECKLENBURG_VORPOMMERN",
                "NIEDERSACHSEN",
                "NORDRHEIN_WESTFALEN",
                "RHEINLAND_PFALZ",
                "SAARLAND",
                "SACHSEN",
                "SACHSEN_ANHALT",
                "SCHLESWIG_HOLSTEIN",
                "THUERINGEN"
              ],
              "enumTitles": [
                "Baden-Wurttemberg",
                "Bavaria / Bayern",
                "Berlin",
                "Brandenburg",
                "Bremen",
                "Hamburg",
                "Hesse / Hessen",
                "Mecklenburg-Vorpommern",
                "Lower Saxony / Niedersachsen",
                "North Rhine-Westphalia / Nordrhein-Westfalen",
                "Rhineland-Palatinate / Rheinland-Pfalz",
                "Saarland",
                "Saxony / Sachsen",
                "Saxony-Anhalt / Sachsen-Anhalt",
                "Schleswig-Holstein",
                "Thuringia / Thuringen"
              ]
            }
          },
          "employerQuery": {
            "title": "Employer name contains",
            "type": "string",
            "description": "Keep only jobs whose employer name contains this text (case-insensitive)."
          },
          "titleQuery": {
            "title": "Job title contains",
            "type": "string",
            "description": "Keep only jobs whose title contains this text (case-insensitive) - handy for tightening a broad profession sweep."
          },
          "excludeKeywords": {
            "title": "Exclude jobs containing",
            "type": "array",
            "description": "Drop any job whose title, employer or description contains one of these terms.",
            "items": {
              "type": "string"
            }
          },
          "maxDaysOld": {
            "title": "Maximum age in days",
            "minimum": 0,
            "type": "integer",
            "description": "Drop jobs first published more than this many days ago. Finer than the Published-within windows and can be combined with them."
          },
          "permanentOnly": {
            "title": "Only permanent contracts",
            "type": "boolean",
            "description": "Keep only jobs the employer declared unbefristet (permanent).",
            "default": false
          },
          "withCoordinatesOnly": {
            "title": "Only jobs with map coordinates",
            "type": "boolean",
            "description": "Keep only jobs that carry latitude and longitude - useful when the output feeds a map or a distance calculation.",
            "default": false
          },
          "includeDescription": {
            "title": "Fetch the full job description",
            "type": "boolean",
            "description": "On by default. The search results carry everything except the description text, so each job's own page is fetched to add the full description plus employment types, contract length, direct-apply and immediate-start flags. Costs one extra request and one extra event per job - turn it off for a fast, cheap listing-only export.",
            "default": true
          },
          "maxDescriptionRecords": {
            "title": "Maximum jobs to fetch descriptions for",
            "minimum": 0,
            "type": "integer",
            "description": "A ceiling on how many job pages are fetched, so a large sweep cannot become a large bill by accident. Jobs beyond it are still returned, just without the description.",
            "default": 200
          },
          "maxResults": {
            "title": "Maximum jobs to return",
            "minimum": 1,
            "type": "integer",
            "description": "Stops the run once this many jobs have been collected. The Jobboerse holds more than 700,000 live positions, so leave room when sweeping a whole profession field.",
            "default": 100
          },
          "monitorMode": {
            "title": "Monitor mode - only jobs new since the last run",
            "type": "boolean",
            "description": "Remembers every job already returned under this monitor key and emits only new ones, each tagged monitorEvent: \"new\". Pair it with an Apify Schedule for a clean feed of newly posted positions.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor key",
            "type": "string",
            "description": "Names the memory used by monitor mode. Use a different key per saved watch (one per city, per profession, per client) so separate monitors never share state.",
            "default": "default"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "The Jobboerse serves fine through Apify's shared datacenter proxy, which is the default. It does rate-limit bursts, so the actor paces itself; switch to residential only if the run reports refused requests.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}