Ashby Jobs Scraper: Job Board API, Salary, Remote
Pricing
$0.40 / 1,000 jobs
Ashby Jobs Scraper: Job Board API, Salary, Remote
Ashby jobs scraper: one row per job from Ashby job boards (public job-board API): title, company, location with country code, remote or hybrid, employment type, salary, posting date, apply link and description. $0.40 per 1,000 jobs.
Pricing
$0.40 / 1,000 jobs
Rating
0.0
(0)
Developer
Prague Data Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Security
Limited permissionsShare
Ashby Jobs Scraper
Scrape Ashby job postings from company career sites through Ashby's public job-board API: one clean row per job with title, company, locations and country codes, remote or hybrid, employment type, salary, posting date, apply link and full description. No login, no browser, no proxy. $0.40 per 1,000 jobs.
Quick start
{"companies": ["ramp","notion","linear"],"maxItems": 100}
Search every Ashby board at once by leaving companies empty and setting keywords, locations or postedWithinDays.
Output example
{"jobId": "d3bc1ced-3ce4-4086-a050-555055dbb1ff","ats": "ashby","company": "Linear","companySlug": "linear","title": "Senior / Staff Fullstack Engineer","department": "Product","team": "Engineering","employmentType": "FULL_TIME","employmentTypeRaw": "FullTime","workplaceType": "REMOTE","locations": ["Europe"],"city": null,"region": null,"country": null,"countries": [],"salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"salaryText": null,"postedAt": "2021-04-27T20:13:45.158Z","updatedAt": null,"applyUrl": "https://jobs.ashbyhq.com/linear/d3bc1ced-3ce4-4086-a050-555055dbb1ff/application","jobUrl": "https://jobs.ashbyhq.com/linear/d3bc1ced-3ce4-4086-a050-555055dbb1ff","careerSiteUrl": "https://jobs.ashbyhq.com/linear","companyDomain": "linear.app","descriptionText": "At Linear, we're building the product development system for teams and agents. AI is fundamentally changing how software …","descriptionHtml": null}
What you get
| Field | Description |
|---|---|
jobId, ats, companySlug | Job ID in the ATS, the ATS, and the board ID (Workday: tenant|wdN|site). One row per ATS + board + job ID. |
company, title, department, team | As published by the career site. |
employmentType | FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP, TEMPORARY or OTHER (intern and working-student titles override a generic "Full-time"). employmentTypeRaw keeps the original label. |
workplaceType | ONSITE, HYBRID, REMOTE, or null when the career site does not say. |
locations | Locations as written by the career site. |
city, region, country, countries | First location parsed, ISO-2 country codes of all locations. |
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText | Published salary (HOUR, DAY, WEEK, MONTH, YEAR). |
postedAt, updatedAt | ISO 8601 UTC (Workday: day precision). |
applyUrl, jobUrl, careerSiteUrl | Application link, job page, company career site. |
companyDomain | Company website domain, when the ATS publishes it. |
descriptionText, descriptionHtml | Full description. |
scrapedAt | When the job was read (the index build time in search mode). |
Every field is described in the dataset schema (Output tab). The run also saves SUMMARY in the key-value store (jobs per company, boards not found, warnings).
Input
| Field | Type | Default | Notes |
|---|---|---|---|
companies | array | empty = search | Ashby board slugs (ramp) or career-page URLs |
keywords | array | all | Keep jobs whose title or description contains these words |
locations | array | all | City, country or Remote |
remoteOnly | boolean | false | Remote jobs only |
postedWithinDays | integer | all | Jobs posted in the last N days |
maxItems | integer | 500 | Stop after N jobs (each saved job is one charged result) |
maxJobsPerCompany | integer | none | Cap per board |
includeDescription | boolean | true | Full description as plain text |
includeDescriptionHtml | boolean | false | Also the description as HTML |
Compatible with the input of fantastic-jobs/ashby-jobs-api
Switching costs nothing: the Actor also accepts the field names of those Actors (urls, titleSearch, locationSearch, limit, timeRange, hasSalary, ...). Change only the Actor ID in your API call or integration. Example:
{"titleSearch": ["Engineer"],"timeRange": "7d","limit": 10}
Pricing
Pay per event: $0.0004 per job ($0.40 per 1,000), event job, no platform usage on top. Duplicates are free. Set a maximum cost per run and the Actor stops when it is reached.
For comparison, the leading Ashby job scrapers in the Apify Store cost $1.50 to $3.00 per 1,000 jobs (checked 27/10/2026). The Actors named in the compatibility section charge $2.00 per 1,000 jobs, at least 5 times this price.
Code
Python (pip install apify-client)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("praguedatalab/ashby-jobs-scraper").call(run_input={"companies":["ramp","notion","linear"],"maxItems":100})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(len(items), items[0]["title"])
JavaScript (npm install apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('praguedatalab/ashby-jobs-scraper').call({"companies":["ramp","notion","linear"],"maxItems":100});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, items[0]?.title);
curl (synchronous run, returns the dataset items)
curl -X POST "https://api.apify.com/v2/acts/praguedatalab~ashby-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"companies":["ramp","notion","linear"],"maxItems":100}'
More ATS in one run
Need Ashby together with Greenhouse, Lever, Ashby, Workday and six other career-site ATS, deduplicated? Use the Career Site Jobs API at the same price per job.
FAQ
Which companies can I scrape? Any company whose Ashby board is public, for example ramp. Give the board slug or its job-board URL (https://jobs.ashbyhq.com/<company>). Boards that do not exist are listed in the run's summary.
A company returns no job. The board is public but has no open job right now, or the slug is wrong. Check the slug on the company's career page.
Why only Ashby? One listing per ATS keeps each Store page focused. Other ATS are in the Career Site Jobs API.
Is this legal? The Actor reads public job postings that companies publish so that anyone can apply, through the same public job-board API their career site uses. It does not log in and does not output personal data.