# SmartRecruiters Jobs Scraper - Career Page Jobs API (`groupoject/smartrecruiters-jobs-scraper`) Actor

Scrape SmartRecruiters jobs from public company career pages. Extract titles, companies, locations, departments, descriptions, employment data, dates, and apply links. Monitor new openings without a login, proxy, or API key.

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

## Pricing

from $1.00 / 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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## SmartRecruiters Jobs Scraper - Career Page Jobs API

Scrape public job postings from any company using SmartRecruiters. Extract structured titles, companies, locations, departments, employment types, experience levels, descriptions, release dates, job links, and application URLs without a browser, login, proxy, or SmartRecruiters API key.

The Actor reads SmartRecruiters' public Posting API, making it fast and suitable for job-board feeds, recruitment intelligence, competitor hiring monitoring, sales signals, and scheduled new-job alerts.

### Why use this SmartRecruiters scraper?

- **Direct structured data** - no brittle CSS selectors or browser rendering.
- **Multiple companies per run** - paste company IDs or public career URLs.
- **Full descriptions** - optionally enrich every row with all job-ad sections.
- **Practical filters** - keyword, location, department, employment type, remote, and posting age.
- **New-job monitoring** - remember seen job IDs and output only fresh openings on schedules.
- **Normalized output** - one consistent row per job for CSV, JSON, Sheets, databases, or APIs.

### Input

You can provide company career URLs:

```json
{
  "companyUrls": [
    "https://jobs.smartrecruiters.com/BoschGroup",
    "https://jobs.smartrecruiters.com/Visa"
  ],
  "keywords": ["engineer", "developer", "data"],
  "maxTotalJobs": 100
}
```

Or provide company identifiers directly:

```json
{
  "companyIds": ["BoschGroup", "Visa", "Ubisoft2"],
  "remoteOnly": true,
  "postedWithinDays": 30
}
```

The company ID is the first path segment after `jobs.smartrecruiters.com/`. For example, the ID in `https://jobs.smartrecruiters.com/BoschGroup` is `BoschGroup`.

### Output

Each dataset item represents one public job posting:

```json
{
  "companyName": "Example Company",
  "companyId": "ExampleCompany",
  "jobId": "744000123456789",
  "referenceNumber": "REF123",
  "title": "Senior Data Engineer",
  "department": "Engineering",
  "jobFunction": "Information Technology",
  "industry": "Software",
  "location": "London, England, gb",
  "country": "gb",
  "remoteType": "Remote",
  "employmentType": "Full-time",
  "experienceLevel": "Mid-Senior Level",
  "description": "Build reliable data products...",
  "postedAt": "2026-06-20T12:00:00Z",
  "jobUrl": "https://jobs.smartrecruiters.com/ExampleCompany/744000123456789",
  "applyUrl": "https://jobs.smartrecruiters.com/ExampleCompany/744000123456789/apply",
  "isNew": true
}
```

Fields vary because companies choose what to publish. The Actor never invents missing values.

### Monitor new jobs

Turn on `monitorMode` to save job IDs between runs. Pair it with an Apify schedule and `onlyNewJobs` to create a clean feed of openings that appeared since the previous run.

```json
{
  "companyIds": ["BoschGroup", "Visa", "Ubisoft2"],
  "monitorMode": true,
  "onlyNewJobs": true,
  "stateKey": "enterprise-hiring-watch"
}
```

Use a different `stateKey` for each saved task or monitoring scope.

### Use cases

#### Recruitment and job aggregation

Build fresh SmartRecruiters job feeds without depending on delayed aggregator copies.

#### Competitor hiring intelligence

Track which departments, countries, and role families target companies are expanding.

#### Sales and investment signals

Use new openings as indicators of headcount growth, technology investment, or geographic expansion.

#### Job alerts and automation

Schedule the Actor and send new rows to Slack, email, Make, Zapier, n8n, Google Sheets, or your database.

### Performance and cost

The Actor uses HTTP requests rather than a browser. Listing-only runs need one request per 100 jobs. Full descriptions require one additional public request per job, so disable `includeDescription` when you only need a fast title-and-link feed.

### FAQ

#### Does this need a SmartRecruiters account or API key?

No. It reads public company job boards and public posting endpoints.

#### Does it scrape applicant or candidate data?

No. It only collects publicly advertised jobs. It does not access recruiter dashboards, applications, candidates, or private records.

#### Can it scrape every SmartRecruiters company automatically?

Provide the companies you want to monitor. This keeps runs predictable and avoids billing users for unrelated jobs.

#### Why did a company return no jobs?

The company ID may be incorrect, the company may have no open public postings, or it may have moved to another recruiting platform. Check the public career URL in a browser.

#### Is the output legal to use?

The Actor accesses public job advertisements without bypassing authentication. You are responsible for complying with applicable laws, SmartRecruiters' terms, and the terms of the companies whose jobs you process.

# Actor input Schema

## `companyUrls` (type: `array`):

Public SmartRecruiters company or job URLs, for example https://jobs.smartrecruiters.com/BoschGroup.

## `companyIds` (type: `array`):

SmartRecruiters company identifiers such as BoschGroup, Visa, or Ubisoft2.

## `companyUrlsText` (type: `string`):

Paste one SmartRecruiters URL or company ID per line.

## `keywords` (type: `array`):

Keep jobs matching any keyword in the title, company, location, department, or description. Leave empty for all jobs.

## `locations` (type: `array`):

Keep jobs matching any city, region, or country text.

## `departments` (type: `array`):

Filter by department or job function, such as Engineering, Sales, or Marketing.

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

Filter by employment labels such as Full-time, Part-time, Contract, or Internship.

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

Only keep postings marked or described as remote.

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

Fetch each posting and combine its description sections into clean text.

## `includeHtmlDescription` (type: `boolean`):

Also keep the original HTML from SmartRecruiters job-ad sections.

## `maxJobsPerCompany` (type: `integer`):

Maximum postings to read from each company board.

## `maxTotalJobs` (type: `integer`):

Maximum dataset rows across all company boards.

## `postedWithinDays` (type: `integer`):

Optional freshness filter based on the SmartRecruiters release date.

## `monitorMode` (type: `boolean`):

Remember job IDs across runs so schedules can identify new openings.

## `onlyNewJobs` (type: `boolean`):

With monitor mode enabled, save only postings not seen in previous runs.

## `stateKey` (type: `string`):

Optional stable key. Use a different value for each saved monitoring task.

## `requestDelayMs` (type: `integer`):

Delay between detail and company API calls.

## `debugMode` (type: `boolean`):

Enable verbose logs for troubleshooting.

## Actor input object example

```json
{
  "companyUrls": [
    "https://jobs.smartrecruiters.com/BoschGroup",
    "https://jobs.smartrecruiters.com/Visa"
  ],
  "keywords": [
    "engineer",
    "developer",
    "data"
  ],
  "remoteOnly": false,
  "includeDescription": true,
  "includeHtmlDescription": false,
  "maxJobsPerCompany": 100,
  "maxTotalJobs": 500,
  "monitorMode": false,
  "onlyNewJobs": false,
  "requestDelayMs": 100,
  "debugMode": false
}
```

# Actor output Schema

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

One row per public SmartRecruiters posting.

## `summary` (type: `string`):

Counts, top companies, top locations, duration, and source health.

## `sources` (type: `string`):

Per-company API status, kept counts, and errors.

# 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 = {
    "companyUrls": [
        "https://jobs.smartrecruiters.com/BoschGroup",
        "https://jobs.smartrecruiters.com/Visa"
    ],
    "keywords": [
        "engineer",
        "developer",
        "data"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("groupoject/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 = {
    "companyUrls": [
        "https://jobs.smartrecruiters.com/BoschGroup",
        "https://jobs.smartrecruiters.com/Visa",
    ],
    "keywords": [
        "engineer",
        "developer",
        "data",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("groupoject/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 '{
  "companyUrls": [
    "https://jobs.smartrecruiters.com/BoschGroup",
    "https://jobs.smartrecruiters.com/Visa"
  ],
  "keywords": [
    "engineer",
    "developer",
    "data"
  ]
}' |
apify call groupoject/smartrecruiters-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/rBTd5hiVWdwe4hGAn/builds/kHeUV8xRhnrfnrgUM/openapi.json
