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

a month ago

Last modified

Security

Limited permissions

Share

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

You give itAshby board URLs, company names like ramp, or nothing: switch on Search the built-in company list and filter 3,216 live Ashby boards
You get backone row per posting: title, department, location, country, employment type, the full description, the posted date, the pay range and equity flag where published, and a work arrangement you can filter on (Remote, Hybrid or OnSite)
It costs$3.50 per 1,000 rows on Apify's Free and Starter plans, $2.80 on Scale, $2.10 on Business and above, plus $0.01 per run. Filters are applied before you are charged, and a run that finds nothing costs nothing
The form as it opensreads OpenAI and Ramp, 10 postings each: 20 rows, 8 cents on the Free plan, under 10 seconds on Apify. For more, raise Maximum jobs from any one job board and Maximum jobs to return

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's API publishes no company name, so for a board in the bundled list company is the name from that board's own Ashby job page, collected when the list was built, and for any other board it is derived from the identifier. companyToken always holds the exact, unmodified identifier.

Or switch on Search the built-in company list: this actor ships 3,216 verified live Ashby boards carrying 59,274 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. Bjak: 3,061 roles
  2. OpenAI: 810 roles
  3. Airwallex: 581 roles
  4. Air Apps: 498 roles
  5. LILT (Production): 413 roles
  6. Alpaca Health: 405 roles
  7. Renuity: 383 roles
  8. Crusoe: 374 roles
  9. Snowflake: 368 roles
  10. Harvey: 332 roles

Every board was verified live at build time (2026-09-24): 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.

Set Maximum jobs from any one job board to 0 for a feed. The form opens at 10 per company to keep a first look cheap, and a limit left in place caps what every run can deliver from each company.

The first run establishes the baseline and returns everything.


Honest limits

  • Ashby's API publishes no company name. The bundled list carries the name from each board's own Ashby job page, so a board in it comes back as the employer calls itself. A board outside it is named from its identifier, so a glued-together name comes back as it was written, with only the first letter capitalised. 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.