Sign inTry it

Search jobs and apprenticeships in Germany's official job board.

Searches the Federal Employment Agency's job board (Jobsuche der BA), Germany's largest: title, employer, occupation, salary range when given, work location with distance, full/part time and shift flags, home office, start date, when it was published and the job link. Jobs or apprenticeships, radius, published within the last N days; recruitment agencies can be excluded.

No reports yetRead-only, no login
Site
Bundesagentur für Arbeit – Jobsuche, Germany
Version
v1
Runs, last 7 days
No reports yet
sha256
a1b8833b1e49…

Run it with your agent

after installing Wield

Ask in plain words. Your agent finds this recipe and calls it:

“Search jobs and apprenticeships in Germany's official job board.”

Read-only: it changes nothing on the site. No login needed.

{
  "tool": "run",
  "arguments": {
    "recipe_id": "arbeitsagentur.de/search-jobs",
    "params": {
      "location": "Leipzig",
      "query": "Pflegefachkraft",
      "radius_km": 25
    }
  }
}

Requests

sent from your browser, in order
  1. 1GETrest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v6/jobs?angebotsart&page&pav&size&umkreis&veroeffentlichtseit&was&woThe job board's own search API (rest.arbeitsagentur.de, the agency's API host that the Jobsuche pages call). X-API-Key 'jobboerse-jobsuche' is the public client id the site sends for every visitor (documented at bund.dev). The one-item foreach maps the offer type and the agency filter.no cookiesrepeats, max 1

Parameters

from your agent
exclude_agenciesbooleanLeave out offers from private recruitment agencies = true
locationstringCity or postcode, e.g. 'Leipzig', '10115'
pageinteger = 1
published_within_daysintegerOnly offers published in the last N days
querystringrequiredJob title, occupation or keyword, e.g. 'Pflegefachkraft', 'Elektriker', 'Data Scientist'
radius_kmenum 0 | 10 | 15 | 25 | 50 | 100 | 200 = 25
sizeenum 10 | 25 | 50 = 25
typeenum "job" | "apprenticeship" = "job"

Returns

to your agent
jobsobject[]career_changers_welcome, city, distance_km, employer, full_time, home_office, id, latitude, longitude, occupation, part_time, postcode, published, salary_from, salary_period, salary_to, shifts_nights_weekends, start, street, title, type, url
locationstring
pageinteger
querystring
totalinteger

Where it can send

  • rest.arbeitsagentur.de

Anything else is blocked by the extension.

Reads from your session

Nothing. Your browser attaches the site's cookies by itself.

Used only in requests to the addresses on the left. Never sent to wield.run or your agent.

Checks

a run passes when
  • output.total > `10`
  • length(output.jobs) > `5`
  • length(output.jobs[?starts_with(url, 'https://www.arbeitsagentur.de/jobsuche/jobdetail/')]) == length(output.jobs)
  • length(output.jobs[?employer != `null`]) > `5`
  • length(output.jobs[?latitude != `null`]) > `3`

Raw recipe

Served as canonical JSON from /api/v1/recipes/arbeitsagentur.de/search-jobs, so its sha256 matches the ETag and the index.

Check it yourself
curl -s https://wield.run/api/v1/recipes/arbeitsagentur.de/search-jobs | shasum -a 256
# a1b8833b1e4909c58ee68f8319397760fea0dedab39b6d367b3b348cde0b1d03
arbeitsagentur.de/search-jobs.json, v1
{
  "description": "Searches the Federal Employment Agency's job board (Jobsuche der BA), Germany's largest: title, employer, occupation, salary range when given, work location with distance, full/part time and shift flags, home office, start date, when it was published and the job link. Jobs or apprenticeships, radius, published within the last N days; recruitment agencies can be excluded.",
  "effect": "read",
  "id": "arbeitsagentur.de/search-jobs",
  "keywords": [
    "arbeitsagentur",
    "jobsuche",
    "jobbörse",
    "stellenangebote",
    "ausbildung",
    "ausbildungsplatz",
    "arbeit",
    "jobs",
    "stellen",
    "bundesagentur",
    "job search",
    "apprenticeship",
    "germany"
  ],
  "output": {
    "schema": {
      "properties": {
        "jobs": {
          "items": {
            "properties": {
              "career_changers_welcome": {
                "type": "boolean"
              },
              "city": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "distance_km": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "employer": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "full_time": {
                "type": "boolean"
              },
              "home_office": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "id": {
                "description": "BA reference number",
                "type": "string"
              },
              "latitude": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "longitude": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "occupation": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "part_time": {
                "type": "boolean"
              },
              "postcode": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "published": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "salary_from": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "salary_period": {
                "description": "e.g. JAHRESGEHALT, MONATSGEHALT, STUNDENLOHN",
                "type": [
                  "string",
                  "null"
                ]
              },
              "salary_to": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "shifts_nights_weekends": {
                "type": "boolean"
              },
              "start": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "street": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "type": "string"
              },
              "type": {
                "description": "ARBEIT, AUSBILDUNG, …",
                "type": [
                  "string",
                  "null"
                ]
              },
              "url": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "type": "array"
        },
        "location": {
          "type": [
            "string",
            "null"
          ]
        },
        "page": {
          "type": "integer"
        },
        "query": {
          "type": "string"
        },
        "total": {
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "type": "object"
    },
    "value": "{query: params.query, location: steps.search[0].place || params.location || `null`, total: steps.search[0].total, page: params.page || `1`, jobs: map(&(let $j = @, $l = @.stellenlokationen[0] in {id: $j.referenznummer, title: $j.stellenangebotsTitel || $j.titel, employer: $j.firma || `null`, occupation: $j.hauptberuf || `null`, type: $j.stellenangebotsart || `null`, salary_from: $j.gehaltsspanneVon || `null`, salary_to: $j.gehaltsspanneBis || `null`, salary_period: ($j.gehaltsspanneVon && $j.verguetungsangabe) || `null`, city: $l.adresse.ort || `null`, postcode: $l.adresse.plz || `null`, street: $l.adresse.strasse || `null`, latitude: $l.breite || `null`, longitude: $l.laenge || `null`, distance_km: $j.entfernung || ($j.entfernung == `0` && `0`) || `null`, full_time: $j.arbeitszeitVollzeit == `true`, part_time: ($j.arbeitszeitTeilzeitVormittag || $j.arbeitszeitTeilzeitNachmittag || $j.arbeitszeitTeilzeitAbend || $j.arbeitszeitTeilzeitFlexibel) == `true`, shifts_nights_weekends: $j.arbeitszeitSchichtNachtWochenende == `true`, home_office: $j.homeofficemoeglich, career_changers_welcome: $j.quereinstiegGeeignet == `true`, start: $j.eintrittszeitraum.von || `null`, published: $j.datumErsteVeroeffentlichung || `null`, url: join('', ['https://www.arbeitsagentur.de/jobsuche/jobdetail/', $j.referenznummer])}), steps.search[0].jobs[?referenznummer])}"
  },
  "params": {
    "additionalProperties": false,
    "properties": {
      "exclude_agencies": {
        "default": true,
        "description": "Leave out offers from private recruitment agencies",
        "type": "boolean"
      },
      "location": {
        "description": "City or postcode, e.g. 'Leipzig', '10115'",
        "maxLength": 60,
        "minLength": 2,
        "type": "string"
      },
      "page": {
        "default": 1,
        "maximum": 40,
        "minimum": 1,
        "type": "integer"
      },
      "published_within_days": {
        "description": "Only offers published in the last N days",
        "maximum": 100,
        "minimum": 0,
        "type": "integer"
      },
      "query": {
        "description": "Job title, occupation or keyword, e.g. 'Pflegefachkraft', 'Elektriker', 'Data Scientist'",
        "maxLength": 100,
        "minLength": 2,
        "type": "string"
      },
      "radius_km": {
        "default": 25,
        "enum": [
          0,
          10,
          15,
          25,
          50,
          100,
          200
        ],
        "type": "integer"
      },
      "size": {
        "default": 25,
        "enum": [
          10,
          25,
          50
        ],
        "type": "integer"
      },
      "type": {
        "default": "job",
        "enum": [
          "job",
          "apprenticeship"
        ],
        "type": "string"
      }
    },
    "required": [
      "query"
    ],
    "type": "object"
  },
  "provenance": {
    "method": "browser-inspect",
    "notes": "The Jobsuche page (www.arbeitsagentur.de/jobsuche/suche) calls rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v6/jobs (the agency's own API host; CORS allows www.arbeitsagentur.de). The older v4 path now answers 403. X-API-Key jobboerse-jobsuche is the public client id every visitor's browser sends (bund.dev documents it). Codes: angebotsart 1 = jobs, 4 = apprenticeships; pav=false leaves out private agencies; veroeffentlichtseit = days. Answers servers too; robots.txt allows everything.",
    "recorded_at": "2026-11-07T19:02:00+01:00",
    "recorded_by": "C4"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "DE",
    "id": "arbeitsagentur.de",
    "language": "de",
    "name": "Bundesagentur für Arbeit – Jobsuche",
    "origin": "https://www.arbeitsagentur.de",
    "origins": [
      "https://rest.arbeitsagentur.de"
    ],
    "start_path": "/jobsuche/"
  },
  "steps": [
    {
      "description": "The job board's own search API (rest.arbeitsagentur.de, the agency's API host that the Jobsuche pages call). X-API-Key 'jobboerse-jobsuche' is the public client id the site sends for every visitor (documented at bund.dev). The one-item foreach maps the offer type and the agency filter.",
      "expect": {
        "assert": "body.maxErgebnisse != `null`",
        "content_type": "json",
        "status": [
          200
        ]
      },
      "extract": {
        "json": {
          "jobs": "ergebnisliste || `[]`",
          "place": "woOutput.bereinigterOrt",
          "total": "maxErgebnisse"
        }
      },
      "foreach": {
        "as": "f",
        "in": "[{art: params.type == 'apprenticeship' && '4' || '1', pav: params.exclude_agencies == `false` && `null` || 'false'}]",
        "max": 1
      },
      "id": "search",
      "request": {
        "credentials": "omit",
        "headers": {
          "Accept": "application/json",
          "X-API-Key": "jobboerse-jobsuche"
        },
        "method": "GET",
        "query": {
          "angebotsart": "{{f.art}}",
          "page": "{{params.page}}",
          "pav": "{{f.pav}}",
          "size": "{{params.size}}",
          "umkreis": "{{params.radius_km}}",
          "veroeffentlichtseit": "{{params.published_within_days}}",
          "was": "{{params.query}}",
          "wo": "{{params.location}}"
        },
        "url": "https://rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v6/jobs"
      }
    }
  ],
  "task": "Search jobs and apprenticeships in Germany's official job board",
  "tos": {
    "notes": "A public-sector job board with a documented public API (bund.dev). One search request per call.",
    "reviewed": false
  },
  "verify": {
    "checks": [
      "output.total > `10`",
      "length(output.jobs) > `5`",
      "length(output.jobs[?starts_with(url, 'https://www.arbeitsagentur.de/jobsuche/jobdetail/')]) == length(output.jobs)",
      "length(output.jobs[?employer != `null`]) > `5`",
      "length(output.jobs[?latitude != `null`]) > `3`"
    ],
    "example_params": {
      "location": "Leipzig",
      "query": "Pflegefachkraft",
      "radius_km": 25
    },
    "max_ms": 4000
  },
  "version": 1
}