SmartRecruiters Jobs Scraper & API - ATS Career Data avatar

SmartRecruiters Jobs Scraper & API - ATS Career Data

Pricing

from $6.15 / 1,000 results

Go to Apify Store
SmartRecruiters Jobs Scraper & API - ATS Career Data

SmartRecruiters Jobs Scraper & API - ATS Career Data

Scrape any SmartRecruiters career page into structured jobs data. Extract title, location, remote flag, department, salary text, full description, apply URL, recruiter and custom fields by company. ATS job postings scraper and API, no login or API key. Export JSON, CSV or Excel.

Pricing

from $6.15 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

SmartRecruiters Jobs & Salary Scraper

SmartRecruiters Jobs Scraper & API

Scrape any SmartRecruiters career page into clean, structured job postings data. This ATS jobs scraper reads the public SmartRecruiters job board of any company you list and returns every field the source exposes for each opening, plus a parsed salary range, geocoded location and structured custom fields. No login, no API key, no browser. Export to JSON, CSV or Excel, or pull results straight from the job postings API.

Here is one real result, with every field the actor returns (long text fields and the customFields and videoUrls arrays are trimmed here with ... to keep the example readable; live records return them in full):

{
"title": "Resident Engineer",
"company": "Bosch Group",
"companyId": "BoschGroup",
"location": "Guadalajara, Jal., Mexico",
"city": "Guadalajara",
"region": "Jal.",
"country": "MX",
"postalCode": "44690",
"streetAddress": "Avenida Ignacio L Vallarta 3090",
"latitude": 20.6752737,
"longitude": -103.3929652,
"remote": false,
"hybrid": false,
"department": null,
"jobFunction": "Engineering",
"jobFunctionId": "engineering",
"industry": "Automotive",
"industryId": "automotive",
"employmentType": "Full-time",
"employmentTypeId": "permanent",
"experienceLevel": "Associate",
"experienceLevelId": "associate",
"url": "https://jobs.smartrecruiters.com/BoschGroup/744000147613789-resident-engineer",
"jobId": "744000147613789",
"uuid": "4d2bc37a-7d88-4834-8cdc-8c99b9b18711",
"jobAdId": "845b256e-8129-4243-89b4-414e819a36f8",
"refNumber": "REF295136V",
"visibility": "PUBLIC",
"active": true,
"releasedDate": "2026-09-05T00:02:29.676Z",
"language": "English",
"languageCode": "en",
"languageNative": "English (US)",
"recruiter": "Diana De La Mora",
"recruiterAvatarUrl": null,
"customFields": [
{ "fieldId": "5abe2a4a...", "label": "Contract type", "value": "Unlimited" },
{ "fieldId": "5abe295a...", "label": "Global Salary Level", "value": "Senior/ Upper Tariff" }
],
"applyUrl": "https://jobs.smartrecruiters.com/BoschGroup/744000147613789-resident-engineer?oga=true",
"referralUrl": "https://jobs.smartrecruiters.com/external-referrals/company/BoschGroup/publication/...",
"videoUrls": [],
"salaryText": "$26.94 - $32.96",
"companyDescription": "Bosch was founded in Stuttgart in 1886 by Robert Bosch...",
"jobDescription": "The Resident Engineer serves as the primary on-site technical liaison...",
"qualifications": "Requirements: Minimum: Bachelor's degree in engineering...",
"additionalInformation": "Work #LikeABosch. Get to know more about how we work at Bosch...",
"descriptionText": "The Resident Engineer serves as the primary on-site technical liaison...",
"observedAt": "2026-09-05T03:15:19.391Z",
"error": null
}

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor reads the public SmartRecruiters job boards of the companies you list, paginates through every open posting, and writes one normalized record per job to the run's dataset. With withDetails on (the default) each record includes the full job description, qualifications, company description, apply URL, custom fields and a salary range parsed from the free-text ad. Location is split into city, region, country, postal code, street address and latitude/longitude when the source provides them.

You pass company identifiers taken from each board's URL (for example BoschGroup from jobs.smartrecruiters.com/BoschGroup). Optional filters (keyword, remote only, employment type, experience level, department, country, released-after date) are applied after jobs are fetched, so you can pull exactly the roles you need.

Why this scraper

  • No API key, no login, no browser. Point it at a company identifier and go. Works on any SmartRecruiters-hosted board.
  • Most complete field set. Full descriptions split into company / job / qualifications / additional-information sections, plus recruiter, apply URL, referral URL, video URLs, geocoded location, structured custom fields and a parsed salaryText.
  • Every filter you need. Keyword, remote-only, employment type, experience level, department, country and released-after date.
  • Recruiter and career-page contact. Each posting exposes the recruiter/creator name so you can build talent-mapping and BD lists.
  • Multi-company in one run. Pass a list of identifiers or full career URLs and collect them all.
  • Clean, honest nulls. Missing source values are null, never invented.

Quickstart

Open the actor, paste this into the input, and press Run. It collects up to 10 detailed jobs from the Bosch, Ubisoft and Equinox SmartRecruiters boards.

{
"companies": ["BoschGroup", "Ubisoft2", "Equinox"],
"maxJobs": 10,
"withDetails": true,
"remoteOnly": false
}

companies is required. Use the identifier from a board's careers URL, or paste the full URL. Identifiers are case-sensitive.

Input reference

FieldTypeRequiredDefaultDescription
companiesstring[]yes(none)Company identifiers whose SmartRecruiters boards to scrape, for example BoschGroup. Take the identifier from the careers URL jobs.smartrecruiters.com/<identifier>, or paste the full URL. Case-sensitive.
maxJobsintegerno10Maximum number of jobs to collect across all boards. Free Apify plans are capped at 10 per run. Alias: maxItems, limit.
withDetailsbooleannotrueWhen on, each job includes full description, qualifications, company description, apply URL, recruiter, custom fields and salary text. When off, only lightweight listing fields are collected. Alias: includeDetails.
searchQuerystringno(empty)Optional keyword filter applied after fetch. Matches title, department, location, function and description (case-insensitive).
remoteOnlybooleannofalseWhen on, return only jobs flagged remote.
employmentTypestringno(empty)Keep only jobs whose employment type contains this text (for example Full-time, Intern). Case-insensitive.
experienceLevelstringno(empty)Keep only jobs whose experience level contains this text (for example Entry, Senior). Case-insensitive.
departmentstringno(empty)Keep only jobs whose department contains this text (for example Engineering, Sales). Case-insensitive.
countrystringno(empty)Keep only jobs whose country or location contains this text (for example US, Germany). Case-insensitive.
releasedAfterstringno(empty)Keep only jobs released on or after this date (YYYY-MM-DD). Jobs without a release date are excluded when set.
proxyConfigurationobjectno(none)Optional Apify proxy settings, for very large boards that rate-limit a single IP.

The actor also accepts companyIdentifiers, companyUrls and startUrls as aliases for companies, so inputs built for other SmartRecruiters scrapers work here unchanged.

Output reference

One dataset item per job. Types: string, number, boolean, object[], string[], or null when the source value is absent. Detail fields are populated only when withDetails is enabled.

FieldTypeDescription
titlestringJob title.
companystringCompany display name.
companyIdstringSmartRecruiters company identifier (from the board URL).
locationstringFull location string as posted.
citystringCity parsed from the location.
regionstringState or region parsed from the location.
countrystringCountry code or name.
postalCodestringPostal code of the job location, or null.
streetAddressstringStreet address of the job location, or null.
latitudenumberLatitude of the job location, or null.
longitudenumberLongitude of the job location, or null.
remotebooleantrue when the job is flagged remote.
hybridbooleantrue when the job is flagged hybrid.
departmentstringDepartment, or null when not set.
jobFunctionstringJob function category.
jobFunctionIdstringMachine code for the job function.
industrystringIndustry category.
industryIdstringMachine code for the industry.
employmentTypestringEmployment type (for example Full-time).
employmentTypeIdstringMachine code for the employment type.
experienceLevelstringExperience level (for example Associate).
experienceLevelIdstringMachine code for the experience level.
urlstringPublic job posting URL.
jobIdstringSmartRecruiters posting identifier.
uuidstringStable posting UUID, useful as a dedup key.
jobAdIdstringIdentifier of the job ad shown on the posting.
refNumberstringEmployer reference/requisition number, or null.
visibilitystringPosting visibility (for example PUBLIC).
activebooleantrue when the posting is still active (with withDetails).
releasedDatestringISO 8601 date the job was released.
languagestringPosting language label.
languageCodestringPosting language code (for example en).
languageNativestringNative language label (for example English (US)).
salaryTextstringSalary range parsed from the free-text ad, or null.
applyUrlstringDirect application URL (with withDetails).
referralUrlstringExternal referral URL (with withDetails).
recruiterstringRecruiter / posting creator name, or null.
recruiterAvatarUrlstringRecruiter avatar URL, or null.
videoUrlsstring[]Video URLs embedded in the posting. Empty array when none.
jobDescriptionstringFull job description text (with withDetails).
qualificationsstringQualifications section text (with withDetails).
companyDescriptionstringCompany description text (with withDetails).
additionalInformationstringAdditional information section text (with withDetails).
descriptionTextstringCombined plain-text description (with withDetails).
customFieldsobject[]Employer custom fields as {fieldId, label, value}.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

How it compares

Every input other SmartRecruiters scrapers accept, plus more filters, plus a richer output. Aliases mean their input files run here unchanged.

CapabilityThis actorTypical alternatives
Multiple companies per runYesSome (many are single-company)
Company identifiers and full career URLsYes (companies, companyIdentifiers, companyUrls, startUrls)Varies
Keyword filterYes (searchQuery)Usually no (filter after export)
Remote-only filterYesRare
Employment type / experience level filtersYesRare
Department and country filtersYesSometimes
Released-after date filterYesRare
Full multi-section descriptionsYes (company / job / qualifications / additional)Often single blob or plain text only
Geocoded location (lat/lng, postal, street)YesRare
Parsed salary textYesRare
Recruiter / creator nameYesRare
Apply URL and referral URLYesApply URL sometimes
Structured custom fieldsYes ({fieldId, label, value})Rare
Video URLsYesRare
Stable posting UUID for dedupYesRare
No API key or loginYesUsually
Export JSON / CSV / ExcelYesUsually

Use cases

  • Recruiting and talent market research. Track which roles a competitor is hiring for, where, and at what seniority.
  • Job boards and aggregators. Ingest a clean, deduplicated feed of live postings with apply URLs.
  • Sales and BD lead lists. Companies that are hiring engineers, sales, or ops are buying signals; pull recruiter names and departments.
  • Compensation research. Collect salaryText and custom pay-grade fields across a set of employers.
  • HR and talent analytics dashboards. Feed structured postings into BI tools with geocoded locations and functions.

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~smartrecruiters-jobs-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"companies":["BoschGroup"],"maxJobs":25,"withDetails":true}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~smartrecruiters-jobs-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"companies":["Ubisoft2"],"remoteOnly":true,"maxJobs":100}'

Apify CLI:

apify call scrapers_lat/smartrecruiters-jobs-scraper \
--input '{"companies":["Equinox"],"searchQuery":"manager"}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per job returned (result event). See the pricing tab for the current per-result price.
  • Detail add-on. With withDetails on (the default), each record that is successfully enriched with detail-page data also charges the details event. Turn withDetails off to pay the listing-only price.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 jobs per run. Upgrade for higher maxJobs.

FAQ and troubleshooting

Where do I get the company identifier? Open a company's SmartRecruiters careers page. The identifier is the path segment after the domain, for example BoschGroup in jobs.smartrecruiters.com/BoschGroup. You can paste either the identifier or the full URL.

Do I need an API key or a SmartRecruiters login? No. The actor reads only public job board data, with no key, login, or browser required.

Why is salaryText null? SmartRecruiters exposes no structured salary field, so the actor parses pay from the free-text ad. When the ad states no pay, salaryText is null. Missing source values are never invented.

How do I get only remote jobs? Set remoteOnly to true, or combine country and searchQuery filters.

Do I need withDetails? Only if you want full descriptions, qualifications, apply URL, custom fields and salary text. Turn it off for a faster, lightweight listing (title, location, department, dates).

Can I scrape several companies at once? Yes. Pass a list of identifiers or full career URLs in companies. You can also use companyIdentifiers, companyUrls or startUrls.

A run returned 0 records. Why? Either the company identifier is wrong or case-mismatched, the board currently has no open jobs, or your filters excluded every job. Zero-result runs are not charged.

Is this an official SmartRecruiters tool? No. This actor is independent and has no affiliation with SmartRecruiters. It reads only publicly available job board data. Use the results in accordance with the source's terms.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with SmartRecruiters. Accesses only publicly available job board data. Use the results in accordance with the source's terms.