OpenAI (openai), Ramp (ramp) and Notion (notion) post their jobs on Ashby, and Ashby publishes every job board through a public API with no key and no paging:
curl -s "https://api.ashbyhq.com/posting-api/job-board/openai" \
| jq '(.jobs | length), (.jobs[0] | has("compensation"))'
That printed 808 and false: every OpenAI job in one response of 13.5 MB, and no pay in it. Five things to know, measured on 2026-10-28 with a few seconds between requests.
1. The pay needs includeCompensation=true
curl -s "https://api.ashbyhq.com/posting-api/job-board/openai?includeCompensation=true" \
| jq -c '.jobs[0].compensation | .compensationTierSummary, (.summaryComponents[] | select(.compensationType == "Salary"))'
That printed "$250K – $445K • Offers Equity" and the same band as numbers: {"compensationType":"Salary","interval":"1 YEAR","currencyCode":"USD","minValue":250000,"maxValue":445000}. With the flag, 643 of OpenAI's 808 jobs carry a Salary component, and 165 of Ramp's 172.
2. Read the numbers, not the line
The summary line is for people: "$211.4K – $290.6K • Offers Equity" needs the K expanded and the equity note cut off before it sorts. The Salary component has minValue, maxValue, currencyCode and interval, and the currency is not always dollars: OpenAI also posts in GBP, CAD and SGD, Ramp in CAD, GBP and SEK. Equity and commission sit in their own components, often with null values, and are not part of the pay band.
3. The interval is not always a year
Of Ramp's 165 Salary components, 160 say "1 YEAR" and 5 say "1 MONTH"; OpenAI has 3 with "1 HOUR". A reader that assumes a year turns a monthly band into a twelfth of the real pay. Two of OpenAI's bands start at zero ("$0 - $500K"), which is not a band anyone can filter on.
4. isRemote means "not only on site"
curl -s "https://api.ashbyhq.com/posting-api/job-board/ramp?includeCompensation=true" \
| jq -c '[.jobs[] | {isRemote, workplaceType}] | group_by(.) | map({k: (.[0] | "\(.isRemote)/\(.workplaceType)"), n: length})'
That printed 137 jobs with isRemote true and workplaceType "Hybrid", 16 true and "Remote", 19 false and "OnSite". Filter on isRemote and a search for remote work returns 137 hybrid jobs at an office. workplaceType has the three values that matter.
5. An empty pay object is a choice
Notion's board answered with the compensation object on all 140 jobs and no components in any of them, and shouldDisplayCompensationOnJobPostings false throughout. That is an employer not publishing pay, not a broken request: tell it apart from a board that was read without the flag. Ramp also splits pay by location on 45 of its 172 jobs (compensationTiers), and the summary spans them.
Hosted
Ashby Jobs Scraper on Apify takes openai, ramp or a company domain, always sends includeCompensation, and returns the employer's line as compensation and the band as salaryMin, salaryMax, salaryCurrency and salaryPeriod: OpenAI's first row came back as 250,000 to 445,000 USD a year. It reads workplaceType for remote, not isRemote. Every other system's public endpoint, with a tested curl, is in job-board-apis.
Top comments (0)