DEV Community

Bence Kadi
Bence Kadi

Posted on AI-assisted

How to export job offers from the Arbeitsagentur Jobbörse to Excel

The Jobbörse of the Bundesagentur für Arbeit (arbeitsagentur.de/jobsuche) is Germany's largest job database, with over 1 million open positions. Many of them are from small and medium companies that never post on LinkedIn or StepStone.

If you are a recruiter, a staffing agency, a researcher or you sell to German employers, you often want these offers in a spreadsheet: all "Elektroniker" jobs around Berlin, all apprenticeships in Munich, all home-office IT jobs from the last week. The website has no export button. The API behind the website uses German parameter names, and it changed recently (the old endpoint now answers 403).

This guide shows how to get the offers into Excel with simple English input, without code.

Disclosure: I built the tool used in this guide, the Germany Jobs Scraper on Apify.

Step 1: Run the example

Open Germany Jobs Scraper - Arbeitsagentur Jobbörse and click Try for free (free Apify account needed). The prefilled input:

{
  "keywords": ["Data Engineer"],
  "location": "Berlin",
  "radiusKm": 25,
  "maxResults": 50
}
Enter fullscreen mode Exit fullscreen mode

Click Start. It runs in about 10-15 seconds and costs about $0.04.

Step 2: Enter your search

  • Keywords (keywords): one search per line, job titles or skills (Elektroniker, Pflegefachkraft, Data Engineer). German terms usually find more offers. A job found by two keywords is saved once. Put only job words here, not the city.
  • Location and radius (location, radiusKm): a city or postal code (Berlin, 80331) and a radius in km (0-200). Leave the location empty for all of Germany.
  • Employer (employer): only jobs from this employer, written as shown on arbeitsagentur.de (for example Deutsche Bahn AG).
  • Occupational field (occupationalField): the Jobbörse's Berufsfeld, for example Informatik.
  • Max results (maxResults): a limit for the whole run. 0 means no limit. If you leave keywords, location, employer and occupational field all empty, you search all of Germany (1M+ jobs), so set a limit.

Step 3: Use the filters

Most filters are the Jobbörse's own search filters, in English. Example: permanent full-time jobs for electronics technicians and mechatronics technicians around Berlin, published in the last 7 days, without temp agencies (Zeitarbeit):

{
  "keywords": ["Elektroniker", "Mechatroniker"],
  "location": "Berlin",
  "radiusKm": 25,
  "workingTime": ["full_time"],
  "contractType": "permanent",
  "publishedWithinDays": 7,
  "includeTemporaryAgencies": false,
  "maxResults": 1000
}
Enter fullscreen mode Exit fullscreen mode

Other filters:

  • offerType: job (default), apprenticeship (Ausbildung or dual study), internship (Praktikum or trainee), self_employment
  • workingTime: also part_time, shift_night_weekend, minijob and home_office
  • contractType: any (default), permanent or temporary (fixed-term)
  • includePrivateAgencies: false to hide private recruiters

A note on home_office: the Jobbörse API has no working home-office filter, so the tool checks each offer itself and keeps only offers that allow working from home. If you combine it with full_time, you get full-time jobs that allow home office.

Offers removed by a filter are not saved and not charged.

Step 4: Export

Open the run's Output tab and click Export (Excel, CSV or JSON).

What the output looks like

The column names are in English. Code values (contract, working time, offer type) stay as the Jobbörse sends them, for example UNBEFRISTET (permanent) or VOLLZEIT (full-time). One real row from a test run (2026-10-05):

title employer city postalCode postedDate contractType homeOffice salaryMin salaryMax
Senior Data Platform Engineer Smartly.io Solutions GmbH Berlin 10117 2026-09-16 UNBEFRISTET false 60000 87000

You also get:

  • occupation, offerType, workingTime, startDate, firstPublishedDate
  • all work locations, region (federal state), latitude / longitude
  • salaryCurrency and salaryPeriod (YEAR, MONTH, HOUR, ...), plus the original salaryText when there is one
  • temporaryAgency and privateAgency flags
  • url, externalUrl and the full description

Salary comes from the employer's own salary range. If there is none, the tool looks for a range in the text. About 1 in 5 offers had a salary in the test run. Street addresses are left out, and e-mails and phone numbers are removed from descriptions by default.

What it costs

$0.75 per 1,000 jobs, plus Apify's tiny per-run start fee ($0.00005). Platform compute is included.

  • 50 jobs (the example): about $0.04
  • 1,000 jobs: about $0.75
  • 10,000 jobs (for example one occupation in one federal state): about $7.50

You don't pay for offers removed by your filters, for the same job found by a second keyword, or for jobs already seen in monitoring mode.

Note: the Jobbörse returns at most about 10,000 results per search. For bigger exports, split by keyword or location (for example one run per federal state). The run log warns you when a search hits the limit.

Automation: only new offers every morning

The tool has a monitoring mode. It remembers the jobs it already returned and outputs only new ones.

  1. Turn on Only new jobs (onlyNewJobs: true). The first run returns all matching jobs and saves them as a baseline. Later runs return only jobs that were not listed before.
  2. Keep Max results at 0 or high enough, so one run catches all new offers.
  3. Save the input as a task and add a daily Schedule (for example 06:30) in Apify Console.
  4. Send the new rows on:
    • Google Sheets: add the Google Sheets integration on the task's Integrations tab.
    • Make / Zapier: "Actor run finished" -> "Get dataset items" -> "Google Sheets: add row", or an e-mail / Slack message to your team.

The "already seen" list belongs to your exact input. If you change a keyword, the location or a filter, a new list starts. If you run two similar schedules (for example Berlin and Hamburg), give each one its own Monitor name (monitorName), for example berlin-elektroniker.

Example input for a daily monitor:

{
  "keywords": ["Elektroniker"],
  "location": "Berlin",
  "radiusKm": 25,
  "onlyNewJobs": true,
  "monitorName": "berlin-elektroniker",
  "maxResults": 0
}
Enter fullscreen mode Exit fullscreen mode

You pay only for new offers. A daily search with 30 new jobs costs about 2 cents.

Try it

Germany Jobs Scraper on Apify. Something missing or broken? Open an issue on the Issues tab.

Top comments (0)