Jobs
SmartRecruiters Jobs Scraper
Scrape job postings from any SmartRecruiters-hosted employer via SmartRecruiters' own keyless public JSON API — titles, locations, departments, apply URLs, full descriptions. One scraper, every employer.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
Thousands of companies run their careers page on SmartRecruiters, and every one of those boards is served by the same public JSON API (api.smartrecruiters.com/v1/companies/{companyId}/postings). This Actor talks to it directly: hand it one or more company IDs — the {companyId} in a jobs.smartrecruiters.com/{companyId} URL, e.g. Visa — and it paginates each employer's full posting list, optionally fetches every posting's detail for the full description, and normalizes it all into one row schema. One scraper, every SmartRecruiters employer.
What we handle for you
- 🔑 Keyless public API — no OAuth, no token, no per-company setup; the same endpoint the careers page itself calls.
- 🏢 Multi-company in one run — pass many company IDs; rows come back identically shaped, tagged with
company_id/company_name. - 🎯 Server-side filters — narrow by free-text
searchQuery,department,city, orcountrybefore a single row is billed. - 📝 Optional full descriptions — flip
includeDescriptionon for the complete posting body (an extra detail fetch per job), or off for a fast titles-and-locations pull. - 🔁 Retries with backoff + fingerprint impersonation —
curl-cffipresents a real browser handshake and retries transient429/5xxso a large multi-employer batch finishes instead of dying midway. - 🧊 Clean, typed rows — Pydantic-validated, ISO-8601 timestamps, stable IDs. Export JSON / CSV / Excel straight from the Apify Console.
Use cases
- Recruiting & talent intelligence — track what a target employer is hiring for, where, and in which departments.
- Job-board aggregation — add SmartRecruiters coverage next to Workday / Greenhouse / Lever / Ashby in one pipeline.
- Labor-market research — sample hiring demand across an industry by role, function, or location.
- Competitive hiring intel — watch a competitor's open reqs to infer team growth and direction.
- ATS data pipelines — wire structured job rows into your CRM, dashboard, or n8n / Make workflow on a schedule.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
companyIds | array | yes | SmartRecruiters company identifier, e.g. "Visa" (the path segment in jobs.smartrecruiters.com/{companyId}), or a full board URL — the companyId is regex-extracted automatically. A plain string with no… |
searchQuery | string | no | Passthrough to SmartRecruiters' own free-text search facet (q) on every page request. Leave empty to return every posting. |
department | string | no | Passthrough to SmartRecruiters' department facet. Must be SmartRecruiters' own internal department id (e.g. "868639"), not the human-readable label — there is no label-to-id resolver. Leave empty to skip. |
city | string | no | Passthrough to SmartRecruiters' city facet. Leave empty to skip. |
country | string | no | Passthrough to SmartRecruiters' country facet; lowercased automatically before sending, e.g. "gb", "us". Leave empty to skip. |
maxResultsPerCompany | integer | no | Cap job postings emitted per companyIds entry. |
includeDescription | boolean | no | When enabled, fetch the full job description (HTML) plus the verified apply URL for every emitted job. Roughly doubles HTTP calls for emitted rows. |
{
"companyIds": [
"Visa"
],
"maxResultsPerCompany": 25,
"includeDescription": true,
"proxyConfiguration": {
"useApifyProxy": true
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
posting_idtitlecompany_namelocation_citylocation_countrydepartmentemployment_typeapply_urldescription_html
{
"posting_id": "743999...abc",
"title": "Sr. Manager, Data Platform",
"company_id": "Visa",
"company_name": "Visa",
"location_city": "Austin",
"location_region": "Texas",
"location_country": "US",
"is_remote": false,
"department": "Technology",
"function": "Information Technology",
"employment_type": "Full-time",
"industry": "Financial Services",
"ref_number": "REF12345",
"released_date": "2026-07-18T00:00:00Z",
"apply_url": "https://jobs.smartrecruiters.com/Visa/743999...abc",
"description_html": "Visa is looking for a Sr. Manager...",
"scraped_at": "2026-07-21T14:00:00Z"
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result emitted | $0.0020 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
Limitations
- Public postings only — the openly published careers boards, not authenticated internal/employee views.
- Descriptions cost an extra fetch —
includeDescriptionadds one detail request per posting; leave it off for the fastest pull. - Company IDs, not company names — you supply the SmartRecruiters
{companyId}from the careers URL; a display name like "Bosch" may differ from its actual identifier. - Point-in-time snapshot — returns the board as it stands now; schedule recurring runs to track changes.
FAQ
Do I need a SmartRecruiters account or API key?
How do I find a company's ID?
https://jobs.smartrecruiters.com/{companyId}. Paste that {companyId} (e.g. Visa).Can one run cover several employers?
companyIds and every row comes back identically shaped, tagged with company_id / company_name.Is this legal?
Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors