SmartRecruiters Job Scraper — Enterprise Hiring Signals
Pricing
$2.00 / 1,000 job postings
SmartRecruiters Job Scraper — Enterprise Hiring Signals
Search open jobs across 1,700+ employers hiring on SmartRecruiters by job title, location, department, remote and date — no company identifiers needed. Or pass companies. Live data: city, country, coordinates, industry, experience level, full description, apply URL.
Pricing
$2.00 / 1,000 job postings
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
SmartRecruiters Job Board Scraper — Company Hiring Signals 🚀
foXLabs hiring series: Greenhouse · Lever · Ashby · Workday · Personio · Teamtailor · Workable · BambooHR · All platforms in one search →
🎉 Search open jobs across 1,700+ employers that hire on SmartRecruiters — by job title, location, department, remote and posting date — without knowing a single company identifier. Or point it at the companies you track. No login, no API key, one row per open role with the richest classification in the series. Built for sales & competitive-intelligence teams scoring hiring intent, recruiters, and job-data pipelines.
🔍 What is the SmartRecruiters Job Board Scraper — and when should you use it?
SmartRecruiters runs the careers sites of large global employers (Bosch, Western Digital and many mid-size companies). It has no complete job search across companies, so this actor carries an index of 1,783 SmartRecruiters company identifiers (discovered from the public Common Crawl web archive) and asks each of them live for jobs matching your keywords — SmartRecruiters filters by keyword on its side, so a search is fast. Every match comes with department, team, city, country, region, coordinates, industry, experience level and the full description.
Already know your target companies? Add their identifier (BoschGroup, case-sensitive) and get every open role.
Use it when you need: employers hiring for a function in a country right now; geographic expansion signals; every open role at a target company; or a read on a competitor's hiring plans — from SmartRecruiters' public Posting API, no key.
Use something else when: the companies you care about don't run on SmartRecruiters. Every actor in the foXLabs hiring series emits the same core schema, so their outputs concatenate into one hiring-intent table: Greenhouse · Lever · Ashby · Workday · Personio · Teamtailor · Workable · BambooHR.
Need one search across every platform? Job Postings Database keeps a daily-refreshed index of 440,000+ open roles from ~33,000 Greenhouse, Lever, Ashby, SmartRecruiters, BambooHR, Personio and Teamtailor boards and answers a single query across all of them in seconds — every delivered role is re-checked live on its own board before it reaches you.
🤖 Use with AI agents
Already on the Apify MCP server? Ask for this Actor by name: foxlabs/smartrecruiters-job-board-scraper.
Your agent can pay for its own runs. This Actor is pay-per-event with agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — no Apify account or API token of its own. Billing is per delivered role, never for errors.
Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want to find open jobs at employers that hire on SmartRecruiters using the Apify Actor `foxlabs/smartrecruiters-job-board-scraper`.Input: `searchQueries` is a list of job-title keywords (every word must appear in the title; "*" = every job).Optional filters: `location` (e.g. "Germany" — country codes such as DE are understood), `department` (e.g. "Sales"),`remoteOnly` (true/false), `employmentType` (e.g. "Full-time"), `postedWithinDays` ("1" | "7" | "30" | "90").`queries` optionally adds companies (case-sensitive identifiers like "BoschGroup").`maxResultsPerQuery` caps jobs per keyword or company (default 200).Start with: {"searchQueries":["sales manager"],"location":"Germany","maxResultsPerQuery":50}Ask me which roles and region I care about, run the Actor, then summarise the hiring employers as a table.
The machine-readable API, MCP config and OpenAPI definition live at apify.com/foxlabs/smartrecruiters-job-board-scraper.md.
📋 Overview
Everything you need to turn SmartRecruiters' employers into one searchable hiring dataset — role details, classification and hiring signals — in one actor, with no login, cookies or API key.
Why teams pick this actor:
- 🔎 No identifiers needed — search 1,700+ SmartRecruiters employers by job title; the companies come to you.
- ⚡ Live and fast — SmartRecruiters searches each company by keyword itself; a pass over the whole index takes about a minute and a half.
- 🌍 Richest classification in the series — city, country, region, coordinates, industry and experience level on every role.
- 📄 Full descriptions — job description and qualifications from the posting detail.
- 🔗 Same schema across the series — join with the sibling ATS actors on
companyName/companyBoard. - 💰 Pay only for results — per-role pricing; a job found twice is charged once; empty searches and failed lookups are never billed.
- 🤖 Agent-ready — MCP + x402 agentic payments.
🎬 Quick Start
curl -X POST "https://api.apify.com/v2/acts/foxlabs~smartrecruiters-job-board-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries":["sales manager"],"location":"Germany","maxResultsPerQuery":50}'
🚀 Getting Started (3 steps)
- Type your job titles — one per line (
sales manager,software engineer), or*for every job. - Narrow it down (optional) — location, department, remote only, employment type, posting date; or add specific companies in
queries. - Run and export — a clean dataset as JSON, CSV or Excel.
📥 Input
{"searchQueries": ["sales manager", "account executive"],"location": "Germany","employmentType": "Full-time","postedWithinDays": "30","queries": ["BoschGroup"],"maxResultsPerQuery": 200}
| Field | Type | Description |
|---|---|---|
searchQueries | array | Job-title keywords, one per line. Every word must appear in the title (engineer also matches engineering). * = every job matching the filters. |
location | string | Text the location or country must contain, e.g. Berlin, Germany, United States (country codes such as DE are spelled out). |
department | string | Text the department or function must contain, e.g. Sales, Engineering. |
remoteOnly | boolean | Keep only remote jobs. |
employmentType | string | e.g. Full-time, Part-time, Contract, Intern. |
postedWithinDays | string | any, 1, 7, 30 or 90. |
queries | array | Optional SmartRecruiters company identifiers (case-sensitive, e.g. BoschGroup). Search filters do not apply to them. |
maxResultsPerQuery | integer | Caps jobs per keyword or company (default 200). |
maxConcurrency | integer | How many companies from queries to fetch at once. |
scanConcurrency | integer | How many companies a keyword search asks at once (default 8). |
includeRaw | boolean | Attach the source's untouched record under raw (companies in queries). |
requestDelayMs | integer | Politeness delay between requests. |
proxyConfiguration | object | Optional. |
📤 Output
One row per open role, saved to the dataset.
| Field | Description |
|---|---|
companyName | Company name |
companyBoard | Company identifier — join key |
jobId | Posting ID |
jobTitle | Role title |
department / team | Department (where set) / function |
location | Full location line |
city / region / countryName | City, region, country code |
latitude / longitude | Coordinates (where published) |
isRemote | Remote flag |
employmentType | Employment type |
industry / experienceLevel | Industry and experience level |
postedAt | Released date (ISO) |
description | Full description (job + qualifications), HTML stripped |
applyUrl / sourceUrl | Apply link / public posting URL |
Every row also carries query, scrapedAt, and — when a search finds nothing or a lookup fails — an error.
{"query": "sales","companyName": "Seven Senders","companyBoard": "SevenSenders","jobTitle": "B2B SaaS (claim.me) Sales Manager (DACH) (f/m/x)","department": "Sales & Marketing Global","team": "Sales","location": "Berlin, BE, DE","city": "Berlin","countryName": "DE","latitude": 52.52000659999999,"longitude": 13.404954,"employmentType": "Full-time","industry": "Logistics And Supply Chain","experienceLevel": "Associate","postedAt": "2026-06-22","description": "The Essence of Your Role \n You own the full DACH sales cycle from initial outrea…","applyUrl": "https://jobs.smartrecruiters.com/SevenSenders/744000133329740-b2b-saas-claim-me-sales-manager-dach-f-m-x-?oga=true"}
💼 Use cases
1. Hiring-intent lead lists
Input: searchQueries: ["sales manager"], location: "Germany", weekly. Output: employers hiring sales in a market. Use: rank accounts by hiring focus.
2. Geographic expansion signals
Input: searchQueries: ["*"], a country, postedWithinDays: "30". Output: new roles by city/region with coordinates. Use: spot new-market hiring early.
3. Competitor headcount tracking
Input: the competitor's identifier in queries, weekly. Output: the full role list over time. Use: see where and what a global employer is hiring.
4. Recruiter sourcing Input: a title and a city. Output: roles + full descriptions + apply links. Use: source across enterprise employers.
🔗 Integration
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('foxlabs/smartrecruiters-job-board-scraper').call({ searchQueries: ['sales manager'], location: 'Germany', maxResultsPerQuery: 50 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('foxlabs/smartrecruiters-job-board-scraper').call(run_input={'searchQueries': ['sales manager'], 'location': 'Germany', 'maxResultsPerQuery': 50})for item in client.dataset(run.default_dataset_id).iterate_items():print(item)
Written for apify-client 3 for Python, where call() returns a run object; with version 1 or 2 it returns a dict — write run['defaultDatasetId'] there.
Automation (n8n / Zapier / Make): schedule or webhook → HTTP request to the actor API → handle the JSON dataset → push to a sheet, CRM or dashboard.
📊 Pricing
Pay-per-event: $0.002 per delivered role. A job found twice is charged once; jobs that don't match your filters, empty searches and failed lookups are never billed. View current pricing.
❓ FAQ
Do I need an account, login or API key? No. This reads SmartRecruiters' public Posting API — no key.
Do I need to know company identifiers? No. Search by job title; every row tells you the company and its identifier.
Which companies does the search cover? SmartRecruiters companies found in the public Common Crawl web archive — 1,783 identifiers (October 2026). A company that isn't in the index can still be read by adding its identifier to queries.
Why does a job show several countries? Some employers post one role for several countries ("France, Netherlands, Germany…"); it matches a location filter for any of them.
How current is the data? Every run asks SmartRecruiters live, so results are as fresh as the careers sites themselves.
Can I export to CSV / Excel / JSON? Yes — directly from the Apify dataset.
What happens on a bad input or a search with no matches? You get a row with your query and an error — nothing is silently dropped, and you're not charged.
Is scraping this legal? It reads a public job feed the company publishes for syndication — job data, not personal data. See below.
🐛 Troubleshooting
- Fewer rows than expected — title matching is strict (every word must appear in the title); try fewer or shorter keywords, or loosen the filters.
- "… has no public careers site" — the identifier is case-sensitive — copy it exactly from the careers URL.
- An error row — the identifier is wrong or the site is private.
⚠️ Trademark
Independent, third-party tool. Not affiliated with, endorsed by or connected to SmartRecruiters, Inc. "SmartRecruiters" and related marks belong to their owners and are used here for identification only.
⚖️ Is it legal to scrape this data?
This actor reads only publicly published job-posting data — no private or personal user data. Your results can still contain personal data (e.g. a name in a description); personal data is protected by the GDPR and similar laws, so only process it with a legitimate basis. See Apify's blog post on the legality of web scraping.
🤝 Support & contact
- 🌐 Website: data.foxlabs.com.tr
- 📧 Email: info@foxlabs.com.tr
- 🐛 Issues: open a ticket in the Actor's Issues tab
- 🧰 More clean B2B data actors: Fox Labs on Apify
Changelog
0.5.0 — 2026-10-14 — keyword search across SmartRecruiters (no identifier needed)
- New:
searchQueries— search open jobs by title across 1,783 indexed SmartRecruiters companies; SmartRecruiters filters each company by keyword itself, so a full pass takes about a minute and a half. Filters:location,department,remoteOnly,employmentType,postedWithinDays. - A job is delivered and charged once per run, whether a search or a company in
queriesfinds it. - Restart-safe: a run that Apify moves to another server resumes without writing or charging a row twice.
queries(company identifiers) works exactly as before; it is now optional.
0.4.5 — 2026-10-08 — README: the Python example works with the current Apify client
- The README's Python example read the results with
run['defaultDatasetId']. With the current Apify client for Python (version 3)call()returns a run object, not a dict, and that line raisedTypeError: 'Run' object is not subscriptable— after the run itself had finished. The example now readsrun.default_dataset_id; with client version 1 or 2, keeprun['defaultDatasetId']. Checked with apify-client 3.2.1, 2.5.1 and 1.12.2. - No code, output field or pricing change.
0.4.1 — 2026-09-06
- Added job coordinates. New
latitude/longitudefrom the posting location (~78% of roles), enabling map- and radius-based territory work alongside the existing city / region / country.
0.4 — 2026-09-06
- Enabled AI-agent payments (x402). Standby mode was removed because Apify's x402 agentic-payment eligibility requires it off; the actor now runs as a standard pay-per-event run that agents can discover, run and pay for over x402 (USDC on Base) or Skyfire without an Apify account. Batch and MCP usage are unchanged.
0.3 — 2026-09-05
- Output schema linked in
actor.json(outputfield) so the Store shows the Output tab. - Standby mode (real-time API). The actor now also runs as an always-on HTTP API:
GET /search?query=<query>&maxResults=Nreturns open roles as JSON, billed per role (pay-per-event). Batch runs are unchanged. Endpoint and OpenAPI schema appear in the Standby tab.
0.2 — 2026-09-05
- Full job descriptions added. The list endpoint omits the description; the actor now fetches each posting's detail (job description + qualifications, HTML stripped). One extra request per posting, bounded by
maxResultsPerQuery. - Dead columns removed.
seniorityandsalary(never provided;experienceLevelalready carries seniority) and the redundantupdatedAt(duplicatedpostedAt) are dropped. Rich fields kept:team,city,countryName,region,industry,experienceLevel,employmentType.
0.1
- Initial release: postings listing from any SmartRecruiters careers site (title, team, location, classification, dates).