Ashby Jobs Scraper & API — Pay Ranges + New-Job Alerts
Pricing
from $1.60 / 1,000 results
Ashby Jobs Scraper & API — Pay Ranges + New-Job Alerts
Get every open job from any Ashby board: department, location, employment type, description and pay ranges with equity flag. Paste board names, URLs or websites (auto-detected) or use a built-in startup list. Filter by keyword, location, remote, date; track new, updated and removed jobs. No login.
Pricing
from $1.60 / 1,000 results
Rating
0.0
(0)
Developer
Erwinbooze Ricardo
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Security
Limited permissionsShare
Ashby Jobs Scraper is a Ashby jobs scraper and Ashby job board API: it extracts every open job from any careers page hosted on Ashby (jobs.ashbyhq.com), such as OpenAI, Ramp, Notion or Linear. It reads Ashby's official public Job Posting API - no login, no proxy, no browser. Paste Ashby board names, careers URLs, or just company names and websites (auto-detected), filter by keyword, location, remote and date, and get salary ranges plus new / updated / removed job alerts for scheduled monitoring.
Each job includes title, location (and secondary locations), city / region / country, workplace type (Remote / Hybrid / OnSite), department, team, employment type, publish date, apply link, the full description (text and/or HTML) and structured compensation: salary min and max, currency, pay period, every location-based pay tier, the compensation summary and an equity flag (whether equity is offered - not the equity amount). When no structured compensation is published, the salary is parsed from the job text.
What can you use it for?
- Job boards and aggregators: feed fresh Ashby jobs into your site or newsletter.
- Recruiting and sales intelligence (lead generation): see which companies are hiring, for which teams and where.
- Salary benchmarking: collect published pay ranges by role, location and company.
- Hiring alerts: schedule a daily run with change detection and get only new, changed and removed jobs - in Slack, email or any webhook.
- AI agents and LLM pipelines: call it through the Apify MCP server and get clean JSON with plain-text descriptions.
Features
- Flexible input: Ashby board names (
openai), board and job URLs, or company names / websites with automatic board detection (careers-page links first, then name guesses). If a company is not on Ashby but is on another supported ATS,RUN_SUMMARYtells you where. - Built-in company lists (
companyLists): curated lists such as AI companies, fintech or developer tools, each entry verified to have open jobs on 2026-10-30. Run with zero typing. - Many companies in one run, with deduplication: the same board entered twice (token + URL) is scraped once, and duplicate job IDs are dropped. Optional
dedupeSimilaralso drops identical reposts. - Filters: keywords (title or description), locations, departments, remote only, posted within the last N days.
- Salary ranges with currency and pay period; text parsing as fallback.
- Change detection:
changeTypenew / updated / removed,changedFields,firstSeenAt, stored in a named key-value store between runs. Or the simpleronlyNewJobsmode. - Robust: one wrong or deleted board does not fail the run; each board's status is in
RUN_SUMMARY. Respects your maximum cost per run.
Quick start
Paste any of these into the input (JSON tab):
{"companies": ["openai","https://jobs.ashbyhq.com/ramp"],"departments": ["Engineering"],"onlyNewJobs": true}
Company names and websites work too:
{"companies": ["notion.so","Linear"],"locations": ["San Francisco","New York","Remote"],"postedWithinDays": 14}
A curated list, no typing:
{"companyLists": ["fintech"],"keywords": ["engineer"],"maxJobs": 100}
Input
| Field | Description |
|---|---|
companies | Ashby board names, board/job URLs, or company names/websites. Optional if companyLists is set. |
companyLists | Built-in curated company lists (only entries on Ashby are used). |
autoDetect | Find the Ashby board for names/websites (default on). |
keywords / searchInDescription | Keep jobs whose title (or description) contains any keyword. |
locations / departments | Keep jobs whose location / department contains any of these strings. |
remoteOnly / postedWithinDays | Remote only; published in the last N days (0 = all). |
includeDescription / includeDescriptionHtml | Description as plain text and/or HTML. |
includeSalary | Salary fields. |
changeDetection, changeStoreName, includeUnchanged, includeRemoved, skipFirstRunOutput | New / updated / removed tracking between runs. |
onlyNewJobs / monitoringStoreName | Simple mode: only job IDs not seen before. |
dedupeSimilar | Drop identical reposts (same title, location and description). |
maxJobsPerCompany / maxJobs | Result limits (0 = no limit). |
Output
Each dataset item is one job:
{"jobId": "240d459b-696d-43eb-8497-fab3e56ecd9b","title": "Research Engineer","companyToken": "openai","url": "https://jobs.ashbyhq.com/openai/240d459b-696d-43eb-8497-fab3e56ecd9b","applyUrl": "https://jobs.ashbyhq.com/openai/240d459b-696d-43eb-8497-fab3e56ecd9b/application","location": "San Francisco","allLocations": ["San Francisco"],"city": "San Francisco","region": "California","country": "United States","isRemote": false,"workplaceType": null,"department": "Research","team": "Research","employmentType": "FullTime","publishedAt": "2025-04-05T00:03:20.653+00:00","salaryMin": 250000,"salaryMax": 445000,"salaryCurrency": "USD","salaryPeriod": "YEAR","salarySource": "ashby_compensation","salaryRanges": [{ "min": 250000, "max": 445000, "currency": "USD", "period": "YEAR", "title": "San Francisco $250K – $445K • Offers Equity" }],"compensationSummary": "$250K – $445K • Offers Equity","offersEquity": true,"descriptionText": "By applying to this role, you will be considered for Research Engineer...","scrapedAt": "2026-10-30T06:26:01.847Z"}
With change detection on, items also have changeType, changedFields and firstSeenAt (removed jobs come as separate changeType: "removed" items). New fields are only added, never renamed, so existing integrations keep working.
You can download results as JSON, CSV, Excel, XML or HTML, or fetch them through the Apify API.
Job alerts and change detection (new / updated / removed)
Turn on changeDetection and schedule the Actor (for example daily in Schedules in Apify Console). Every run is compared with the previous run that used the same companies and filters:
changeType: "new"- the job appeared since the last run.changeType: "updated"- the title, location, department, employment type, salary or description changed;changedFieldslists which.changeType: "removed"- the job was open last time and is gone now (filled or closed). The item hasjobId,title,url,location,firstSeenAtandremovedAt.- Unchanged jobs are skipped unless you turn on
includeUnchanged. Every output job also getsfirstSeenAt.
The snapshot lives in a named key-value store (changeStoreName, default ashby-jobs-changes), so it survives between runs. Use a different store name per monitor. Turn on skipFirstRunOutput to save the baseline silently on the first run. Change counts per company appear in RUN_SUMMARY. If a result limit (maxJobsPerCompany / maxJobs) cuts the output, the jobs that were not output stay pending and come out as new on the next run, so nothing is missed.
{ "companies": ["openai"], "changeDetection": true, "skipFirstRunOutput": true, "changeStoreName": "my-hiring-monitor" }
Prefer something simpler? onlyNewJobs outputs only job IDs not seen before (no updated/removed tracking).
Send changes to Slack, email or a webhook
- Slack / email: in the Actor's Integrations tab, add the Slack or email integration and trigger it on Run succeeded. Because change-detection runs output only changes, the message is your alert.
- Webhook (your own endpoint, Zapier "Catch Hook", n8n "Webhook" node, Make "Custom webhook"): add an HTTP webhook for the event
ACTOR.RUN.SUCCEEDED. The default payload containsresource.defaultDatasetId; fetch the changes fromhttps://api.apify.com/v2/datasets/<defaultDatasetId>/items?clean=true(add&token=...or anAuthorization: Bearerheader) and filter bychangeType.
Use with AI agents (MCP)
This Actor can be called by AI agents through the Apify MCP server. It runs with limited permissions and pay-per-event pricing, so agents only pay for the results they get. To give Claude, Cursor, VS Code or any MCP client a dedicated tool for it, add this server URL:
https://mcp.apify.com?tools=wowlab/ashby-jobs-scraper
The agent can then call it with plain inputs such as {"companies": ["stripe.com"], "keywords": ["engineer"], "maxJobs": 20}. Every input field has a description written for agents, and results come back as clean JSON with plain-text descriptions, ready for RAG, classification or summaries. Set maxJobs (and a max total charge in the call options) to keep agent spend predictable.
Integrations: Make, n8n, Zapier, Google Sheets
- Make: use the Apify app's Run an Actor module with
wowlab/ashby-jobs-scraper, then Get Dataset Items. - n8n: use the Apify node (Run Actor + Get dataset items), or an HTTP Request node calling
POST https://api.apify.com/v2/acts/wowlab~ashby-jobs-scraper/run-sync-get-dataset-items. - Zapier: use the Apify app (Run Actor action, or Finished Actor Run trigger + Fetch Dataset Items).
- Google Sheets, Airtable, Slack, email: connect them in the Actor's Integrations tab, or export the dataset as CSV/Excel/JSON.
- API:
POST https://api.apify.com/v2/acts/wowlab~ashby-jobs-scraper/run-sync-get-dataset-itemswith the input as JSON body returns the jobs directly.
Pricing
Pay per result: $1.60 per 1,000 jobs ($0.0016 per job) plus a tiny start fee ($0.00005 per run per GB of memory; the default is 256 MB). No subscription. The Pricing tab shows the current price. Example: 500 jobs cost about $0.80. With change detection, only changed jobs (and removed-job records) are output and charged, so daily monitoring stays cheap. Set maxJobs or a maximum cost per run to cap spend.
How do I find a company's Ashby board name?
Open the company's careers page and click a job. If the URL looks like jobs.ashbyhq.com/<board>/..., the company uses Ashby, and <board> is the name to use. You can paste the full URL, or just the company name or website and let auto-detection find it.
Is it legal?
This Actor reads only the public job postings that companies publish on purpose through Ashby's official public Job Posting API. It collects no personal data and needs no login. You are responsible for how you use the data, so check the terms of the sites you rely on.
FAQ
Why are some salary fields empty? Not every company publishes pay ranges. When none is published or found in the text, the salary fields are null.
A board returns "not found". The board name is wrong, or the company has left Ashby. RUN_SUMMARY says so, and if the company has a board on another supported ATS it names it (foundOnOtherAts).
Other ATS platforms? See our Greenhouse Jobs Scraper and Lever Jobs Scraper, which use the same input and similar output.