Ashby Jobs Scraper: Job Board API for Any Company
Pricing
from $1.40 / 1,000 job rows
Ashby Jobs Scraper: Job Board API for Any Company
Every open job from any Ashby job board (jobs.ashbyhq.com), or search 1,041 Ashby career sites by job title and location. Structured compensation, remote flag, seniority, skills and visa sponsorship. Track new and removed jobs. Pay per job.
Pricing
from $1.40 / 1,000 job rows
Rating
0.0
(0)
Developer
Navista Multani
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Security
Limited permissionsShare
An Ashby jobs API for any company: get every open job from a company's Ashby job board (jobs.ashbyhq.com) in one clean format, or search 1,045 Ashby career sites by job title and location. Structured compensation, remote flag, seniority, skills and visa sponsorship on every row, and new, changed and removed jobs on a schedule.
This Actor reads Ashby boards only. To mix platforms in one run (Greenhouse, Lever, Workday, Ashby, Workable and 8 more), use Career Site Jobs API (stippled_journey/ats-jobs).
Ashby jobs API: what you can use it for
- Search Ashby jobs boards across companies. Many startups and AI companies hire on Ashby (OpenAI, Notion and PostHog among them); look for a title and location across every Ashby board in the directory at once.
- Monitor careers pages. List the companies you follow and get only their new, changed and removed jobs each day.
- Collect salary data. Where the employer publishes compensation on Ashby, it comes
back as a structured
salarywith minimum, maximum, currency and period. - Filter on seniority, years of experience, skills and visa sponsorship without reading descriptions: each is a column on every row.
- Feed a job board, newsletter or AI agent. Every row stands alone, with the employer's own apply link.
Ashby jobs board data: sample output
One real row (notion on Ashby, read 2026-10-27, company from the board page 2026-10-28; description shortened):
{"id": "ashby:notion:886bb3d2-45ac-45c6-ae21-62ba0b905b3c","source": "ashby","board": "notion","company": "Notion","title": "Outcomes Architect Manager","department": "Outcomes Architect","team": "Outcomes Architect","category": null,"employment_type": "full_time","workplace_type": null,"location": "Dublin, Ireland","locations": ["Dublin, Ireland"],"country": "Ireland","salary": null,"salary_text": null,"seniority": "manager","experience_years_min": null,"visa_sponsorship": null,"skills": ["Performance management"],"posted_at": "2026-10-23T14:46:06.128000Z","updated_at": null,"url": "https://jobs.ashbyhq.com/notion/886bb3d2-45ac-45c6-ae21-62ba0b905b3c","apply_url": "https://jobs.ashbyhq.com/notion/886bb3d2-45ac-45c6-ae21-62ba0b905b3c/application","description_text": "WHO WE ARE\n\nNotion is the collaborative AI workspace where teams and agents think together https://www.youtube ...","content_hash": "f44e2d0cc4a48758","scraped_at": "2026-10-27T16:30:51.979821Z"}
What each row holds:
- Job:
title,company(see below),department,team,employment_type,url,apply_url,posted_at - Place:
location,locations(primary plus secondary locations),country(from the posting's address),workplace_type(remote,hybrid,onsitefrom Ashby's workplace field or its remote flag) - Pay:
salaryas{min, max, currency, period, source}from Ashby's compensation data when the employer publishes it (source: "structured") - Read from the posting by fixed rules, on every row:
seniority: intern, entry, mid, senior, lead, manager, director or executive, from the titleexperience_years_min: the years of experience the description asks for ("5+ years" gives 5)visa_sponsorship:trueif the posting says it sponsors visas,falseif it says it does not,nullif it says neitherskills: tools and skills named in the posting (Python, AWS, Salesforce, SQL, Figma and about 480 more)
- Text:
description_text(plain text, email addresses and phone numbers removed), optionallydescription_html - Tracking: stable
id,source,board,content_hash,scraped_at, and in change modechange(new,changed,removed) andremoved_at
Ashby's job board API has no company name, so company is read from the board's public page title (jobs.ashbyhq.com/notion gives "Notion"). category and updated_at stay null.
The OUTPUT record summarizes the run: boards loaded, not found or failed, jobs found and returned. A board that does not exist does not fail the run; a run where no board loads does. The dataset has three views: Jobs, Seniority, skills and visa, and Changes.
How to find an Ashby board
Open the company's careers page and click any job. Ashby boards live at jobs.ashbyhq.com/<slug>, and the slug is the first part of the path:
| You see | Board | Short form |
|---|---|---|
https://jobs.ashbyhq.com/openai | OpenAI | ashby:openai |
https://jobs.ashbyhq.com/notion/<id> | Notion (any job page works) | ashby:notion |
https://api.ashbyhq.com/posting-api/job-board/posthog | PostHog (the API URL) | ashby:posthog |
A careers page on the company's own domain whose job links carry ashby_jid= embeds an Ashby board; the slug is usually in the page source as jobs.ashbyhq.com/<slug>.
Pricing
Pay per job row returned, $2.00 per 1,000 jobs. No start fee and no charge for jobs your filters drop. A removed-job row in change mode counts as one row. The run stops cleanly at your spending limit.
- Test run, 20 jobs: $0.04.
- OpenAI's whole board (795 open jobs on 2026-10-27): $1.59.
- Directory search for one job title, 200 jobs: $0.40.
- Monitoring 25 boards daily: a first full run of about 2,500 jobs costs $5.00; after that a daily change-mode run with about 50 new, changed or removed jobs costs about $0.10, about $3 a month.
Ashby jobs search: input examples and settings
Search Ashby career sites by title and location
{"keywords": ["machine learning engineer"],"locations": ["San Francisco","Remote"],"requireSalary": true,"maxJobs": 200}
With no boards, the run searches the built-in directory of Ashby boards live, starting with the boards most likely to match (those whose titles and locations contained your words when the directory was built, largest first). It stops at maxJobs matches (500 when maxJobs is 0) or when searchTimeLimitSecs (default 150) runs out. At the time limit, boards still being read are cut off and the jobs from boards already read are returned, so the run ends close to the limit; its status says how many boards it searched and how many were cut off.
Read the Ashby boards you choose, in full
{"boards": ["https://jobs.ashbyhq.com/openai","https://jobs.ashbyhq.com/notion","ashby:posthog"],"workplaceTypes": ["remote"]}
All input fields
| Field | What it does |
|---|---|
boards | Ashby career-site URLs or short forms (see How to find an Ashby board). Empty: search the directory. |
keywords | Title words to look for (any of them). Without boards, these are the directory search. |
locations | Keep jobs whose location or country contains any of these, for example London, Remote, United States. |
maxJobs | Stop after this many jobs, newest first. 0: no limit with boards, 500 for a directory search. |
workplaceTypes | remote, hybrid, onsite. Jobs whose posting does not say are dropped while this is set. |
seniority | Keep these levels: intern, entry, mid, senior, lead, manager, director, executive. Titles with no level are dropped while this is set. |
postedWithinDays | Keep jobs first published within this many days. |
visaSponsorship | Keep only jobs whose posting says it sponsors visas. |
requireSalary | Keep only jobs that publish pay. |
keywordsInDescription | Also match keywords in descriptions. Broader and noisier. |
onlyChanges | Change mode (see below). |
stateName | Optional name for a separate change history with the same input. |
includeDescription | Plain-text description (on by default). |
includeHtml | Original description HTML (off by default). |
maxJobsPerBoard | At most this many jobs per board, newest first. |
searchMaxBoards | Directory search only: at most this many boards, largest first. |
searchTimeLimitSecs | Directory search only: the time limit in seconds (default 150); see above. |
minRows | Fail the run when it returns fewer rows than this, so a scheduled run that comes back short triggers your alerts. |
Track new and removed Ashby jobs on a schedule
Turn on onlyChanges and run the same input on a schedule. The first run returns every job as change: "new" and remembers them; each later run returns only:
new: jobs that appeared since the last run,changed: jobs whose title, team, location, workplace type, salary, description or apply link changed,removed: jobs that are gone (filled or taken down), as{"id", "source", "board", "change": "removed", "removed_at"}.
A board that fails to load is skipped for that run; its jobs are not reported as removed.
Example: watch two Ashby boards every morning.
-
Save this input as a task:
{"boards": ["https://jobs.ashbyhq.com/openai","https://jobs.ashbyhq.com/notion"],"onlyChanges": true,"minRows": 0} -
In Apify Console, create a schedule (for example daily at 07:00, cron
0 7 * * *) and add the task to it. -
Read each run's dataset, or connect a webhook or integration to send the rows on.
The change history is kept per input (boards plus filters). Use stateName to keep two separate histories for the same input.
Other platforms and ready-made examples
This Actor accepts Ashby boards only and says so if you paste another platform's URL. The same code, fields and price cover 13 platforms in Career Site Jobs API (stippled_journey/ats-jobs): Greenhouse, Lever, Ashby, Workday, Workable, JazzHR, Recruitee, Personio, Teamtailor, Gem, Pinpoint, Join and Paylocity, with a keyword search across all of their directories in one run. Use it when your companies are spread over several platforms; its page also has ready-made example searches (software engineers in the US, remote data engineers, jobs with salary ranges and more).
FAQ
Is there an official Ashby jobs API, and how is this different?
Yes. Ashby publishes a public job posting API (api.ashbyhq.com/posting-api/job-board/<company>)
that returns one company's published jobs, with compensation when the employer shares it,
and this Actor reads it. On top of it you get a search across many Ashby companies by
title and location, the company name (the API has none), the seniority, years, visa and
skills fields, rows in the same format as other platforms, and change tracking between
runs.
How do I get only remote Ashby jobs?
Set workplaceTypes to remote. Ashby's own workplace field or remote flag fills
workplace_type; jobs whose posting does not say are dropped while the filter is set.
Adding Remote to locations instead keeps jobs whose location text says remote.
Where does company come from?
Ashby's job board API does not include the company name, so it is read from the board's public page (jobs.ashbyhq.com/<slug>, whose title is "
Why do some jobs have no salary? Ashby returns compensation only where the employer chose to publish it on the job board.
How fresh is the directory? It lists the Ashby boards found in Common Crawl's public web index and public job lists on GitHub, each checked to have open jobs when it was built (2026-10-28; about 35,000 open jobs then). The jobs themselves are always read live. A company not in it can be read by listing its board. The one Ashby board with 1,000 or more open jobs is left out of a search (its feed alone needs hundreds of MB); list it to read it.
How are seniority, years, visa and skills decided?
By fixed, published word rules, not an AI model, so the same posting always gives the same answer and a field stays empty rather than guessed. seniority comes from title words ("Senior", "Staff", "Head of", "VP"); experience_years_min is the first number of years the description ties to experience; visa_sponsorship is set only by a sentence that ties sponsorship to a visa or work authorization; skills match whole words from a fixed list of 486 tools and skills. The rules read English best.
Can I use it from Python or an AI agent? Yes, through the Apify API (with the official Python or JavaScript client), the Apify MCP server, or any Apify integration such as Make, Zapier or n8n.
Does it return personal data? No. Email addresses and phone numbers are removed from descriptions, and recruiter or hiring-manager names are never returned.
Data sources and terms
Every job is read from the public job feed or career-site API that Ashby publishes for the company's own careers page, the same postings anyone can see there; the company name comes from the board's public page on jobs.ashbyhq.com. No login, no browser and no proxy are used, and nothing is read that the board does not show publicly. This Actor is independent and not affiliated with or endorsed by Ashby. Job postings belong to the employers; use the data in line with your own obligations, for example when you republish it.