August 15, 2026 · 8 min read

Arbeitsagentur (German Job Board) Scraper: 3 Practical Use Cases

By Crawlerbros Engineering Team

Direct answer

Arbeitsagentur (German Job Board) Scraper extracts live job listings directly from Germany's official federal employment agency (arbeitsagentur.de). It outputs up to 30 flat fields per listing, including job title, employer name, city, postal code, federal state, country, geocoordinates, contract duration, working time arrangement, salary, and external application URLs. To turn raw listings into actionable business outputs, target a specific operational goal before running the Actor. Configure targeted search parameters such as search keywords, location, radius, contract type, and publication age. This guide details three practical playbooks for recruitment analysis, compensation benchmarking, and candidate sourcing, along with input configurations, quality controls, and data cleaning methods.

Planning German job market data extraction

Before scraping thousands of job postings from the Bundesagentur für Arbeit database, establish a clear objective. Define the exact decision your team needs to make, whether identifying regional hiring spikes in Bavaria, comparing software developer salaries in Berlin, or building a candidate outreach pipeline.

Specify mandatory fields required for downstream analysis versus optional fields that merely provide context. For instance, a salary benchmarking model requires title, salary, salaryType, and region to be present. An outreach campaign might require employer, city, and externalUrl. Set clear filtering criteria upfront to separate valid listings from irrelevant noise, and log unclassifiable records into a review queue rather than forcing arbitrary classifications.

Practical use cases

These use cases come from Arbeitsagentur (German Job Board) Scraper's published documentation. Each is expanded into an operating pattern so the Arbeitsagentur (German Job Board) Scraper output has a purpose beyond collection.

Use case 1: Recruitment market research

Outcome: track open positions by industry / region.

Question to answer: Which of today's differences are real signal, and which are just noise from how the source renders data?

Configure: Start with location (City, postal code, or region (e.g., 'Berlin', '10115', 'Bayern'). Leave empty for all of Germany.), contractType (Filter by contract type. 'all' returns everything.), workingTime (Filter by working time arrangement.). Use the narrowest Arbeitsagentur (German Job Board) Scraper values that represent the real task, keep the first result set small, and record why each selected input matters to the Arbeitsagentur (German Job Board) Scraper outcome.

Working method: Timestamp every collection and compare it only against its immediate predecessor using a stable key. Treat a difference as provisional until it survives one more run, and log the specific field that changed alongside the record.

Deliverable: Create a change log entry per run listing what appeared, what disappeared, and what changed enough to matter. Include the Arbeitsagentur (German Job Board) Scraper source identifier and the collected fields behind every Arbeitsagentur (German Job Board) Scraper decision.

Stop condition: Pause when records cannot be matched reliably over time, collection scope changed between runs, or missing data looks like a real-world change. Fix the Arbeitsagentur (German Job Board) Scraper question, comparison rule, or configuration before expanding the Arbeitsagentur (German Job Board) Scraper run.

Use case 2: Salary benchmarking

Outcome: aggregate by occupation and region.

Question to answer: Once records are grouped fairly, which comparisons actually hold up and which were an artifact of the grouping?

Configure: Start with location (City, postal code, or region (e.g., 'Berlin', '10115', 'Bayern'). Leave empty for all of Germany.), contractType (Filter by contract type. 'all' returns everything.), workingTime (Filter by working time arrangement.). Use the narrowest Arbeitsagentur (German Job Board) Scraper values that represent the real task, keep the first result set small, and record why each selected input matters to the Arbeitsagentur (German Job Board) Scraper outcome.

Working method: Lock the comparison rule before looking at any results, sort records into groups against that fixed rule, and keep a running note of anything that does not cleanly belong to a group.

Deliverable: Create a side-by-side comparison table with cohort labels, normalized fields, and a short note on what the gap implies. Include the Arbeitsagentur (German Job Board) Scraper source identifier and the collected fields behind every Arbeitsagentur (German Job Board) Scraper decision.

Stop condition: Pause when the cohorts are structurally different, coverage is uneven, or the ranking depends mainly on missing values. Fix the Arbeitsagentur (German Job Board) Scraper question, comparison rule, or configuration before expanding the Arbeitsagentur (German Job Board) Scraper run.

Use case 3: Candidate sourcing

Outcome: discover companies actively hiring in your area.

Question to answer: After removing obvious mismatches, which remaining opportunities are worth a closer read?

Configure: Start with radius (Search radius around the location in kilometers (only used when location is set).), search (Keyword to search for (e.g., 'Softwareentwickler', 'Krankenpfleger', 'Lehrer'). Searches title + description.), location (City, postal code, or region (e.g., 'Berlin', '10115', 'Bayern'). Leave empty for all of Germany.). Use the narrowest Arbeitsagentur (German Job Board) Scraper values that represent the real task, keep the first result set small, and record why each selected input matters to the Arbeitsagentur (German Job Board) Scraper outcome.

Working method: Filter out hard mismatches using only documented fields before reading any description closely, then rank the survivors by preference fit and flag any with missing required information.

Deliverable: Create a shortlist grouped into strong fit, possible fit, and missing-information, each entry tied back to the field that decided its group. Include the Arbeitsagentur (German Job Board) Scraper source identifier and the collected fields behind every Arbeitsagentur (German Job Board) Scraper decision.

Stop condition: Pause when critical constraints are absent, titles are being used as a substitute for role detail, or stale and current records cannot be separated. Fix the Arbeitsagentur (German Job Board) Scraper question, comparison rule, or configuration before expanding the Arbeitsagentur (German Job Board) Scraper run.

Step-by-step workflow for Arbeitsagentur data pipelines

  1. Select your target use case and open the Arbeitsagentur (German Job Board) Scraper schema to verify required fields.
  2. Formulate your search filters, defining exact values for search keywords, location boundaries, and publishedSince timeframes.
  3. Perform an initial test run with maxItems set to 10 or 20 to review sample payload structure and field completeness.
  4. Clean returned JSON data by converting empty strings or string representations of nulls into standard null representations in your database.
  5. Apply business logic filters to separate primary target listings from secondary or off-target results based on contractDuration or workingTime.
  6. Deduplicate newly collected records against existing database records using the unique id field.
  7. Export processed data into downstream business intelligence tools, spreadsheets, or ATS recruitment workflows.

Input configuration rules for specific labor searches

The Arbeitsagentur scraper uses the official Bundesagentur für Arbeit API (rest.arbeitsagentur.de). Configure input properties according to these specifications:

  • search (string): Keyword for job titles or description text, such as 'Softwareentwickler', 'Krankenpfleger', or 'Lehrer'.
  • location (string): City, postal code, or federal state, such as 'Berlin', '10115', or 'Bayern'. Leave blank to query all of Germany.
  • radius (integer): Search radius around location in kilometers. Default is 25 km; maximum is 200 km.
  • contractType (string): Options include 'all', 'permanent', 'fixed-term', or 'any'.
  • workingTime (string): Filter by work schedule: 'all', 'full-time', 'part-time', 'shift', 'homework', or 'minijob'.
  • publishedSince (integer): Days since publication (1, 3, 7, 14, 28, or 0 for all active postings).
  • maxItems (integer): Cap on returned listings (default 50, maximum 1000 per run).

Processing output records and handling missing attributes

Each scraped listing returns 30 structured fields. Key field categories include:

  • Identity fields: id (unique reference number Refnr), title, occupation, occupations, and employer.
  • Geographic details: city, postalCode, street, region, country, latitude, longitude, and distanceKm.
  • Dates and timeline: publishedDate, modifiedTimestamp, and startDate.
  • Employment details: contractDuration (UNBEFRISTET, BEFRISTET), salary, salaryType, workingTimeFullTime, workingTimePartTime, homeOfficePossible, isMinijob, and quereinstiegSuitable.
  • Direct links: externalUrl (employer careers site) and portalUrl (official job agency listing).

Note that the scraper standardizes missing values into typed defaults like empty strings or zero numbers. When processing data, check whether salary equals 0 (indicating undisclosed compensation) or street is empty before performing mathematical aggregations or location mapping.

Quality assurance checks for job market intelligence

To maintain data integrity across automated pipelines, implement these checks:

  • Always validate that id exists before inserting records into primary storage.
  • Check that publishedDate matches expected YYYY-MM-DD formatting.
  • Verify country values when filtering for German positions, as the source index also includes Austrian listings (Österreich).
  • Treat salary values of 0 as missing values rather than zero-euro pay rates.
  • Isolate boolean flags such as homeOfficePossible, isMinijob, and quereinstiegSuitable for precise filtering.
  • Re-check input parameter schema if API responses return zero results across standard high-volume searches.

Frequently asked questions

Do I need a proxy to scrape arbeitsagentur.de?

No. The scraper accesses the public API endpoint (rest.arbeitsagentur.de) using standard API authorization headers and works directly from standard datacenter IPs.

Are listings from Austria included in the results?

Yes. Bundesagentur für Arbeit cooperates with the Austrian employment service (AMS). Check the country field, which contains either 'Deutschland' or 'Österreich'.

How does the scraper handle non-disclosed salary data?

When an employer does not disclose salary information, the scraper returns salary as 0 and salaryType as KEINE_ANGABEN.

What is the maximum number of listings retrieved per execution?

The underlying API serves up to 100 items per page. The Actor automatically paginates up to the specified maxItems limit (maximum 1000 per run).

How often are new listings added to the official job board?

New job postings are indexed live by the federal employment agency and typically appear within 1 to 2 hours of publication.

Resources

● Featured actors

Arbeitsagentur (German Job Board) Scraper

Extract German job listings from arbeitsagentur.de with title, employer, location, contract type, posted date.

Run on Apify ↗