Company Jobs API - universal ATS careers scraper
Pricing
from $0.80 / 1,000 job postings
Company Jobs API - universal ATS careers scraper
Company domain or careers URL -> normalized open job postings JSON. Auto-detects Greenhouse, Lever, Ashby, SmartRecruiters, Workday, Teamtailor, Personio, Recruitee, Workable and BambooHR boards. HTTP-only, no login, no personal data. Pay per job.
Pricing
from $0.80 / 1,000 job postings
Rating
0.0
(0)
Developer
Alex Lin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
Turn any company's job board into clean JSON. Give it a domain (stripe.com), a careers page, or a direct board
URL, and it auto-detects the applicant tracking system (ATS) behind it — Greenhouse, Lever, Ashby, SmartRecruiters,
Workday, Teamtailor, Personio, Recruitee, Workable, or BambooHR — and returns every open role as one normalized
schema. No login, no browser, no anti-bot workarounds: every one of these is a public JSON (or XML) API. Built for
recruiting/sourcing pipelines, sales and investor prospecting ("who is Figma hiring for?"), labor-market research,
and AI agents that need a list_open_roles(company) tool.
Sample output
One item per job, always the same shape regardless of which ATS it came from:
{"company": "linear","ats": "ashby","board_url": "https://jobs.ashbyhq.com/linear","job_id": "cd5ae036-0223-427a-b038-ba16ef9dcb32","title": "Senior / Staff Fullstack Engineer","url": "https://jobs.ashbyhq.com/linear/cd5ae036-0223-427a-b038-ba16ef9dcb32","location": "North America","locations": ["North America"],"remote": true,"department": "Product","team": "Engineering","employment_type": "FullTime","posted_at": "2021-08-18T20:48:26.891Z","updated_at": null,"salary_min": null,"salary_max": null,"salary_currency": null,"scraped_at": "2026-09-13T19:46:20.424Z"}
Set include_description: true to add description_text/description_html, and include_raw: true to attach
the original ATS record (with recruiter names/emails stripped) as raw. Download the dataset as JSON, CSV, Excel,
or query it over the API.
Why this one
The Store has a dozen single-ATS "Greenhouse jobs" / "Lever jobs" / "Workday jobs" actors, each covering one
system. This one covers all ten from a single input, so you don't need to know in advance what a company runs —
useful for sourcing lists that span hundreds of companies. It's plain fetch against public JSON/XML endpoints:
no browser, no proxy required, no personal data (contact emails and recruiter names are stripped from every
output field, including raw).
How it works
- Add company domains, careers-page URLs, and/or (if you already know them) direct board URLs to the input.
- For each
companiesentry, the Actor tries, in order: (a) does the string already look like one of the 10 ATS's own URLs, (b) guess the board slug from the domain and probe each ATS's public API, (c) fetch the company's careers page and look for an embedded Greenhouse/Lever/Ashby/etc. link. First hit wins. - Every job on the resolved board is fetched, normalized, optionally filtered, and pushed to the dataset.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
companies | string[] | ["stripe.com", "figma.com"]* | Domains or careers-page URLs. ATS is auto-detected. |
boards | string[] | ["https://jobs.lever.co/spotify", "https://jobs.ashbyhq.com/linear"]* | Direct board/API URLs — skips detection. |
include_description | boolean | false | Adds description_text/description_html. Costs one extra request per job for Workday/SmartRecruiters/BambooHR/Workable. |
posted_after | string (ISO date) | — | Keeps jobs with no known date. |
keyword | string | — | Matches title/department/team/description. |-separated alternatives. |
location | string | — | Substring match against the job's location(s). |
max_jobs_per_company | integer | 500 | Cap per resolved board, applied after filtering. |
max_total_jobs | integer | unlimited | Cap for the whole run. |
include_raw | boolean | false | Attaches the source ATS record (PII stripped) as raw. |
* The defaults only apply when both companies and boards are left empty — this is what a zero-config
run uses, so it always returns real jobs from four different ATSs in well under a minute.
Supported ATSs
Greenhouse · Lever · Ashby · SmartRecruiters · Workday · Teamtailor · Personio · Recruitee · Workable · BambooHR —
all ten verified end to end (list + normalize) against live company boards while building this Actor. If a
company's board is on one of these ten but detection fails (some careers pages hide the board behind
JavaScript), pass the direct board URL in boards instead.
Pricing
Pay per event, no subscription:
| Event | Price | When |
|---|---|---|
| Actor start | $0.002 | Once per run |
| Board resolved | $0.005 | Once per company/board where an ATS was successfully found |
| Job | $0.001 | Once per normalized job written to the dataset (primary event) |
Worked examples:
- 100 jobs from one company: $0.002 + $0.005 + 100 × $0.001 = $0.107
- The default sample run (Stripe, Figma, Spotify, Linear — 755 jobs across 4 boards): $0.002 + 4 × $0.005 + 755 × $0.001 = $0.777
- Free plan: the $5/month free usage plus the platform's own $0.20/GB-hour compute more than covers occasional runs — this Actor is HTTP-only and typically finishes a few hundred jobs in under a minute.
Limits & notes
- Public data only: open job postings as published by the company. No login, no candidate data.
- Recruiter/HR contact emails are stripped from every text field and from
raw. - Some ATSs (Workday tenant/site, SmartRecruiters company id) aren't reliably guessable from a bare domain if the
company uses a non-obvious slug — pass the board URL directly via
boardsin that case. - Not affiliated with Greenhouse, Lever, Ashby, SmartRecruiters, Workday, Teamtailor, Personio, Recruitee, Workable, or BambooHR. Trademarks belong to their respective owners.
- Found a company whose board doesn't resolve, or a parsing bug? Open an issue on this Actor's Issues tab.