Ashby Jobs Scraper - No API Key
Pricing
from $3.00 / 1,000 job scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
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):
| Field | Fill rate | Notes |
|---|---|---|
title | 100% | |
jobId | 100% | Ashby UUID |
department | 100% | |
team | 100% | Ashby has a real department→team hierarchy |
employmentType | 100% | Normalised: FULL_TIME, INTERNSHIP, CONTRACT, TEMPORARY |
location | 100% | Primary location |
locations[] | 100% | Primary plus every secondary location |
country | 99.8% | From the posting's postal address |
postedAt | 100% | ISO 8601 |
jobUrl | 100% | |
applyUrl | 100% | Direct link to the application form, verified live |
descriptionText | 100% | Ashby ships a genuine plain-text version — no HTML stripping guesswork |
descriptionHtml | on request | Off by default |
isRemote | 100% | 76.7% straight from Ashby's own field |
workplaceType | 77.6% | REMOTE / HYBRID / ONSITE |
salaryMin / salaryMax / salaryCurrency / salaryInterval | 79.9% | See the breakdown below |
salaryText | 79.9% | The range as Ashby displays it, e.g. "$211.4K – $290.6K" |
compensationPublic | 100% | Whether the company opted into showing pay |
isListed | 100% | 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 boolean — remoteSource: "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
ramphttps://jobs.ashbyhq.com/ramphttps://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245https://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
| Option | What it does |
|---|---|
maxItems | Hard ceiling on rows written. This is your spend cap. |
maxJobsPerCompany | Keeps one 754-posting board (OpenAI) from consuming the budget |
salaryOnly | Only rows with a populated salaryMin |
remoteOnly | Only isRemote: true |
employmentTypes | FullTime, Intern, Contract, Temporary |
titleKeywords / locationKeywords / departmentKeywords | Substring matching |
postedAfter | ISO date |
includeUnlisted | Include isListed: false pipelines; off by default |
includeCompensation | Ask Ashby for the pay object; on by default |
dedupe | Drops 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_exhausted—maxItemswas 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.
Related Actors in this fleet
- 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
Legal
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.