Arbeitsagentur Scraper - German Jobs & Employers avatar

Arbeitsagentur Scraper - German Jobs & Employers

Pricing

from $1.65 / 1,000 job listings

Go to Apify Store
Arbeitsagentur Scraper - German Jobs & Employers

Arbeitsagentur Scraper - German Jobs & Employers

Scrape the Arbeitsagentur Jobboerse, Germany’s federal job board with 700,000+ live positions: title, employer, address with coordinates, federal state, working-time model, contract duration, entry date and the full description. Filter by term, city, radius, offer type and more.

Pricing

from $1.65 / 1,000 job listings

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Scrape the Arbeitsagentur Jobbörse - the German Federal Employment Agency's official job board and the largest job database in Germany, with over 700,000 live positions. Every row is one job with the employer, the address the employer published (city and postcode on virtually every row, plus street and map coordinates wherever the employer gave one), the federal state, the working-time model, the contract duration, the start date, the publication date and the complete job description.

No login, no cookies, no browser, no API key. The Jobbörse renders server-side and ships its results as structured data, and each job page carries a schema.org JobPosting, so this actor reads real data structures rather than guessing at CSS classes.

Why this Arbeitsagentur scraper?

  • Map coordinates wherever the employer published an address. latitude / longitude plus a parsed street, postalCode, city and region - so the output drops straight into a map, a radius calculation or a territory plan. Coverage depends on the profession: measured 2026-08-31, engineering roles carried coordinates on 88% of results and retail roles on 8%, because retail is largely posted by central HR without a site address. withCoordinatesOnly keeps just the ones that have them, and city + postcode are ~100% either way.
  • The whole German market, not just white-collar. The Jobbörse is where employers are legally encouraged to post, so it reaches trades, care, logistics and public-sector roles that never appear on commercial boards.
  • Apprenticeships and dual study places as a first-class filter. offerTypes covers employment, Ausbildung, internships and self-employment - a distinct, high-demand market most scrapers ignore entirely.
  • Exclude staffing agencies with one switch. excludeTempAgencies removes Zeitarbeit postings, which are roughly a third of the board - the single most requested filter for anyone doing employer research.
  • Employer profile and logo linked back to the employer's own Jobbörse page, for every employer that has one (agency-posted roles do not).
  • Real pick-lists. Offer type, working-time model, contract duration, publication window, radius, federal state and sort order are all dropdowns with the Jobbörse's own values, so a filter can never silently fail to apply.
  • Monitor mode returns only jobs new since your last run.

Use cases

  • Recruitment & staffing - track which employers are hiring, in which towns, for which professions.
  • Labour-market research - full-time vs part-time, permanent vs fixed-term, and hiring volume by federal state or profession field.
  • Lead generation - an employer posting repeatedly is growing. Employer name, profile link and full address on every row.
  • Relocation & workforce planning - withCoordinatesOnly plus latitude/longitude makes "everything within 30 km of this plant" a one-line filter.
  • Job aggregators & AI agents - a structured, machine-readable feed of Germany's biggest job database.

How to use

  1. Enter one or more search terms (entwickler, pflegefachkraft, elektroniker...), or a location and radius, or a profession field to sweep a whole sector - or paste Jobbörse search URLs straight from your browser.
  2. Narrow with the offer-type, working-time, contract, publication-window and federal-state pick-lists.
  3. Set Maximum jobs to return and run.

Input

{
"searchTerms": ["entwickler"],
"location": "Berlin",
"radiusKm": 25,
"offerTypes": ["1"],
"workingTimes": ["vz", "ho"],
"excludeTempAgencies": true,
"publishedWithinDays": 7,
"maxResults": 200
}

Everything is optional and combines with AND:

  • searchTerms - one term per line; each is searched separately, results merged and de-duplicated.
  • startUrls / urlsFromFile - paste Jobbörse search URLs (all filters in them are kept) or single job URLs. Type them, upload a file, or link a remote .txt / .csv / Google Sheet.
  • location + radiusKm - a city or postcode plus a radius from 0 to 200 km.
  • offerTypes - Employment · Apprenticeship & dual study · Internship & trainee · Self-employment.
  • workingTimes - Full time · Part time · Home office / Telearbeit · Shift, night or weekend · Mini-job.
  • contractType - permanent or fixed term. publishedWithinDays - today, 1, 3, 7, 14 or 28 days.
  • excludeTempAgencies - drop Zeitarbeit postings. accessibleOnly - only jobs open to applicants with a disability.
  • professionField - a Jobbörse Berufsfeld such as Informatik or Pflege, to sweep a whole sector.
  • cities / postalCodePrefixes / regions / employerQuery / titleQuery / excludeKeywords / maxDaysOld / permanentOnly / withCoordinatesOnly - tighten the result set after the search.
  • includeDescription (on by default) + maxDescriptionRecords, monitorMode / monitorKey, maxResults, proxyConfiguration.

Tip: run with no term, location or URL and you get a small 25-job sample rather than a sweep of the whole board, so an exploratory or agent-issued call is never an expensive surprise.

Output

Every row is one job. The dataset ships four ready-made views: Jobs, Employers, Map-ready and Newest first.

{
"recordType": "job",
"referenceNumber": "10001-1003564427-S",
"title": "Entwickler (m/w/d)",
"url": "https://www.arbeitsagentur.de/jobsuche/jobdetail/10001-1003564427-S",
"employer": "Lopep GmbH",
"employerProfileUrl": "https://web.arbeitsagentur.de/vermittlung/ag-darstellung-ui/anzeigen/HNZ...",
"employerLogo": "https://rest.arbeitsagentur.de/vermittlung/ag-darstellung-service/ct/v1/arbeitgeberlogo/sharing/HNZ...",
"offerType": "ARBEIT",
"offerTypeEn": "job",
"profession": "IoT-Entwickler/in",
"allProfessions": ["IoT-Entwickler/in", "Softwareentwickler/in"],
"street": "Varenseller Str. 77C",
"postalCode": "33397",
"city": "Rietberg",
"region": "North Rhine-Westphalia",
"regionCode": "NORDRHEIN_WESTFALEN",
"latitude": 51.8545142,
"longitude": 8.4467158,
"fullAddress": "Varenseller Str. 77C, 33397 Rietberg",
"fullTime": true,
"partTime": true,
"shiftNightWeekend": false,
"workingTimeModels": ["Vollzeit", "Teilzeit"],
"contractDuration": "BEFRISTET",
"contractDurationEn": "fixed-term",
"isPermanent": false,
"temporaryUntil": "2026-09-01",
"entryDate": "2026-08-21",
"publishedAt": "2026-08-19",
"daysSincePublished": 12,
"description": "…the full job text…",
"employmentTypes": ["FULL_TIME", "PART_TIME", "TEMPORARY"],
"directApply": true,
"immediateStart": true
}

German source values are kept exactly as published (contractDuration, offerType, region) and given an English companion (contractDurationEn, offerTypeEn, region), so the data is usable either way.

What to expect (field coverage)

Measured on a live run (search entwickler, 8 newest jobs with descriptions, 2026-08-31):

Field groupCoverage
Title, URL, employer, employer profile & logo, reference number, offer type, working-time model, contract, entry date, published date100%
Full description (with includeDescription on)100%
City, postcode, region~100%
Latitude / longitude88% for engineering roles, 8% for retail - it depends on whether the employer published an address
Street address48% for engineering roles, 0% for retail - same reason
Employer profile & logo100% for engineering roles, 0% for retail (agency-posted roles have no employer profile)
temporaryUntilonly on fixed-term jobs that name an end date
SalaryGerman job ads rarely publish pay: absent on ~100% of postings. Not a scraping gap - a market norm

A blank street means the employer published only a town, and a blank payInfo means the Jobbörse literally recorded "keine Angaben" - returned as an honest null rather than a placeholder string. Coverage of address-derived fields varies by profession, not by run quality: it was verified on 2026-08-31 that this actor emits exactly what the source published, with a 0-point gap on every field.

Monitor mode - only newly posted jobs

Turn on monitorMode and the actor remembers every job it has already returned and emits only new ones on the next run, each tagged monitorEvent: "new". It is orthogonal to Apify Schedules: the Schedule sets the cadence, monitor mode decides what is new. Use a distinct monitorKey per saved watch.

A note on speed

The Jobbörse rate-limits bursts, so this actor deliberately paces its requests and backs off when the source pushes back. A throttled response is treated as transient - the run reports it and never fails because of it.

Automate & schedule

Schedules for cadence, webhooks to push each finished run onward, and one-click integrations for Google Sheets, Slack, Airtable, Make and Zapier.

Integrate with any app

Results are available as JSON, CSV, Excel, XML and RSS through the Dataset API, and the actor can be started from the API or any client library.

Use with AI assistants (MCP)

This actor is exposed through the Apify MCP server, so Claude, ChatGPT, Cursor and any other MCP client can call it as a tool - "find permanent full-time nursing jobs within 25 km of Leipzig posted this week" becomes one tool call.

Agent-ready: autonomous payments (x402 & Skyfire)

This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:

  • x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
  • Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

More job & hiring scrapers from scrapesage

FAQ

Do I need an account or API key? No. This reads only public search and job pages.

How many jobs can I get? The Jobbörse holds more than 700,000 live positions. A single search is paged until maxResults is reached; for very large sweeps split the work by profession field, federal state or city.

Is the description included? Yes, by default. Descriptions live on each job's own page, so fetching them costs one extra request and one extra event per job. Turn includeDescription off for a fast listing-only export.

Are the results in German? Titles, employers and descriptions are in German exactly as published. Region names, offer types and contract durations also come back with English companions so you can filter without knowing German.

What is Zeitarbeit and why would I exclude it? Zeitarbeit is temporary staffing. Agencies post a large share of the board, often re-posting the same role. excludeTempAgencies leaves only direct employers.

Why do some jobs have no street address? Employers may publish only a town. The city, postcode and coordinates are still there in almost every case.

Need help?

Open an issue on the actor's Issues tab with your input and the run ID and it will be looked at.


This actor collects publicly available job postings for research, recruitment and labour-market analysis. It is not affiliated with, endorsed by, or sponsored by the Bundesagentur für Arbeit.