SmartRecruiters Jobs Scraper
Pricing
from $1.00 / 1,000 jobs
SmartRecruiters Jobs Scraper
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.
Pricing
from $1.00 / 1,000 jobs
Rating
0.0
(0)
Developer
Nate Schnell
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
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, postingname - 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 —
releasedDateISO timestamp - Application —
postingUrl,applyUrl,referralUrl(optional, enableincludeDescription) - Description —
descriptionSections(companyDescription,jobDescription,qualifications,additionalInformation), plusdescriptionHtmland optional plain-textdescriptionText(optional, enableincludeDescriptionandparseDescription) - Provenance —
scrapedAt,source
23 fields per posting, all named and typed in the dataset schema.
How to use SmartRecruiters Jobs Scraper
- Sign in to Apify (create a free account if you don't have one — Apify's free tier covers most experiments).
- Open the actor and click Try for free.
- Enter company slugs. Paste the case-sensitive slug from the SmartRecruiters careers URL (e.g.
BoschGroupfromhttps://jobs.smartrecruiters.com/BoschGroup). You can paste a full URL too — the actor extracts the slug. - (Optional) Apply filters. Use server-side
country/region/city/keywordfor the cheapest narrowing, plus client-sidetitleFilter,departmentFilter,experienceLevels,employmentTypes,postedAfter,remoteOnly, and more. - (Optional) Enable
includeDescriptionto also fetch the full job-ad sections, apply URL, and posting URL. - Click Run. Results stream into the dataset as they're scraped.
- 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.
{"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):
{"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, or wire up webhooks to fire whenever a run finishes. Schedule daily / hourly pulls with Apify Scheduler 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 — same shape, same author, for any Greenhouse-hosted careers board. Combine the two to cover both ATSes in one warehouse table.
- 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 with your input JSON, then read the dataset via GET /v2/datasets/{datasetId}/items. Apify also exposes the actor as a synchronous run with run-sync for short jobs and as a task if you want to save reusable input presets.
Can I use SmartRecruiters Jobs Scraper in Python or Node.js?
Yes. With the apify-client package:
from apify_client import ApifyClientclient = 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 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.