ATS Jobs Scraper: Company Job Boards by Domain
Pricing
from $1.50 / 1,000 job postings
ATS Jobs Scraper: Company Job Boards by Domain
Give it a company domain and it finds which hiring system that company runs, then reads the board: Greenhouse, Lever, Ashby, Workable, Recruitee, Rippling, Workday, Personio and SmartRecruiters. Titles, locations, departments, salary where published. No API key, no proxy, no board token to look up.
Pricing
from $1.50 / 1,000 job postings
Rating
0.0
(0)
Developer
Daniel Meshulam
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Give it a domain. That is all.
{ "companies": ["stripe.com", "figma.com", "openai.com"] }
No API key. No proxy. No board tokens to look up. No blocked requests.
Why this returns data when job scrapers return 403
Indeed, Glassdoor, ZipRecruiter and LinkedIn Jobs do not originate job data. They aggregate it from company career pages, and those pages run on a handful of applicant tracking systems that each publish a free, keyless, public JSON API, because companies want their openings indexed.
So the aggregators are behind Cloudflare while the actual source is wide open. Measured from a residential address on 2026-08-01:
| Aggregator | Source | |
|---|---|---|
indeed.com/jobs | 403, zero bytes | greenhouse / stripe → 548 jobs |
glassdoor.com | 403, zero bytes | ashby / openai → 753 jobs |
ziprecruiter.com | 403, zero bytes | lever / palantir → 302 jobs |
upwork.com | 403, zero bytes | rippling / rippling → 768 jobs |
Going to the source is also fresher. An aggregator shows you its last crawl. This shows you the board.
You do not need to know the board token
Every other ATS Actor asks you for one. You cannot use the Greenhouse API
without knowing that Figma is figma and Databricks is databricks, and there
is no directory to look that up in.
This Actor derives candidates from the domain and verifies each one against
the live API. That works because a board that does not exist answers 404
while a board with nothing open answers 200 with an empty list, so a 200 is
proof rather than a maybe.
Measured on 30 companies:
| Method | Resolved |
|---|---|
| Reading the careers page for an ATS link | 50% |
| Deriving the token and verifying it | 90% |
Reading the page fails on stripe.com because its careers page is a JavaScript
app that names no board. Deriving and verifying finds Stripe's 548 open roles.
One shape, seven platforms
greenhouse, lever, ashby, workable, recruitee, rippling,
smartrecruiters. Each names the same five things differently. Every row comes
back the same:
| Field | |
|---|---|
title, location, url | |
departments, offices | |
company, atsPlatform, boardToken, boardUrl | which system, which board |
postedAt, updatedAt | |
description | opt in, see below |
employmentType, isRemote, compensation | where the platform provides it |
Filters that do not cost you anything
{"companies": ["stripe.com"],"titleKeywords": ["security"],"remoteOnly": true}
Filtered rows are not charged. Keywords are matched as plain text, so c++
and node.js mean exactly that rather than being read as regular expressions.
Two limits worth knowing before you run it
includeDescription is off by default, and that is not laziness. It is
expensive at the source: Greenhouse returns 111 KB for a board without
descriptions and 1.97 MB with them, an 18x difference for the same jobs. Turn it
on when you want the text.
Rippling's board API returns no description at all, at any setting. Five
fields per job and nothing more. That is the source's limit, and rows from it
simply carry no description rather than an empty one.
Where a wrong answer would be easy, this says so instead
A wrong board token gets an explanation, not an empty dataset:
greenhouse has no board 'zzznotarealzzz'. The API answers 404 for a board thatdoes not exist and 200 for one that exists but has nothing open, so this isgenuinely the wrong token, not an empty board.
SmartRecruiters is the one place this is not possible, and it is labelled.
It answers 200 {"totalFound":0,"content":[]} both for a company id that does
not exist and for one with no open roles, and /v1/companies/<id> returns 404
even for Visa, whose postings endpoint returns real jobs. There is no way to
tell the two apart, so an empty SmartRecruiters result says exactly that rather
than reporting a confident zero. Token guessing is disabled for that platform
for the same reason.
Who this is for
- Recruiters and sourcers: watch a list of target companies without a seat in anyone's tool
- Job seekers: the roles, from the company, before the aggregator crawls
- Sales and BD: hiring is the clearest public signal of where budget went
- Market research: headcount direction by team, by company, over time
- LLM pipelines: clean JSON, no HTML parsing, no key to rotate
Notes
- Sources are public APIs that companies publish deliberately so their openings get indexed. Nothing here is behind a login, a paywall or a bot wall.
- An empty board is a real answer and is reported as one: the company is on that platform and is not hiring right now.
- Three of the thirty companies tested run an ATS this Actor does not yet cover.
Pass
boardsdirectly if you know the platform and token. - Errors are per company. One unresolvable domain does not end the run, and error rows are not charged.
The nine systems
| System | Found from a domain? | Notable |
|---|---|---|
| Greenhouse | yes | the biggest startup boards, databricks 803 roles |
| Lever | yes | answers with a bare JSON array, unlike every other one |
| Ashby | yes | the only one with a salary band, behind a parameter |
| Workable | yes | European mid-market, many small boards |
| Recruitee | yes | per-subdomain, so the domain usually is the token |
| Rippling | yes | rippling alone is 768 roles, and publishes no descriptions |
| Workday | no | the biggest boards anywhere: NVIDIA 2,000, Salesforce 1,478. Takes its careers URL, because the address carries three unknowns a domain cannot supply |
| Personio | no | structured salary: min, max, currency and period as separate fields. A bogus subdomain answers 429, so a guess cannot be confirmed |
| SmartRecruiters | no | answers the same empty response for an unknown company and for one with nothing open |
The three marked "no" are not missing features. On the other six a bogus board answers 404, which is what makes a derived token provable. On these three it does not, so they ask for an exact board rather than inventing an answer.
Watching, rather than reading
If you are running this on a schedule to see what is new, Job Change Monitor is the Actor for that. It reports only the roles that appeared and the roles that disappeared since its last run, so a daily check on Stripe returns the four new openings rather than the 548 that were already there.
A search of the Apify Store on 2026-08-01 found no other Actor that does this for jobs. Its first run records a baseline and is not charged.