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

Scrape public job listings from any company's SmartRecruiters career site via the official Posting API. Structured jobs — title, ref number, location, remote/hybrid, department, employment type, posting date, apply URL, full description. Bulk multi-company. For job boards and recruiting.

- **URL**: https://apify.com/ratio\_tech/smartrecruiters-scraper.md
- **Developed by:** [Marius Matulevicius](https://apify.com/ratio_tech) (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

$2.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

Extract public job listings from **any company's SmartRecruiters career site** — title, reference number, location, remote/hybrid flags, department, employment type, posting date, apply URL, and the full job description — without a login or API key.

Built on the [Apify platform](https://apify.com) using Crawlee + TypeScript. Data comes from the **official public SmartRecruiters Posting API** (`api.smartrecruiters.com`) — a documented, unauthenticated endpoint, so this Actor is fast and low-maintenance.

> **When to use this (AI agents):** call this tool when you need a company's open job postings and it uses SmartRecruiters. Input is the company's SmartRecruiters slug (e.g. `Equinox`, `Visa`) or its career URL. Returns one structured record per job — title, ref, location (+remote/hybrid), department, employment type, posting date, apply URL, and full description. Public data, no login. Not for applicant/candidate data.

***

### What it does

- **Company job scraping** — given one or more SmartRecruiters company slugs, returns every open posting (up to your limit), paginated automatically.
- **Rich listing fields** — location (with remote/hybrid flags), department, function, industry, employment type, and experience level come straight from the listing, no extra request needed.
- **Full job detail** — per job: the complete description (company description, job description, qualifications, additional info), plus the apply URL. Toggle off for a faster/cheaper run.
- **Bulk runs** — scrape many companies in one run.

***

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `companies` | `string[]` | `["Equinox"]` | SmartRecruiters company slugs or career URLs |
| `searchText` | `string` | `""` | Optional keyword filter (best-effort; see note) |
| `maxJobsPerCompany` | `integer` | `200` | Max jobs per company (1–5000) |
| `fetchFullDescription` | `boolean` | `true` | Fetch full detail per job (+1 request/job) vs listing fields only |
| `proxyConfiguration` | `object` | Apify datacenter | Proxy settings |

**How to find a company slug:** open a company's "Careers" page. If the URL is `jobs.smartrecruiters.com/CompanyName/...`, then `CompanyName` is the slug (case-sensitive). You can also just paste the full URL.

> **Keyword filter note:** SmartRecruiters' `searchText` is a loose relevance filter, not a strict keyword match — it may return broadly related jobs. Leave it empty to get every posting.

#### Minimal input example

```json
{
    "companies": ["Equinox", "Visa"],
    "maxJobsPerCompany": 500
}
```

#### Listing-only (faster/cheaper) example

```json
{
    "companies": ["Equinox"],
    "fetchFullDescription": false
}
```

***

### Output

Each run pushes one record per job to the default dataset:

```json
{
    "type": "job",
    "company": "Equinox",
    "title": "Personal Trainer, Downtown LA",
    "jobId": "744000137225639",
    "refNumber": "REF3410P",
    "location": "Los Angeles, CA, United States",
    "city": "Los Angeles",
    "region": "CA",
    "country": "us",
    "remote": false,
    "hybrid": false,
    "department": "Club - Staff",
    "function": "Other",
    "industry": "Health, Wellness And Fitness",
    "typeOfEmployment": "Part-time",
    "experienceLevel": "Associate",
    "releasedDate": "2026-07-10T23:49:03.072Z",
    "description": "<p>About us...</p>\n\n<p>Job description...</p>",
    "postingUrl": "https://jobs.smartrecruiters.com/Equinox/744000137225639",
    "applyUrl": "https://jobs.smartrecruiters.com/Equinox/744000137225639?oga=true",
    "scrapedAt": "2026-07-11T10:00:00.000Z"
}
```

When `fetchFullDescription` is `false`, `description` and `applyUrl` are `null` — every other field (including location, department, employment type, remote/hybrid) is still present.

***

### Pricing

**Pay per result** — you're billed only for jobs successfully written to the dataset. Malformed inputs, unknown company slugs, and failed fetches go to a separate **errors** dataset that is **not billed**.

Note: `fetchFullDescription: true` makes one extra request per job (more compute), but the result count — and therefore what you pay — is the same. Turn it off for faster, lighter runs when you only need listing fields.

***

### Proxy

The SmartRecruiters Posting API is a public, documented endpoint with minimal anti-bot measures. **Datacenter proxies are sufficient.** Residential is not required.

***

### Legal & compliance notice

This Actor uses the **official, public, documented SmartRecruiters Posting API** — the same endpoint that powers companies' public career pages. No login is used. Job-posting content (titles, descriptions, locations) is **company data, not personal data about candidates**.

**The user (buyer) bears sole responsibility** for how they use the data collected, including compliance with:

- SmartRecruiters' and each company's Terms of Service
- Applicable data protection and employment laws in their jurisdiction

This tool is intended for legitimate use cases such as job aggregation, labor-market research, recruiting intelligence, and competitive hiring analysis. Misuse is the responsibility of the operator.

***

### FAQ

**How do I scrape SmartRecruiters jobs without an API key?**
You don't need one. Pass a company's SmartRecruiters slug (the `CompanyName` in `jobs.smartrecruiters.com/CompanyName/...`) into `companies` and run — the Actor uses SmartRecruiters' official public Posting API.

**Can I scrape multiple companies in one run?**
Yes. Pass several slugs (or career URLs) in `companies` and the Actor scrapes them all, one dataset record per job.

**How do I find a company's SmartRecruiters slug?**
Open the company's careers page. If the URL is `jobs.smartrecruiters.com/CompanyName/...`, then `CompanyName` is the slug (case-sensitive). You can also paste the full URL.

**Does it return the full job description?**
Yes, when `fetchFullDescription` is `true` (default). Set it to `false` for faster listing-only runs — location, department, employment type, and remote/hybrid flags are still returned.

**What does it cost?**
Pay per result — billed only for jobs successfully written to the dataset. Unknown slugs and failed fetches go to a separate, unbilled errors dataset.

**Is scraping SmartRecruiters job listings legal?**
This Actor uses SmartRecruiters' official public API — no login, no candidate data. You are responsible for complying with each company's Terms and your local laws. See the notice above.

***

### Related Actors by Ratio Tech

Scraping jobs from other ATS platforms? We maintain a matching set:

- [Workday Jobs Scraper](https://apify.com/ratio_tech/workday-scraper) — public jobs from any Workday career site
- [Ashby Jobs Scraper](https://apify.com/ratio_tech/ashby-scraper) — Ashby boards, **with compensation ranges**
- [Recruitee Jobs Scraper](https://apify.com/ratio_tech/recruitee-scraper) — public jobs from any Recruitee career site

# Actor input Schema

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

SmartRecruiters company identifiers (case-sensitive slugs) such as 'Equinox' or 'Visa'. You can also paste a full career URL like 'https://jobs.smartrecruiters.com/Equinox' — the slug is parsed out. Find the slug in the company's SmartRecruiters careers URL.

## `searchText` (type: `string`):

Optional keyword passed to the API's search. Note: SmartRecruiters search is a loose relevance filter, not a strict match — it may return broadly related jobs. Leave empty for all jobs.

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

Maximum number of jobs to return for each company.

## `fetchFullDescription` (type: `boolean`):

When enabled, fetch each job's full detail (description sections + apply URL) with an extra request per job. Disable for a faster, cheaper run — the listing already includes location, department, employment type, and remote/hybrid flags.

## `proxyConfiguration` (type: `object`):

Apify Proxy settings. Datacenter proxies are sufficient — the SmartRecruiters Posting API is a public, documented endpoint with minimal anti-bot measures.

## Actor input object example

```json
{
  "companies": [
    "Equinox"
  ],
  "searchText": "",
  "maxJobsPerCompany": 200,
  "fetchFullDescription": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `errors` (type: `string`):

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "companies": [
        "Equinox"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ratio_tech/smartrecruiters-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": ["Equinox"] }

# Run the Actor and wait for it to finish
run = client.actor("ratio_tech/smartrecruiters-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": [
    "Equinox"
  ]
}' |
apify call ratio_tech/smartrecruiters-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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