ATS Job Scraper - Greenhouse, Lever & Ashby
Pricing
from $25.00 / 1,000 company board checkeds
ATS Job Scraper - Greenhouse, Lever & Ashby
Extract live jobs from Greenhouse, Lever and Ashby. Track new, changed and removed postings across runs, with source URLs, salary data where published, and failure-safe snapshots. No cookies or API keys. Built for recruitment workflows and AI agents.
Pricing
from $25.00 / 1,000 company board checkeds
Rating
0.0
(0)
Developer
Victor Diaz
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Get live company job postings and track new, changed and removed jobs across repeated runs. Paste job-board URLs, optionally give the watch a name, and export consistent JSON, CSV or Excel through Apify.
Use it for a recruiting watchlist, a job-board feed, company hiring research, or an AI agent that needs current openings with verifiable source links. It reads public ATS feeds without cookies, proxy configuration, third-party API keys or LLM charges.
Who this is for
Recruiting and hiring research. Use the ATS job scraper to keep a recruiting watchlist or job feed current across Greenhouse, Lever and Ashby. Start with one company board, export its current jobs, then reuse a Watch ID to receive newly observed, edited and removed postings.
Quick start
{"boards": ["greenhouse:stripe", "lever:palantir", "ashby:Ashby"],"includeDescriptions": true}
Supported inputs include https://job-boards.greenhouse.io/stripe, https://jobs.lever.co/palantir, https://jobs.ashbyhq.com/Ashby, and lever-eu:company for European Lever boards. Copy the company identifier exactly; Ashby names are case-sensitive. Company homepages and other ATS providers are not supported.
Track changes automatically
{"boards": ["greenhouse:stripe", "ashby:Ashby"],"watchId": "my-engineering-watch","outputMode": "changes","titleKeywords": ["engineer", "developer"],"removalConfirmations": 2,"includeDescriptions": false}
Save this input as an Apify Task and schedule it daily. Use the same Watch ID for the same watch. The first run creates a baseline; subsequent runs return changes. In n8n or Make, keep dataset rows with recordType = job for your job workflow, and route board_error rows to your error handling.
The Actor keeps snapshots in a named key-value store in your Apify account. Snapshots contain normalized job metadata and a description hash, not full historical descriptions. A new Watch ID starts a fresh baseline. Leave Watch ID blank for extraction without persistent tracking. Do not overlap runs sharing a Watch ID; overlapping execution is unsupported. Named snapshot storage persists until you delete it and is subject to your account's storage retention and pricing.
What each change means
changeType | Meaning |
|---|---|
baseline | First successful observation; returned only in All jobs mode. |
new | A source job ID appeared after the baseline. This does not prove the role was created today. |
changed | Title, location, department, employment type, workplace type, published compensation, description hash, or job/apply URL changed. changes includes before/after values; descriptions use hashes. |
unchanged | No change to those fields. Returned only in All jobs mode. |
removed | The source ID was absent for the required number of successful checks. This means removed from the public feed, not proof of a filled position. Emitted once. |
The default is two successful checks to confirm removal. A failed request, malformed response, oversized board or incomplete Greenhouse response never advances the disappearance counter or replaces the previous snapshot. A temporary disappearance followed by a return keeps the original firstSeenAt. If a posting returns after a confirmed removal, it is treated as new because the old record has left the active snapshot.
Changing title filters does not create false removals: the complete board is compared before the output filter is applied. Keywords are a case-insensitive substring OR match, not semantic search. Boards omitted from a run are left untouched.
Output
The default dataset has three record types:
job: one current or changed job, withjobKey,nativeId,boardId,provider,company,title,locations,departments,employmentType,workplaceType,salaryRanges,salaryText,publishedAt,updatedAt,jobUrl,applyUrl,description,descriptionHash,sourceUrl,firstSeenAt,lastSeenAt,observedAt,changeType,changedFieldsandchanges.board_summary: one successfully checked board, withjobsOpen,emittedJobs, counts for every change type,pendingMissingandtrackingEnabled.board_error: a failed board with a readable error andpreviousSnapshotPreserved: true.
A SUMMARY JSON record in the run's key-value store reports successes, failures, rows written and spending-limit stops. Use the Output tab to open results or the summary. A changes-only run can correctly return zero job rows while still returning successful board summaries.
company uses the source-provided company name when available and otherwise the board identifier. Missing source fields remain null or empty. Greenhouse's list feed does not provide normalized structured compensation: it is not guessed from prose. Lever and Ashby compensation is returned only when published by the source, retaining original currency and interval. firstSeenAt is this watch's observation time. Ashby's publishedAt can be its last republish time; updatedAt is never relabeled as a publication date. Remote status is not inferred from free-text descriptions.
Example result
A real result from the launch verification (timestamps show when this watch observed the posting):
{"recordType": "job","changeType": "baseline","provider": "greenhouse","boardId": "greenhouse:stripe","title": "Abuse Research Engineer","locations": ["Remote from the US"],"salaryRanges": [],"jobUrl": "https://stripe.com/jobs/search?gh_jid=8172503","firstSeenAt": "2026-10-06T23:54:17.619Z","observedAt": "2026-10-06T23:54:17.619Z"}
Pricing
The price is $0.025 per successfully checked company board, regardless of the number of jobs or changes it returns, plus Apify's standard $0.00005 start event at the supported 512 MB memory allocation. Platform usage is included. Check the Actor's Pricing tab for the active price.
- 3 successful boards: $0.07505 per run.
- 10 boards checked daily for 30 days: $7.50150 in Actor event charges.
- A valid empty board and an unchanged board count as successful checks.
- Failed board checks, individual jobs, summaries and errors have no separate event fee.
- No proxy, LLM or external API subscription is required. Your Apify account's storage and retention rules still apply.
The Actor checks the platform spending limit before each board and stops when it cannot charge another board check. Up to 20 unique boards per run, 5,000 jobs per board, 25 MB uncompressed source response, and a 30-second timeout per request. A board exceeding a limit is reported as an error; partial data is not treated as a complete snapshot.
API and AI-agent workflows
Run this Actor with the Apify API or Apify MCP server. It uses limited permissions and a small input schema. Agents should inspect board summaries and errors before interpreting absent job rows. This Actor reads source content as data and does not execute instructions found in job descriptions.
Suggested agent request: “Check these company job boards with Watch ID research-watch. Return changed engineering jobs and tell me which sources failed.”
Source coverage and limitations
Sources are the documented Greenhouse Job Board API, Lever Postings API, and Ashby Job Postings API. Only publicly listed postings are included; Ashby records marked unlisted are excluded.
This is an independent tool, not affiliated with those providers or employers. It does not apply for jobs, collect applicant records, rank candidates, authenticate to employer systems, or bypass blocks. No claim is made that an opening is genuine, funded, recently created or still recruiting beyond what the public source reports. Respect source terms and your intended use of the data.
If a board fails, open an issue on this Actor with the public board URL and run ID. Do not include API keys or applicant data.
Try one source before scheduling
- Open the Input tab and use one supported source with
outputMode: "all"for an immediate export. - Check the returned records and the check summary. Confirm the source, coverage and price suit your workflow.
- To monitor, set a stable Watch ID and
outputMode: "changes". The first successful run establishes a silent baseline. - Reuse that Watch ID on later runs. A summary without change records means the check completed without matching changes.
- Add an Apify schedule after the manual checks work. Avoid overlapping runs with the same Watch ID. Use Maximum cost per run to cap event charges.
Public-data monitors by the same developer: browse the catalog.