SmartRecruiters Jobs Lookup — Open Postings API avatar

SmartRecruiters Jobs Lookup — Open Postings API

Pricing

from $3.00 / 1,000 successful lookups

Go to Apify Store
SmartRecruiters Jobs Lookup — Open Postings API

SmartRecruiters Jobs Lookup — Open Postings API

Look up any company's live, open SmartRecruiters job postings by company identifier or careers-page URL — title, department, city, remote flag, and apply link per role. Calls SmartRecruiters' own public postings API directly, no key required.

Pricing

from $3.00 / 1,000 successful lookups

Rating

0.0

(0)

Developer

Adrian Voss

Adrian Voss

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

SmartRecruiters Jobs Lookup

Look up any company's live, open job postings on SmartRecruiters by company identifier or careers-page URL. This calls SmartRecruiters' own public postings API (api.smartrecruiters.com) directly — no API key, no scraping of the rendered careers page.

Features

  • Company → full postings list. Every currently open job posting on the fetched page for the company, in one call.
  • Per-job detail. Title, department, city, country, a combined location string, remote flag, posted date, and a direct apply URL for each posting.
  • Total count reported. totalReported reflects SmartRecruiters' own whole-board total (totalFound), separate from totalJobCount (this page, before filters) — see Filtering the roles you get back.
  • Real job filters. Narrow to the roles you actually want by title keyword, excluded title keyword, location, remote-only, and posted-after date — see Filtering the roles you get back.
  • New-jobs-only mode. Put the actor on a schedule and get only the postings that appeared since your last run — see Watching for new jobs.
  • URL or bare ID input. Accepts either a careers-page URL (careers.smartrecruiters.com/<Id>) or the bare company identifier itself.
  • Pay only for hits. Companies with no open postings, or that aren't on SmartRecruiters at all, cost nothing — see Pricing.

Input

{
"companies": [
"SGS"
]
}

One company per line — the SmartRecruiters company identifier (case-sensitive) or the full careers.smartrecruiters.com/

{
"items": ["smartrecruiters", "careers.smartrecruiters.com/Ubisoft"],
"maxConcurrency": 5,
"proxyConfiguration": { "useApifyProxy": true }
}

items is a list of SmartRecruiters company identifiers or full careers-page URLs — if you pass a URL, the identifier is extracted from it automatically (e.g. careers.smartrecruiters.com/UbisoftUbisoft); the identifier is case-sensitive and must match exactly what appears in the company's own careers URL. One dataset row is returned per item; rows with "found": false are never charged. maxConcurrency (default 5) caps parallel requests. proxyConfiguration routes requests through Apify Proxy.

Output

queryfoundstatuscompanytotalReportedjobCounttotalJobCountnewJobsfirstRunjobsidtitledepartmentcitycountrylocationremotereleasedDatepostedAtapplyUrlscrapedAt
SGStrueOKSGS4322100<open postings on this page (before filters)><first run of this watchlist?><all jobs (full list)>744000145034539【約聘】行政人員-非破壞檢測部(高雄)Laboratory & Testing高雄市tw<location (city, country)>false2026-08-23T13:06:08.495Zhttps://jobs.smartrecruiters.com/SGS/7440001450345392026-08-23T23:25:14.205Z
{
"query": "smartrecruiters",
"found": true,
"data": {
"company": "smartrecruiters",
"totalReported": 12,
"jobCount": 12,
"jobs": [
{
"id": "743000012345678",
"title": "Senior Backend Engineer",
"department": "Engineering",
"city": "Warsaw",
"country": "pl",
"remote": false,
"releasedDate": "2026-07-15T09:00:00Z",
"applyUrl": "https://jobs.smartrecruiters.com/smartrecruiters/743000012345678"
}
]
},
"scrapedAt": "2026-08-20T14:03:11.000Z"
}

A row is only marked found: true — and only then billed — once the company identifier resolves to at least one open posting on SmartRecruiters. A company identifier that doesn't exist on SmartRecruiters, or a company with zero currently open postings, comes back as found: false and is never charged.

Two counts, two different things. SmartRecruiters' postings API returns totalFound (the company's whole board — SGS reports 4,322) alongside a single page of postings (the API's default limit, 100). This actor has never paginated past that first page. totalReported carries the whole-board totalFound number; totalJobCount is the page-scoped count — how many postings were actually on the fetched page, before any filters ran. jobCount is what's left after filtering. On a company with more postings than fit on one page, totalReported will be much bigger than totalJobCount — that's expected, not a bug.

Filtering the roles you get back

All of these are optional and live in the 🎯 Job filters section of the Input tab. Leave them empty and you get every open role on the fetched page, exactly as before.

InputWhat it does
titleKeywordsKeep only roles whose title contains at least one of these. Case-insensitive, partial words count — "engineer" matches Engineering Manager. Any-match: ["engineer","designer"] keeps both kinds.
excludeTitleKeywordsDrop any role whose title contains one of these — ["intern","contract"]. Applied after titleKeywords, so a role matching both is dropped.
locationsKeep only roles whose combined location (city, country) contains one of these — ["Berlin","de"]. Case-insensitive, partial matches count, any-match.
remoteOnlyKeep only roles that read as remote. Matches SmartRecruiters' own location.remote flag, plus remote, anywhere, work from home, wfh and distributed in the location, and the word remote in the title.
postedAfterKeeps only roles SmartRecruiters released on or after this date — "2026-06-01", or a full ISO timestamp. Inclusive of the date you give.

Different filters combine with AND (title and location and remote), values inside one filter combine with OR. Filtering happens before rows are built, so it applies identically whether you're getting one row per job or one row per company. Filters run only on the fetched page — they narrow what's already in hand, they can't reach postings 101 and beyond on a board bigger than one page.

{
"companies": ["SGS", "Ubisoft"],
"titleKeywords": ["engineer", "technician"],
"excludeTitleKeywords": ["intern"],
"locations": ["Germany", "Remote"],
"postedAfter": "2026-08-01"
}

A company whose roles all get filtered out still gets one found: true row with jobCount: 0 — you asked a question and got a real answer, so it's charged like any other company. A company with no SmartRecruiters postings at all is still a found: false miss and still free.

Watching for new jobs

Turn on onlyNewSinceLastRun and put the actor on a schedule to get a hiring alert instead of a full dump:

  • The first run returns everything that matches your filters (on the fetched page) and remembers which postings it showed you.
  • Every run after that returns only postings it hasn't shown you before. newJobs tells you how many, and firstRun tells you whether this was the baseline run.
  • A company with nothing new still gets a rowfound: true, jobCount: 0, newJobs: 0 — so a quiet week is visibly quiet, not an empty dataset you can't tell from a broken run. Every company checked is charged once either way.

newJobs and firstRun are on every row of every run so the output columns never move — they're simply empty when you haven't turned this on.

The seen-list is kept in a key-value store named smartrecruiters-jobs-lookup-state in your own Apify account, one entry per company. A few things worth knowing:

  • Your filters are part of the identity of a watchlist. Two schedules with different titleKeywords keep separate seen-lists and won't shadow each other. Editing a filter starts a fresh watchlist, so the next run re-baselines and returns the full matching set once.
  • The company identifier's case matters here, unlike on Greenhouse. SGS and sgs would keep separate watchlists — always paste the identifier exactly as SmartRecruiters uses it.
  • A role that gets closed and re-posted later counts as new again. The seen-list only ever holds postings currently on the fetched page, so it can't grow without bound.
  • Don't combine this with "Only keep rows containing" (includeKeywords) — that filter runs on the finished row and can drop the 0 new jobs heartbeat row, which is the one row you want to keep seeing.

Use cases

  • Track hiring velocity at target companies by re-running the lookup on a schedule and diffing jobCount over time.
  • Build a sourcing pipeline that pulls fresh open roles — with department, location, and apply URL — for a watchlist of employers.
  • Feed a recruiting or sales-intelligence dashboard with real-time headcount-growth signals (rising job counts by department or country).
  • Research which companies in a given industry are actively hiring, and where (by city or remote status).
  • Verify whether a company still uses SmartRecruiters as its applicant tracking system before building an integration around it.

Pricing

$4 per 1,000 companies, plus a $0.005 start fee. Misses (found:false) are never charged.

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~smartrecruiters-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"companies":["SGS"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~smartrecruiters-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"companies":["SGS"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~smartrecruiters-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"companies":["{{company}}"]}, mapping the row's company into the companies array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "SmartRecruiters Jobs Lookup | Apify" — the agent will find and run this actor.

FAQ

What counts as "not found"? Either the company identifier doesn't exist on SmartRecruiters, or it exists but currently has zero open postings — both come back as found: false and aren't charged.

Is the company identifier case-sensitive? Yes — it must match exactly what SmartRecruiters uses in the company's own careers.smartrecruiters.com/<Id> URL. Passing the full careers URL avoids guessing the exact casing, since the identifier is extracted from it automatically.

Does totalReported always match jobCount? No, and they're not meant to. totalReported is SmartRecruiters' own whole-board count (totalFound — e.g. 4,322 for a large company like SGS); totalJobCount is how many postings were on the single fetched page (capped at the API's page limit, e.g. 100) before any filters ran; jobCount is what's left in this row after filtering (and, in delta mode, after removing what you've already seen). On a board bigger than one page, totalReported will be much bigger than totalJobCount — that's expected.

Why was I charged for a company that returned 0 jobs? Because its page had open postings — they just didn't match your filters, or weren't new since your last run. totalJobCount shows how many were actually on the fetched page before filtering. A company with no postings on SmartRecruiters at all comes back found: false and is never charged.

Does the "new since last run" state cost anything or leak between users? It lives in a named key-value store (smartrecruiters-jobs-lookup-state) inside your own Apify account, so nobody else can see it and its storage cost is negligible (a list of posting IDs per company). Delete that store to reset every watchlist.

Does this only cover companies using SmartRecruiters? Yes — it's specific to SmartRecruiters' own ATS platform. A company using a different applicant tracking system (Greenhouse, Lever, Workday, etc.) will not resolve here.

Do closed or filled positions show up? No — the API returns currently open postings only; filled or withdrawn roles drop out of the response.

Does it require authentication? No — this hits SmartRecruiters' public postings API, the same data source their own careers pages are built from, with no login or API key.