Arbeitsagentur Jobs Scraper | Employer Profiles & Contacts avatar

Arbeitsagentur Jobs Scraper | Employer Profiles & Contacts

Pricing

from $0.63 / 1,000 results

Go to Apify Store
Arbeitsagentur Jobs Scraper | Employer Profiles & Contacts

Arbeitsagentur Jobs Scraper | Employer Profiles & Contacts

Scrape every job, apprenticeship and internship on arbeitsagentur.de (Bundesagentur für Arbeit), past the 10,000-result limit. 82 fields: salary, contract, home office, GPS, full description, employer website, size, benefits, social media, emails and phones. Incremental + alerts.

Pricing

from $0.63 / 1,000 results

Rating

0.0

(0)

Developer

Corvuslab

Corvuslab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Categories

Share

What does Arbeitsagentur Jobs Scraper do?

Arbeitsagentur Jobs Scraper extracts jobs, apprenticeships, dual study programmes and internships from arbeitsagentur.de, the job board of the Bundesagentur für Arbeit and Germany's largest, with about 1 million open listings. Give it search terms, places and any of the site's filters (or paste a search URL), and every matching job comes back as a clean record with up to 83 fields: salary, contract, home office, GPS coordinates, the full description, the employer's company profile and the emails and phones found in the ad. Export to JSON, CSV or Excel, use the API, or hand the data to an AI agent. No code needed.

New to Apify? Sign up free and use the included monthly platform credit to try this Actor. No credit card needed.

Why this scraper

  • 📚 Complete, not capped: reads every matching job, even when the site only lists the first 10,000.
  • 🏢 Company and contact data by default: no extra settings, no extra cost per job.
  • ⚡ Fast and low-cost: lightweight requests, no proxy needed.
  • ♻️ Built for monitoring: incremental mode plus Telegram, Slack, Discord and webhook alerts.

What data can you extract from Arbeitsagentur?

GroupFields
Jobid, title, url, jobType (job / apprenticeship / internship / self-employment), occupation, occupations, startDate, postedAt, publishedFrom, modifiedAt
Locationlocation, postalCode, street, region (federal state), country, countryCode, latitude, longitude, locations (every site of a multi-site job), distanceKm from your search location
Pay & conditionssalaryMin, salaryMax, salaryCurrency, salaryPeriod (hour / month / year), salaryText, contractDuration (permanent / fixed-term / not stated), contractDurationMonths, contractEndDate, workingTime, isFullTime, isPartTime, isShiftWork, isMiniJob, isRemotePossible, remoteType, remotePercent
ApprenticeshipseducationRequired, apprenticeshipType, apprenticeshipPay (by year), studyProgram, studyForm
Company profilecompany, employerId, employerWebsite, employerLinks, employerDescription, employerSize, employerFoundedYear, employerHeadquarters, employerBenefits, employerKeywords, socialProfiles (LinkedIn, Instagram, XING, kununu, …), employerContact
ContactsextractedEmails, extractedPhones, extractedUrls from the ad and the company profile
Flags & sourceisTemporaryAgency, isPrivatePlacement, isDisabilityFriendly, isCareerChangeFriendly, isAgencySupported, isExternal, externalUrl (the original ad), sourcePartner, sourcePartnerUrl, cipherNumber
Description & rundescription, descriptionHtml, descriptionMarkdown, searchKeyword, searchLocation, source, scrapedAt, detailFetched, contentHash
Monitoring (incremental mode only)changeType, firstSeenAt, lastSeenAt, previousSeenAt, expiredAt, isRepost, repostOfId, repostDetectedAt

How often each field is filled, measured on 1,500 real jobs: 53 % have an email or phone (emails 43 %, phones 35 %), 52 % the employer's website, 35 % a company description, 17 % a benefits list, 12 % social media or an HR contact, 28 % a structured salary and 49 % say whether home office is possible. Apprenticeship fields are filled on apprenticeships only.


Key features

  • 📚 Every matching job, past the 10,000 limit. Larger searches are split into smaller ones automatically and merged without duplicates, so maxResults: 0 returns all matches.
  • 🏢 Employer profile on every job that has one. Website, description, size, founding year, headquarters, benefits, keywords, social media and the published HR contact, filled in rather than left empty.
  • 📇 Contacts for lead generation. German phone formats are handled correctly, and postcodes or reference numbers are never mistaken for phone numbers.
  • 🔎 Many searches in one run. Several search terms × several locations, merged and de-duplicated.
  • 🎚️ Every site filter, applied by the site. You never pay for jobs you filtered out. Partial employer and occupation-field names are resolved to the site's exact names, and Muenchen still finds München.
  • 🆕 Newest first. Sort by newest, recently updated or distance, so a capped run returns the jobs you care about.
  • 🧾 Consistent columns. Every record in a run has the same fields (missing values are null), and fields your settings can't fill are left out, so CSV and Excel exports stay clean.
  • 🤖 AI-ready. Compact mode, drop-empty mode and a description length limit keep payloads small for LLMs and MCP.

🚀 How to scrape Arbeitsagentur

  1. Enter one or more search terms (e.g. Pflegefachkraft) and locations (e.g. Hamburg), then pick filters. Or paste an arbeitsagentur.de URL.
  2. Set Max results (0 = every matching job).
  3. (Optional) Turn on incremental mode and a notification channel, then Schedule it.
  4. Click Start and download the results as JSON, CSV or Excel, or pull them from the API.

No login, cookies or proxy needed.

Quick-start example input

{
"searchTerms": ["Pflegefachkraft"],
"locations": ["Hamburg"],
"radiusKm": 25,
"postedWithinDays": 7,
"excludeTemporaryAgencies": true,
"maxResults": 200
}

This returns up to 200 nursing jobs within 25 km of Hamburg posted in the last week, without temporary staffing agencies, each with salary, contract, full description, the hiring company's profile and any email or phone in the ad: a ready-to-call list of employers hiring right now.


Input

Everything can be set in the visual editor or passed as JSON through the API. There are 40 inputs, grouped as in the editor. Leave everything empty to get the 25 newest jobs from all of Germany.

FieldTypeWhat it does
searchTermsarrayJob titles, skills or occupations in German or English. Each term runs as its own search. Empty = every job matching your filters.
locationsarrayGerman cities, towns, postcodes or federal states (Berlin, 10115, Bayern). Each runs as its own search. Empty = all of Germany.
radiusKmintegerDistance around each location, 0–200 km (site default 25).
startUrlsarrayarbeitsagentur.de search URLs (with any filters set on the site) or single job URLs.
maxResultsintegerCap on jobs across all searches (default 25; 0 = every matching job).
sortByenumrelevance (default), newest, recentlyModified or distance (needs a city or postcode with a radius).

🎚️ Filters

Several values inside one filter widen the search (OR); different filters narrow it (AND).

FieldTypeWhat it does
jobTypesarrayjob, apprenticeship (Ausbildung + dual study), internship, selfEmployment.
workingTimearrayfullTime, partTime, shiftNightWeekend, miniJob.
remoteOnlybooleanOnly jobs where home office is possible.
contractDurationarraypermanent, fixedTerm, notStated.
postedWithinDaysintegerOnly jobs published in the last N days (1–100).
employersarrayOnly these employers. A partial name matches every registered company name containing it.
occupationFieldsarrayThe site's occupation fields (Berufsfelder), e.g. Informatik, Altenpflege. Partial names allowed.
excludeTemporaryAgenciesbooleanHide temporary staffing agencies (Zeitarbeit).
excludePrivatePlacementbooleanHide private recruiters.
excludeExternalBoardsbooleanKeep only jobs posted on arbeitsagentur.de itself, not ones copied from partner job boards.
disabilityFriendlyOnlybooleanOnly jobs marked suitable for applicants with a severe disability.
careerChangersOnlybooleanOnly jobs open to career changers (Quereinstieg).

📄 Output

FieldTypeWhat it does
includeDetailsbooleanFetch each job's full page: description, education, agency flags, partner board (default on).
includeEmployerProfilebooleanAdd the employer's company profile and its contacts (default on).
descriptionFormatenumall, text, html or markdown.
descriptionMaxLengthintegerCut descriptions to N characters (0 = full length).
compactboolean19 core fields only, for AI agents and MCP clients.
excludeEmptyFieldsbooleanDrop null and empty fields.

♻️ Incremental monitoring and 🔔 Notifications inputs are described in their own sections below. ⚙️ Advanced: proxyConfiguration (optional, off by default), ignoreUrlFailures (skip unreadable start URLs) and maxRequestRetries (0–10).

More example inputs

Every apprenticeship and dual study place in Bavaria:

{ "jobTypes": ["apprenticeship"], "locations": ["Bayern"], "maxResults": 0 }

One employer's newest IT openings in three cities, with a daily Telegram alert:

{
"searchTerms": ["Informatiker", "Softwareentwickler"],
"locations": ["Berlin", "München", "Hamburg"],
"employers": ["Deutsche Bahn"],
"sortBy": "newest",
"maxResults": 0,
"incrementalMode": true,
"notifyOnlyChanges": true,
"telegramToken": "<your bot token>",
"telegramChatId": "@yourchannel"
}

A search you already built on the site:

{
"startUrls": [{ "url": "https://www.arbeitsagentur.de/jobsuche/suche?was=Elektriker&wo=Köln&umkreis=25" }],
"maxResults": 500
}

Output

Each dataset item is one job. A real record (description shortened):

{
"id": "10001-1003806153-S",
"title": "Kaufmännischer Mitarbeiter (w/m/d)",
"company": "SCHNOOR Industrieelektronik GmbH",
"url": "https://www.arbeitsagentur.de/jobsuche/jobdetail/10001-1003806153-S",
"jobType": "job",
"occupation": "Kaufmann/-frau - Büromanagement",
"occupations": ["Kaufmann/-frau - Büromanagement", "Projektassistent/in"],
"location": "Büdelsdorf",
"postalCode": "24782",
"street": "Fehmarnstr. 6",
"region": "Schleswig-Holstein",
"country": "Germany",
"countryCode": "DE",
"latitude": 54.323388,
"longitude": 9.698409,
"workingTime": ["fullTime"],
"isFullTime": true,
"startDate": "2026-10-06",
"postedAt": "2026-10-06",
"modifiedAt": "2026-10-06T16:44:57.524",
"salaryMin": 36000.0,
"salaryMax": 42000.0,
"salaryCurrency": "EUR",
"salaryPeriod": "year",
"salaryText": "36,000–42,000 EUR per year",
"contractDuration": "permanent",
"isRemotePossible": true,
"description": "Du hast Freude an organisatorischen und kaufmännischen Aufgaben und gleichzeitig ein Interesse an technischen Themen? …",
"extractedEmails": ["bewerbung@schnoor-ins.com"],
"extractedPhones": ["+49 4331 34 76 - 0"],
"employerWebsite": "http://www.schnoor-ins.com",
"employerDescription": "Wir bei SCHNOOR Industrieelektronik sorgen als eines der führenden Unternehmen im Bereich der professionellen Funktechnik …",
"employerSize": "mittelständisch",
"employerFoundedYear": 1990,
"employerHeadquarters": "Büdelsdorf",
"employerBenefits": ["Flexible Arbeitszeiten", "Homeoffice / Mobiles Arbeiten", "Betriebliche Altersvorsorge", "Jobrad", "Weiterbildungen"],
"employerKeywords": ["Elektrotechnik", "Funk", "Nachrichtentechnik", "Industrieelektronik", "Systemtechnik"],
"socialProfiles": {
"instagram": "https://www.instagram.com/schnoor_industrieelektronik/",
"linkedin": "https://de.linkedin.com/company/schnoor-industrieelektronik-gmbh-&-co-kg"
},
"source": "arbeitsagentur.de",
"scrapedAt": "2026-10-11T10:08:39.095955+00:00",
"detailFetched": true
}

What each setting adds:

  • Search results alone (details and employer profile off) already carry title, employer, place, dates, working time, salary, contract, home office and the partner-board link. Fastest and leanest.
  • Full details (on by default) add the description, education and apprenticeship data, agency and recruiter flags, the partner board, and contacts from the ad.
  • Employer profile (on by default) adds the company data and its published contacts.
  • Incremental mode adds the monitoring fields.

Compact mode returns 19 core fields, and excludeEmptyFields removes empty ones. The Output tab has two ready-made views: Overview (title, employer, place, state, occupation, working time, contract, salary, posting date, link) and Contacts & company (employer, website, emails, phones, company size, temp-agency flag, link).


♻️ How to monitor Arbeitsagentur with incremental mode

Schedule the Actor and turn on incremental mode. Each run compares against the previous one and returns only NEW / UPDATED / REAPPEARED jobs. Unchanged jobs are recognised before their details are fetched, so they cost neither time nor money.

First run (baseline)Next run (nothing changed)
Jobs foundallall
Detail pages fetchedallnone
Records returned & billedallnone

After the baseline, your cost depends on how much the job board changes, not on how many jobs you watch:

Daily churnof 1,000 trackedbillable recordsyou save
5 %1,0005095 %
15 %1,00015085 %
30 %1,00030070 %
FieldTypeWhat it does
incrementalModebooleanTrack jobs between runs and only return what changed.
stateKeystringName for the tracked search (derived from your search settings if empty).
emitUnchangedbooleanAlso return unchanged jobs.
emitExpiredbooleanAlso return jobs that were open last run and are gone now.
skipRepostsbooleanLeave out jobs an employer took down and posted again under a new link (same title, company and place). Not charged.

Setting up scheduled monitoring

  1. Configure search terms, locations and filters.
  2. Turn on Incremental mode and set Max results to 0 so the whole search is read (or keep a cap and sort by newest).
  3. Run it once to create the baseline.
  4. Open the Schedules tab and add a recurring run (e.g. every morning).
  5. Add an alert channel (next section) with Alert only on changes on.

🔔 How to set up Arbeitsagentur alerts

Get a message as soon as a matching job is posted. Fill in only the channels you want. Credentials are secret inputs: encrypted at rest, masked in the UI and never written to the run log.

FieldWhat to configure
✈️ telegramToken + telegramChatIdBot token from @BotFather + chat or channel ID
💬 slackWebhookUrlSlack Incoming Webhook URL
🎮 discordWebhookUrlDiscord channel webhook URL
🪝 webhookUrl + webhookHeadersStructured JSON to n8n, Make, Zapier or your own backend
notificationLimitJobs per message (1–20)
notifyOnlyChangesAlert only on new, updated and reappeared jobs

Each message lists title, employer, salary, change type and link. Channels work independently, so one failing can't stop the scrape.


💡 What can you do with Arbeitsagentur data?

Recruitment and staffing lead generation

Every job is a company hiring right now, often with an email or phone and the company website. Exclude temporary agencies and private recruiters for a clean list of direct employers.

B2B sales prospecting with company profiles

Segment hiring companies by size, founding year, headquarters and industry keywords, and enrich your CRM with their LinkedIn and Instagram links.

Salary benchmarking in Germany

Compare structured pay bands by occupation, federal state and contract type, and track them over time.

Labour market research

Count openings by occupation field, region, working time or home-office share, with complete nationwide totals.

Apprenticeship and early-career tracking

Collect every Ausbildung, dual study and internship place with education requirements and apprenticeship pay, for schools, career services and education platforms.

Feed AI agents and LLM pipelines

Send compact JSON straight into an LLM context, an MCP tool or a vector store.


💰 How much does it cost to scrape Arbeitsagentur?

This Actor uses Apify's pay-per-event model: a small fee when a run starts, plus a fee per job returned. The Pricing tab shows the current numbers. Full details and employer profiles are included at no extra cost per job.

Three things lower the bill: site-side filters (filtered-out jobs are never fetched or billed), incremental mode (after the baseline you pay only for changes) and skip re-posts. A maximum cost per run set in the Console is respected: the run stops cleanly at it.


🔌 Integrations & export

Export to JSON, CSV, Excel or an HTML table, or use the REST API and the JavaScript / Python clients. Run it on a schedule, connect it to Google Sheets, Slack, Make, Zapier and n8n, or use it as an MCP tool for AI agents.

Also covering the German job market: StepStone Job Scraper for DE + AT jobs, and kununu Company Profile Scraper for employer ratings that pair with this Actor's company profiles.


🔗 Using the API

Example with the Apify Python client:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run_input = {
"searchTerms": ["Elektriker"],
"locations": ["Köln"],
"radiusKm": 30,
"sortBy": "newest",
"maxResults": 100,
}
run = client.actor("corvuslab/arbeitsagentur-jobs-scraper").call(run_input=run_input)
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["company"], job.get("employerWebsite"), job.get("extractedEmails"))

❓ FAQ

Can it really get more than 10,000 jobs from one search? Yes. arbeitsagentur.de only lists the first 10,000 results of a search, so bigger searches are split into parts that fit and merged. One run returns up to 100,000 jobs; to cover the whole board (about 1 million listings), split it across runs, for example by federal state or occupation field.

Do I need an account for arbeitsagentur.de? No. The Actor reads the public job board.

Why is the salary empty on most jobs? Employers don't have to publish pay, and only about 28 % give a structured salary. Sometimes the pay is mentioned in the description instead. Salary figures are shown as the employer entered them, so an occasional wrong period (a monthly amount marked as yearly) comes from the ad itself.

Why do some jobs have no company website or description? These come from the employer's public profile, and not every company has filled one in. Jobs posted anonymously under a box number (cipherNumber) usually have no profile.

Why is there no email or phone on many jobs? Many employers ask you to apply through their own website. The application link is then in extractedUrls or externalUrl.

What are jobs from partner job boards? Part of the listings are copied from partner job boards. They have isExternal: true, externalUrl (the original ad) and sourcePartner. Use excludeExternalBoards to keep only jobs posted directly on the site.

Why are educationRequired and apprenticeshipPay empty? They apply only to apprenticeships and dual study places, and few of those state the pay. Use jobTypes: ["apprenticeship"] to focus on them.

Does it cover jobs outside Germany? The board also lists some jobs in Austria, Switzerland and other countries. country and countryCode let you keep or drop them.

Will I get EXPIRED jobs on every run? Only when a run reads your whole search: Max results 0 and fewer than 10,000 matches (narrow by location if needed). A run that stopped early can't tell which unread jobs are gone, so it never marks them expired by mistake.


This Actor only collects publicly available job ads and public employer profiles from arbeitsagentur.de. You are responsible for how you use the data, especially personal information such as a named HR contact, email address or phone number, and for complying with the site's terms and applicable law, including the GDPR and the German Federal Data Protection Act (BDSG) for outreach. This Actor is not affiliated with, endorsed by or sponsored by the Bundesagentur für Arbeit.


Keywords: arbeitsagentur scraper · arbeitsagentur.de scraper · arbeitsagentur api · bundesagentur für arbeit scraper · jobbörse scraper · german job scraper · germany jobs data · ausbildung scraper · apprenticeships germany · german employer contacts · company profiles germany · salary data germany · job monitoring · recruitment lead generation · export to CSV · export to Excel · no-code scraper · MCP tool for AI agents