Ashby Jobs Scraper - No API Key avatar

Ashby Jobs Scraper - No API Key

Pricing

from $3.00 / 1,000 job scrapeds

Go to Apify Store
Ashby Jobs Scraper - No API Key

Ashby Jobs Scraper - No API Key

Scrape any Ashby job board with real structured salary ranges, remote flags and direct application links. No API key, no login, no proxy.

Pricing

from $3.00 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Renzo Madueno

Renzo Madueno

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Ashby Jobs Scraper — Startup Career Sites, No API Key

Scrape any Ashby job board by name. No API key, no login, no cookies, no proxy, no browser. Ashby is the ATS behind a large slice of well-funded startups, and unlike almost every other job platform it publishes real structured salary ranges — actual minValue / maxValue / currencyCode numbers, not a sentence you have to parse.

If you are building a compensation dataset, a startup job board, or a recruiting pipeline, this is the highest-quality source in the whole ATS category.


What you get, with the fill rate actually measured

Measured across 7 real boards — 1,234 live postings (ramp, linear, vanta, notion, openai, posthog, replit):

FieldFill rateNotes
title100%
jobId100%Ashby UUID
department100%
team100%Ashby has a real department→team hierarchy
employmentType100%Normalised: FULL_TIME, INTERNSHIP, CONTRACT, TEMPORARY
location100%Primary location
locations[]100%Primary plus every secondary location
country99.8%From the posting's postal address
postedAt100%ISO 8601
jobUrl100%
applyUrl100%Direct link to the application form, verified live
descriptionText100%Ashby ships a genuine plain-text version — no HTML stripping guesswork
descriptionHtmlon requestOff by default
isRemote100%76.7% straight from Ashby's own field
workplaceType77.6%REMOTE / HYBRID / ONSITE
salaryMin / salaryMax / salaryCurrency / salaryInterval79.9%See the breakdown below
salaryText79.9%The range as Ashby displays it, e.g. "$211.4K – $290.6K"
compensationPublic100%Whether the company opted into showing pay
isListed100%Ashby hides some evergreen pipelines

The salary breakdown that matters

79.9% of postings carry a pay range, and the split is the important part:

  • 71.8% (886 of 1,234) come from Ashby's structured compensation object — salarySource: "ats_structured". These are exact numbers the company entered into their ATS. salaryMin: 211400, salaryMax: 290600, salaryCurrency: "USD", salaryInterval: "YEAR".
  • 8.1% (100 of 1,234) are parsed out of the description text as a fallback — salarySource: "description".

You can filter to only the trustworthy ones with salarySource === "ats_structured", or just set salaryOnly: true to drop rows with no range at all.

Ashby's compensation object also carries equity and bonus components. We read the Salary component for the numeric fields and keep the human-readable tier summary ("$211.4K – $290.6K • Offers Equity") in salaryText, so the equity signal is not lost.


Remote data you can actually trust

This is the other place Ashby beats every alternative. isRemote comes back on 100% of rows, and 76.7% of those are Ashby's own isRemote booleanremoteSource: "ats_field". That is the company's own answer, not a keyword match on a job description.

Measured across the 1,234 postings: 74.3% flagged remote, workplaceType populated on 77.6% with values REMOTE, HYBRID and ONSITE.

Where Ashby leaves the field blank we fall back to reading the location text (remoteSource: "inferred_location", 0.9% of rows) and otherwise return unknown with isRemote: false. We never guess from the description body — that method flags office-based roles as remote because it matches company boilerplate, so it is not used anywhere in this fleet.


Input

{
"companies": ["ramp", "notion", "linear"],
"maxItems": 1000,
"salaryOnly": true,
"remoteOnly": false,
"titleKeywords": ["engineer"],
"includeCompensation": true
}

Accepted company formats

ramp
https://jobs.ashbyhq.com/ramp
https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245
https://api.ashbyhq.com/posting-api/job-board/ramp

Board names are passed through with your casing preserved, because a few Ashby tenants are case-sensitive.

Input aliases

  • companies: companies, company, boards, boardNames, companyUrls, startUrls
  • limit: maxItems, maxResults, limit, maxJobs
  • keywords: titleKeywords, keywords, searchTitle
  • locations: locationKeywords, locations, location
  • departments: departmentKeywords, departments, department
  • salary filter: salaryOnly, onlyWithSalary
  • descriptions: includeDescription, includeContent, fullDescription

Filters

OptionWhat it does
maxItemsHard ceiling on rows written. This is your spend cap.
maxJobsPerCompanyKeeps one 754-posting board (OpenAI) from consuming the budget
salaryOnlyOnly rows with a populated salaryMin
remoteOnlyOnly isRemote: true
employmentTypesFullTime, Intern, Contract, Temporary
titleKeywords / locationKeywords / departmentKeywordsSubstring matching
postedAfterISO date
includeUnlistedInclude isListed: false pipelines; off by default
includeCompensationAsk Ashby for the pay object; on by default
dedupeDrops repeat ids and repeat company+title+location

Output sample

{
"source": "ashby",
"companyToken": "ramp",
"companyName": "ramp",
"jobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"title": "Security Engineer, Cloud",
"department": "Engineering",
"team": "Backend",
"employmentType": "FULL_TIME",
"location": "New York, NY (HQ)",
"locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],
"country": "USA",
"isRemote": true,
"workplaceType": "HYBRID",
"remoteSource": "ats_field",
"salaryMin": 211400,
"salaryMax": 290600,
"salaryCurrency": "USD",
"salaryInterval": "YEAR",
"salaryText": "$211.4K – $290.6K • Offers Equity",
"salarySource": "ats_structured",
"compensationPublic": true,
"postedAt": "2026-04-07T17:12:35.753+00:00",
"jobUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application",
"isListed": true,
"scrapedAt": "2026-08-22T04:12:44.031Z"
}

Four saved dataset views ship with the Actor: Job overview, Salary ranges, Remote & locations and Apply links.


How errors are handled

Errors never enter your dataset. Everything that did not work goes to the FAILURES record in the run's key-value store, with reasons that mean different things:

  • board_not_found — HTTP 404. No Ashby board by that name. Verified: Ashby returns a clean 404 for unknown boards.
  • board_empty — HTTP 200 with {"jobs": []}. The board is real, the company has nothing open. Verified live against a board in exactly this state.
  • unresolvable_input — could not derive a board name.
  • budget_exhaustedmaxItems was hit before this board was written. Never skipped silently.
  • fetch_failed — network or upstream error after retries.

If nothing was delivered, the run ends FAILED with the reason breakdown in the message. You will never get a silently empty dataset.


Pricing and the free tier

Pay per event:

  • Actor start — one small charge per gigabyte of memory
  • Job scraped — charged after the row is written

Rows are pushed in batches and the per-job event fires only for rows that landed. Filtered-out postings, deduplicated repeats and failures cost you nothing.

The free tier returns real data. No API key, no proxy, no credential of any kind — everything here is a public JSON endpoint. {"companies": ["linear"], "maxItems": 10} on a free account returns ten real jobs with real salary ranges. No code path throws because you are missing a paid feature.


Speed

One HTTP request per board, gzip-compressed, regardless of how many postings it holds. Measured: 1,234 postings across 7 boards in 1.4 seconds. Retries use exponential backoff on 429/5xx and never fire on a 404.

Ashby's payloads are large because descriptions come inline — a 136-posting board is about 2.3 MB of JSON — but gzip handles it and it is still a single round trip. Default memory of 1 GB comfortably handles a run of several thousand postings.


Common questions

Do I need an Ashby API key? No. api.ashbyhq.com/posting-api/job-board/<name> is the public posting API Ashby provides so boards can syndicate listings. The authenticated Ashby API is a different product.

How do I find a company's board name? It is the path segment in their Ashby URL. jobs.ashbyhq.com/ramp means the name is ramp. Companies embedding the board on their own domain still load it from jobs.ashbyhq.com — check the network tab or page source.

Why does a board return zero jobs? Because the company genuinely has nothing open. It is reported as board_empty, distinct from a 404, so you can tell "not on Ashby" from "on Ashby, hiring nobody".

Is the salary always in USD? No — salaryCurrency carries the real currency code from Ashby. Do not assume.

What is compensationPublic? Ashby's shouldDisplayCompensationOnJobPostings. When false, the company chose not to publish pay, which is why some rows have no range even on a board that mostly does.

Why are some postings isListed: false? Ashby lets companies keep evergreen or talent-pool postings out of the public list. They are excluded by default; set includeUnlisted: true to get them.

How fresh is the data? Live on every run. Nothing is cached.


  • Greenhouse Jobs Scraper — the largest board population; salary parsed from text at 57%
  • Lever Jobs Scraper — team, commitment, workplace type and country at ~99–100%
  • Workday Jobs Scraper — enterprise career sites by URL
  • Startup Jobs Aggregator — company handles in, one deduplicated schema out across all three startup ATSs

This Actor reads a public, unauthenticated JSON endpoint that Ashby publishes so job boards and aggregators can syndicate postings. It sends no credentials, solves no challenges and bypasses no access control. You are responsible for how you use the data, including any applicable data-protection rules.