Arbeitsagentur Jobs Scraper avatar

Arbeitsagentur Jobs Scraper

Pricing

from $1.70 / 1,000 results

Go to Apify Store
Arbeitsagentur Jobs Scraper

Arbeitsagentur Jobs Scraper

Scrape job listings from arbeitsagentur.de, the Bundesagentur für Arbeit job board with 800,000+ German and Austrian jobs. Get title, employer, location with GPS, salary range, contract, home office, full description, employer website and email. Search by keyword, city or any filtered URL.

Pricing

from $1.70 / 1,000 results

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

1

Bookmarked

9

Total users

1

Monthly active users

17 days ago

Last modified

Share

Turn Germany's largest public job database into structured data. Every listing from arbeitsagentur.de with salary range, contract type, home office option, full description and employer contact, ready for your spreadsheet, database or AI agent.

The Bundesagentur für Arbeit (arbeitsagentur.de) lists more than 800,000 open positions across Germany and Austria: from the largest corporate employers to the local bakery that will never post on LinkedIn. This scraper searches it by keyword and location, or with any filtered URL copied from your browser, and returns up to 50 clean fields per job. No login, no API key, no browser.

How it works

How it works

✨ Why teams choose this over other Arbeitsagentur scrapers

Copying job ads from arbeitsagentur.de tab by tab? Paying for a job feed that skips salary and contact details? Running a scraper that stops working after every website update?

  • 🏛️ The whole German labour market, not a sample. The Bundesagentur für Arbeit is where every German employer is asked to report open positions. You get the SMEs, public sector jobs and apprenticeships that never reach commercial job boards.
  • 💶 Salary ranges when employers publish them. salaryFrom, salaryTo and salaryType (yearly, hourly, fixed) come straight from the posting. In a test run of 120 electrician jobs, 39 carried a salary figure.
  • 📞 Employer website and application email. The employer profile behind each posting adds the company website, headquarters, founding year, size, benefits and a contact email when the employer publishes one. Half of the 120 test jobs had a website, one in six an email.
  • 🏠 Home office flags on every job. homeOfficePossible, homeOfficeType and homeOfficePercent tell you whether a job is remote friendly before you read the description.
  • 🔗 Any filter from the site, no extra parameters to learn. Set radius, schedule, contract type, apprenticeships, home office or publication date on arbeitsagentur.de, copy the URL, paste it. The scraper reads the filters from the URL.
  • 📍 GPS coordinates on every listing. Latitude and longitude for the primary work location, plus every additional site, ready for maps and radius analysis.
  • 📄 Full job description in Markdown. The complete posting text with its headings, not a truncated teaser.
  • ⚡ Results in seconds. 10 fully enriched jobs in 7 seconds, 120 in 80 seconds, measured on live runs.

🎯 What you can do with Arbeitsagentur data

TeamWhat they build
Recruiting agenciesA daily list of new postings in their niche, with the employer's email to pitch candidates the same day
Labour market researchSalary benchmarks by occupation and Bundesland from thousands of postings that state a range
Job boards and aggregatorsA German and Austrian job feed with descriptions, coordinates and apply links, refreshed on a schedule
HR analyticsWhich competitors hire, for which roles, on fixed-term or permanent contracts, and how much they offer
Sales and lead generationCompanies that are hiring right now in a region, with website and contact details, as a buying signal
Workforce planningDemand for a skill over time: count new postings per week for a keyword across Germany
Career servicesApprenticeship (Ausbildung) and internship listings for a city, filtered by start date

📥 Input parameters

ParameterTypeDescriptionDefault
keywordsstringJob title or keyword, e.g. Softwareentwickler, Krankenpfleger, Marketingempty
locationstringCity, region or postal code, e.g. Berlin, München, 10115. Leave empty for all of Germanyempty
startUrlsarraySearch URLs copied from arbeitsagentur.de. All site filters are applied. Overrides keywords and locationempty
maxItemsintegerMaximum number of jobs to return, up to 10,000 per search50
debugModebooleanDetailed logs for troubleshootingfalse

Filters recognised in startUrls: umkreis (radius in km), angebotsart (1 job, 2 self-employment, 4 apprenticeship, 34 internship), suchbereich=ausbildung, arbeitszeit (vz full-time, tz part-time, snw shift, mj mini-job), befristung (1 fixed-term, 2 permanent), veroeffentlichtseit (published within N days), homeoffice, zeitarbeit, pav, externestellenboersen, behinderung and sort.

📊 Output data

One record per job. Fields the posting does not provide are omitted.

{
"refnr": "10001-1003683867-S",
"title": "Elektriker (m/w/d)",
"occupation": "Elektroinstallateur/in",
"occupations": [
"Elektroinstallateur/in"
],
"employer": "homeworkbuddy UG (haftungsbeschränkt)",
"employerHashId": "EG75WjuBVG4QRk1a3Hmg8KfsmazfsaEYvjavAX6ZIW8=",
"location": "Berlin",
"city": "Berlin",
"postalCode": "",
"region": "Berlin",
"country": "Deutschland",
"latitude": 52.4926833,
"longitude": 13.4025753,
"workLocations": [
"Berlin",
"Berlin, 10179",
"Würzburg, Bayern",
"Nürnberg, Mittelfranken, Bayern"
],
"offerType": "Employment",
"workTime": [
"Full-time"
],
"homeOfficePossible": false,
"contract": "Permanent",
"publishedDate": "2026-09-10",
"modifiedDate": "2026-09-11T12:59:44.194",
"startDate": "2026-09-11",
"salaryType": "GEHALTSSPANNE",
"salaryFrom": 15.19,
"salaryTo": 24.14,
"compensation": "STUNDENLOHN",
"description": "**Stellenbeschreibung**\n\nAls Elektriker (m/w/d) sind Sie der Experte für die Installation, Wartung und Reparatur elektrischer Anlagen und Systeme. Sie...",
"isAnonymous": false,
"isTempAgency": false,
"isPrivateAgency": false,
"partnerName": "arbeitsagentur.de",
"partnerUrl": "http://www.arbeitsagentur.de",
"url": "https://www.arbeitsagentur.de/jobsuche/jobdetails/10001-1003683867-S",
"employerDescription": "Sechs Gewerke.\nEin Ansprechpartner.\n\nVon der Elektroinstallation über Sanitär und Heizung bis zum Rohbau, wir führen di...",
"employerHeadquarters": "Berlin",
"employerFoundingYear": 2026,
"employerFirmSize": "10 Mitarbeiter",
"employerWebsite": "https://homeworkbuddy.io",
"employerIndustry": [
"Wärmepumpen",
"Sanitär",
"Heizungsbauer",
"Klimatechniker",
"Elektriker"
],
"employerBenefits": [
"Flexible Arbeitszeiten",
"Homeoffice / Mobiles Arbeiten",
"Firmenevents",
"Rabatte für Mitarbeitende",
"Sonderzahlungen",
"Weiterbildungen",
"Dienstwagen",
"Hunde erlaubt",
"Mitgestaltungsmöglichkeiten",
"Moderne technische Ausstattung"
],
"applicationEmail": "info@homeworkbuddy.io",
"employerContactInfo": "Wallstraße 9\n10179 Berlin\n\n[info@homeworkbuddy.io](https://mailto:info@homeworkbuddy.io)...",
"scrapedAt": "2026-09-12T01:03:34Z"
}

This record comes from a live run. An apprenticeship looks the same with "offerType": "Training / Dual study"; a fixed-term posting adds "contract": "Fixed-term" and contractDurationMonths.

🗂️ Data fields

Up to 50 fields per job.

CategoryFields
Identityrefnr, title, occupation, occupations, url, externalUrl, cipherNumber
Employeremployer, employerHashId, isAnonymous, isTempAgency, isPrivateAgency, partnerName, partnerUrl
Locationlocation, street, city, postalCode, region, country, latitude, longitude, workLocations
Job termsofferType, workTime, homeOfficePossible, homeOfficeType, homeOfficePercent, contract, contractDurationMonths, isDisabilityRequired, isCareerChangerSuitable
PaysalaryType, salaryFrom, salaryTo, compensation
Contentdescription (Markdown)
DatespublishedDate, modifiedDate, startDate, scrapedAt
Employer profileemployerDescription, employerHeadquarters, employerFoundingYear, employerFirmSize, employerWebsite, employerIndustry, employerBenefits, applicationEmail, employerContactInfo

refnr is the stable identifier of a posting and url is its permanent public page. region and country are spelled out (Nordrhein-Westfalen, Österreich). offerType is one of Employment, Self-employment, Training / Dual study, Internship / Trainee. Fully remote postings have no city; location then carries the country.

🚀 Examples

Find software developer jobs in Berlin

{
"keywords": "Softwareentwickler",
"location": "Berlin",
"maxItems": 100
}

Pull every nursing job within 50 km of Hamburg

{
"startUrls": [
{"url": "https://www.arbeitsagentur.de/jobsuche/suche?was=Krankenpfleger&wo=Hamburg&umkreis=50"}
],
"maxItems": 500
}

Get part-time, fixed-term jobs published this week, newest first

{
"startUrls": [
{"url": "https://www.arbeitsagentur.de/jobsuche/suche?was=Pflege&wo=Hamburg&umkreis=50&befristung=1&arbeitszeit=tz&veroeffentlichtseit=7&sort=veroeffdatum"}
],
"maxItems": 200
}

List IT apprenticeships (Ausbildung) in Berlin

{
"startUrls": [
{"url": "https://www.arbeitsagentur.de/jobsuche/suche?was=Fachinformatiker&wo=Berlin&suchbereich=ausbildung"}
],
"maxItems": 100
}

Browse all jobs in a postal code area

{
"location": "10115",
"maxItems": 300
}

Track a niche skill across all of Germany

{
"keywords": "SAP FI/CO Berater",
"maxItems": 1000
}

🤖 Copy to your AI assistant

Paste this block into Claude, ChatGPT or Cursor to give it full context about this scraper:

You have access to the Arbeitsagentur Jobs Scraper on Apify: SilentFlow/arbeitsagentur-scraper-ppe
Input schema:
- keywords (string, optional): job title or keyword, e.g. "Softwareentwickler"
- location (string, optional): city, region or postal code; empty = all of Germany
- startUrls (array of {url}, optional): arbeitsagentur.de search URLs with any site filters; overrides keywords/location
- maxItems (integer, default 50, max 10000): cap on returned jobs
- debugMode (boolean, default false)
Output per job (up to 50 fields): refnr, title, occupation, occupations[], employer, employerHashId,
location, street, city, postalCode, region, country, latitude, longitude, workLocations[],
offerType, workTime[], homeOfficePossible, homeOfficeType, homeOfficePercent, contract,
contractDurationMonths, publishedDate, modifiedDate, startDate, salaryType, salaryFrom, salaryTo,
compensation, description (Markdown), cipherNumber, isAnonymous, isTempAgency, isPrivateAgency,
isDisabilityRequired, isCareerChangerSuitable, partnerName, partnerUrl, url, externalUrl,
employerDescription, employerHeadquarters, employerFoundingYear, employerFirmSize, employerWebsite,
employerIndustry[], employerBenefits[], applicationEmail, employerContactInfo, scrapedAt.
No login or API key needed. Use apify-client for Python or JavaScript.

💻 Integrations

Build a hiring-signal lead list with employer emails (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("SilentFlow/arbeitsagentur-scraper-ppe").call(run_input={
"keywords": "Vertriebsmitarbeiter",
"location": "München",
"maxItems": 300,
})
leads = [
item for item in client.dataset(run["defaultDatasetId"]).iterate_items()
if item.get("applicationEmail") and not item.get("isTempAgency")
]
for job in leads:
print(f'{job["employer"]} | {job["applicationEmail"]} | {job["employerWebsite"]} | {job["title"]}')

Benchmark salaries by region (JavaScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('SilentFlow/arbeitsagentur-scraper-ppe').call({
keywords: 'Elektriker',
maxItems: 1000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const byRegion = {};
for (const job of items.filter(j => j.salaryFrom && j.salaryType === 'GEHALTSSPANNE')) {
(byRegion[job.region] ||= []).push((job.salaryFrom + job.salaryTo) / 2);
}
for (const [region, salaries] of Object.entries(byRegion)) {
const avg = salaries.reduce((a, b) => a + b, 0) / salaries.length;
console.log(`${region}: ${Math.round(avg)} EUR (${salaries.length} postings)`);
}

Export a daily CSV of new postings (Apify CLI)

apify call SilentFlow/arbeitsagentur-scraper-ppe --input '{
"startUrls": [{"url": "https://www.arbeitsagentur.de/jobsuche/suche?was=Pflege&wo=Berlin&veroeffentlichtseit=1"}],
"maxItems": 500
}'
apify datasets get-items --format csv > new-pflege-jobs.csv

Schedule the actor on Apify to run every morning and connect the dataset to Google Sheets, Airtable or a webhook.

📈 Performance

MetricValue
Speed10 enriched jobs in 7 seconds, 120 jobs in 80 seconds (measured)
Requests per jobOne search page per 100 jobs plus one detail and, when available, one employer profile per job
Max results per search10,000 (the source serves the first 10,000 matches of a query)
Catalogue sizeMore than 800,000 employment listings plus apprenticeships and internships, Germany and Austria
Data freshnessLive. Every run fetches the current listings, nothing is cached
Memory128 to 256 MB

💾 Data export

Results land in an Apify dataset that you can download as JSON, CSV, Excel, XML, HTML table or RSS from the run page, or pull programmatically:

https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=csv&token=YOUR_TOKEN

Array fields such as workTime and employerBenefits are flattened automatically in CSV and Excel exports.

💡 Tips for best results

  1. Split large searches by region or keyword. A query returns at most 10,000 jobs. Pflege nationwide has far more; run it per Bundesland or per city to get everything.
  2. Use veroeffentlichtseit for monitoring. A URL with veroeffentlichtseit=1 returns only postings published in the last 24 hours, ideal for a daily schedule that never re-scrapes old jobs.
  3. Prefer postal codes for precise areas. location: "10115" targets a district; location: "Berlin" covers the whole city and its surroundings within the default radius.
  4. Filter agencies out in your own code. isTempAgency and isPrivateAgency flag staffing and placement agencies so you can keep only direct employers.
  5. Use sort=veroeffdatum in the URL to get the newest postings first when you cap maxItems; the default order is relevance.

❓ FAQ

What exactly does the scraper extract? Every field the public posting exposes: title, occupation, employer, location with coordinates, offer type, schedule, home office flags, contract, salary range, full description, dates and apply links, plus the employer profile (website, email, size, benefits) when the employer maintains one.

Do I need an account or API key? No. The data is public. No login, no cookies, no API key.

How do I filter by schedule, contract type or home office? Set the filters on arbeitsagentur.de, copy the URL from your browser into startUrls. Radius, schedule, contract, publication date, home office, apprenticeships and sorting are all applied.

Can I search apprenticeships and internships? Yes. Use a URL with suchbereich=ausbildung (or angebotsart=4) for apprenticeships and angebotsart=34 for internships. offerType tells you which kind of posting you got.

How fresh are the results? Live. Each run queries the source at run time, and modifiedDate tells you when the employer last updated a posting.

Why do some jobs have no salary or no email? Employers choose what to publish. Salary appears on roughly a third of postings, an email on one in six. Fields the posting does not provide are simply omitted from the record.

Is there a maximum number of results? 10,000 per search, a limit of the source. Split by region, keyword or publication date to go beyond it.

Can I run several searches in one run? Yes. Put several URLs in startUrls. Jobs that appear in more than one search are returned once; maxItems applies to the whole run.

Does it cover Austria? Austrian postings from the partner network are included in nationwide searches and carry "country": "Österreich".

What is an anonymous (Chiffre) posting? Some employers hide their name and publish under a cipher number. Those records have isAnonymous: true and a cipherNumber; applications go through the Arbeitsagentur.

This Actor extracts publicly available job postings from arbeitsagentur.de. It does not bypass any login, paywall or CAPTCHA. Users are responsible for complying with the Bundesagentur für Arbeit's terms of use and applicable data protection law (GDPR). The output can contain business contact details published by employers for applications; handle them accordingly. The data is informational; verify it for regulated use cases.

📬 Support

Need something this scraper doesn't do yet? We ship features fast.

  • Feature requests go straight to our backlog
  • Enterprise needs? We do custom integrations and high-volume plans
  • Pricing questions? Check the Monetization tab on the actor page

Response time: usually under 24 hours.

Check out our other scrapers: SilentFlow on Apify