# Ausbildung.de Scraper (`solidcode/ausbildung-scraper`) Actor

\[💰 $1.3 / 1K] Scrape apprenticeship & vocational-training listings from Ausbildung.de. Get title, company, location, profession, training type & start date. Search by keyword & location, filter by training type & radius, with optional full descriptions.

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

## Pricing

from $1.30 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Ausbildung.de Scraper

Pull apprenticeship and vocational-training listings from Ausbildung.de — Germany's largest apprenticeship board with 96,000+ active positions — at scale, with title, company, subsidiary, location, profession, training type, start date, and application options on every listing. Search by profession keyword and city, narrow by training type and radius, or paste ready-made Ausbildung.de search URLs. Built for recruiters, HR-tech platforms, training providers, and labor-market researchers who need structured German apprenticeship data without copy-pasting listings one page at a time.

### Why This Scraper?

- **96,000+ active listings, fully paginated** — walk any filtered search to its end (one proven query spanned 68 pages / 1,360 results at ~20 per page), not just the first page most tools stop at.
- **Seven Ausbildung.de training types, mirrored 1:1** — filter to Ausbildung (classic dual vocational training), Duales Studium (dual study), Schulische Ausbildung (school-based), Schulische und duale Ausbildung, Betriebsinterne Ausbildung (in-company), Abiturientenprogramm, or Weiterbildung (continuing education) — exactly the labels the site itself offers.
- **Radius search from 5 to 1,000 km** — pin a city or postal code and pull every listing within 5, 10, 25, 50, 200, 500, or 1,000 kilometers, so you control local vs. nationwide reach precisely.
- **Company and subsidiary, kept separate** — every row carries both the parent `company` (Corporation) and the specific `subsidiary` branch name as distinct fields, plus the training company's logo URL, instead of one mashed-together string.
- **Full HTML job descriptions plus structured address on demand** — flip `includeDetails` on to pull each listing's complete description as both formatted HTML and clean plain text, the employment type, the posted date, and a broken-out street / postal code / city / region.
- **Stable listing IDs on every row** — each result carries Ausbildung.de's own `listingId` (vacancy public id), so you can dedupe across runs and track a position from first appearance to its `validUntil` deadline.
- **Paste-a-URL power mode** — hand the actor any ausbildung.de search URL you built in the browser and it replays that exact filtered search, radius, training-type filters, and pagination included.
- **Application details attached** — the `applicationOptions` and `directApplication` fields tell you how a candidate applies (including one-click direct application), plus a `startDate`, `duration`, `qualification`, and `topRatedEmployer` signal per listing.
- **Overshoot-not-trim result cap** — `maxResults` stops requesting new pages once your target is met but keeps the full final page, so you never lose the last few positions to an off-by-one cut.

### Use Cases

**Recruitment & Talent Sourcing**
- Build fresh apprenticeship feeds for a German staffing desk or school career office
- Track newly posted dual-study and in-company roles in Berlin, München, or Hamburg every morning
- Assemble a shortlist of open Fachinformatiker, Kaufmann, or Pflege apprenticeships across a region
- Feed live openings into an applicant-tracking or candidate-matching tool

**Labor-Market Research**
- Measure apprenticeship supply by profession, training type, and region over time
- Track which vocational roles employers advertise most across Germany's largest board
- Study the split between classic Ausbildung, Duales Studium, and continuing-education programs
- Build a longitudinal dataset of German early-career and vocational demand

**HR-Tech & Job-Board Aggregation**
- Syndicate Ausbildung.de listings into your own apprenticeship-search product
- Keep an aggregator index current with scheduled incremental runs
- Enrich thin third-party feeds with full descriptions and structured addresses
- Power a niche board focused on German dual training

**Training Providers & Career Guidance**
- Map which companies offer which apprenticeships within a commuting radius of a school
- Compare start dates and durations across training types before advising a cohort
- Identify top-rated employers hiring in a target profession
- Benchmark job-description language and required qualifications

**Competitive Hiring Intelligence**
- Monitor which corporations and their subsidiaries are advertising apprenticeships and at what pace
- Watch a competitor's open training positions by pulling their listings by company name
- Spot expansion signals when a firm opens roles in a new city
- Track application deadlines to time your own campaigns

### Getting Started

#### Search by Profession

The simplest run — one keyword, capped at 100 results:

```json
{
    "keyword": "Fachinformatiker",
    "maxResults": 100
}
````

#### Keyword + Location + Radius + Training Type

Narrow to a city, a search radius, and specific training types:

```json
{
    "keyword": "Kaufmann",
    "location": "München",
    "radius": "50",
    "trainingType": ["Ausbildung", "Duales Studium"],
    "maxResults": 300
}
```

#### Paste Your Own Search URLs

Already built a filtered search on ausbildung.de? Paste the URLs and the actor replays them exactly:

```json
{
    "startUrls": [
        "https://www.ausbildung.de/suche/?search=Pflege%7CBerlin&radius=25",
        "https://www.ausbildung.de/suche/?search=Koch%7CHamburg&radius=50"
    ],
    "maxResults": 200
}
```

#### Full Enrichment Run

Pull complete descriptions, employment type, posted date, and structured address for every matching listing:

```json
{
    "keyword": "Mechatroniker",
    "location": "Stuttgart",
    "radius": "25",
    "includeDetails": true,
    "maxResults": 500
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keyword` | string | `"Fachinformatiker"` | Profession, job title, or keyword to search for (matches the site's "Was suchst du?" box). Leave blank to collect all listings matching the location and filters below. |
| `location` | string | `"Berlin"` | City, town, or postal code to search around (e.g. "Berlin", "München", "10115"). Leave blank to search all of Germany. |
| `radius` | select | `Within 25 km` | How far around the location to search: Within 5 km, 10 km, 25 km, 50 km, 200 km, 500 km, or 1000 km. Ignored when no location is set. |

#### Filters

Leave the filter empty to include every training type.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `trainingType` | string\[] | `[]` | Keep only listings of these training types. Options: Ausbildung (dual vocational training), Duales Studium (dual study), Schulische Ausbildung (school-based training), Schulische und duale Ausbildung (school-based & dual), Betriebsinterne Ausbildung (in-company training), Abiturientenprogramm (high-school-graduate program), Weiterbildung (continuing education). |

#### Or Paste URLs

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | string\[] | `[]` | Advanced: paste full Ausbildung.de search URLs built in the site's own search page. Any filters already applied on the site are respected. When provided, the keyword, location, and filters above are ignored for those URLs — but you can mix URLs with the keyword search. |

#### Output & Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeDetails` | boolean | `false` | Fetch each listing's full description (HTML + plain text), employment type, posted date, and structured street / postal code / city / region from its own page. Slower, since every listing needs an extra page visit. |
| `maxResults` | integer | `100` | Hard cap on total listings across all searches and URLs. Set to 0 for no cap. Stops requesting new pages once the cap is hit but keeps the full last page. |

### Output

Each apprenticeship is one flat row. Here is a representative result with `includeDetails` enabled:

```json
{
    "listingId": "a1b2c3d4-0000-1111-2222-333344445555",
    "title": "Ausbildung zum Fachinformatiker (m/w/d) Anwendungsentwicklung",
    "company": "Beispiel AG",
    "subsidiary": "Beispiel AG Berlin",
    "location": "Berlin",
    "profession": "Fachinformatiker/-in Anwendungsentwicklung",
    "trainingType": "klassische-duale-berufsausbildung",
    "qualification": "Mittlere Reife",
    "startDate": "2026-09-01",
    "duration": "3 Jahre",
    "validUntil": "2026-08-15",
    "applicationOptions": ["online"],
    "directApplication": true,
    "companyLogo": "https://www.ausbildung.de/media/beispiel-ag-logo.png",
    "vacancyCount": 3,
    "topRatedEmployer": true,
    "descriptionHtml": "<p>Du interessierst dich für IT und möchtest...</p>",
    "descriptionText": "Du interessierst dich für IT und möchtest...",
    "employmentType": "FULL_TIME",
    "datePosted": "2026-06-20",
    "streetAddress": "Musterstraße 12",
    "postalCode": "10115",
    "city": "Berlin",
    "region": "Berlin",
    "country": "DE",
    "url": "https://www.ausbildung.de/stellen/fachinformatiker-beispiel-ag-berlin/",
    "searchKeyword": "Fachinformatiker",
    "searchLocation": "Berlin"
}
```

#### Core Fields

Present on every listing, straight from the search results — no `includeDetails` needed.

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | string | Ausbildung.de's stable listing identifier (vacancy public id) |
| `title` | string | Listing title |
| `company` | string | Parent company / corporation name |
| `subsidiary` | string | Specific subsidiary or branch name |
| `profession` | string | Profession / job type |
| `trainingType` | string | Training-type category of the position |
| `companyLogo` | string | Training company's logo URL |
| `topRatedEmployer` | boolean | Whether the employer carries a top-rated badge |
| `url` | string | Direct link to the listing page |

#### Location & Search Provenance

| Field | Type | Description |
|-------|------|-------------|
| `location` | string | City / location of the position |
| `searchKeyword` | string | Which keyword produced this row |
| `searchLocation` | string | Which location produced this row |

#### Training Details

| Field | Type | Description |
|-------|------|-------------|
| `qualification` | string | Required qualification level (Abschluss) |
| `startDate` | string | Earliest start date |
| `duration` | string | Training duration |
| `validUntil` | string | Application deadline |
| `applicationOptions` | string\[] | How to apply (e.g. online) |
| `directApplication` | boolean | Whether one-click direct application is offered |
| `vacancyCount` | number | Number of open positions in this listing |

#### Full Description (with `includeDetails`)

These fields require `includeDetails: true` — each is read from the listing's own page, so they are populated only on enrichment runs (a plain search run leaves them empty).

| Field | Type | Description |
|-------|------|-------------|
| `descriptionHtml` | string | Full listing description as formatted HTML |
| `descriptionText` | string | Full listing description as clean plain text |
| `employmentType` | string | Employment type (e.g. FULL\_TIME) |
| `datePosted` | string | Date the listing was posted |
| `streetAddress` | string | Street address of the position |
| `postalCode` | string | Postal code |
| `city` | string | City |
| `region` | string | Federal state / region |
| `country` | string | Country of the position (always Germany) |

### Tips for Best Results

- **Leave the location blank for nationwide** — clear both `location` and `radius` and the actor collects apprenticeships across all of Germany for the keyword, instead of only within a city.
- **Radius only applies with a location** — the `radius` value is ignored unless you set a `location`, so pair them: "München" + "Within 50 km" pulls the whole metro, while "München" + "Within 5 km" stays tight to the city center.
- **Leave details off for fast counts** — keep `includeDetails` off when you only need titles, companies, locations, professions, and training types; turn it on when you need full descriptions, employment type, posted dates, and the structured address, and expect longer runs on large searches.
- **Start small to validate, then scale** — run with `maxResults` at 50–100 first to confirm the fields match your needs, then raise the cap for the full pull.
- **Replicate a browser search with `startUrls`** — apply filters visually on ausbildung.de, copy the resulting URL, and paste it in; the actor reproduces that exact filtered search, radius and training-type filters included.
- **Stack training types to compare programs** — select both Ausbildung and Duales Studium in one run to see classic vocational training and dual-study offers side by side for the same profession.
- **Dedupe and track with `listingId`** — schedule daily runs and key on `listingId` to spot brand-new positions and watch each one until its `validUntil` deadline.

### Pricing

**From $1.30 per 1,000 results** — the most complete Ausbildung.de dataset on the market, undercutting comparable actors. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.16 | $0.15 | $0.14 | $0.13 |
| 1,000 | $1.55 | $1.45 | $1.40 | $1.30 |
| 10,000 | $15.50 | $14.50 | $14.00 | $13.00 |
| 100,000 | $155.00 | $145.00 | $140.00 | $130.00 |

A "result" is any apprenticeship row in the output dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate recruitment research, labor-market analysis, and job-board aggregation. You are responsible for complying with applicable laws and Ausbildung.de's Terms of Service. Use collected data responsibly, respect candidate and employer privacy, and do not use it for spam, harassment, or any unlawful purpose.

# Actor input Schema

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

Profession, job title, or keyword to search for on Ausbildung.de (e.g. 'Fachinformatiker', 'Kaufmann', 'Pflege'). Matches the 'Was suchst du?' search box on the site. Leave blank to collect all listings matching the location and filters below.

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

City, town, or postal code to search around (e.g. 'Berlin', 'München', '10115'). Matches the 'Wo suchst du?' box on the site. Leave blank to search all of Germany.

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

How far around the location to search, in kilometers. Ignored when no location is set.

## `trainingType` (type: `array`):

Keep only listings of these training types. Leave empty to include all. 'Ausbildung' is classic dual vocational training, 'Duales Studium' combines study with work, and the rest cover school-based, in-company, and continuing-education programs.

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

Advanced: paste full Ausbildung.de search URLs built in the site's own search page (e.g. https://www.ausbildung.de/suche/?search=Fachinformatiker%7CBerlin\&radius=25). Any filters already applied on the site are respected. When provided, the keyword, location, and filters above are ignored for these URLs. You can mix URLs with the keyword search.

## `includeDetails` (type: `boolean`):

Off by default for faster results. Each listing card already includes the title, company, location, profession, and training type. Turn this on to also visit every listing's own page and pull the full description (formatted HTML and plain text), start date, employment type, and structured address — this is slower because every listing needs an extra page visit, so expect longer runs on large searches.

## `maxResults` (type: `integer`):

Hard cap on the total number of listings returned across all searches and URLs. Default 100 — increase for bigger runs, or set to 0 for no cap (the site holds tens of thousands of active listings, and each result is billed at the per-result rate). The actor stops requesting new pages once this number is hit but keeps the full last page even if it slightly overshoots — it never trims a page mid-collection.

## Actor input object example

```json
{
  "keyword": "Fachinformatiker",
  "location": "Berlin",
  "radius": "25",
  "trainingType": [],
  "startUrls": [],
  "includeDetails": false,
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of listings with the most useful fields — title, company, location, profession, training type, start date, and link.

## `details` (type: `string`):

Full per-listing rows with profession, training type, start date, duration, and (when enabled) the full 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": "Fachinformatiker",
    "location": "Berlin",
    "radius": "25",
    "trainingType": [],
    "startUrls": [],
    "includeDetails": false,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/ausbildung-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": "Fachinformatiker",
    "location": "Berlin",
    "radius": "25",
    "trainingType": [],
    "startUrls": [],
    "includeDetails": False,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/ausbildung-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": "Fachinformatiker",
  "location": "Berlin",
  "radius": "25",
  "trainingType": [],
  "startUrls": [],
  "includeDetails": false,
  "maxResults": 100
}' |
apify call solidcode/ausbildung-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Ausbildung.de Scraper",
        "description": "[💰 $1.3 / 1K] Scrape apprenticeship & vocational-training listings from Ausbildung.de. Get title, company, location, profession, training type & start date. Search by keyword & location, filter by training type & radius, with optional full descriptions.",
        "version": "1.0",
        "x-build-id": "kL6jedCISRstPDNyf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~ausbildung-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-ausbildung-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/solidcode~ausbildung-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-ausbildung-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/solidcode~ausbildung-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-ausbildung-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": "Profession or Keyword",
                        "type": "string",
                        "description": "Profession, job title, or keyword to search for on Ausbildung.de (e.g. 'Fachinformatiker', 'Kaufmann', 'Pflege'). Matches the 'Was suchst du?' search box on the site. Leave blank to collect all listings matching the location and filters below."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, town, or postal code to search around (e.g. 'Berlin', 'München', '10115'). Matches the 'Wo suchst du?' box on the site. Leave blank to search all of Germany."
                    },
                    "radius": {
                        "title": "Search Radius",
                        "enum": [
                            "5",
                            "10",
                            "25",
                            "50",
                            "200",
                            "500",
                            "1000"
                        ],
                        "type": "string",
                        "description": "How far around the location to search, in kilometers. Ignored when no location is set."
                    },
                    "trainingType": {
                        "title": "Training Type",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Keep only listings of these training types. Leave empty to include all. 'Ausbildung' is classic dual vocational training, 'Duales Studium' combines study with work, and the rest cover school-based, in-company, and continuing-education programs.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Ausbildung",
                                "Duales Studium",
                                "Schulische Ausbildung",
                                "Schulische und duale Ausbildung",
                                "Betriebsinterne Ausbildung",
                                "Abiturientenprogramm",
                                "Weiterbildung"
                            ],
                            "enumTitles": [
                                "Ausbildung (dual vocational training)",
                                "Duales Studium (dual study)",
                                "Schulische Ausbildung (school-based training)",
                                "Schulische und duale Ausbildung (school-based & dual)",
                                "Betriebsinterne Ausbildung (in-company training)",
                                "Abiturientenprogramm (high-school-graduate program)",
                                "Weiterbildung (continuing education)"
                            ]
                        }
                    },
                    "startUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "Advanced: paste full Ausbildung.de search URLs built in the site's own search page (e.g. https://www.ausbildung.de/suche/?search=Fachinformatiker%7CBerlin&radius=25). Any filters already applied on the site are respected. When provided, the keyword, location, and filters above are ignored for these URLs. You can mix URLs with the keyword search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeDetails": {
                        "title": "Fetch Full Listing Details",
                        "type": "boolean",
                        "description": "Off by default for faster results. Each listing card already includes the title, company, location, profession, and training type. Turn this on to also visit every listing's own page and pull the full description (formatted HTML and plain text), start date, employment type, and structured address — this is slower because every listing needs an extra page visit, so expect longer runs on large searches.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Maximum Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap on the total number of listings returned across all searches and URLs. Default 100 — increase for bigger runs, or set to 0 for no cap (the site holds tens of thousands of active listings, and each result is billed at the per-result rate). The actor stops requesting new pages once this number is hit but keeps the full last page even if it slightly overshoots — it never trims a page mid-collection.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
