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.
- 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 WieldAsk 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- 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.
Parameters
from your agentReturns
to your agentWhere 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.
curl -s https://wield.run/api/v1/recipes/arbeitsagentur.de/search-jobs | shasum -a 256 # a1b8833b1e4909c58ee68f8319397760fea0dedab39b6d367b3b348cde0b1d03
{ "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 }