{
  "openapi": "3.0.1",
  "info": {
    "title": "Arbeitsagentur Jobs: German Job Board Search by City & Radius",
    "description": "Job ads from Germany's federal employment agency board as rows: reference, title, occupation, employer, city, postcode, region, coordinates, start date, publication and update dates, ad URL. Filter by occupation, place and radius, home office, part time, apprenticeships, publication window.",
    "version": "0.1",
    "x-build-id": "mBhOLTT0Cu1WKxs3i"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yadroo~arbeitsagentur-jobs/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yadroo-arbeitsagentur-jobs",
        "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/yadroo~arbeitsagentur-jobs/runs": {
      "post": {
        "operationId": "runs-sync-yadroo-arbeitsagentur-jobs",
        "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/yadroo~arbeitsagentur-jobs/run-sync": {
      "post": {
        "operationId": "run-sync-yadroo-arbeitsagentur-jobs",
        "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": {
          "what": {
            "title": "Occupation or job title",
            "type": "string",
            "description": "What to look for, handed to the job board's own search exactly as you type it: an occupation (`Krankenpfleger`, `Berufskraftfahrer`, `Softwareentwickler`), a job title or a free term. The board matches it against the ad title, the occupation it is filed under and the ad text, so a German word finds far more than its English equivalent. No correction is applied here - the board decides what matches. Leave it empty to get every ad the other filters allow, which is how a run becomes a location feed."
          },
          "referenceNumbers": {
            "title": "Exact reference numbers",
            "maxItems": 50,
            "type": "array",
            "description": "Look up named ads instead of searching: one board reference number per line, as it stands in the ad URL (`10001-1003891446-S`). Surrounding spaces are ignored and a full ad URL is reduced to its reference number. Use it to re-check a shortlist: an ad the board no longer serves - filled, withdrawn or expired - comes back as one row with `found: false`, which is the cheapest way to see which of your saved ads are still open. The filters below are not applied to these rows.",
            "items": {
              "type": "string"
            }
          },
          "where": {
            "title": "Place",
            "type": "string",
            "description": "City, district, postcode or federal state the search is centred on (`Hamburg`, `München`, `10115`, `Nordrhein-Westfalen`). The board resolves the place itself and measures the radius from it, so write it as Germans write it. An ASCII spelling of an umlaut is tried in its German writing as well (`Muenchen` is read as `München`) and the spelling that was actually used is named in the run status; any other place the board does not know stops the run with a clear message instead of a wider search. Leave it empty to search all of Germany, in which case the radius is ignored."
          },
          "radiusKm": {
            "title": "Radius around the place (km)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "How far around the place to look, in kilometres. Any whole number from 0 to 200 is passed to the board as it stands - 0 keeps the place itself, 25 is the usual commute. A radius pulls in the whole commuting area: 25 km around Hamburg also returns Norderstedt and Pinneberg, so judge the location per row with `city` and `distanceKm`, not by the place you typed. Ignored when no place is given.",
            "default": 25
          },
          "offerType": {
            "title": "Kind of position",
            "enum": [
              "job",
              "training",
              "internship",
              "selfEmployment"
            ],
            "type": "string",
            "description": "One run reads one kind of position, because the board files them in separate categories with different ad structures. `training` is the German Ausbildung market - thousands of apprenticeship places that never appear in an ordinary job search. Every row repeats what was asked for in `offerType`. The platform refuses any other value before the run starts.",
            "default": "job"
          },
          "workingTime": {
            "title": "Working time",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only ads carrying at least one of these working-time marks; several of them widen the result, they do not narrow it. `homeOffice` is the board's own remote mark, set by the employer, and it means remote work is possible, not that the job is fully remote. Empty = every working time. The platform refuses a value outside the list before the run starts.",
            "items": {
              "type": "string",
              "enum": [
                "fullTime",
                "partTime",
                "homeOffice",
                "shiftNightWeekend",
                "miniJob"
              ],
              "enumTitles": [
                "Full time (Vollzeit)",
                "Part time (Teilzeit)",
                "Home office possible (Homeoffice)",
                "Shift, night or weekend work",
                "Mini job (marginal employment)"
              ]
            }
          },
          "contractType": {
            "title": "Contract",
            "enum": [
              "any",
              "permanent",
              "temporary"
            ],
            "type": "string",
            "description": "Filters on the contract mark the employer set. Many ads leave it unset and disappear from the result as soon as you choose anything but `any`, so start with `any` and narrow only when the contract really decides.",
            "default": "any"
          },
          "employer": {
            "title": "Employer name",
            "type": "string",
            "description": "Keep only ads of one employer. The board matches this against the employer name as it stands in its ads, in full: `Da Vinci Engineering GmbH` works, `Da Vinci` returns nothing. Copy the name from the `employer` column of an earlier run. Watch one employer by putting its name here and leaving the occupation empty."
          },
          "includeTempAgencies": {
            "title": "Include temporary staffing agencies",
            "type": "boolean",
            "description": "Off: ads placed by Zeitarbeit firms are excluded, which is what sourcing for a direct employer needs - in shortage occupations such agencies place a large share of all ads and repeat them often. On (default): everything the board has.",
            "default": true
          },
          "includePrivateRecruiters": {
            "title": "Include private placement agencies",
            "type": "boolean",
            "description": "Off: ads placed by private recruiters on behalf of an unnamed client are excluded. Together with the switch above this is the \"direct employers only\" setting.",
            "default": true
          },
          "publishedWithinDays": {
            "title": "Published in the last N days",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep only ads first published within this many days (`1` = today and yesterday, `7` = the last week, `30` = the last month). This is the field a schedule needs: the window moves with every run, so the task text never changes. It uses the first publication date, not the last edit, so an ad that was only touched up does not reappear."
          },
          "onlyNew": {
            "title": "Only ads this input has not returned before",
            "type": "boolean",
            "description": "Remember the reference numbers and update timestamps this run writes, and on the next run of the same actor or task write only ads that are new or that the employer has changed since - a watch list that reports openings instead of repeating the whole result. The first run writes everything. The memory belongs to the actor or task, so two tasks watching two cities never mix.",
            "default": false
          },
          "includeDescription": {
            "title": "Add the advert text (one extra request per row)",
            "type": "boolean",
            "description": "On: every row is completed from the ad's own record, adding `description` (the advert text as the employer wrote it) and `employerAddress`. That is one request per row on top of the search requests, so a 50-row run makes about 51 requests and takes roughly twice as long at the polite pace. Off (default) keeps runs short and writes only the structured facts. Contact persons, telephone numbers and e-mail addresses in those records are never written to the dataset, in any setting.",
            "default": false
          },
          "sort": {
            "title": "Sort by",
            "enum": [
              "newest",
              "relevance",
              "startDate",
              "distance"
            ],
            "type": "string",
            "description": "The order the board answers in, and therefore which ads the row cap keeps. `newest` is the default here because it makes a repeated run a feed. `relevance` is the board's own ranking and shifts through the day. `distance` needs a place. The platform refuses any other value before the run starts.",
            "default": "newest"
          },
          "maxItems": {
            "title": "Maximum rows",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Hard cap on the rows this run writes, and so on what it costs. The board serves up to 100 ads per request, so 50 rows is one request and 1,000 rows ten. A search with more hits than the cap is cut by the order you chose; the run status names the total the board reported, so you can see what you did not fetch. The run also stops at the maximum cost per run you set on the platform and says so in its status.",
            "default": 50
          },
          "fields": {
            "title": "Only these columns",
            "type": "array",
            "description": "Keep only the named columns, in this order - for example `title, employer, city, publishedAt`. Empty = every column. `refnr`, `title`, `found`, `url` and `fetchedAt` are always written; name one of them here and it moves to the position you gave it. An unknown name is reported in the run status rather than silently ignored.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}