Arbeitsagentur Jobs – German Jobs, Bundesagentur Jobbörse
Pricing
from $0.50 / 1,000 results
Arbeitsagentur Jobs – German Jobs, Bundesagentur Jobbörse
Keyword and place in, one row per job listing out from the Jobbörse of the Bundesagentur für Arbeit (Arbeitsagentur): title, employer, full text, salary range, home-office flag, location with coordinates, publish date. German jobs via the Jobsuche API, no browser; schedule it to see who is hiring.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
Perceptron Data
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
5
Monthly active users
5 days ago
Last modified
Categories
Share
Arbeitsagentur Jobs
Give a keyword and a place, get one row per job from the Arbeitsagentur Jobbörse: title, employer, salary range, home office, location, full text. Filter by employer or date and schedule it daily to see who is hiring.
Limits: only jobs listed on the Jobbörse – almost all in Germany, a few abroad. The data comes from the JSON interface of the Jobbörse's own app, which is not offered to third parties and can change at any time. Salary appears only where the employer published it. One search reaches at most 10,000 hits; larger searches are split automatically.

The Jobbörse of the Bundesagentur für Arbeit lists about 1 million postings (1,025,617 of all offer types on 12 October 2026). Unlike HTML scrapers, this actor reads the Jobbörse's JSON interface – the Jobsuche API, documented by the bundesAPI project – so no browser is needed. That means:
- ⚡ Fast – no browser and no proxy needed. The interface serves the Jobbörse's own app and can change or be restricted at any time.
- 📄 Full job descriptions — complete posting text, not just teasers
- 💶 Salaries —
salaryFrom/salaryTofor ranges,fixedSalaryfor fixed pay (hourly or yearly, seesalaryInfo), apprenticeship pay per year - 🏠 Home office — flag, type and the share in percent; filter for "possible", "at least 50 %" or "fully remote"
- 📍 Geo coordinates — lat/lon for 97 % of job locations (measured on 1,316 locations), street with house number
- 🧾 Every row says where it came from — your search, the time it was retrieved, the source and whether the description was fetched
- 🚫 No duplicates — the API repeats hits across pages; repeats are skipped, never stored, never charged
- 📏 Coverage reported — every run writes a
COVERAGErecord: matches, distinct jobs found, repeats skipped, why it stopped
How to use – step by step
- Click Try for free on this page (a free Apify account is enough) – the form opens with "Elektriker" in Berlin.
- Enter a Search keyword (job title or profession; German terms find more) and a Location – a city with umlauts (
München), a state asHessen (Bundesland), or empty for all of Germany – plus the Search radius (km). - Optional filters: Offer type, Published within last N days, Employer name filter (exact spelling), Working time, Home office, Exclude temp agencies (Zeitarbeit).
- Set Maximum results (default 200) and click Start. The default run with descriptions takes about 12 seconds (measured locally, 12 October 2026).
- Open the Output tab: the Jobs view shows title, employer, salary, home office, publication date and whether the description was fetched. Export as CSV, Excel or JSON, or read the rows through the API.
- For a daily job alert, schedule the run with Published within last N days = 1.
Use cases
- Job-market analytics — demand by region, profession, salary levels
- HR / recruiting tech — feed fresh German job postings into your product
- Job alerts — schedule daily runs with
publishedSince: 1for new listings - Lead generation — companies that are hiring are companies that are buying (
employerIdidentifies the employer across postings) - AI agents — clean input/output schema, works out of the box via MCP
Input example
{"keyword": "Pflegefachkraft","location": "München","radiusKm": 50,"publishedSince": 7,"homeOffice": "possible","excludeTemporaryEmployment": true,"includeDetails": true,"maxItems": 500}
Search by employer alone — the name must be written exactly as the job board lists it:
{ "employer": "Deutsche Bahn AG", "maxItems": 1000 }
Output example
A real row from a run on 12 October 2026 (description shortened):
{"title": "Elektriker (m/w/d)","profession": "Elektroinstallateur/in","company": "homeworkbuddy UG (haftungsbeschränkt)","employerId": "EG75WjuBVG4QRk1a3Hmg8KfsmazfsaEYvjavAX6ZIW8=","offerType": "ARBEIT","salaryFrom": 15.19,"salaryTo": 24.14,"fixedSalary": null,"salaryType": "GEHALTSSPANNE","salaryInfo": "STUNDENLOHN","contractDuration": "UNBEFRISTET","workingTime": { "fullTime": true, "shiftNightWeekend": false, "partTimeFlexible": false },"entryFrom": "2026-10-07","firstPublished": "2026-09-10","lastModified": "2026-10-07T13:36:03.127","locations": [{ "street": "Wallstr. 9", "zip": "10179", "city": "Berlin", "district": null,"region": "BERLIN", "country": "DEUTSCHLAND", "lat": 52.511139, "lon": 13.404789 }],"distanceKm": 1,"refnr": "10001-1003683867-S","jobUrl": "https://www.arbeitsagentur.de/jobsuche/jobdetail/10001-1003683867-S","postingPartner": { "name": "arbeitsagentur.de", "url": "http://www.arbeitsagentur.de" },"description": "**Stellenbeschreibung**\n\nAls Elektriker (m/w/d) sind Sie der Experte für …","detailStatus": "ok","query": { "keyword": "Elektriker", "location": "Berlin", "radiusKm": 25, "offerType": "1" },"source": "Bundesagentur für Arbeit, Jobsuche API (search /pc/v6/jobs, details /pc/v4/jobdetails)","subsearch": null,"retrievedAt": "2026-10-12T12:58:58Z"}
Further fields when the posting has them: fixedSalary, apprenticeshipPay
(year1–year4), fixedTermUntil, fixedTermMonths, homeOfficePossible,
homeOfficeType, homeOfficePercent, miniJob, careerChangersWelcome,
trainingType, degreeProgram, entryUntil, externalUrl, and from the
description request temporaryEmployment (Zeitarbeit), privateRecruiter and
requiredEducation. Values are passed on as the job board sends them (German
codes such as UNBEFRISTET, STUNDENLOHN); nothing is estimated.
postingPartner is the partner system the ad came from — often the job board
itself or another job portal, sometimes the employer's own career site. It is
not the employer's website.
detailStatus – was the description fetched?
| Value | Meaning |
|---|---|
ok | description fetched |
skipped | includeDetails was off |
blocked | the API refused or throttled the description request, also on a second attempt at the end of the run |
error | the API did not answer properly, also on a second attempt |
Jobs that were deleted between the search and the description request are left out — they are no longer postings. If the API refuses descriptions for eight requests in a row, the run stops and says so instead of storing rows without descriptions.
Coverage record
Every run stores a free COVERAGE record in its key-value store (also linked in
the run's output tab):
{"apiTotal": 848, "apiTotalsSeen": [846, 848], "target": 848, "delivered": 847,"complete": false, "duplicatesSkipped": 5, "foundBySecondPass": 4, "passes": 2,"deletedSinceSearch": 0, "detailStatus": { "skipped": 847 },"stoppedBecause": null, "locationMode": "UMKREISSUCHE", "locationRecognisedAs": "Berlin","statusMessage": "Done: 847 of 848 jobs stored (846–848 matches by the API's replicas; …)"}
That is a real run: Elektriker within 25 km of Berlin, all hits. The job board answers from several servers that disagree slightly — the total of the same search alternated between 846 and 848, and hits moved across page borders. A first pass found 843 distinct jobs and 5 repeats; a second pass found 4 more.
Limits – measured, not assumed
-
10,000 hits per search. The API stops at page 100 × 100 ("Ergebnismenge überschritten"). With
maxItemsabove 9,000, a larger search is split automatically: into the 16 federal states plus postings abroad (Austria, Switzerland and other neighbours), and states above 10,000 further by temporary-agency yes/no, fixed-term status and private recruiters — parts whose counts add up exactly to the whole. Measured on 12 October 2026:Search (nationwide) Matches Distinct jobs delivered Parts Time without descriptions Pflege, jobs 119,053 118,166 (99.3 %) 36 14 min Software, all offer types 25,613 25,330 (98.9 %) 27 3 min One plain search reaches at most 10,000 rows (Software: 9,678 of them distinct). The rest are postings without a federal state or country, or hits the API's servers moved while paging — the run reports the number. If
maxItemsis smaller than the matches, all parts are read side by side in proportion to their size, so a sample of 12,000 nursing jobs holds every state in its share (North Rhine-Westphalia 20 %, Bavaria 16 %, …), not just the first states of the alphabet. -
Speed (measured locally, 12 October 2026): about 19 jobs per second with descriptions, about 140 per second without. The default run (200 jobs with descriptions) takes about 12 seconds. A run has a 1-hour timeout by default; a run that reaches it stops cleanly and says how far it got.
-
Employer names must be exact.
Deutsche Bahnfinds 0 jobs,Deutsche Bahn AG3,682. When the employer filter finds nothing, the run lists the spellings that do match. -
Locations need umlauts and, for states, the suffix
(Bundesland).Muenchenis not recognised (the run checksMünchenfor you and says so); plainHessenorSachsenare villages of that name,Hessen (Bundesland)is the state. -
Home office is its own filter. The old working-time value "home office" returns 0 jobs at the API; this actor uses the job board's home-office filter instead (Software: 2,987 jobs with home office possible, 127 fully remote).
Tips
- German search terms find more jobs (
Kochbeatscook). - Leave
locationempty for nationwide searches. - Set
includeDetails: falsefor large volume runs where you only need structured metadata — about seven times faster. - For daily monitoring, create a Schedule with
publishedSince: 1and connect a webhook or export integration.
Data & fair use
The data comes from the JSON interface of the Jobbörse (Jobsuche API) of the Bundesagentur für Arbeit, using the client id the bundesAPI project documents. This actor is not affiliated with or endorsed by the Bundesagentur für Arbeit. Only public job postings and employer information are accessed — no applicant or personal data. The actor throttles its requests, slows down for everyone when the API asks it to, and never rotates IP addresses.
What does a run cost?
$0.01 per run start (default memory 1 GB), then per stored job — cheaper on bigger Apify plans:
| Your Apify plan | Per job |
|---|---|
| Free | $0.001 |
| Starter | $0.00075 |
| Scale | $0.0006 |
| Business & Enterprise | $0.0005 |
| Job postings (Free plan) | Cost |
|---|---|
| 100 | $0.11 |
| 1,000 | $1.01 |
| 10,000 | $10.01 |
Repeated hits are skipped before storing, so you never pay twice for the same
job. A run that the source refuses entirely stores nothing and costs only the
start. includeDetails changes the run time, not the price.
Changelog
- 12 October 2026 – Repeated hits are skipped and never charged; a refused request is reported as
blocked, never as "0 jobs"; searches above 10,000 hits are split by federal state; job locations carry coordinates; every row carries the search, the retrieval time and the source, and every run writes a freeCOVERAGErecord.
Auf Deutsch: Stellenangebote der Arbeitsagentur exportieren
Stichwort und Ort rein, je Stellenangebot eine Zeile raus: Titel, Arbeitgeber, Gehaltsspanne, Homeoffice, Arbeitsort mit Koordinaten und auf Wunsch der volle Text – aus der Jobbörse der Bundesagentur für Arbeit. Täglich geplant zeigt er, welche Arbeitgeber gerade einstellen.
Gelesen wird die JSON-Schnittstelle der Jobbörse (arbeitsagentur.de) – kein HTML-Scraping, kein Proxy. Die Schnittstelle dient der App der Jobbörse und kann sich jederzeit ändern.
Gesucht wird nach Stichwort, Ort und Umkreis, gefiltert nach Angebotsart (Arbeit, Ausbildung, Praktikum, Selbstständigkeit), Arbeitszeit, Homeoffice, Arbeitgeber und Veröffentlichungsdatum; Zeitarbeitsfirmen lassen sich ausschließen. Jede Zeile enthält Stellentitel, Beruf, Arbeitgeber mit stabiler Arbeitgeber-ID, Gehaltsspanne oder Festgehalt, Homeoffice-Anteil, Befristung, Eintrittsdatum, Arbeitsorte mit Koordinaten und auf Wunsch die vollständige Stellenbeschreibung — dazu die Suchanfrage, den Abrufzeitpunkt und die Quelle.
Ehrliche Grenzen: Eine Suche liefert höchstens 10.000 Treffer; größere Suchen
teilt der Actor automatisch nach Bundesländern auf und meldet im Datensatz
COVERAGE, wie viel er erreicht hat. Doppelte Treffer der Schnittstelle werden
aussortiert und nicht berechnet. Arbeitgebernamen müssen exakt geschrieben sein
(„Deutsche Bahn AG“), Orte mit Umlaut („München“), Bundesländer mit Zusatz
(„Hessen (Bundesland)“) — ist etwas nicht erkannt, sagt der Lauf es.
FAQ
Is there an official Arbeitsagentur API for third parties? No. The Jobbörse has a JSON interface for its own app, documented by the bundesAPI project, and this actor reads it. The raw interface returns nested German field names, repeats hits across pages, stops at 10,000 hits per search and needs a separate call per job description. This actor handles all of that.
How do I get new jobs only?
Set publishedSince to 1 and schedule the actor daily. Each run then returns
only what was posted since yesterday.
Can I search all of Germany at once?
Yes — leave location empty. One search at the job board stops at 10,000 hits;
set maxItems above 9,000 and the actor splits the search by federal state (and
further where needed) and reports the coverage it reached in COVERAGE.
Why do some jobs have no salary?
Salary fields are optional for employers in Germany. salaryFrom / salaryTo
are filled when the employer published a range, fixedSalary when it published
a fixed amount; otherwise they stay empty rather than being estimated.
Why does a run find slightly fewer jobs than the total shown?
The job board answers from several servers whose totals differ by a few jobs
and whose order shifts between pages. The actor reads a search twice when needed
and reports in COVERAGE what it found and what the API claimed.
Does this include applicant or personal data? No. Only public job postings and the employer information attached to them.
How do I export to Excel? Run the actor, then export the dataset as CSV or XLSX from the Apify console, or pull it through the API into Google Sheets.
More from Perceptron Data
| Actor | What it does |
|---|---|
| Advertiser Check (Google & Bing) | Company list in, one row per company out: Google ads, Bing ads, ad counts, accounts |
| Imprint & VAT Check | Domains in, company rows out: legal name, address, register number and EU VAT ID checked against VIES (Swiss UIDs excluded) |
| Free Imprint & Contact Check | The same company row, free, for up to 10 websites per run |
| PDF to Markdown | PDF, Word, Excel and PowerPoint to Markdown for AI – tables as JSON, OCR for scans |
| Research Agent | A question in, cited passages out – every source graded by evidence level |
| App Store & Google Play Data | App IDs or App Store keywords in, one row per app out, plus App Store reviews |
| kununu Employer Data | Employer score vs. industry, salary ranges, benefits and reviews for DACH companies |
| Messe München Exhibitors | Exhibitor lists of bauma, IFAT, BAU and more |
| Koelnmesse Exhibitors | Exhibitor lists of Anuga, ISM, imm cologne and more |
| TED Tenders | EU public tenders and contract awards from TED |
| MaStR Energy Assets | Solar, wind and storage units in Germany with operator and capacity |
| EUDAMED Medical Devices | EU medical devices, manufacturers and certificates |
| Data Source Finder | Free: tells you which ready-made scraper covers your data source |
Support
Bug reports are welcome in the Issues tab.