# SmartRecruiters Jobs Scraper (`schnellscrapers/smartrecruiters-jobs-scraper`) Actor

Pull every active SmartRecruiters job from any company in one run — titles, geocoded locations, departments, functions, employment types, custom HR fields, full descriptions, apply URLs. Multi-company batching, server-side country/city/keyword filters, optional description enrichment.

- **URL**: https://apify.com/schnellscrapers/smartrecruiters-jobs-scraper.md
- **Developed by:** [Nate Schnell](https://apify.com/schnellscrapers) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 jobs

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

### What does SmartRecruiters Jobs Scraper do?

SmartRecruiters Jobs Scraper pulls every active job from any SmartRecruiters careers page — `jobs.smartrecruiters.com/{Company}` or `careers.smartrecruiters.com/{Company}` — in a single run. Paste one or many company slugs (`BoschGroup`, `Visa`, `Sodexo`, `Continental`, `Wayfair`, `IKEA`, ...) and the actor returns a clean, structured record per posting straight from the official SmartRecruiters Posting API. No cache, no AI guesswork, no rendered HTML — the same JSON the SmartRecruiters careers page itself consumes, normalised and validated.

Built for talent-intelligence teams, ATS-aggregator job boards, sourcing tools, hiring-velocity dashboards, recruiter prospecting, and anyone who needs SmartRecruiters job data without writing a paginator or fighting captcha on every refresh.

### What data can you extract from SmartRecruiters?

- **Identity** — `id`, `uuid`, `refNumber`, posting `name`
- **Company** — `companyIdentifier` (the slug), `companyName`
- **Location** — `city`, `region`, `country` (ISO-alpha-2), `remote`, `hybrid`, `hybridDescription`, `latitude`, `longitude`, `fullLocation`
- **Taxonomy** — `industry`, `department`, `function`, `typeOfEmployment`, `experienceLevel` (each as `{id, label}`)
- **Language** — `code`, `label`, `labelNative` (postings come in the language the employer wrote them)
- **Custom HR fields** — array of `{fieldId, fieldLabel, valueId, valueLabel}` covering employer-specific tags like *Brand*, *Contract Type*, *Working Hours*, *Legal Entity*, *Working Location*, *Position Type*
- **Timing** — `releasedDate` ISO timestamp
- **Application** — `postingUrl`, `applyUrl`, `referralUrl` *(optional, enable `includeDescription`)*
- **Description** — `descriptionSections` (`companyDescription`, `jobDescription`, `qualifications`, `additionalInformation`), plus `descriptionHtml` and optional plain-text `descriptionText` *(optional, enable `includeDescription` and `parseDescription`)*
- **Provenance** — `scrapedAt`, `source`

23 fields per posting, all named and typed in the [dataset schema](#output).

### How to use SmartRecruiters Jobs Scraper

1. **Sign in to Apify** ([create a free account](https://console.apify.com/sign-up) if you don't have one — Apify's free tier covers most experiments).
2. **Open the actor** and click **Try for free**.
3. **Enter company slugs.** Paste the case-sensitive slug from the SmartRecruiters careers URL (e.g. `BoschGroup` from `https://jobs.smartrecruiters.com/BoschGroup`). You can paste a full URL too — the actor extracts the slug.
4. **(Optional) Apply filters.** Use server-side `country`/`region`/`city`/`keyword` for the cheapest narrowing, plus client-side `titleFilter`, `departmentFilter`, `experienceLevels`, `employmentTypes`, `postedAfter`, `remoteOnly`, and more.
5. **(Optional) Enable `includeDescription`** to also fetch the full job-ad sections, apply URL, and posting URL.
6. **Click Run.** Results stream into the dataset as they're scraped.
7. **Download** as JSON, JSONL, CSV, Excel, XML, or fetch via the Apify dataset API.

### How much does it cost?

**$1 per 1,000 job postings** ($0.001 per posting). Pay only for postings the actor emits to the dataset — failed company slugs and filtered-out jobs cost nothing. The actor uses the official SmartRecruiters Posting API directly so **there are no proxy charges and no per-CPU-second charges**; the per-record price is the whole cost.

A multi-company run of 10 slugs averaging 50 jobs each → 500 records ≈ **$0.50**. Enabling `includeDescription` adds one extra HTTP request per emitted job, which the per-record price already covers — there's no separate description charge. Apify's $5 monthly free tier covers ~5,000 postings of trial use.

### Input

The actor takes one required field, **`companies`**, plus a deep set of optional server-side and client-side filters. Server-side filters (`country`, `region`, `city`, `keyword`, `recentlyPublished`) are applied at the SmartRecruiters API and dramatically narrow what's fetched and billed. Client-side filters (`titleFilter`, `departmentFilter`, `functionFilter`, `industryFilter`, `experienceLevels`, `employmentTypes`, `customFieldFilter`, `postedAfter`, `remoteOnly`, `descriptionContains`) run on the parsed record. **`maxItems`** and **`maxItemsPerCompany`** cap output for cost-bounded test runs.

```json
{
  "companies": ["BoschGroup", "Visa", "Sodexo"],
  "country": "us",
  "titleFilter": ["engineer", "developer"],
  "titleExcludeFilter": ["intern"],
  "experienceLevels": ["Mid-Senior Level", "Director"],
  "postedAfter": "2026-04-01",
  "includeDescription": true,
  "parseDescription": true,
  "maxItemsPerCompany": 200
}
````

### Output

One record per active SmartRecruiters posting. Every field is typed in the dataset schema — open the **Output** tab on the actor page for the full column list, then export to JSON / CSV / Excel / XML. Below is a real Visa posting (truncated `customFields` and `descriptionHtml`):

```json
{
  "id": "744000122509268",
  "uuid": "ded6c65f-7598-4801-981d-13a51716e73b",
  "refNumber": "REF97308A",
  "name": "Sr. SW Engineer",
  "companyIdentifier": "Visa",
  "companyName": "Visa",
  "location": {
    "city": "Austin",
    "region": "TX",
    "country": "us",
    "remote": false,
    "hybrid": true,
    "hybridDescription": "Austin, TX office and may allow for partial telecommuting.",
    "latitude": 30.267153,
    "longitude": -97.7430608,
    "fullLocation": "Austin, TX, United States"
  },
  "industry": { "id": "it_and_services", "label": "Information Technology And Services" },
  "department": { "id": "868537", "label": "Technology and Operations" },
  "function": { "id": "information_technology", "label": "Information Technology" },
  "typeOfEmployment": { "id": "permanent", "label": "Full-time" },
  "experienceLevel": { "id": "mid_senior_level", "label": "Mid-Senior Level" },
  "language": { "code": "en", "label": "English", "labelNative": "English" },
  "customFields": [
    { "fieldId": "COUNTRY", "fieldLabel": "Country/Region", "valueId": "us", "valueLabel": "United States" },
    { "fieldId": "58914413e4b04f807e6ee84f", "fieldLabel": "Brands", "valueId": "default", "valueLabel": "Visa" }
  ],
  "releasedDate": "2026-04-23T16:54:54.835Z",
  "postingUrl": "https://jobs.smartrecruiters.com/Visa/744000122509268-sr-sw-engineer",
  "applyUrl": "https://jobs.smartrecruiters.com/Visa/744000122509268-sr-sw-engineer?oga=true",
  "referralUrl": null,
  "descriptionSections": {
    "companyDescription": { "title": "Company Description", "text": "<p>Visa is a world leader in payments and technology…</p>" },
    "jobDescription": { "title": "Job Description", "text": "<p>You will be part of the Austin Engineering team…</p>" },
    "qualifications": { "title": "Qualifications", "text": "<p>Basic Qualifications…</p>" },
    "additionalInformation": { "title": "Additional Information", "text": "<p>…</p>" }
  },
  "descriptionHtml": "<section data-section=\"companyDescription\">…</section>",
  "descriptionText": "Company Description\n\nVisa is a world leader in payments and technology…",
  "scrapedAt": "2026-05-22T13:01:34.000Z",
  "source": "https://api.smartrecruiters.com/v1/companies/Visa/postings?limit=100"
}
```

When `includeDescription` is off, the four enrichment fields (`postingUrl`, `applyUrl`, `referralUrl`, `descriptionSections`, `descriptionHtml`, `descriptionText`) are `null` — the rest of the record is identical.

### Integrations

Use the actor's results in Make, n8n, Zapier, LangChain, LlamaIndex, your own pipelines via the [Apify API](https://docs.apify.com/api/v2), or wire up webhooks to fire whenever a run finishes. Schedule daily / hourly pulls with [Apify Scheduler](https://docs.apify.com/platform/schedules) and dedupe into your warehouse on the stable `id` field — SmartRecruiters posting IDs are globally unique across all companies on the platform.

### Related actors

- [Greenhouse Jobs Scraper](https://apify.com/schnellscrapers/greenhouse-jobs-scraper) — same shape, same author, for any Greenhouse-hosted careers board. Combine the two to cover both ATSes in one warehouse table.
- [Indeed Jobs Scraper](https://apify.com/schnellscrapers/indeed-jobs-scraper) — when you need open-market job-board coverage on top of direct-from-employer ATS data.

### FAQ

#### How does SmartRecruiters Jobs Scraper work?

It calls the official public SmartRecruiters Posting API (`api.smartrecruiters.com/v1/companies/{slug}/postings`) directly — the same endpoint the SmartRecruiters careers page consumes. No headless browser, no proxy, no scraping fragile HTML. Pagination is handled automatically (100 records per page, `totalFound` from the API drives the loop), and `includeDescription` adds one detail fetch per shortlisted posting to populate the description, apply URL, and posting URL.

#### Can I use SmartRecruiters Jobs Scraper as an API?

Yes. Start a run by POSTing to the Apify [Run Actor endpoint](https://docs.apify.com/api/v2#/reference/actors/run-actor/run-actor) with your input JSON, then read the dataset via [`GET /v2/datasets/{datasetId}/items`](https://docs.apify.com/api/v2#/reference/datasets/item-collection). Apify also exposes the actor as a synchronous run with `run-sync` for short jobs and as a [task](https://docs.apify.com/platform/actors/running/tasks) if you want to save reusable input presets.

#### Can I use SmartRecruiters Jobs Scraper in Python or Node.js?

Yes. With the [`apify-client`](https://docs.apify.com/api/client/python) package:

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("schnellscrapers/smartrecruiters-jobs-scraper").call(
    run_input={"companies": ["BoschGroup", "Visa"], "country": "us", "maxItemsPerCompany": 100}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["name"], item["companyIdentifier"], item["location"]["fullLocation"])
```

#### Is it legal to scrape SmartRecruiters job listings?

SmartRecruiters' Posting API is publicly documented at [developers.smartrecruiters.com](https://developers.smartrecruiters.com/docs/posting-api-1) and returns data that the SmartRecruiters careers page itself displays publicly. Scraping publicly accessible job postings is generally legal in the US and EU. This actor only fetches public data — no logged-in scraping, no captcha-bypass, no PII beyond what employers chose to publish. Respect SmartRecruiters' terms of service, rate-limit your runs, and don't reuse scraped data in ways that violate GDPR, CCPA, or your local employment-data regulations.

#### How do I find a company's SmartRecruiters slug?

Open the company's careers page. If the URL is `https://jobs.smartrecruiters.com/BoschGroup/...` then `BoschGroup` is the slug. It is **case-sensitive** on the SmartRecruiters API — `boschgroup` (lowercase) returns 0 jobs even though `BoschGroup` returns 4,000+. You can also paste a full URL into the `companies` field; the actor extracts the slug for you.

#### What happens if a company has thousands of postings?

Larger employers like BoschGroup (4,000+ open jobs) or Continental (1,200+) are fully supported. The actor paginates server-side at 100 records per page using SmartRecruiters' `totalFound` counter. For cost-bounded runs use `maxItemsPerCompany` to cap each slug, and use server-side `country` / `city` / `keyword` to narrow at the API before billing kicks in.

#### Why is `descriptionHtml` `null` for some records?

You haven't enabled `includeDescription`. The list endpoint doesn't return job descriptions to keep responses fast — `includeDescription` triggers a second API call per shortlisted job to fetch the full posting. Enable it (plus `parseDescription` for plain-text output) when you need the full content.

#### Can I filter by department, experience level, or employment type?

Yes — use `departmentFilter`, `experienceLevels`, `employmentTypes`, plus `functionFilter` and `industryFilter`. All are case-insensitive substring matches against the SmartRecruiters labels. SmartRecruiters' API doesn't expose a server-side filter for these, so the actor applies them client-side after fetching the list — they still narrow the dataset, they just don't reduce the number of records fetched. Use server-side `country`/`city`/`keyword` first when you want to reduce billed records.

#### Will SmartRecruiters rate-limit or block me?

The Posting API has no documented per-IP rate limit and tolerates the modest concurrency this actor uses (sequential per company, no parallel slug fetches). The actor identifies itself with a clear `User-Agent` header. We've seen no throttling in months of operation across hundreds of company slugs.

### Your feedback

Open an issue on this actor's **Issues** tab on Apify with bug reports or feature requests — new output fields, new server-side filters, or richer description parsing are all on the table.

# Actor input Schema

## `companies` (type: `array`):

Companies to pull jobs from. Paste the company slug (e.g. `BoschGroup`, `Visa`, `Sodexo`, `Continental`, `Wayfair`) or any SmartRecruiters URL — `https://jobs.smartrecruiters.com/BoschGroup`, `https://careers.smartrecruiters.com/BoschGroup`. The slug is the case-sensitive path segment after the host.

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

Search keyword applied at the SmartRecruiters API (e.g. `engineer`, `nurse`). The API runs a relevance search across title and description, so this is the cheapest way to narrow large companies before billing. Combine with the client-side title/description filters below for further refinement.

## `country` (type: `string`):

ISO 3166-1 alpha-2 country code, lowercase (e.g. `us`, `de`, `fr`, `in`, `gb`). Applied at the SmartRecruiters API — much cheaper than pulling everything and filtering client-side.

## `region` (type: `string`):

Region or state name as SmartRecruiters reports it (e.g. `California`, `Bavaria`). Server-side phrase match — case-sensitive on the SR side.

## `city` (type: `string`):

City name (e.g. `Berlin`, `Austin`). Server-side phrase match. For broader geographic filters, use `region` or `country` instead.

## `recentlyPublished` (type: `boolean`):

Ask SmartRecruiters to return only recently-published jobs (per SR's own freshness threshold). For finer date control use the `postedAfter` client-side filter below.

## `titleFilter` (type: `array`):

Case-insensitive substring match against the job title. A record is kept if any term matches (e.g. `engineer`, `designer`).

## `titleExcludeFilter` (type: `array`):

Drop jobs whose title contains any of these substrings (e.g. `senior`, `manager`, `intern`).

## `departmentFilter` (type: `array`):

Substring match against the SmartRecruiters `department.label` (e.g. `engineering`, `finance`, `r&d`). Companies define their own department taxonomy — inspect a few records to learn the labels.

## `functionFilter` (type: `array`):

Substring match against the SmartRecruiters `function.label` (e.g. `information technology`, `sales`, `human resources`). Function is a standardised top-level SR taxonomy — more portable across employers than department.

## `industryFilter` (type: `array`):

Substring match against `industry.label` (e.g. `automotive`, `food and beverages`, `information technology and services`). Useful for multi-brand employers where one slug spans several industries.

## `experienceLevels` (type: `array`):

Keep only jobs whose seniority matches. Matched against `experienceLevel.label`. Common SR values: Internship, Entry-Level, Associate, Mid-Senior Level, Director, Executive, Not Applicable.

## `employmentTypes` (type: `array`):

Keep only jobs whose contract type matches. Matched against `typeOfEmployment.label`. Common SR values: Full-time, Part-time, Contract, Temporary, Internship, Other.

## `customFieldFilter` (type: `array`):

Filter by employer-specific custom fields. Each entry needs a `field` (the field label, e.g. `Working hours`, `Brand`, `Contract type`) and an optional `value` (substring match against the value label). A record passes only if every entry matches.

## `postedAfter` (type: `string`):

ISO 8601 date or timestamp (e.g. `2026-05-01` or `2026-05-01T00:00:00Z`). Drops jobs whose `releasedDate` is older. Leave blank to keep every active job.

## `remoteOnly` (type: `boolean`):

Keep only jobs where SmartRecruiters has flagged `location.remote = true`. Note: some employers mark hybrid roles as remote — review a sample before relying on this filter.

## `descriptionContains` (type: `array`):

Substring match against the job description body (e.g. `python`, `kubernetes`, `visa sponsorship`). Auto-enables `includeDescription` (which adds one detail fetch per shortlisted job).

## `includeDescription` (type: `boolean`):

Costs one extra HTTP request per emitted job. Fetches the SmartRecruiters detail endpoint for each shortlisted job and populates `descriptionSections`, `descriptionHtml`, `postingUrl`, `applyUrl`, and `referralUrl`. Leave off if you only need titles, locations, and metadata.

## `parseDescription` (type: `boolean`):

When `includeDescription` is on, also output `descriptionText` with HTML stripped and entities decoded. Useful for downstream search, embeddings, or LLM ingestion.

## `maxItems` (type: `integer`):

Hard cap on total records emitted across all companies. Useful for cost-bounded test runs. Leave at 0 to emit every matching job.

## `maxItemsPerCompany` (type: `integer`):

Per-company cap on emitted records. Useful when a single large employer (Bosch has 4,000+ open postings) would dominate a multi-company run. Leave at 0 to emit every matching job from each company.

## `dryRun` (type: `boolean`):

Fetch and parse the companies but do not write to the dataset. Use to preview without spending credits.

## Actor input object example

```json
{
  "companies": [
    "BoschGroup",
    "Visa",
    "Sodexo"
  ],
  "recentlyPublished": false,
  "titleFilter": [],
  "titleExcludeFilter": [],
  "departmentFilter": [],
  "functionFilter": [],
  "industryFilter": [],
  "experienceLevels": [],
  "employmentTypes": [],
  "customFieldFilter": [],
  "remoteOnly": false,
  "descriptionContains": [],
  "includeDescription": false,
  "parseDescription": false,
  "maxItems": 0,
  "maxItemsPerCompany": 0,
  "dryRun": false
}
```

# Actor output Schema

## `jobs` (type: `string`):

Default dataset of SmartRecruiters job records. Key fields: name, companyName, location, department, releasedDate, postingUrl, descriptionHtml.

# 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 = {
    "companies": [
        "BoschGroup",
        "Visa",
        "Sodexo"
    ],
    "titleFilter": [],
    "titleExcludeFilter": [],
    "departmentFilter": [],
    "functionFilter": [],
    "industryFilter": [],
    "experienceLevels": [],
    "employmentTypes": [],
    "customFieldFilter": [],
    "descriptionContains": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("schnellscrapers/smartrecruiters-jobs-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 = {
    "companies": [
        "BoschGroup",
        "Visa",
        "Sodexo",
    ],
    "titleFilter": [],
    "titleExcludeFilter": [],
    "departmentFilter": [],
    "functionFilter": [],
    "industryFilter": [],
    "experienceLevels": [],
    "employmentTypes": [],
    "customFieldFilter": [],
    "descriptionContains": [],
}

# Run the Actor and wait for it to finish
run = client.actor("schnellscrapers/smartrecruiters-jobs-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 '{
  "companies": [
    "BoschGroup",
    "Visa",
    "Sodexo"
  ],
  "titleFilter": [],
  "titleExcludeFilter": [],
  "departmentFilter": [],
  "functionFilter": [],
  "industryFilter": [],
  "experienceLevels": [],
  "employmentTypes": [],
  "customFieldFilter": [],
  "descriptionContains": []
}' |
apify call schnellscrapers/smartrecruiters-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SmartRecruiters Jobs Scraper",
        "description": "Pull every active SmartRecruiters job from any company in one run — titles, geocoded locations, departments, functions, employment types, custom HR fields, full descriptions, apply URLs. Multi-company batching, server-side country/city/keyword filters, optional description enrichment.",
        "version": "0.1",
        "x-build-id": "CJDayqVyl6OvACd7o"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/schnellscrapers~smartrecruiters-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-schnellscrapers-smartrecruiters-jobs-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/schnellscrapers~smartrecruiters-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-schnellscrapers-smartrecruiters-jobs-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/schnellscrapers~smartrecruiters-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-schnellscrapers-smartrecruiters-jobs-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",
                "required": [
                    "companies"
                ],
                "properties": {
                    "companies": {
                        "title": "SmartRecruiters companies",
                        "type": "array",
                        "description": "Companies to pull jobs from. Paste the company slug (e.g. `BoschGroup`, `Visa`, `Sodexo`, `Continental`, `Wayfair`) or any SmartRecruiters URL — `https://jobs.smartrecruiters.com/BoschGroup`, `https://careers.smartrecruiters.com/BoschGroup`. The slug is the case-sensitive path segment after the host.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "keyword": {
                        "title": "Keyword (server-side)",
                        "type": "string",
                        "description": "Search keyword applied at the SmartRecruiters API (e.g. `engineer`, `nurse`). The API runs a relevance search across title and description, so this is the cheapest way to narrow large companies before billing. Combine with the client-side title/description filters below for further refinement."
                    },
                    "country": {
                        "title": "Country (server-side)",
                        "type": "string",
                        "description": "ISO 3166-1 alpha-2 country code, lowercase (e.g. `us`, `de`, `fr`, `in`, `gb`). Applied at the SmartRecruiters API — much cheaper than pulling everything and filtering client-side."
                    },
                    "region": {
                        "title": "Region (server-side)",
                        "type": "string",
                        "description": "Region or state name as SmartRecruiters reports it (e.g. `California`, `Bavaria`). Server-side phrase match — case-sensitive on the SR side."
                    },
                    "city": {
                        "title": "City (server-side)",
                        "type": "string",
                        "description": "City name (e.g. `Berlin`, `Austin`). Server-side phrase match. For broader geographic filters, use `region` or `country` instead."
                    },
                    "recentlyPublished": {
                        "title": "Recently published only",
                        "type": "boolean",
                        "description": "Ask SmartRecruiters to return only recently-published jobs (per SR's own freshness threshold). For finer date control use the `postedAfter` client-side filter below.",
                        "default": false
                    },
                    "titleFilter": {
                        "title": "Title includes",
                        "type": "array",
                        "description": "Case-insensitive substring match against the job title. A record is kept if any term matches (e.g. `engineer`, `designer`).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "titleExcludeFilter": {
                        "title": "Title excludes",
                        "type": "array",
                        "description": "Drop jobs whose title contains any of these substrings (e.g. `senior`, `manager`, `intern`).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "departmentFilter": {
                        "title": "Department includes",
                        "type": "array",
                        "description": "Substring match against the SmartRecruiters `department.label` (e.g. `engineering`, `finance`, `r&d`). Companies define their own department taxonomy — inspect a few records to learn the labels.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "functionFilter": {
                        "title": "Function includes",
                        "type": "array",
                        "description": "Substring match against the SmartRecruiters `function.label` (e.g. `information technology`, `sales`, `human resources`). Function is a standardised top-level SR taxonomy — more portable across employers than department.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "industryFilter": {
                        "title": "Industry includes",
                        "type": "array",
                        "description": "Substring match against `industry.label` (e.g. `automotive`, `food and beverages`, `information technology and services`). Useful for multi-brand employers where one slug spans several industries.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "experienceLevels": {
                        "title": "Experience levels",
                        "type": "array",
                        "description": "Keep only jobs whose seniority matches. Matched against `experienceLevel.label`. Common SR values: Internship, Entry-Level, Associate, Mid-Senior Level, Director, Executive, Not Applicable.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "employmentTypes": {
                        "title": "Employment types",
                        "type": "array",
                        "description": "Keep only jobs whose contract type matches. Matched against `typeOfEmployment.label`. Common SR values: Full-time, Part-time, Contract, Temporary, Internship, Other.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "customFieldFilter": {
                        "title": "Custom field match",
                        "type": "array",
                        "description": "Filter by employer-specific custom fields. Each entry needs a `field` (the field label, e.g. `Working hours`, `Brand`, `Contract type`) and an optional `value` (substring match against the value label). A record passes only if every entry matches.",
                        "default": []
                    },
                    "postedAfter": {
                        "title": "Only jobs released after",
                        "type": "string",
                        "description": "ISO 8601 date or timestamp (e.g. `2026-05-01` or `2026-05-01T00:00:00Z`). Drops jobs whose `releasedDate` is older. Leave blank to keep every active job."
                    },
                    "remoteOnly": {
                        "title": "Remote only",
                        "type": "boolean",
                        "description": "Keep only jobs where SmartRecruiters has flagged `location.remote = true`. Note: some employers mark hybrid roles as remote — review a sample before relying on this filter.",
                        "default": false
                    },
                    "descriptionContains": {
                        "title": "Description contains",
                        "type": "array",
                        "description": "Substring match against the job description body (e.g. `python`, `kubernetes`, `visa sponsorship`). Auto-enables `includeDescription` (which adds one detail fetch per shortlisted job).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeDescription": {
                        "title": "Include full job description",
                        "type": "boolean",
                        "description": "Costs one extra HTTP request per emitted job. Fetches the SmartRecruiters detail endpoint for each shortlisted job and populates `descriptionSections`, `descriptionHtml`, `postingUrl`, `applyUrl`, and `referralUrl`. Leave off if you only need titles, locations, and metadata.",
                        "default": false
                    },
                    "parseDescription": {
                        "title": "Also produce plain-text description",
                        "type": "boolean",
                        "description": "When `includeDescription` is on, also output `descriptionText` with HTML stripped and entities decoded. Useful for downstream search, embeddings, or LLM ingestion.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum records (total)",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Hard cap on total records emitted across all companies. Useful for cost-bounded test runs. Leave at 0 to emit every matching job.",
                        "default": 0
                    },
                    "maxItemsPerCompany": {
                        "title": "Maximum records per company",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Per-company cap on emitted records. Useful when a single large employer (Bosch has 4,000+ open postings) would dominate a multi-company run. Leave at 0 to emit every matching job from each company.",
                        "default": 0
                    },
                    "dryRun": {
                        "title": "Dry run",
                        "type": "boolean",
                        "description": "Fetch and parse the companies but do not write to the dataset. Use to preview without spending credits.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
