# Arbeitsagentur Scraper (`parsebird/arbeitsagentur-scraper`) Actor

Scrape job listings from Arbeitsagentur.de (Bundesagentur für Arbeit) — Germany's largest public employment database with 1.5M+ active postings. Extract titles, employers, locations, contracts, descriptions, and 30+ fields per listing.

- **URL**: https://apify.com/parsebird/arbeitsagentur-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:** Jobs, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.89 / 1,000 job scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

### Arbeitsagentur Scraper

Scrape job listings from [Arbeitsagentur.de](https://www.arbeitsagentur.de/jobsuche) — Germany's largest public employment database operated by the Bundesagentur für Arbeit, with access to over 1.5 million active job postings across all industries and regions.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search by keyword, location, offer type, and dozens of filters — collect structured job data including titles, employers, locations, contracts, descriptions, schedules, and 30+ fields per listing, ready for analysis or integration.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

````

Apify Actor: parsebird/arbeitsagentur-scraper. Scrapes German job listings from Arbeitsagentur.de (Bundesagentur für Arbeit). Call via ApifyClient: client.actor("parsebird/arbeitsagentur-scraper").call(run\_input={"keyword": "Softwareentwickler", "location": "Berlin", "employment\_type": "job", "limit": 50}). Supports keyword (string), location (string), employment\_type (job/education/early\_career/self\_employed), radius (10\_km/15\_km/25\_km/50\_km/100\_km/200\_km), is\_remote (boolean), publication\_date (today/yesterday/last\_1\_week/last\_2\_weeks/last\_4\_weeks), work\_schedule (full\_time/part\_time/shift\_night\_weekend/part\_time\_job), fixed\_term (temporary/indefinite), startUrls (array of search URLs), limit (integer). Returns 30+ fields per job: title, employerName, location, contractDuration, jobType, descriptionText, salaryNote, isFullTime, isWorkFromHome, referenceNumber, publishingStartDate, url, and more. Full API spec: https://apify.com/parsebird/arbeitsagentur-scraper/api. Get your token: https://console.apify.com/settings/integrations.

````

### What does Arbeitsagentur Scraper do?

**Arbeitsagentur Scraper** extracts structured job listing data from [Arbeitsagentur.de](https://www.arbeitsagentur.de/jobsuche), the official job portal of the German Federal Employment Agency (Bundesagentur für Arbeit). It queries the Arbeitsagentur public REST API to collect comprehensive job data at scale — no browser rendering or login required, which makes it fast and cost-efficient.

You can search by keyword, location, offer type, radius, and dozens of filters, or paste Arbeitsagentur search URLs directly. The scraper enriches every listing with full detail data including descriptions, employer addresses, and contract information — making it a practical **Arbeitsagentur API alternative** for German job data collection.

- 🔍 **Keyword and location search** — find jobs by profession, skill, or industry across any German city, postal code, or region
- 🇩🇪 **Full coverage of the German job market** — access 1.5M+ active listings from Germany's largest public employment database
- 🔗 **Direct URL support** — paste any Arbeitsagentur search URL to replicate an exact search you've already refined on the site
- 📋 **30+ fields per listing** — collect job titles, employers, locations, contracts, descriptions, schedules, salary notes, and more
- 📄 **Full description enrichment** — every job is individually fetched for complete description text, employer address, and metadata
- ⚡ **API-based extraction** — no browser overhead means faster runs and lower compute costs
- 📅 **Publication date filters** — narrow results to today, yesterday, last week, or last month
- 🔄 **Schedule recurring runs** — monitor the German job market over time with [Apify scheduling](https://docs.apify.com/platform/schedules)
- 🔗 **API access and integrations** — connect to Google Sheets, Zapier, Make, webhooks, or any workflow via the [Apify API](https://docs.apify.com/api/v2)

### What data can you extract from Arbeitsagentur?

| Field | Description |
|-------|-------------|
| `title` | Job title as listed on Arbeitsagentur.de |
| `employerName` | Hiring company or organization name |
| `location` | Human-readable location (postal code, city, region, country) |
| `contractDuration` | Contract type: UNBEFRISTET (permanent), BEFRISTET (fixed-term), or KEINE_ANGABE (not specified) |
| `jobType` | Offer category: ARBEIT (employment), AUSBILDUNG (training), etc. |
| `descriptionText` | Full job description text |
| `salaryNote` | Salary indication when provided by the employer |
| `isFullTime` / `isWorkFromHome` | Full-time and remote work indicators |
| `isTemporaryEmployment` | Whether the role is through a staffing agency |
| `isDisabilityRequired` | Accessibility designation for disabled applicants |
| `publishingStartDate` | Date the listing was first published |
| `startDate` / `entryPeriod` | Expected start date for the position |
| `referenceNumber` | Unique Arbeitsagentur reference number |
| `url` | Direct link to the job detail page on Arbeitsagentur.de |
| `externalURL` | Link to the original posting when hosted externally |
| `employerAddress` | Employer street address when available |
| `employerWebsite` | Employer website URL when available |
| `mainJob` | Occupational classification from the Bundesagentur system |

Some fields may be empty when the original listing does not include that information.

### How to scrape Arbeitsagentur job listings

1. Go to the [Arbeitsagentur Scraper](https://apify.com/parsebird/arbeitsagentur-scraper) page on Apify Store
2. Click **Try for free** to open the Actor console
3. Enter a **Keyword** (e.g. "Softwareentwickler", "Krankenpfleger", "Data Engineer") and **Location** (e.g. "Berlin", "München", "Hamburg")
4. Select an **Offer Type** — regular employment, education, internship, or self-employment
5. Adjust **Filters** like publication date, work schedule, contract duration, or remote-only
6. Set **Max Results** to control how many jobs to collect (default: 50)
7. Click **Start** and wait for the run to finish
8. Download your data in **JSON, CSV, Excel**, or connect via the **Apify API**

Alternatively, paste one or more **Arbeitsagentur search URLs** into the Direct Search URLs field to replicate searches you've already configured on [arbeitsagentur.de/jobsuche](https://www.arbeitsagentur.de/jobsuche).

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `keyword` | string | No | `"Softwareentwickler"` | Job title, skill, or profession to search for |
| `location` | string | No | `"Berlin"` | City, postal code, or region to search around |
| `employment_type` | string | No | `"job"` | Offer category: `job`, `education`, `early_career`, `self_employed` |
| `radius` | string | No | — | Search radius: `10_km`, `15_km`, `25_km`, `50_km`, `100_km`, `200_km` |
| `is_remote` | boolean | No | `false` | When true, only returns remote / home-office jobs |
| `startUrls` | array | No | — | Direct Arbeitsagentur search URLs |
| `publication_date` | string | No | — | Recency filter: `today`, `yesterday`, `last_1_week`, `last_2_weeks`, `last_4_weeks` |
| `work_schedule` | array | No | — | Schedule filters: `full_time`, `part_time`, `shift_night_weekend`, `part_time_job` |
| `fixed_term` | array | No | — | Contract duration: `temporary`, `indefinite` |
| `beginning_date` | array | No | — | Preferred start periods (e.g. `from_now_on`, `june_2026`, `july_2026`) |
| `is_suitable_for_career_change` | boolean | No | `false` | Focus on career-change-friendly roles |
| `disabled_only_jobs` | boolean | No | `false` | Only disability-accessible listings |
| `include_agency_jobs` | boolean | No | `false` | Include recruitment agency listings |
| `exclude_external_jobs` | boolean | No | `false` | Remove listings from external job boards |
| `exclude_temporary_work` | boolean | No | `false` | Remove Zeitarbeit / labor-leasing roles |
| `limit` | integer | No | `50` | Maximum number of jobs to collect |

#### Choosing the right input method

**Use the query-builder fields** when you want a controlled, repeatable search that can be adjusted through structured inputs — keyword, location, offer type, radius, publication date, schedule, and contract filters. This approach is best for automated pipelines and scheduled runs where consistency matters.

**Use `startUrls`** when you already have one or more Arbeitsagentur search-result URLs and want to reuse that exact search scope without rebuilding it manually. This is ideal for monitoring specific searches you've refined on the Arbeitsagentur website.

**Narrower filters** — such as a specific city, a short radius, or a recent publication date — produce more targeted datasets that require less cleanup. **Broader filters** improve coverage and are better for market-wide research.

**Start with a small limit** (e.g. 50) to validate the results match your expectations. Increase the limit once you're confident in the query. For recurring monitoring, combine with [Apify scheduling](https://docs.apify.com/platform/schedules) and set the publication date to `today` or `last_1_week`.

### Example inputs

#### Keyword and location search

```json
{
    "keyword": "Data Engineer",
    "location": "Berlin",
    "employment_type": "job",
    "radius": "25_km",
    "is_remote": true,
    "publication_date": "last_1_week",
    "limit": 50
}
````

#### Direct URL run

```json
{
    "startUrls": [
        "https://www.arbeitsagentur.de/jobsuche/suche?angebotsart=1&was=softwareentwickler&wo=Hamburg&umkreis=15"
    ],
    "exclude_external_jobs": true,
    "include_agency_jobs": false,
    "work_schedule": ["full_time"],
    "limit": 100
}
```

#### Targeted accessibility and contract filtering

```json
{
    "keyword": "Sachbearbeiter",
    "location": "Köln",
    "radius": "10_km",
    "disabled_only_jobs": true,
    "fixed_term": ["indefinite"],
    "exclude_temporary_work": true,
    "publication_date": "last_2_weeks",
    "limit": 75
}
```

### Output example

```json
{
    "allianzpartnerName": "Jobbörse-direkt.de - Maxime Media GmbH",
    "allianzpartnerUrl": "www.jobboerse-direkt.de",
    "url": "https://www.arbeitsagentur.de/jobsuche/jobdetail/12513-0007597600-S",
    "cipherNumber": null,
    "employerName": "A. u. K. Müller GmbH & Co. KG",
    "contractDuration": "UNBEFRISTET",
    "contractDurationMonths": null,
    "contractDurationLimitedTo": null,
    "descriptionText": "Teilen Sie unsere Faszination ... Jetzt bewerben",
    "employerCustomerNumberHash": null,
    "entryPeriod": "2025-07-01",
    "externalURL": "https://www.jobboerse-direkt.de/stellenangebote/Werkzeugmechaniker-m-w-d-7597600",
    "isExternal": true,
    "isDisabilityRequired": false,
    "isFullTime": true,
    "isMarginalEmployment": false,
    "isPartTimeAfternoon": false,
    "isPartTimeEvening": false,
    "isPartTimeFlexible": false,
    "isPartTimeMorning": false,
    "isPrivateAgency": false,
    "isTemporaryEmployment": false,
    "isWorkFromHome": false,
    "jobType": "ARBEIT",
    "location": "40595, Düsseldorf, NORDRHEIN_WESTFALEN, DEUTSCHLAND",
    "mainJob": "Helfer/in - Feinmechanik, Werkzeugbau",
    "nightOrWeekendShift": false,
    "publishingStartDate": "2025-07-01",
    "referenceNumber": "12513-0007597600-S",
    "salaryNote": "KEINE_ANGABEN",
    "startDate": "2025-07-01",
    "title": "Werkzeugmechaniker (m/w/d) im Bereich CAM-Programmierung",
    "applicationEmail": null,
    "firstPublicationDate": "2025-07-01",
    "lastUpdatedAt": "2025-07-19T21:17:22.000",
    "employerAddress": "Berliner Platz 2, 53111 Bonn, DEUTSCHLAND",
    "employerWebsite": null,
    "employerIndustry": null,
    "employerFirmSize": null
}
```

Download results in JSON, CSV, Excel, or XML format.

### How to use Arbeitsagentur Scraper with the API

#### Python API example

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("parsebird/arbeitsagentur-scraper").call(run_input={
    "keyword": "Softwareentwickler",
    "location": "München",
    "employment_type": "job",
    "publication_date": "last_1_week",
    "limit": 100,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['title']} — {item['employerName']} — {item['location']}")
```

#### JavaScript API example

```javascript
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("parsebird/arbeitsagentur-scraper").call({
    keyword: "Softwareentwickler",
    location: "München",
    employment_type: "job",
    publication_date: "last_1_week",
    limit: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.log(`${item.title} — ${item.employerName} — ${item.location}`);
});
```

Get your API token at [console.apify.com/settings/integrations](https://console.apify.com/settings/integrations). See the full [API documentation](https://apify.com/parsebird/arbeitsagentur-scraper/api) for details.

### Use cases

- **German job market research** — Analyze which roles, industries, and regions are hiring most actively across Germany. Track employment trends, seasonal patterns, and regional demand using data from the country's official job database.
- **Recruiting and talent sourcing** — Build structured datasets of current openings to support candidate sourcing, outreach planning, and talent pipeline decisions. Filter by location, schedule, and contract type to match specific hiring needs.
- **Competitive hiring intelligence** — Monitor which employers are actively posting and for which roles. Schedule recurring runs to detect hiring spikes, new market entries, or workforce expansion signals.
- **Lead generation for staffing agencies** — Collect employer names, locations, and job details to build targeted prospect lists for recruitment and staffing outreach.
- **Academic and policy research** — Study labor market dynamics, accessibility of employment for disabled applicants, distribution of temporary vs. permanent contracts, and regional employment gaps using Germany's official government data.
- **Job aggregation and data integration** — Feed structured Arbeitsagentur listings into your own job board, newsletter, internal tools, or data warehouse via the Apify API.

### How much does it cost to scrape Arbeitsagentur?

| Event | Price per event | Price per 1,000 |
|-------|----------------|-----------------|
| `job-scraped` | $0.00189 | **$1.89** |

One event is charged each time a job listing is collected and saved to the dataset. You only pay for the jobs actually returned.

**Cost examples:**

| Jobs | Cost |
|------|------|
| 50 (default run) | $0.09 |
| 100 | $0.19 |
| 1,000 | $1.89 |
| 5,000 | $9.45 |
| 10,000 | $18.90 |

Apify offers a **free trial** with $5 of platform credits — enough to scrape over 2,600 Arbeitsagentur job listings at no cost.

### Tips for best results

**Use German-language keywords** — Arbeitsagentur is a German-language platform. Search for "Softwareentwickler" rather than "Software Developer", or "Krankenpfleger" rather than "Nurse" to get the most relevant results. English job titles may still return some international listings.

**Use `startUrls` for precision** — Paste an Arbeitsagentur search URL when you want to replicate a search you've already configured on the website. This is especially useful for recurring monitoring with consistent parameters.

**Start small, then scale** — Begin with `limit` set to 50 to validate the output structure and data quality. Increase the collection size once the results match your expectations.

**Use publication date filters for monitoring** — Set `publication_date` to `today` or `last_1_week` for fresh job signals. Use `last_4_weeks` when building larger research datasets.

**Combine filters for precision** — Pair `location` and `radius` to control geographic scope. Add `work_schedule`, `fixed_term`, or `exclude_temporary_work` to narrow results to exactly the listings you need.

**Expect some empty fields** — Not every Arbeitsagentur listing includes salary data, employer website, or detailed company information. Empty values reflect what the employer or the Bundesagentur system provides, not a scraper limitation.

### FAQ

**How many jobs can I scrape from Arbeitsagentur?**
Set the `limit` parameter to control how many listings to collect. The scraper stops when it reaches your limit or when no more matching results are available. The Arbeitsagentur database contains over 1.5 million active listings.

**Can I use an Arbeitsagentur search URL instead of entering filters?**
Yes. Paste one or more [Arbeitsagentur search URLs](https://www.arbeitsagentur.de/jobsuche) into the `startUrls` field. The scraper extracts the search parameters from each URL and uses them directly.

**Does the scraper collect full job descriptions?**
Yes. Every listing is individually enriched through the Arbeitsagentur detail API to include the full `descriptionText`, employer address, and additional metadata not available in search results alone.

**Can I filter by contract type?**
Yes. Use `fixed_term` with `temporary` (befristet) or `indefinite` (unbefristet) to filter by contract duration. You can also use `exclude_temporary_work` to remove Zeitarbeit roles.

**Can I search for remote jobs only?**
Yes. Enable `is_remote` to limit results to jobs marked as remote or home-office friendly on Arbeitsagentur.

**Does the scraper need a proxy?**
No. The Arbeitsagentur public API works from datacenter IPs without requiring any proxy configuration. No login is needed.

**Can I schedule recurring runs?**
Yes. Use [Apify scheduling](https://docs.apify.com/platform/schedules) to run the scraper daily, weekly, or at any interval. Combine with [webhooks](https://docs.apify.com/platform/integrations/webhooks) or [integrations](https://docs.apify.com/platform/integrations) to automate your German job data pipeline.

**Can I access the data via API?**
Yes. Every run produces a dataset accessible via the [Apify API](https://docs.apify.com/api/v2). Integrate with Python, JavaScript, Google Sheets, Zapier, Make, or any HTTP-capable tool. See the [API tab](https://apify.com/parsebird/arbeitsagentur-scraper/api) for code examples.

**What does the `employment_type` field control?**
It maps to the Bundesagentur "Angebotsart" parameter. Use `job` for regular employment, `education` for Ausbildung and dual study programs, `early_career` for internships and trainee positions, and `self_employed` for self-employment opportunities.

**What do the German contract values mean?**
`UNBEFRISTET` means a permanent (indefinite) contract. `BEFRISTET` means a fixed-term contract. `KEINE_ANGABE` means the duration was not specified by the employer.

### Is it legal to scrape Arbeitsagentur?

This Actor collects publicly available job listing data from the [Bundesagentur für Arbeit](https://www.arbeitsagentur.de/) through its documented public REST API. The API is openly accessible without authentication beyond a public API key, and is [documented on GitHub](https://github.com/bundesAPI/jobsuche-api) as part of the German government's open data initiative. The scraper does not bypass login walls, access private accounts, or collect personal user data. The data collected consists of job postings that employers and the public employment service have intentionally made available for recruitment purposes. Users are responsible for ensuring their use of the data complies with applicable laws and the platform's terms. For more information, read Apify's blog post on [web scraping legality](https://blog.apify.com/is-web-scraping-legal/).

### Related job scrapers

| Actor | Description |
|-------|-------------|
| [Dice Jobs Scraper](https://apify.com/parsebird/dice-jobs-scraper) | Extract tech job listings from Dice.com with 30+ fields per listing |
| [Hiring.cafe Jobs Scraper](https://apify.com/parsebird/hiring-cafe-scraper) | Scrape 2.8M+ job listings aggregated from 46 ATS platforms |
| [Wellfound Jobs Scraper](https://apify.com/parsebird/wellfound-jobs-scraper) | Extract startup job data with salary, equity, and visa sponsorship |
| [XING Jobs Scraper](https://apify.com/parsebird/xing-jobs-scraper) | Scrape German job listings from XING |
| [WWR Jobs Scraper](https://apify.com/parsebird/wwr-jobs-scraper) | Extract remote job listings from We Work Remotely |
| [YC Jobs Scraper](https://apify.com/parsebird/yc-jobs-scraper) | Scrape Y Combinator startup job listings |

Browse all ParseBird actors on the [Apify Store](https://apify.com/parsebird).

# Actor input Schema

## `keyword` (type: `string`):

Job title, skill, or profession to search for (e.g. "Softwareentwickler", "Krankenpfleger", "Data Engineer"). Leave empty when using direct search URLs.

## `location` (type: `string`):

City, postal code, or region to search around (e.g. "Berlin", "10115", "Bayern").

## `employment_type` (type: `string`):

Category of job offer. Maps to the Bundesagentur "Angebotsart" parameter.

## `radius` (type: `string`):

Distance in kilometers around the location. Leave empty to search all of Germany.

## `is_remote` (type: `boolean`):

When enabled, only returns jobs marked as remote or home-office friendly.

## `startUrls` (type: `array`):

Paste one or more Arbeitsagentur search-result URLs. Use this instead of the keyword/location fields when you want to reuse a search you configured on arbeitsagentur.de.

## `publication_date` (type: `string`):

Only return listings published within this time window.

## `work_schedule` (type: `array`):

Filter by one or more work schedule types.

## `fixed_term` (type: `array`):

Filter by contract type — temporary (befristet) or permanent (unbefristet).

## `beginning_date` (type: `array`):

One or more preferred start dates for the position.

## `is_suitable_for_career_change` (type: `boolean`):

When enabled, focuses on roles marked as suitable for career changers (Quereinstieg).

## `disabled_only_jobs` (type: `boolean`):

When enabled, only returns listings marked as suitable for applicants with disabilities.

## `include_agency_jobs` (type: `boolean`):

When enabled, includes listings from private recruitment agencies alongside direct employer postings.

## `exclude_external_jobs` (type: `boolean`):

When enabled, removes listings that redirect to external job boards or third-party sites.

## `exclude_temporary_work` (type: `boolean`):

When enabled, removes temporary-work and labor-leasing (Zeitarbeit) roles from results.

## `limit` (type: `integer`):

Maximum number of job listings to collect. Start with a small number to validate output, then increase for larger runs.

## Actor input object example

```json
{
  "keyword": "Softwareentwickler",
  "location": "Berlin",
  "employment_type": "job",
  "radius": "",
  "is_remote": false,
  "startUrls": [],
  "publication_date": "",
  "work_schedule": [],
  "fixed_term": [],
  "beginning_date": [],
  "is_suitable_for_career_change": false,
  "disabled_only_jobs": false,
  "include_agency_jobs": false,
  "exclude_external_jobs": false,
  "exclude_temporary_work": false,
  "limit": 50
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keyword": "Softwareentwickler",
    "location": "Berlin",
    "employment_type": "job",
    "limit": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/arbeitsagentur-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keyword": "Softwareentwickler",
    "location": "Berlin",
    "employment_type": "job",
    "limit": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/arbeitsagentur-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keyword": "Softwareentwickler",
  "location": "Berlin",
  "employment_type": "job",
  "limit": 50
}' |
apify call parsebird/arbeitsagentur-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parsebird/arbeitsagentur-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Arbeitsagentur Scraper",
        "description": "Scrape job listings from Arbeitsagentur.de (Bundesagentur für Arbeit) — Germany's largest public employment database with 1.5M+ active postings. Extract titles, employers, locations, contracts, descriptions, and 30+ fields per listing.",
        "version": "1.1",
        "x-build-id": "ZxzdoiMzC6dadFuvl"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parsebird~arbeitsagentur-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parsebird-arbeitsagentur-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/parsebird~arbeitsagentur-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parsebird-arbeitsagentur-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/parsebird~arbeitsagentur-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parsebird-arbeitsagentur-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Job title, skill, or profession to search for (e.g. \"Softwareentwickler\", \"Krankenpfleger\", \"Data Engineer\"). Leave empty when using direct search URLs."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, postal code, or region to search around (e.g. \"Berlin\", \"10115\", \"Bayern\")."
                    },
                    "employment_type": {
                        "title": "Offer Type",
                        "enum": [
                            "job",
                            "education",
                            "early_career",
                            "self_employed"
                        ],
                        "type": "string",
                        "description": "Category of job offer. Maps to the Bundesagentur \"Angebotsart\" parameter.",
                        "default": "job"
                    },
                    "radius": {
                        "title": "Search Radius",
                        "enum": [
                            "",
                            "10_km",
                            "15_km",
                            "25_km",
                            "50_km",
                            "100_km",
                            "200_km"
                        ],
                        "type": "string",
                        "description": "Distance in kilometers around the location. Leave empty to search all of Germany.",
                        "default": ""
                    },
                    "is_remote": {
                        "title": "Remote / Home Office Only",
                        "type": "boolean",
                        "description": "When enabled, only returns jobs marked as remote or home-office friendly.",
                        "default": false
                    },
                    "startUrls": {
                        "title": "Direct Search URLs",
                        "type": "array",
                        "description": "Paste one or more Arbeitsagentur search-result URLs. Use this instead of the keyword/location fields when you want to reuse a search you configured on arbeitsagentur.de.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "publication_date": {
                        "title": "Published Within",
                        "enum": [
                            "",
                            "today",
                            "yesterday",
                            "last_1_week",
                            "last_2_weeks",
                            "last_4_weeks"
                        ],
                        "type": "string",
                        "description": "Only return listings published within this time window.",
                        "default": ""
                    },
                    "work_schedule": {
                        "title": "Work Schedule",
                        "type": "array",
                        "description": "Filter by one or more work schedule types.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "full_time",
                                "part_time",
                                "shift_night_weekend",
                                "part_time_job"
                            ],
                            "enumTitles": [
                                "Full-time (Vollzeit)",
                                "Part-time (Teilzeit)",
                                "Shift / night / weekend",
                                "Mini-job (geringfügig)"
                            ]
                        },
                        "default": []
                    },
                    "fixed_term": {
                        "title": "Contract Duration",
                        "type": "array",
                        "description": "Filter by contract type — temporary (befristet) or permanent (unbefristet).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "temporary",
                                "indefinite"
                            ],
                            "enumTitles": [
                                "Temporary (befristet)",
                                "Permanent (unbefristet)"
                            ]
                        },
                        "default": []
                    },
                    "beginning_date": {
                        "title": "Preferred Start Period",
                        "type": "array",
                        "description": "One or more preferred start dates for the position.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "from_now_on",
                                "may_2026",
                                "june_2026",
                                "july_2026",
                                "august_2026",
                                "september_2026",
                                "october_2026",
                                "november_2026",
                                "december_2026",
                                "january_2027",
                                "february_2027",
                                "march_2027",
                                "april_2027",
                                "may_2027",
                                "june_2027",
                                "july_2027",
                                "august_2027",
                                "september_2027",
                                "october_2027",
                                "february_2028",
                                "april_2028"
                            ],
                            "enumTitles": [
                                "From now on",
                                "May 2026",
                                "June 2026",
                                "July 2026",
                                "August 2026",
                                "September 2026",
                                "October 2026",
                                "November 2026",
                                "December 2026",
                                "January 2027",
                                "February 2027",
                                "March 2027",
                                "April 2027",
                                "May 2027",
                                "June 2027",
                                "July 2027",
                                "August 2027",
                                "September 2027",
                                "October 2027",
                                "February 2028",
                                "April 2028"
                            ]
                        },
                        "default": []
                    },
                    "is_suitable_for_career_change": {
                        "title": "Career Change Friendly",
                        "type": "boolean",
                        "description": "When enabled, focuses on roles marked as suitable for career changers (Quereinstieg).",
                        "default": false
                    },
                    "disabled_only_jobs": {
                        "title": "Disability-Friendly Only",
                        "type": "boolean",
                        "description": "When enabled, only returns listings marked as suitable for applicants with disabilities.",
                        "default": false
                    },
                    "include_agency_jobs": {
                        "title": "Include Recruitment Agency Listings",
                        "type": "boolean",
                        "description": "When enabled, includes listings from private recruitment agencies alongside direct employer postings.",
                        "default": false
                    },
                    "exclude_external_jobs": {
                        "title": "Exclude External Job Board Listings",
                        "type": "boolean",
                        "description": "When enabled, removes listings that redirect to external job boards or third-party sites.",
                        "default": false
                    },
                    "exclude_temporary_work": {
                        "title": "Exclude Temporary Work",
                        "type": "boolean",
                        "description": "When enabled, removes temporary-work and labor-leasing (Zeitarbeit) roles from results.",
                        "default": false
                    },
                    "limit": {
                        "title": "Max Results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of job listings to collect. Start with a small number to validate output, then increase for larger runs.",
                        "default": 50
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
