Ashby Jobs Scraper: Job Board API, Salary, Remote avatar

Ashby Jobs Scraper: Job Board API, Salary, Remote

Pricing

$0.40 / 1,000 jobs

Go to Apify Store
Ashby Jobs Scraper: Job Board API, Salary, Remote

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

Prague Data Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Security

Limited permissions

Share

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

FieldDescription
jobId, ats, companySlugJob ID in the ATS, the ATS, and the board ID (Workday: tenant|wdN|site). One row per ATS + board + job ID.
company, title, department, teamAs published by the career site.
employmentTypeFULL_TIME, PART_TIME, CONTRACT, INTERNSHIP, TEMPORARY or OTHER (intern and working-student titles override a generic "Full-time"). employmentTypeRaw keeps the original label.
workplaceTypeONSITE, HYBRID, REMOTE, or null when the career site does not say.
locationsLocations as written by the career site.
city, region, country, countriesFirst location parsed, ISO-2 country codes of all locations.
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryTextPublished salary (HOUR, DAY, WEEK, MONTH, YEAR).
postedAt, updatedAtISO 8601 UTC (Workday: day precision).
applyUrl, jobUrl, careerSiteUrlApplication link, job page, company career site.
companyDomainCompany website domain, when the ATS publishes it.
descriptionText, descriptionHtmlFull description.
scrapedAtWhen 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

FieldTypeDefaultNotes
companiesarrayempty = searchAshby board slugs (ramp) or career-page URLs
keywordsarrayallKeep jobs whose title or description contains these words
locationsarrayallCity, country or Remote
remoteOnlybooleanfalseRemote jobs only
postedWithinDaysintegerallJobs posted in the last N days
maxItemsinteger500Stop after N jobs (each saved job is one charged result)
maxJobsPerCompanyintegernoneCap per board
includeDescriptionbooleantrueFull description as plain text
includeDescriptionHtmlbooleanfalseAlso 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 ApifyClient
client = 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().items
print(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.