Bundesagentur Job Scraper — German Vacancies avatar

Bundesagentur Job Scraper — German Vacancies

Pricing

from $2.25 / 1,000 job scrapeds

Go to Apify Store
Bundesagentur Job Scraper — German Vacancies

Bundesagentur Job Scraper — German Vacancies

Search Germany's Bundesagentur für Arbeit public Jobsuche feed and return normalized vacancies with employer, location, contract, remote-work and date signals. Use for recruitment research and labor-market analysis; not for applicant data.

Pricing

from $2.25 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Bundesagentur Job Scraper is an Apify Actor for searching Germany's Bundesagentur fur Arbeit public Jobsuche feed and returning one normalized vacancy record per job. It accepts a free-text job search query, an optional location and radius, or known public BA reference numbers. Each record can include employer, location, postal code, region, offer type, contract duration, work-time flags, remote-work signal, career-change suitability, description, salary text when published, timing fields, external application URL, source URL, and scrape timestamp.

Use it for recruitment research and labor-market analysis when you need current public German vacancy data in a structured dataset. The Actor is usable through Apify and through Apify MCP, and it writes one dataset item per validated job record.

Best fit and connected workflows

This Actor fits workflows centered on public German vacancy data from the Bundesagentur feed.

It is a strong match when you want to:

  • search by role, skill, or occupation in German job-market language,
  • focus on a city, district, postal code, or German region with a search radius,
  • enrich known BA reference numbers from an earlier collection,
  • capture employer, location, contract, work-time, and remote-work signals in one normalized record,
  • feed vacancy data into recruitment research, labor-market analysis, alerting, or agent workflows.

For adjacent job-board workflows, these verified related Actors cover other source scopes:

Practical scenario

Marta is preparing a labor-market snapshot for software roles in Berlin. She starts with:

  • searchQuery: "Softwareentwickler"
  • location: "Berlin"
  • radiusKm: 25
  • maxResults: 20

The Actor returns records with fields such as:

  • title
  • companyName
  • location
  • workTime
  • remotePossible
  • postedAt
  • externalUrl
  • sourceUrl
  • scrapedAt

Marta uses the employer, work arrangement, and publication date to shortlist current vacancies. She then opens externalUrl for the public application page or checks sourceUrl for the Bundesagentur detail record before continuing her analysis.

Input

FieldTypeDescription
searchQuerystringFree-text role, skill, or occupation query for Bundesagentur Jobsuche. Defaults to Softwareentwickler.
locationstringCity, district, postal code, or German region to search around. Defaults to Berlin.
radiusKmintegerSearch radius in km around location. Choose 0, 10, 15, 25, 50, 100, or 200. Defaults to 25.
jobReferenceNumbersarray of stringKnown public BA reference numbers to enrich directly. These take precedence over search filters.
maxResultsintegerMaximum number of validated jobs written and billed by the run. Range: 1 through 500. Defaults to 20.
includeJobDetailsbooleanFetches the public BA detail record for each listing to include description, contract, work-time, and remote-work fields. Defaults to true.
responseFormatstringControls returned job-description length for agent workflows. Choose concise or detailed. Defaults to concise.

Input example

{
"searchQuery": "Data Engineer",
"location": "Muenchen",
"radiusKm": 25,
"jobReferenceNumbers": [],
"maxResults": 10,
"includeJobDetails": true,
"responseFormat": "concise"
}

Output

Each dataset item is one normalized public vacancy record.

FieldTypeDescription
jobIdstringStable Bundesagentur offer reference number.
titlestringPublished vacancy title.
companyNamestring or nullEmployer name published with the listing.
locationstring or nullPublished work location text.
postalCodestring or nullPublished work-location postal code.
regionstring or nullPublished work-location region.
employmentOfferTypestring or nullBundesagentur employment offer category.
contractDurationstring or nullPublished contract-duration category.
workTimearray of stringPublished work-time flags.
remotePossibleboolean or nullWhether the public detail record marks remote work as possible.
careerChangeSuitableboolean or nullWhether the public detail record marks the role as suitable for career changers.
descriptionstring or nullPlain-text public job description, truncated according to responseFormat.
salaryTextstring or nullPublic salary statement when supplied.
postedAtstring or nullPublic publication date or timestamp.
updatedAtstring or nullPublic listing modification timestamp.
availableFromstring or nullPublished requested start date.
externalUrlstring or nullPublic external job or application URL, when supplied.
sourceUrlstringPublic Bundesagentur detail API route used for this record.
scrapedAtstringISO 8601 time when this record was collected.
sourcestringSource identifier.

Output example

{
"jobId": "10000-1000000000-S",
"title": "Softwareentwickler/in",
"companyName": "Example GmbH",
"location": "Berlin, Deutschland",
"postalCode": "10115",
"region": "Berlin",
"employmentOfferType": "ARBEIT",
"contractDuration": "UNBEFRISTET",
"workTime": ["full-time"],
"remotePossible": false,
"careerChangeSuitable": true,
"description": "Develop software systems...",
"salaryText": "4,000 EUR monthly",
"postedAt": "2026-07-17",
"updatedAt": "2026-07-17T07:03:33.973",
"availableFrom": "2026-08-01",
"externalUrl": "https://careers.example.com/jobs/123",
"sourceUrl": "https://rest.arbeitsagentur.de/jobboerse/jobsuche-service/pc/v4/jobdetails/...",
"scrapedAt": "2026-07-19T14:00:00.000Z",
"source": "bundesagentur-fuer-arbeit"
}

How it works

This Actor searches the public Bundesagentur fur Arbeit Jobsuche feed and writes normalized vacancy records to the default dataset. It supports two collection paths:

  • a free-text search query with optional location and radius, or
  • explicit public BA reference numbers for direct enrichment.

When includeJobDetails is enabled, the Actor fetches the public detail record for each listing so the output can include description, contract, work-time, and remote-work fields. The Actor also writes compact run outcome records in the default key-value store:

  • OUTPUT
  • RUN_SUMMARY

The dataset view presents a table of normalized public vacancies with title, employer, location, type, contract, work time, remote signal, posted date, and external listing link.

Pricing

This Actor uses Pay per event plus Apify platform usage. The charged events are:

  • Actor start
  • Job scraped

Each persisted job is charged as a Job scraped event, and the run can also incur Apify platform compute and storage usage. The maxResults input sets a cap on how many validated jobs can be written and billed in one run.

For example, a run that collects twenty jobs creates up to twenty job events, plus one actor-start event, plus platform usage. Review the live Pricing tab for the current event prices and platform-usage details before running.

Use with AI agents (MCP)

This Actor is available as an Apify Actor usable through Apify MCP. It exposes a precise tool for collecting public Bundesagentur vacancies with structured, provenance-rich output.

Actor identity: khadinakbar/bundesagentur-job-scraper

A practical agent prompt:

Search public Bundesagentur vacancies for Data Engineer roles in Berlin within 25 km. Return concise job records, keep the result set bounded, and cite sourceUrl and scrapedAt for each record. Then summarize the collection outcome and include the dataset link for downstream review.

What to expect from the output:

  • dataset points to the default dataset items endpoint.
  • output contains the compact run outcome.
  • runSummary contains public-API, pagination, validation, and billing diagnostics.

Provenance guidance:

  • use sourceUrl as the primary public API reference for each record,
  • use scrapedAt to understand when the record was collected,
  • use externalUrl as the public application link when it is supplied.

Scope guidance:

  • the Actor returns public vacancy data from the Bundesagentur feed,
  • it centers on normalized job records, not applicant or recruiter contact data.

Pagination and cost guidance:

  • maxResults sets the collection and billing cap for validated jobs,
  • use smaller result sets for narrow research tasks,
  • use jobReferenceNumbers when refreshing known BA offers instead of repeating a broad search.

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const input = {
searchQuery: 'Data Engineer',
location: 'Berlin',
radiusKm: 25,
maxResults: 10,
includeJobDetails: true,
responseFormat: 'concise',
};
const run = await client.actor('khadinakbar/bundesagentur-job-scraper').call(input);
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log('Run finished:', run.id);
console.log('Jobs returned:', dataset.items.length);
console.log(dataset.items);

Set APIFY_TOKEN in your environment before running the script.

Best results and outcome guidance

Use a role name that matches German vacancy wording, then pair it with a specific location for a focused search. radiusKm fits the workflow when it matches the research area you need, and jobReferenceNumbers is useful for direct enrichment of known listings.

For agent workflows, concise keeps descriptions shorter while preserving the same normalized fields. Use detailed when downstream processing benefits from longer public descriptions. When you need a stable sample size, set maxResults before running so the dataset and billing scope stay aligned.

Design note

I found that the live dataset contract requires jobId, title, workTime, sourceUrl, scrapedAt, and source on every record, so the README should always frame those as the stable minimum output.

FAQ

When should I use searchQuery versus jobReferenceNumbers?

Use searchQuery for discovery and jobReferenceNumbers when you already have public BA reference numbers from a prior collection and want to enrich them directly.

When is location useful?

Use location when you want vacancies centered on a city, district, postal code, or German region. Combine it with radiusKm for area-based searches.

What changes when includeJobDetails is turned off?

The Actor can return a listing-focused feed with less detail. Fields that depend on the public detail record, such as description, contract, work-time, and remote-work signals, are centered on the listing data that is available.

Which fields are most useful for routing into downstream workflows?

For routing, start with title, companyName, location, workTime, remotePossible, postedAt, and externalUrl. Use sourceUrl and scrapedAt for provenance.

Choose the related Actors when your workflow needs another job board or region-specific source. Keep the market and source scope aligned with the research brief.

Responsible use

This Actor collects public vacancy data from the Bundesagentur fur Arbeit Jobsuche API and includes provenance fields so you can trace each record back to the source. Use the output in ways that respect applicable law, source terms, and privacy expectations, and keep your workflows focused on public job listings.