SmartRecruiters Jobs Lookup — Open Postings API
Pricing
from $3.00 / 1,000 successful lookups
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
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
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
locationstring, remote flag, posted date, and a direct apply URL for each posting. - Total count reported.
totalReportedreflects SmartRecruiters' own whole-board total (totalFound), separate fromtotalJobCount(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/Ubisoft → Ubisoft); 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
| query | found | status | company | totalReported | jobCount | totalJobCount | newJobs | firstRun | jobs | id | title | department | city | country | location | remote | releasedDate | postedAt | applyUrl | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| SGS | true | OK | SGS | 4322 | 100 | <open postings on this page (before filters)> | <first run of this watchlist?> | <all jobs (full list)> | 744000145034539 | 【約聘】行政人員-非破壞檢測部(高雄) | Laboratory & Testing | 高雄市 | tw | <location (city, country)> | false | 2026-08-23T13:06:08.495Z | https://jobs.smartrecruiters.com/SGS/744000145034539 | 2026-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.
| Input | What it does |
|---|---|
titleKeywords | Keep 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. |
excludeTitleKeywords | Drop any role whose title contains one of these — ["intern","contract"]. Applied after titleKeywords, so a role matching both is dropped. |
locations | Keep only roles whose combined location (city, country) contains one of these — ["Berlin","de"]. Case-insensitive, partial matches count, any-match. |
remoteOnly | Keep 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. |
postedAfter | Keeps 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.
newJobstells you how many, andfirstRuntells you whether this was the baseline run. - A company with nothing new still gets a row —
found: 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
titleKeywordskeep 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.
SGSandsgswould 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 the0 new jobsheartbeat 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
jobCountover 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.