Arbeitsagentur Jobs Scraper — BA Jobsuche Germany
Pricing
from $0.60 / 1,000 job listings
Arbeitsagentur Jobs Scraper — BA Jobsuche Germany
Scrape Arbeitsagentur / Bundesagentur für Arbeit job listings (Germany Jobsuche). Search by keyword, location, filters, search URLs, or job-detail URLs. Export title, employer, city, contacts, contract type, salary notes, full description, and application links. Fast HTTP API — no browser.
Pricing
from $0.60 / 1,000 job listings
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
3
Monthly active users
5 hours ago
Last modified
Categories
Share
Arbeitsagentur Jobs Scraper — Bundesagentur für Arbeit / Germany Jobsuche
Disclaimer: Unofficial tool for publicly accessible Arbeitsagentur (Bundesagentur für Arbeit) job listings. Bundesagentur für Arbeit, Arbeitsagentur, Jobbörse, and related names are trademarks of their respective owners. Not affiliated with, sponsored by, or endorsed by the Bundesagentur für Arbeit. For informational, research, aggregation, and recruiting-intelligence use only. Respect applicable terms of use and law.
Scrape German job listings from the official Arbeitsagentur / Bundesagentur für Arbeit Jobsuche portal — a practical Arbeitsagentur API alternative. Search by keyword (was), location (wo), advanced filters, portal search start URLs, or job-detail URLs. Export structured JSON with title, employer, city, occupation, contract type, salary notes, application email/phone when published, full description, home-office flags, and external application URLs — fast HTTP Jobsuche API scraping, no headless browser. Use from Python, Node.js, cURL, or Apify MCP / AI assistants.
Ideal for Germany job board aggregation, labor-market research, recruiting intelligence, employer lead generation, and BA Jobbörse data pipelines.
For detailed inputs, output examples, API snippets, MCP prompts, and limitations, see the Arbeitsagentur Jobs Scraper API guide by Crawloop.
Crawloop DACH Jobs Suite — BA public Jobsuche + Kununu employer intelligence + Stepstone commercial board.
| Arbeitsagentur (BA) | Kununu (employer intel) | Stepstone (commercial board) |
|---|---|---|
| Arbeitsagentur Jobs Scraper ◄── you are here | Kununu Scraper | Stepstone Jobs Scraper |
Key Features
- Arbeitsagentur / BA Jobsuche API — search + job-detail endpoints over HTTP (
curl_cffi); no Playwright/Puppeteer - Germany-wide search — keywords, city/region, radius (km), employer name, occupational field (Berufsfeld)
- Advanced filters — offer type (Arbeit / Ausbildung / Praktikum / Selbständigkeit), fixed-term vs permanent, working time (Vollzeit, Teilzeit, Homeoffice, Minijob, shift)
- Start URL parsing — paste a Jobsuche search URL or a job-detail URL (
/jobsuche/jobdetail/{refnr}) - Full job details — optional detail fetch for Stellenbeschreibung, employer website/industry/size, and contacts when published
- Flattened location + contacts —
city/ PLZ in the dataset table; email/phone from the API or the description text when published - Multi-site workplaces —
locationslists every office;cityis the first one (not always the search city) - Monitor mode — scheduled runs emit only new or updated
refnr(fingerprint = modification / publish date); first run is the baseline - Deduplicated
refnr— unique reference numbers across multi-URL / multi-filter runs - Low memory — designed for 256–512 MB runs
- Clean camelCase schema — ready for job boards, BI tools, ATS enrichment, and recruiting CRM pipelines
- Apify Proxy ready — DE residential recommended on the Apify platform
Use Cases
| Use case | What you get |
|---|---|
| Job aggregation | Fresh BA / Arbeitsagentur openings into a job board or search index |
| Labor-market research | Hiring volume by keyword, city, occupation, and contract type in Germany |
| Recruiting intelligence | Competitor and employer vacancy monitoring by region |
| Lead generation | Employers actively hiring in a target segment |
| Scheduled monitoring | monitorMode on an Apify Schedule — only new or changed listings after the baseline run |
| Salary / contract signals | Salary notes and befristet / unbefristet flags where published |
| Ausbildung & Praktikum tracking | Filter by offer type for apprenticeships and internships |
When to use this Actor
- You need Arbeitsagentur.de / Jobbörse listings as structured data
- You want keyword + location + filter search without a browser
- You need full job descriptions and application links for downstream processing
- You run recurring Germany jobs pulls for dashboards or alerts (
monitorModefor deltas)
When not to use this Actor
- Non-German job portals — this Actor covers Arbeitsagentur / Bundesagentur für Arbeit only
- Guaranteed email or phone — contacts are extracted when the API or description publishes them; many listings still omit them and only have
externalApplicationUrl - Historical archives — only currently published Jobsuche results
- Private / authenticated BA services — public Jobsuche listings only
Quick Start
Keyword + city:
{"position": "Softwareentwickler","location": "Berlin","maxItems": 50,"fetchDetails": true,"offerType": "1","radiusKm": 25,"workingTime": ["vz", "ho"],"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "DE"}}
Portal search start URL:
{"startUrls": [{"url": "https://www.arbeitsagentur.de/jobsuche/suche?angebotsart=1&was=Pflegefachkraft&wo=Muenchen&umkreis=50"}],"maxItems": 100,"fetchDetails": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "DE"}}
Single job-detail URL:
{"startUrls": [{"url": "https://www.arbeitsagentur.de/jobsuche/jobdetail/12117-YF-48852-YF-S"}],"fetchDetails": true}
Scheduled monitor (new + updated only):
{"position": "Pflegefachkraft","location": "Berlin","maxItems": 200,"fetchDetails": true,"monitorMode": true,"monitorStoreName": "ba-pflege-berlin","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "DE"}}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
position | String | — | Keywords / job title (API was) |
location | String | — | City or region (API wo) |
startUrls | Array | — | Jobsuche search URLs and/or job-detail URLs (/jobsuche/jobdetail/{refnr}) |
maxItems | Integer | 100 | Max jobs (0 = unlimited, subject to portal caps) |
fetchDetails | Boolean | true | Fetch full description via job-details endpoint |
offerType | String | "1" | 1 Arbeit, 2 Selbständigkeit, 4 Ausbildung, 34 Praktikum/Trainee, empty = any |
contractType | String | — | 1 befristet, 2 unbefristet, 1;2 both |
workingTime | Array | [] | vz, tz, snw, ho, mj |
radiusKm | Integer | 25 | Radius in km around location |
employer | String | — | Employer name filter |
occupationalField | String | — | Berufsfeld free text |
publishedWithinDays | Integer | — | Only jobs published in the last N days (0–100) |
includeTemporaryAgencies | Boolean | true | When false, excludes Zeitarbeit (zeitarbeit=false) |
includePrivatePlacement | Boolean | true | When false, excludes PAV (pav=false) |
disabilityFriendly | Boolean | false | Only disability-friendly listings |
careerChangeSuitable | Boolean | false | Only career-change suitable listings (quereinstieg) |
sort | String | relevance | relevance, date (newest), distance |
monitorMode | Boolean | false | Emit only new or updated jobs vs the previous run |
monitorStoreName | String | arbeitsagentur-jobs-monitor | Named KV store for seen refnr + dates |
resetMonitorState | Boolean | false | Wipe the monitor cache (new baseline) |
pageSize | Integer | 50 | Search page size (1–100) |
concurrency | Integer | 10 | Parallel detail requests |
proxyConfiguration | Object | DE residential | Apify Proxy (required on platform for reliable results) |
Output Format
Each dataset item is one Arbeitsagentur job listing.
| Field | Type | Description |
|---|---|---|
refnr | String | Stellen-Referenznummer |
url | String | Public job detail URL |
title | String | Job title |
description | String | Full description (when fetchDetails is true) |
employer | String | Employer / company name |
employerWebsite | String | Employer homepage when the portal publishes it (often empty) |
employerIndustry / employerFirmSize | String | Branche and Betriebsgröße from details when present |
city / postalCode / region | String | First workplace on the listing (not always the search city) |
latitude / longitude | Number | Primary workplace coordinates |
occupation | String | Primary occupation (Hauptberuf) |
alternativeOccupations | Array | Related occupation labels |
offerType | String | e.g. ARBEIT |
contractType | String | e.g. BEFRISTET / UNBEFRISTET / KEINE_ANGABE |
contractMonths | Integer | Fixed-term length in months (if present) |
salaryNote | String | Portal salary indicator |
publishedAt / modifiedAt / startDate | String | Portal dates |
externalApplicationUrl | String | External apply link when provided |
applicationEmail / applicationPhone | String | Contacts from the API or description, when published |
homeOfficePossible / homeOfficeType | Boolean / String | Remote-work flags |
workingTime | Object | Full-time / part-time / shift flags |
location / locations | Object / Array | First workplace object, plus every office on multi-site ads |
isTemporaryAgency / isPrivatePlacement / isMiniJob | Boolean | Listing flags |
searchWas / searchWo | String | Search keywords / location used |
changeType | String | new / updated when monitorMode is on |
scrapedAt | String | ISO timestamp |
Output Example
{"refnr": "12117-YF-48852-YF-S","url": "https://www.arbeitsagentur.de/jobsuche/jobdetail/12117-YF-48852-YF-S","title": "Softwareentwickler (m/w/d)","employer": "bayoonet AG","employerWebsite": null,"city": "München","postalCode": "80331","region": "BAYERN","occupation": "Softwareentwickler/in","offerType": "ARBEIT","contractType": "KEINE_ANGABE","salaryNote": "KEINE_ANGABEN","publishedAt": "2026-08-19","applicationEmail": "jobs@bayoo.net","applicationPhone": "+49 (0) 61 518618-333","externalApplicationUrl": "https://www.yourfirm.de/job/detail/YF-48852/","homeOfficePossible": false,"workingTime": {"fullTime": true,"partTimeMorning": false,"partTimeAfternoon": false,"partTimeEvening": false,"partTimeFlexible": false,"shiftNightWeekend": false},"locations": [{ "city": "München", "postalCode": "80331", "region": "BAYERN" },{ "city": "Köln", "postalCode": "50667", "region": "NORDRHEIN_WESTFALEN" },{ "city": "Berlin", "postalCode": "10115", "region": "BERLIN" }],"searchWas": "Softwareentwickler","searchWo": "Berlin","scrapedAt": "2026-08-24T14:23:23+00:00"}
FAQ
Do I need a browser?
No. The Actor uses the public Jobsuche REST search and detail endpoints.
Why enable Apify Proxy?
Platform IPs often receive empty result sets from the Jobsuche API. DE residential proxy is recommended.
Why are descriptions empty?
Keep fetchDetails enabled (default). Search cards alone may omit the full text.
Why did pagination stop near ~250 results?
The portal often caps maxErgebnisse per query. Narrow keywords, location, or filters for more precise slices.
Are email and phone always available?
No. When the listing publishes them (API field or description text), they appear as applicationEmail / applicationPhone. Many ads only expose externalApplicationUrl. employerWebsite is often empty.
Why isn’t city the same as my search location?
city is the first workplace on the ad. Multi-site listings put every office in locations — a Berlin search can return a job whose first city is München if Berlin is still in locations. searchWo is the query you ran.
Can I paste a job-detail URL?
Yes. A /jobsuche/jobdetail/{refnr} start URL fetches that one listing instead of running a keyword search (searchWas / searchWo stay empty on that path).
What is monitor mode?
With monitorMode: true, each refnr plus its modification (or publish) date is stored in a named Key-Value store. The first run is the baseline (all matches are changeType: new). Later scheduled runs push and charge only new or updated listings. Use a distinct monitorStoreName per watch query. resetMonitorState clears the cache.
Zeitarbeit / PAV filters
Set includeTemporaryAgencies or includePrivatePlacement to false to exclude those sources. Leaving both at true uses portal defaults (do not force both API flags to true simultaneously).
Why did a run succeed with 0 jobs?
The filters matched nothing, or the first proxy IP was blocked and retries still found zero listings. Empty searches succeed (they are not Actor failures). Broaden keywords or location if you expected results.
Limitations
- Unofficial use of the public Jobsuche API; endpoints may change
- Result volume per query can be capped by the portal
- Salary is often
KEINE_ANGABEN; contract type may beKEINE_ANGABE— not structured EUR / Befristung employerWebsiteis frequently empty; preferexternalApplicationUrland description contactscityis the first listed workplace, not a guarantee it equalslocation/searchWo
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/arbeitsagentur-jobs-scraper').call({position: 'Softwareentwickler',location: 'Berlin',maxItems: 50,fetchDetails: true,offerType: '1',radiusKm: 25,workingTime: ['vz', 'ho'],proxyConfiguration: {useApifyProxy: true,apifyProxyGroups: ['RESIDENTIAL'],apifyProxyCountry: 'DE',},});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token)run = client.actor("crawloop/arbeitsagentur-jobs-scraper").call(run_input={"position": "Softwareentwickler","location": "Berlin","maxItems": 50,"fetchDetails": True,"offerType": "1","proxyConfiguration": {"useApifyProxy": True,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "DE",},})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get("title"), item.get("employer"), item.get("url"))
cURL
curl "https://api.apify.com/v2/acts/crawloop~arbeitsagentur-jobs-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"position":"Softwareentwickler","location":"Berlin","maxItems":50,"fetchDetails":true,"offerType":"1"}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call crawloop/arbeitsagentur-jobs-scraper.
Example prompts:
- "Run Arbeitsagentur Jobs Scraper for Softwareentwickler in Berlin, max 50, return title, employer, city, applicationEmail, url"
- "Scrape BA Jobsuche Pflegefachkraft in München with details and summarize home-office flags"
- "Pull Ausbildung openings in Hamburg from Arbeitsagentur and list employers"
- "Scrape Arbeitsagentur Pflege Berlin, take unique employers, enrich via Kununu Scraper"
- "Run Arbeitsagentur Jobs Scraper daily in monitorMode for Pflegefachkraft in Berlin and return only new or updated jobs"
Suite next step
Enrich discovered employers with Kununu Scraper (scores, reviews, salaries, jobs-with-score). For commercial DACH board volume beyond BA, use Stepstone Jobs Scraper. For DACH B2B company directories (suppliers, not job ads), see WLW Scraper or Europages Scraper.
Related Actors
| Actor | Focus |
|---|---|
| Arbeitsagentur Jobs Scraper ◄── you are here | Germany BA Jobsuche job listings |
| Kununu Scraper | DACH employer scores / reviews / salaries / jobs-with-score |
| Stepstone Jobs Scraper | Commercial DACH Stepstone listings |
| WLW Scraper | DACH B2B supplier directory |
| Europages Scraper | European B2B company directory |