Arbeitsagentur Jobs Scraper (Germany: Bundesagentur für Arbeit) avatar

Arbeitsagentur Jobs Scraper (Germany: Bundesagentur für Arbeit)

Pricing

$2.00 / 1,000 job listings

Go to Apify Store
Arbeitsagentur Jobs Scraper (Germany: Bundesagentur für Arbeit)

Arbeitsagentur Jobs Scraper (Germany: Bundesagentur für Arbeit)

Scrapes job listings from Germany's Bundesagentur für Arbeit (Arbeitsagentur) job board via its public JSON API.

Pricing

$2.00 / 1,000 job listings

Rating

0.0

(0)

Developer

WebAlpine Studio

WebAlpine Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Arbeitsagentur Jobs Scraper (Germany: Bundesagentur für Arbeit Jobsuche)

Collects job listings from the public job board of the Bundesagentur für Arbeit (German Federal Employment Agency), the largest job board in Germany, through the same JSON API that the official Jobsuche website and app use. No HTML parsing is involved, so the data is structured, complete, and stable.

Why this actor

  • Official source: the public JSON API behind the Jobsuche website and app of the Bundesagentur für Arbeit, the largest job board in Germany.
  • No login, no account and no browser. The Actor calls the same endpoint the official app uses, with polite delays and retries.
  • Structured fields straight from the API: title, employer, location with coordinates, working time, contract type, salary where given, dates and the reference number.

What it does

You give the actor a keyword (job title, skill, or profession) and optionally a place, a radius, and filters such as working time, contract type, or publication age. It queries the Arbeitsagentur Jobsuche API page by page, removes duplicates, and stores every listing as one flat JSON record with title, employer, location with coordinates, publication and start dates, salary information where the employer provided it, and working time flags. With fetchDetails enabled it also fetches the full job description text for each listing.

Why use it

  • The Arbeitsagentur board lists well over a million open positions, including apprenticeships and internships, many of which never appear on commercial job boards.
  • Structured fields instead of scraped HTML: coordinates, postal codes, salary ranges, contract duration, home office and shift flags, all straight from the source.
  • Filters are applied server side, so you only pay for the listings you actually want.
  • Typical run time is a few seconds per 100 listings without descriptions, or roughly one second per listing with fetchDetails.

Input

FieldTypeDescription
wasstring, requiredKeyword, job title, skill, or profession to search for.
wostringCity, region, or postal code to search around. Leave empty to search all of Germany.
umkreisintegerSearch radius in kilometers around wo. Default 25. Ignored when wo is empty.
angebotsartenumOffer type: Arbeit (employment), Selbstständigkeit (self-employment), Ausbildung (apprenticeship), or Praktikum (internship). Default Arbeit.
arbeitszeitarray of enumWorking time filter: Vollzeit, Teilzeit, Schicht/Nacht/Wochenende, Homeoffice, Minijob. Leave empty for all.
befristungenumContract duration filter: befristet (fixed term) or unbefristet (permanent). Leave empty for all.
veroeffentlichtseitintegerOnly return jobs published within this many days.
zeitarbeitbooleanWhether to include jobs from temp work agencies. Leave unset to include both.
fetchDetailsbooleanFetch the full job description text and the temp agency flag for each listing. One extra request per job, so slower. Default false.
maxItemsintegerMaximum number of listings to collect. Default 100, maximum 10,000.

Example input:

{
"was": "Pflegefachkraft",
"wo": "München",
"umkreis": 25,
"arbeitszeit": ["tz"],
"befristung": "2",
"veroeffentlichtseit": 7,
"maxItems": 50
}

Output example

One record per job listing. This is a real record from a run with fetchDetails enabled, with the description shortened.

{
"source": "arbeitsagentur",
"refnr": "12016-10005207786-S",
"url": "https://www.arbeitsagentur.de/jobsuche/jobdetail/12016-10005207786-S",
"external_url": null,
"title": "Softwareentwickler m/w/d *",
"profession": "Softwareentwickler/in",
"all_professions": "Softwareentwickler/in, Datenbankentwickler/in",
"employer": "PerZukunft Arbeitsvermittlung GmbH & Co. KG",
"location_city": "Berlin",
"location_zip": "12163",
"location_region": "BERLIN",
"location_country": "DEUTSCHLAND",
"latitude": 52.462501889,
"longitude": 13.31995116,
"location_count": 1,
"published_at": "2026-08-31",
"entry_date": "2026-09-03",
"modified_at": "2026-08-31T13:01:15.045",
"offer_type": "ARBEIT",
"contract_duration": "KEINE_ANGABE",
"fixed_term_months": null,
"salary_from": 30.26,
"salary_to": 30.26,
"salary_type": "STUNDENLOHN",
"salary_unit": "FESTGEHALT",
"fulltime": true,
"part_time": null,
"shift_work": null,
"homeoffice_possible": null,
"minijob": false,
"career_changer_ok": false,
"temp_agency": false,
"description": "Ab [sofort] suchen wir einen Softwareentwickler m/w/d in Vollzeit für eine mittelständige Papierfabrik in Berlin - Neukölln. Ihr Einstiegsgehalt liegt bei [30,26] €/h. ...",
"scraped_at": "2026-09-22T20:31:33.966978+00:00"
}

Field notes:

  • refnr is the Arbeitsagentur reference number and is unique per listing. url opens the listing on arbeitsagentur.de, external_url is the employer's own application page when one exists.
  • location_*, latitude, and longitude describe the first work location. location_count tells you how many locations the listing has.
  • published_at and entry_date are ISO dates, modified_at and scraped_at are ISO timestamps.
  • salary_from and salary_to are only present when the employer entered a salary. salary_type says what the number means (for example STUNDENLOHN for hourly, MONATSGEHALT for monthly, JAHRESGEHALT for yearly, KEINE_ANGABEN when nothing was given).
  • contract_duration is UNBEFRISTET, BEFRISTET, or KEINE_ANGABE. fixed_term_months is filled for fixed term contracts when known.
  • Boolean flags (fulltime, part_time, shift_work, homeoffice_possible, minijob, career_changer_ok) are null when the listing does not state them.
  • description and temp_agency are only filled when fetchDetails is enabled. Descriptions are plain text as provided by the employer.
  • The actor never invents values. Any field the API does not return for a listing is null.

Pricing

This Actor uses pay per result. You pay USD 0.002 per job listing, which is USD 2.00 per 1,000 results. There is no charge per run or per request, and a run that returns no results produces no result charges.

ResultsPrice
100USD 0.20
1,000USD 2.00
10,000USD 20.00

A daily run with 200 new listings costs USD 0.40, about USD 12 per month. Set maxItems to cap the cost of a run.

Limitations

  • The API returns at most 10,000 listings per search. For broad queries such as "Pflege" (over 100,000 matches) narrow the search by place, radius, offer type, or publication age and run the actor several times.
  • Only the first work location is flattened into the record. Listings with several locations show location_count greater than 1.
  • Salary information is optional for employers, so it is missing on most listings.
  • The API does not expose a postal address for the employer, only for the work location.
  • Fetching descriptions requires one additional request per listing with a short polite delay, so large runs with fetchDetails take longer.

The actor only reads publicly available data from the Bundesagentur für Arbeit job board through the same public API that powers arbeitsagentur.de. No login, paywall, or bot protection is bypassed and no proxies are used. Job listings can contain personal data such as contact names and phone numbers of recruiters. What you do with the collected data, and whether your processing of it complies with the GDPR and the terms of use of the Bundesagentur für Arbeit, is your responsibility.

FAQ

Which job board is this? The Jobsuche of the Bundesagentur für Arbeit at arbeitsagentur.de/jobsuche, the official German public employment agency job board.

Does this actor use a proxy? No. The API is public and does not block requests at the polite rate the actor uses.

Why are some fields null? The API does not return a value for every field on every listing. The actor leaves the field null instead of guessing.

How do I get the full job description? Enable fetchDetails. The actor then calls the job details endpoint once per listing. Expect roughly one listing per second.

Why did I get fewer results than maxItems? Either the search matched fewer listings, or the search matched more than 10,000 and the API stopped serving pages. The log tells you which. Narrow the query to get more.

Can I search apprenticeships or internships? Yes, set angebotsart to Ausbildung or Praktikum.

Changelog

0.1.x (2026-09-25): README with concrete pricing and a short summary of the data source. No change to the output.

0.1: Initial release. Search by keyword, place, radius, offer type, working time, contract duration, publication age, and temp agency flag, with optional full description fetch.