Ashby Jobs + Expiry History — top AI companies, with salary avatar

Ashby Jobs + Expiry History — top AI companies, with salary

Pricing

$3.00 / 1,000 results

Go to Apify Store
Ashby Jobs + Expiry History — top AI companies, with salary

Ashby Jobs + Expiry History — top AI companies, with salary

Hiring at the top AI-native companies — OpenAI, Notion, Ramp, Cursor, Linear, Supabase and more — straight from each company's own Ashby board, with salary bands. Exact-employer data, not a job-board aggregation, kept as roles open and close. Served at database speed.

Pricing

$3.00 / 1,000 results

Rating

0.0

(0)

Developer

Hyperbach

Hyperbach

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

The hiring of the top AI-native companies — OpenAI, Notion, Ramp, Cursor, Linear, Supabase, and more — straight from each company's own Ashby board, with salary. Not a job-board aggregation: every posting is tied to the exact employer, kept as roles open and close. Served at database speed.

Why this feed, not a generic ATS scrape

  • Exact employer, from its own ATS. Every posting comes from a specific company's own Ashby board (company_slug is the employer, url is its Ashby page) — not a name guessed across an aggregator. When it says OpenAI, it is OpenAI.
  • A curated set of the companies people actually watch. Maintained fresh across the top AI-native and dev-tools employers — OpenAI, Notion, Ramp, Cursor, Linear, Supabase, Vanta, Sierra, Harvey, Modal, Replicate, PostHog — so you don't have to hunt down board tokens. The set grows.
  • Salary, where the company posts it. About two-thirds of roles carry a compensation band with currency and period — Ashby surfaces it and so do we. Real numbers from real employers, not estimates.
  • Kept after they close. When a role leaves the board it's retained with the date it closed, so you can see how long positions stay open and which roles a company fills fast — history a live scrape structurally cannot produce.
  • Database speed, and unblockable. You read our maintained archive, not the ATS, so a run answers as a query and is never rate-limited or blocked.

Who it's for

  • Recruiters & talent researchers — track exactly what the top AI companies are hiring, in which functions, and how fast roles turn over — a competitive-hiring and sourcing signal you can act on.
  • Compensation analysts — real salary bands from OpenAI, Notion, Ramp and peers, by role and location — benchmark against the companies setting the market, not survey estimates.
  • Market & investment researchers — which AI-native companies are scaling, in what functions (eng vs GTM vs ops), and when they pause hiring — read straight off the per-company feed and its close dates.
  • Founders & sales teams — who's hiring what at the companies you sell to — an org-growth signal tied to the exact employer and its own careers page.

Quick start

One company's board

{
"company": "openai"
}

Engineering roles at a company

{
"company": "notion",
"keyword": "engineer"
}

What has closed

{
"company": "ramp",
"status": "gone"
}

Output

One record per posting:

fieldmeaning
job_idStable unique key for the posting, <source>:<id>. Deduplicate across runs and join to your own data on this.
urlCanonical posting URL.
titleJob title.
companyEmployer name as the board lists it.
company_domainThe employer's own web domain, resolved from the posting.
company_slugThe board's identifier for the employer.
company_logo_urlEmployer logo, when the board provides one.
location_restrictionWhere the posting says the role may be based.
employment_typeFull time, contract, and so on, as declared by the employer.
categoriesCategory tags the board assigned to the posting.
descriptionFull posting description.
salary_minLower bound of the advertised band.
salary_maxUpper bound of the advertised band.
salary_currencyISO currency of the advertised band.
salary_unitPeriod the band refers to (e.g. YEAR, HOUR).
posted_atWhen the posting first appeared.
first_seen_atWhen our archive first captured it.
statuslive while listed, gone once removed.
gone_reasonSet when the role leaves the board. Ashby posts no expiry date, so this is unknown — it records that the role closed (filled or pulled), and status/the timestamps tell you when.
gone_atThe date the posting was first observed gone. Null while it is live. Naukri overwrites its expired list nightly, so this is only knowable to whoever was watching that day.
apply_urlWhere to apply for the role.
enrichedWhether salary, category and logo have been resolved yet — a posting is returned as soon as it is found, enriched or not.

Example record:

{
"job_id": "ashby_ats:10c7fcdc-1f07-41e3-8e37-4d930898a648",
"url": "https://jobs.ashbyhq.com/openai/10c7fcdc-1f07-41e3-8e37-4d930898a648",
"title": "Growth Product Marketing Manager",
"company": "openai",
"company_domain": "https://openai.com/",
"company_slug": "openai",
"company_logo_url": "https://app.ashbyhq.com/api/images/org-theme-social/0c0ad039-c59c-4f86-b7ea-e7bebb8a8041/33531299-c352-4642-8992-b14bae985251/97265fdb-643c-406f-98e2-fa0372f46a17.png",
"location_restriction": "San Francisco",
"employment_type": "FullTime",
"categories": [
"Applied AI"
],
"description": "About the Team\n\nThe Growth team drives user and revenue growth across ChatGPT’s consumer and business segments as well as other OpenAI products worldwide. We operate across the ful …(truncated for display)",
"salary_min": 144000.0,
"salary_max": 210000.0,
"salary_currency": "USD",
"salary_unit": "YEAR",
"posted_at": "2026-07-29 21:07:17.483+00",
"first_seen_at": "2026-07-26 19:42:30.661453+00",
"status": "live",
"gone_reason": null,
"gone_at": null,
"apply_url": "https://jobs.ashbyhq.com/openai/10c7fcdc-1f07-41e3-8e37-4d930898a648/application",
"enriched": true
}

Pricing

$0.003 per result — pay only for the postings a run returns, no start fee. Above the $0.001–0.002 generic ATS scrapers because you get a curated, maintained set of the companies worth watching, the salary band where they post it, and the archive (roles kept after they close) — none of which a live board scrape gives you. A rung below the Himalayas archive ($0.004).

Usage patterns

  • Track one company — Pass company (e.g. openai, ramp, notion) to get that employer's full current board, then poll to watch it change over time.
  • Salary benchmarking — Pull a role across the set and read salary_min/salary_max (annual, with currency) to benchmark comp at the companies setting the market.
  • What closed, and when — Set status=gone to see roles that have left the board, with the date — a company that fills a role in two weeks is a different signal than one that leaves it open for months.

Input configuration

fieldtypedefaultwhat it does
keywordstringMatches job title or category.
companystringEmployer name as the board lists it. Partial matches work.
postedSincestringISO timestamp. Leave empty and the Actor remembers where it stopped, returning only new postings each run.
goneSincestringOnly postings observed dead at or after this ISO timestamp. The query this archive exists to answer.
statuslive / gone / any"live"'Gone' returns postings that have been removed, with why — the part no live scraper can give you.
locationstringSubstring match on the posting's location.
remoteOnlybooleanfalseOnly postings the employer marks as remote.
descriptionSearchstringSubstring match inside the job description.
excludeTitlestringDrop postings whose title contains this.
maxItemsinteger500Upper bound on results returned in a single run.
fullRefreshbooleanfalseBy default each run returns only what appeared since your last one, so a schedule never re-delivers the same page. Tick this to ignore that bookmark and re-pull the full result set for your filters — and it clears the stored cursor, so your next ordinary run starts clean.
enrichedOnlybooleanfalseReturn only postings whose salary, employment type and description have been parsed. Off by default: an unenriched record still carries title, company, location and dates, and withholding it trades a real answer for a slower better one.

FAQ

How is this different from a generic Ashby scraper?

Generic scrapers take any board token and return whatever is live right now. This is a maintained, curated feed of the top AI-native companies with the salary band where posted, and it's an archive: roles are kept after they close (status=gone), so you get hiring history — which roles turn over fast, when a company stops hiring — that a live scrape can't produce.

Which companies are covered?

A curated set of top AI-native and dev-tools employers — currently OpenAI, Notion, Ramp, Cursor, Linear, Supabase, Vanta, Sierra, Harvey, Modal, Replicate and PostHog — and growing. Filter with company.

Does every job have a salary?

About two-thirds do — Ashby surfaces the band only when the company sets one, so roles without a posted band come back with salary null (never guessed). Currency is included and the period is annual.

Is the archive live, and what does gone mean?

It's a continuously maintained archive: new roles appear within a day, and closed ones stay with the date they left the board. Ashby posts no expiry date, so gone_reason is unknown — the signal is that a role closed and when, not filled-vs-expired.

Integration

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('hyperbach/ashby-jobs-history').call({"company": "openai"});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('hyperbach/ashby-jobs-history').call(run_input={'company': 'openai'})
items = client.dataset(run['defaultDatasetId']).list_items().items

CLI

$apify call hyperbach/ashby-jobs-history --input '{"company": "openai"}'

REST

curl -X POST "https://api.apify.com/v2/acts/hyperbach~ashby-jobs-history/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' -d '{"company": "openai"}'

Support

support@hyperbach.com

This page is generated from the Actor's schemas and a live sample — it cannot describe a field the Actor does not have.