SmartRecruiters logo

Job boards & ATS · Live on Apify

SmartRecruiters jobs scraper and job change monitor

Name the SmartRecruiters companies you follow. You get their open jobs as clean rows. Give it your last snapshot to see new, changed and removed jobs.

About $0.72 for 1,000 jobs$0.00072 per job + $0.002 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

sourceIdsmartrecruiters:smartrecruiters:744000148454651
companyIdentifiersmartrecruiters
postingId744000148454651

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: BoschGroup in Companies. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Get the current public job postings of SmartRecruiters companies you name, as clean rows with stable IDs. Run it again with your last snapshot and see which jobs are new, changed or gone.

Good for

  • Track the open jobs of a known list of employers on SmartRecruiters.
  • Export job titles, locations, departments and apply links to JSON, CSV or Excel.
  • Find out when a posting is added, edited or taken down, without building your own diff.

Not a good fit

  • It does not search all SmartRecruiters companies. You must know the company ID.
  • It reads only public postings. It cannot see internal or private jobs, candidates or applications.
  • It does not send alerts. You can schedule runs and use Apify integrations to react to the output.
  • It is an independent tool. It is not made by, or affiliated with, SmartRecruiters.

Who uses it

Sales and account teams

Watch hiring at large target employers.

Job board owners

Export titles, places and apply links to your board.

AI and search builders

Get plain job text for search or AI tools.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.002Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Job posting row$0.00072One job posting row, or one removed-posting row, stored in the dataset.

Examples

  • One job: about $0.0027.
  • 1,000 jobs: about $0.72.
  • Every day 100 jobs, for 30 days: about $2.22 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 6,900 jobs.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Do I need a SmartRecruiters API key?

No. The tool uses the public Posting API without login.

Can I search jobs across every company?

No. You choose the companies. Filter the rows afterwards.

Does it send job alerts?

No. Schedule runs and connect Apify integrations to the output.

Can I switch from another SmartRecruiters Actor?

For the main job fields, yes. They use the same names as a popular monitor Actor.

How do I find a company ID?

Open the career page. The ID is the first part of the path after jobs.smartrecruiters.com/. It is not case sensitive; rows show the exact spelling from the source.

Can it search jobs by keyword or country across all companies?

No. You choose the companies. Filter the dataset afterwards by fullLocation, locationCountry, department or typeOfEmployment.

Is the result complete?

Check companyStatus. complete means the count matched the source at read time. Other values tell you why not. A posting can still be opened or closed right after the run.

How does change detection work?

The Actor hashes the normalized content of each posting and compares it with your previousSnapshot by company and posting ID. A new fetchedAt or observedAt is never a change. Title and release date changes are named in changedFields; other changes give updated with an empty list.

Can I use it in place of another SmartRecruiters monitor Actor?

For the main job fields, yes: it uses the same field names and values as a popular SmartRecruiters monitor Actor (source, sourceId, postingId, title, location, postingUrl, applyUrl, detailUrl, referralUrl, language, description HTML, event, observedAt, scanComplete). In a test on 5 postings all of those matched. Differences: empty fields are null or "" here and are left out there; event values other than NEW were not observed on the other Actor; it has no previousSnapshot input. This Actor also adds fields such as plain-text descriptions and contentHash. Test with your own data before you switch.

Details

Step by step on Apify
  1. Find the company ID. Open the company career page. If the address is https://jobs.smartrecruiters.com/McDonaldsCorporation, the ID is McDonaldsCorporation. IDs are not case sensitive.
  2. Open the Input tab and add the ID to Companies. You can also paste the board URL.
  3. For a quick test, keep the prefilled BoschGroup company and limit of 3 jobs, with full details. Replace the company ID when you want to read another employer.
  4. Click Start.
  5. Open the Output tab, then Job rows. Check title, fullLocation and postingUrl of the first row.
Use cases
TaskInputYou getKey fields
Watch the hiring of target employerscompanies, outputMode: "changes", previousSnapshotNew, updated and removed postingschangeType, title, postingUrl
Build a job list for a research or job boardcompanies, maxJobsPerCompanyAll current postingstitle, fullLocation, department, applyUrl
Prepare text for search or AI toolsdescriptionFormat: "text"Plain-text job sectionsjobDescriptionText, qualificationsText
Check a known board is read completelyany runStatus per companycompanyStatus, OUTPUT, RUN_SUMMARY
Tips for better results
  • The company ID is the first part after jobs.smartrecruiters.com/ in the link.
  • Turn off details for a fast list. Turn it on for text and apply links.
  • Set memory yourself: 512 MB for about 1,100 rows with details.
Limits and good to know
  • Up to 1000 jobs per company is proven. A board with 4814 postings was read up to the cap and marked capped
  • With details, 2000 rows in one run took 269 s at 1024 MB. List-only runs returned 3284 rows in 16 s
  • Memory: choose 512 MB for up to about 1100 rows with details, and 1024 MB for about 2000. The Apify default for new runs can be higher; set memory yourself
  • Allowed by the input form but not tested: more than 2000 rows with details in one run, 25 companies in one run, and a previousSnapshot over 2000 entries. Use smaller batches first
  • The Actor reads about 4 detail requests per second. No rate limit was hit in tests
  • A detail that fails (for example, a posting that disappeared between the list and the detail read) keeps the row with list fields only, sets detailStatus and marks the company partial. Such a posting is never reported as removed
  • removed rows are made only for companies that ended complete. Capped, partial, error and empty companies list removalsSuppressed in RUN_SUMMARY instead
  • With includeDetails: false, postingUrl is built from the company ID and posting ID (warning posting_url_derived, no title slug). applyUrl, referralUrl and descriptions are null. Turn details on if you need them

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "source": "smartrecruiters",
  "sourceId": "smartrecruiters:smartrecruiters:744000148454651",
  "companyIdentifier": "smartrecruiters",
  "postingId": "744000148454651",
  "uuid": "f4a3d5b9-5fa9-48af-ba55-30669c9c3e81",
  "jobId": "77d771c2-3c32-4eec-b9a1-9b7cd6684a16",
  "jobAdId": "f9fbb59b-d9db-4c26-a4c9-959f920b370a",
  "refNumber": "REF2025N",
  "title": "Data Operations Consultant",
  "companyName": "SmartRecruiters Inc",
  "releasedDate": "2026-09-09T09:43:26.403Z",
  "visibility": "PUBLIC",
  "active": true,
  "locationCity": "Poland",
  "locationRegion": "Remote",
  "locationCountry": "pl",
  "fullLocation": "Poland, Remote, Poland",
  "remote": true,
  "hybrid": false,
  "latitude": null,
  "longitude": null,
  "address": null,
  "postalCode": null,
  "industry": "Computer Software",
  "industryId": "computer_software",
  "department": "Technical Services",
  "departmentId": "5408931",
  "function": "Information Technology",
  "functionId": "information_technology",
  "typeOfEmployment": "Contract",
  "typeOfEmploymentId": "contract",
  "experienceLevel": "Associate",
  "experienceLevelId": "associate",
  "language": "en",
  "languageName": "English",
  "detailUrl": "https://api.smartrecruiters.com/v1/companies/smartrecruiters/postings/744000148454651",
  "postingUrl": "https://jobs.smartrecruiters.com/smartrecruiters/744000148454651-data-operations-consultant-",
  "applyUrl": "https://jobs.smartrecruiters.com/smartrecruiters/744000148454651-data-operations-consultant-?oga=true",
  "referralUrl": "https://jobs.smartrecruiters.com/external-referrals/company/smartrecruiters/publication/f4a3d5b9-5fa9-48af-ba55-30669c9c3e81?dcr_ci=smartrecruiters",
  "companyDescriptionHtml": "<p>SmartRecruiters is the Recruiting AI Company that transfo…",
  "jobDescriptionHtml": "<p><strong>Contract Type: 12-Month Fixed-Term Contract</stro…",
  "qualificationsHtml": "<p><strong>Qualifications</strong></p><p>At least 2 years of…",
  "additionalInformationHtml": "<p>SmartRecruiters is proud to be an Equal Employment Opport…",
  "companyDescriptionText": "SmartRecruiters is the Recruiting AI Company that transforms…",
  "jobDescriptionText": "Contract Type: 12-Month Fixed-Term Contract\n\nWe're looking f…",
  "qualificationsText": "Qualifications\n\nAt least 2 years of experience with ETL tool…",
  "additionalInformationText": "SmartRecruiters is proud to be an Equal Employment Opportuni…",
  "compensation": null,
  "companyStatus": "complete",
  "scanComplete": true,
  "detailStatus": "ok",
  "detailHttpStatus": 200,
  "event": "NEW",
  "closedAt": null,
  "changeType": null,
  "changedFields": null,
  "updateComparable": null,
  "contentHash": "1e423cdd2467f140c1efe305e2c673e18a318f42853330a1cedcd085dee9195f",
  "hashBasis": "detail"
}

Use it from code

Actor ID: cliqtomedia/smartrecruiters-jobs-monitor-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/smartrecruiters-jobs-monitor-scraper").call(run_input={
    "companies": [
        "BoschGroup"
    ],
    "maxJobsPerCompany": 3
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~smartrecruiters-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["BoschGroup"], "maxJobsPerCompany": 3}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/smartrecruiters-jobs-monitor-scraper")
result = tool.invoke({"run_input": {"companies": ["BoschGroup"], "maxJobsPerCompany": 3}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (40)
FieldTypeMeaning
sourcestringAlways smartrecruiters.
sourceIdstringsmartrecruiters:{companyIdentifier}:{postingId}.
companyIdentifierstringCanonical SmartRecruiters company identifier from the API (not your spelling).
postingIdstringStable ID of the job inside the company. With companyIdentifier it is the row key.
uuidstringPosting UUID from the source.
jobIdstringJob ID from the detail record. Null when details are off or unavailable.
jobAdIdstringID of the job ad.
refNumberstringEmployer reference number, if set.
titlestringJob title from the source with surrounding spaces removed.
companyNamestringDisplay name of the company.
releasedDatestringWhen the posting was released (ISO 8601 text).
visibilitystringPosting visibility from the source, for example PUBLIC.
activebooleanWhether the posting is active. Detail only.
locationCitystringCity from the posting location.
locationRegionstringRegion or state from the posting location.
locationCountrystringCountry code from the posting location.
fullLocationstringReadable location line.
remotebooleanTrue when the posting is remote.
hybridbooleanTrue when the posting is hybrid.
latitudestringLatitude as text. Often null.
longitudestringLongitude as text. Often null.
addressstringStreet address. Detail only, often null.
postalCodestringPostal code. Detail only, often null.
industrystringIndustry label.
industryIdstringIndustry ID as text.
departmentstringDepartment label. Null when the employer left it empty.
departmentIdstringDepartment ID as text.
functionstringJob function label.
functionIdstringJob function ID as text.
typeOfEmploymentstringEmployment type label, for example Full-time.
typeOfEmploymentIdstringEmployment type ID as text.
experienceLevelstringExperience level label.
experienceLevelIdstringExperience level ID as text.
languagestringLanguage code, for example en or en-GB.
languageNamestringReadable language name from the source, for example English.
detailUrlstringPublic API URL of the posting detail record. Always set.
postingUrlstringPublic job page. With details it is the posting URL from the source; in list-only runs it is derived from the company ID and posting ID (warning posting_url_derived).
applyUrlstringApply link. Detail only: null when includeDetails is false.
referralUrlstringPublic referral link from the detail record. Null without details.
companyDescriptionHtmlstringCompany section as raw HTML. Detail only.
Input settings (7)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Companiescompaniesarray["BoschGroup"]
Max jobs per companymaxJobsPerCompanyinteger3
Include posting detailsincludeDetailsbooleantrue
Description formatdescriptionFormatstring"both"
Previous snapshotpreviousSnapshotarray
Output modeoutputModestring"all"
Run deadline (seconds)timeoutSecsinteger900

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure