Arbeitsagentur Jobs Scraper
Pricing
from $1.70 / 1,000 results
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
Maintained by CommunityActor stats
1
Bookmarked
9
Total users
1
Monthly active users
17 days ago
Last modified
Categories
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

✨ 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,salaryToandsalaryType(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,homeOfficeTypeandhomeOfficePercenttell 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
| Team | What they build |
|---|---|
| Recruiting agencies | A daily list of new postings in their niche, with the employer's email to pitch candidates the same day |
| Labour market research | Salary benchmarks by occupation and Bundesland from thousands of postings that state a range |
| Job boards and aggregators | A German and Austrian job feed with descriptions, coordinates and apply links, refreshed on a schedule |
| HR analytics | Which competitors hire, for which roles, on fixed-term or permanent contracts, and how much they offer |
| Sales and lead generation | Companies that are hiring right now in a region, with website and contact details, as a buying signal |
| Workforce planning | Demand for a skill over time: count new postings per week for a keyword across Germany |
| Career services | Apprenticeship (Ausbildung) and internship listings for a city, filtered by start date |
📥 Input parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
keywords | string | Job title or keyword, e.g. Softwareentwickler, Krankenpfleger, Marketing | empty |
location | string | City, region or postal code, e.g. Berlin, München, 10115. Leave empty for all of Germany | empty |
startUrls | array | Search URLs copied from arbeitsagentur.de. All site filters are applied. Overrides keywords and location | empty |
maxItems | integer | Maximum number of jobs to return, up to 10,000 per search | 50 |
debugMode | boolean | Detailed logs for troubleshooting | false |
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.
| Category | Fields |
|---|---|
| Identity | refnr, title, occupation, occupations, url, externalUrl, cipherNumber |
| Employer | employer, employerHashId, isAnonymous, isTempAgency, isPrivateAgency, partnerName, partnerUrl |
| Location | location, street, city, postalCode, region, country, latitude, longitude, workLocations |
| Job terms | offerType, workTime, homeOfficePossible, homeOfficeType, homeOfficePercent, contract, contractDurationMonths, isDisabilityRequired, isCareerChangerSuitable |
| Pay | salaryType, salaryFrom, salaryTo, compensation |
| Content | description (Markdown) |
| Dates | publishedDate, modifiedDate, startDate, scrapedAt |
| Employer profile | employerDescription, 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-ppeInput 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 ApifyClientclient = 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
| Metric | Value |
|---|---|
| Speed | 10 enriched jobs in 7 seconds, 120 jobs in 80 seconds (measured) |
| Requests per job | One search page per 100 jobs plus one detail and, when available, one employer profile per job |
| Max results per search | 10,000 (the source serves the first 10,000 matches of a query) |
| Catalogue size | More than 800,000 employment listings plus apprenticeships and internships, Germany and Austria |
| Data freshness | Live. Every run fetches the current listings, nothing is cached |
| Memory | 128 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
- Split large searches by region or keyword. A query returns at most 10,000 jobs.
Pflegenationwide has far more; run it per Bundesland or per city to get everything. - Use
veroeffentlichtseitfor monitoring. A URL withveroeffentlichtseit=1returns only postings published in the last 24 hours, ideal for a daily schedule that never re-scrapes old jobs. - Prefer postal codes for precise areas.
location: "10115"targets a district;location: "Berlin"covers the whole city and its surroundings within the default radius. - Filter agencies out in your own code.
isTempAgencyandisPrivateAgencyflag staffing and placement agencies so you can keep only direct employers. - Use
sort=veroeffdatumin the URL to get the newest postings first when you capmaxItems; 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.
⚖️ Legal
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.
🔗 Related scrapers
- Stepstone Scraper for Germany's largest commercial job board
- Indeed, LinkedIn, Glassdoor and ZipRecruiter jobs in one actor
- 🔥 Glassdoor Scraper for company reviews, salaries and interview data
📬 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