Ashby Jobs Scraper: Salary, Equity & Correct Remote Flags avatar

Ashby Jobs Scraper: Salary, Equity & Correct Remote Flags

Pricing

from $2.10 / 1,000 job posting returneds

Go to Apify Store
Ashby Jobs Scraper: Salary, Equity & Correct Remote Flags

Ashby Jobs Scraper: Salary, Equity & Correct Remote Flags

Scrapes job postings from any Ashby job board (jobs.ashbyhq.com) through Ashby's public API. Reads compensation correctly, including the salary ranges a naive parse silently drops. Separates genuinely remote roles from hybrid ones, and ships a verified list of live Ashby boards.

Pricing

from $2.10 / 1,000 job posting returneds

Rating

0.0

(0)

Developer

First Party Data

First Party Data

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

Job postings from any Ashby board (jobs.ashbyhq.com/...) through Ashby's own public API. No login, no proxy, no browser.

Ashby is the most generous of the major applicant tracking systems about what it publishes. It is the one that routinely gives you a real pay range, and also the one that is easiest to read wrongly. Both of those are the point of this actor, and both are measured below rather than asserted.


Ashby's pay data is the densest anywhere, and a third of it is easy to lose

Ashby attaches several compensation components to a posting: a salary range, an equity line, sometimes a bonus. They are returned as a list, and the list is not in a fixed order.

Ramp publishes a pay range on 95% of its roles. On only 25% of them is that range the first component: usually the equity line comes first, and an equity line carries no numbers at all. So the obvious implementation, take the first component, reports Ramp as mostly not publishing pay.

Measured across 300 Ashby boards and 19,267 live postings:

Postings that publish a real pay range38.4%
…that taking the first component silently misses30.0% of them (2,217 postings)
Postings advertising equity24.1%

So a naive Ashby scraper reports roughly 27% salary coverage. The true figure is 38.4%. This actor picks the component that is actually a pay range, exposes offersEquity separately, and normalises Ashby's "1 YEAR" interval notation to YEARLY so ranges are comparable across boards.

"compensation": {
"min": 211400, "max": 290600, "currency": "USD",
"interval": "YEARLY", "raw": "$211.4K - $290.6K"
},
"offersEquity": true

Filter to only jobs with published pay and you get a genuinely dense salary dataset, which on most other applicant tracking systems is simply not available.


isRemote does not mean remote, and it is wrong about half the time

This is Ashby's sharpest trap. The API returns a boolean field called isRemote. It reads as though it means the role is remote. It does not. It appears to mean "not strictly on-site", so it is true for hybrid roles too.

Measured across 300 Ashby boards and 19,267 live postings:

51.7%of postings have isRemote: true
23.6%are actually remote, per Ashby's own workplaceType
54.6%of the field's true values are Hybrid or OnSite
2.19Ɨhow much you overstate remote work by trusting it

More than half of everything Ashby marks isRemote: true is not a remote job. Anything built downstream of that field inherits the error, including an "AI work arrangement" filter, which will confidently label hybrid roles remote.

This actor treats workplaceType as authoritative and falls back to isRemote only where workplaceType is absent. You get both:

  • workplaceType: Remote, Hybrid, OnSite, or null
  • isRemote is three-valued: true, false, or null when the board did not say

Filter with Work arrangement to pick exactly what you want, including Hybrid on its own, which no boolean can express. Remote roles only means genuinely remote, and excludes unknowns rather than guessing.

Distribution across that sample: OnSite 31.7%, Hybrid 28.3%, Remote 23.6%, unstated 16.4%.


Input

Paste board URLs, or just name the company:

https://jobs.ashbyhq.com/openai
https://jobs.ashbyhq.com/ramp
openai

The board identifier is the last path segment. Ashby publishes no company display name anywhere in its API, so company is derived from that identifier while companyToken always holds the exact, unmodified one.

Or switch on Search the built-in company list: this actor ships 1,802 verified live Ashby boards carrying 31,640 open postings, ordered largest first, so a sample of a few hundred already covers most of them.

The ten largest Ashby boards in the bundled list

  1. Crusoe: 369 roles
  2. Snowflake: 366 roles
  3. Harvey: 322 roles
  4. Applied: 291 roles
  5. Legora: 281 roles
  6. FluidStack: 250 roles
  7. ElevenLabs: 246 roles
  8. Halter: 235 roles
  9. Deliveroo: 229 roles
  10. Sierra: 211 roles

Every board was verified live at build time (2026-09-15): it answered Ashby's API with at least one open posting. Dead and private boards are not shipped.


What a row looks like

{
"id": "ashby:openai:8fb1615c-34bf-47c4-a1d1-b7b2f836bbd3",
"title": "Technical Program Manager, Compute Infrastructure",
"company": "OpenAI",
"companyToken": "openai",
"department": "Technical Program Management",
"team": "Technical Program Management",
"employmentType": "FULL_TIME",
"employmentTypeRaw": "FullTime",
"seniorityLevel": null,
"seniorityInferred": false,
"locationRaw": "San Francisco",
"locations": ["San Francisco"],
"city": "San Francisco",
"region": "California",
"country": "United States",
"workplaceType": "Hybrid",
"isRemote": false,
"compensation": { "min": 257000, "max": 335000, "currency": "USD", "interval": "YEARLY", "raw": "$257K - $335K" },
"offersEquity": true,
"descriptionText": "About the Team...",
"applyUrl": "https://jobs.ashbyhq.com/openai/8fb1615c-.../application",
"postedAt": "2026-03-12T16:38:15.322Z",
"scrapedAt": "2026-09-11T06:20:11.004Z"
}

Note workplaceType: "Hybrid" alongside isRemote: false. That same posting carries isRemote: true in Ashby's raw response.

seniorityLevel is null here on purpose. "Technical Program Manager" is a role, not a level: program managers, account managers and project managers are individual contributors, and across 20,000 titles "manager" was the single most misleading word to read as seniority. Where a level really is stated, the field carries one of INTERN JUNIOR MID SENIOR MANAGER PRINCIPAL DIRECTOR EXECUTIVE, and seniorityInferred says whether it came from the employer's own field or from the title.

id is stable between runs, so an incremental pipeline can dedupe on it. Multi-location postings keep every location in locations[] rather than only the primary one.

Location is structured, not just a string. Ashby publishes a real postal address on 793 of 795 OpenAI postings, so city, region and country come out as separate fields. That makes the Country filter exact: you are matching a country, not string-searching "Germany" against a location line that might say "Berlin" or "Munich". An ISO code works too.


Recipes

Every remote engineering role that publishes pay

{
"useBuiltInCorpus": true,
"corpusSample": 500,
"titleInclude": ["engineer"],
"workplaceTypes": ["Remote"],
"withSalaryOnly": true
}

Salary benchmarking across the startup market

{ "useBuiltInCorpus": true, "corpusSample": 0, "withSalaryOnly": true, "includeDescriptions": false }

Ashby's structured pay plus a wide board list is the cheapest compensation dataset available here. Descriptions off keeps it small.

Roles offering equity

{ "useBuiltInCorpus": true, "corpusSample": 300, "offersEquityOnly": true }

A daily feed of one company

{ "companies": ["ramp"], "onlyNewOrChanged": true }

Running it as a feed

Only new or changed jobs remembers what the last run returned and bills only what moved: a changed title, a changed pay range, a changed work arrangement. Unchanged postings are skipped without being billed. Roles that disappeared are listed in the REMOVED_SINCE_LAST_RUN record so you can close them out.

The first run establishes the baseline and returns everything.


Honest limits

  • Ashby publishes no company name. Not in the postings, not on the board. company is derived from the board identifier, so a glued-together name comes back as it was written: billiontoone is Billiontoone and northwoodspace is Northwoodspace. Treat companyToken as the real key.
  • compensation is null more often than you would like. 38.4% coverage is excellent for this industry and still means most postings have none. Where a range appears only in the description prose it is parsed out, but only when it is unambiguous and currency-marked.
  • workplaceType is unset on about 16% of postings. Those get isRemote: null. Filtering on work arrangement excludes them; that is deliberate, because the alternative is inventing an answer.
  • One request per board, no paging. Ashby returns the whole board at once, which is why this is the fastest of the major systems to read, a 795-posting board lands in about 210 ms. Large runs are limited by how many boards you ask for, not by Ashby.
  • Public data only. The endpoint is Ashby's documented public job-board API, the one that exists so companies can host their own careers page. Nothing authenticates, submits an application, or touches candidate data.

Unofficial: this actor is not affiliated with or endorsed by Ashby.