Ashby Jobs Scraper avatar

Ashby Jobs Scraper

Pricing

from $1.20 / 1,000 jobs

Go to Apify Store
Ashby Jobs Scraper

Ashby Jobs Scraper

Scrape every open job from Ashby job boards (jobs.ashbyhq.com): title, location, remote, department, team, employment type, salary range, dates, apply link, full description. Links, slugs or company names, hundreds of companies per run, filters, and an only-new-jobs mode for scheduled runs.

Pricing

from $1.20 / 1,000 jobs

Rating

0.0

(0)

Developer

Quarra Labs

Quarra Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Get every open job from Ashby job boards (jobs.ashbyhq.com). Paste job board links, job links, board slugs or simply company names: each board is read in full and each job comes with its title, locations, country, remote / hybrid / on-site, department, team, employment type, salary range from Ashby's compensation data, publish date, apply link and full description. Export as JSON, CSV or Excel, or read it through the Apify API.

$2 per 1,000 jobs, plus a small start fee per run. Jobs removed by your filters, duplicates and failed companies are not charged.

Why this one

  • Salary from Ashby's compensation data. Pay ranges are delivered as min, max, currency and period (year or hour) from Ashby itself (salarySource: structured).
  • Large boards in one go. OpenAI's board (800+ jobs) is read in a single request, in seconds.
  • Only new jobs. Schedule a watch on your list of companies: each run delivers only the jobs it has not delivered before. Jobs already delivered are never charged again.
  • Hundreds of companies per run, read in parallel. One company that fails does not stop the others.
  • Never a silent empty run. Unknown company, closed job, unreadable answer: each gets a free error record with what to do, and the run summary lists every company with its count.
  • Same schema as our other job board scrapers, so you can mix sources without remapping.

Quick start

  1. Paste your companies in Companies, one per line: https://jobs.ashbyhq.com/openai, https://jobs.ashbyhq.com/linear, Notion.
  2. Add filters if you want (job title, location, remote, department, employment type, posted after, salary only).
  3. Click Start and read the jobs in the run's Output tab.

Links from the other systems (Greenhouse, Lever, Ashby, Workday) are read too. Like any Apify Actor, it can also be run and read through the Apify API, scheduled, and connected to webhooks, Make, Zapier, n8n or Apify's MCP server for AI agents.

Inputs

FieldWhat it does
CompaniesCareers page links, job links, board slugs with their system (greenhouse:airbnb, lever:palantir, ashby:openai), company names, or the careers page of a company's own website (stripe.com/jobs/search?gh_jid=…). A name or a bare word is always a company NAME, used only when a board with exactly that name is found. Workday sites need their link (…myworkdayjobs.com/<site> or …myworkdaysite.com/recruiting/<company>/<site>), with the search words of the address (?q=engineer) if you use them.
Max jobs per companyEmpty = every open job.
Job title contains / does not containKeep or leave out jobs by words of their title.
Location containsWords of a location, a country name or a two-letter country code (London, Germany, Remote, US). Whole words: IN finds India, never Berlin; US never Australia.
WorkplaceAny, remote, hybrid, on-site, remote or hybrid.
Department containsWords of the department or team (not on Workday sites, which do not give it: a run with this filter on a Workday link says so, free).
Employment typeFull-time, part-time, contract, internship, temporary.
Posted afterA date (2026-10-01) or relative (7 days).
Only jobs with a salaryKeep jobs that state a pay range.
Include the job descriptionPlain text and HTML (on by default).
Only new jobs + Watch nameDeliver only the jobs this watch has not delivered before.
Max resultsTotal number of jobs of the run, counted exactly.

A job that does not state what a filter checks (no salary, no department) is left out by that filter, and never charged.

Output

One record per job:

{
"type": "job",
"status": "ok",
"ats": "ashby",
"company": "Linear",
"companyBoard": "Linear",
"jobId": "d3bc1ced-3ce4-4086-a050-555055dbb1ff",
"title": "Senior / Staff Fullstack Engineer",
"location": "Europe",
"locations": [
"Europe"
],
"country": null,
"workplaceType": "remote",
"department": "Product",
"team": "Engineering",
"employmentType": "fullTime",
"employmentTypeRaw": "FullTime",
"publishedAt": "2021-04-27T20:13:45Z",
"updatedAt": null,
"salaryMin": null,
"salaryMax": null,
"salaryCurrency": null,
"salaryPeriod": null,
"salaryText": null,
"salarySource": null,
"url": "https://jobs.ashbyhq.com/Linear/d3bc1ced-3ce4-4086-a050-555055dbb1ff",
"applyUrl": "https://jobs.ashbyhq.com/Linear/d3bc1ced-3ce4-4086-a050-555055dbb1ff/application",
"requisitionId": null,
"descriptionText": "At Linear, we're building the product development system for teams and agents. AI is…",
"descriptionHtml": "<p style=\"min-height:1.5em\">At Linear, we're building the product development sy…",
"input": "Linear",
"position": 1,
"scrapedAt": "2026-10-18T02:43:02Z"
}
  • country is a two-letter code (ISO 3166) when the job board states it, or when the location names a known city (a list of cities of 15,000+ inhabitants, GeoNames, CC BY 4.0), a country, a US state or a Canadian province. null otherwise: never a guess (Berlin, DE is Germany; Springfield, MO is the US).
  • salaryRanges lists every pay range when a job gives several (one per country or level); salaryMin / salaryMax span them all. Signing bonuses, stipends and budgets are not read as pay.
  • workplaceType and employmentType are normalized (remote / hybrid / onsite; fullTime, partTime, contract, internship, temporary); employmentTypeRaw keeps the board's own words.
  • company on Workday is the hiring entity of the job (Workday gives no brand name); companyBoard is stable.
  • With Only new jobs, each job also has "isNew": true.

Error records (free) have type: "error", an errorCode, a clear error message and retryable. The run summary (OUTPUT record) gives, per company, the system, the board, the company name, the jobs delivered and a note.

Pricing

Pay per event:

EventPrice
Job$2 per 1,000 (Apify Store discounts from Silver: $1.20 per 1,000)
Run start$0.005 per GB of memory (1 GB minimum; $0.005 at the default memory)

Never charged: jobs removed by your filters, a job given more than once (by its board and by its link: delivered once), jobs already delivered to your watch, error records. Set Maximum cost per run in the run options and the run stops before going over it.

Other job board scrapers

Limits

  • Jobs a company keeps unlisted on its Ashby board are not delivered.
  • Ashby gives no update date for every job: updatedAt may be null.
  • A search across every company of the system is not offered: give the companies you follow.

FAQ

Do I need an account? No. The Actor reads the public careers pages any visitor sees.

How does "Only new jobs" work? The watch remembers every job it delivered, by its identifier on its board. Use the same Watch name in each scheduled run (without a name, the memory belongs to that exact list of companies and filters). The first run delivers every matching job; the next ones only the jobs published since. One run of a watch at a time. Each run reads first the companies the watch read least recently.

What if the run is restarted by the platform (migration or reboot)? It resumes where it was: jobs already in the dataset are not delivered or charged again.

What if the job board changes? The run says so in a free error record, instead of reporting "no jobs", and nothing is charged for that company.

Is it legal? It collects public job postings published by companies to be read by anyone. Check the rules that apply to your use of the data.

Does the Actor send anything to Quarra? Only when a run fails or runs out of time: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your input, your results, your account or the run ID.