# Ashby Jobs API: Search 52k+ Jobs from 2,300+ Companies (`dododata/ashby-jobs-api`) Actor

Search 52,000+ open jobs from 2,300+ companies hiring on Ashby by title, place, remote, pay and date. No board URLs. JSON, refreshed daily.

- **URL**: https://apify.com/dododata/ashby-jobs-api.md
- **Developed by:** [Dodo Data](https://apify.com/dododata) (community)
- **Categories:** Jobs, Automation, Lead generation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Ashby Jobs API: Search 52k+ Jobs from 2,300+ Companies

Search **53,738 open jobs** from **2,352 companies that hire through Ashby** by title, place, remote, pay and date, and get clean JSON back. No board URLs, no company list: type a job title, pick a time window, press Start. The index is built from each employer's own Ashby job board and refreshed daily (53,738 jobs on 14 November 2026, 6,103 of them published in the previous 7 days, 1,142 of those on one board); the full text of every job you get back is fetched live from the employer's board at search time.

### In one minute

- **What you get:** one JSON row per Ashby job, newest first: title, company, location, remote flag, pay range as numbers when the employer publishes one, publish date, the date our index first saw it, the employer's apply link and the full text. The same 30 fields as Dodo Data's other career-site job Actors.
- **What it costs:** $2.50 per 1,000 jobs on Apify's free plan, $2.00 on Gold and higher plans, plus a start fee of $0.00005 per GB of memory, one event at the default 1 GB. The prefilled search below returns 100 jobs: about $0.25 on the free plan. Apify's free plan includes $5 of usage every month.
- **Try it:** click **Start**. The prefilled search ("product manager") returned 100 of the 1,725 matching Ashby jobs (newest first, at most 10 per company) from 68 companies in 29 seconds on 14 November 2026 (a run of this code on our own machine), all 100 with full text and 60 with a pay range. Most of that time is loading the index and the rest is fetching the full text politely; with **Include full descriptions** off the same search took 18 seconds.

One real row from that run (description shortened):

```json
{
  "title": "Principal/Staff Product Manager, Risk Advisory",
  "company": "fieldguide",
  "department": "Engineering, Product, and Design",
  "location": "San Francisco, CA or Remote (USA)",
  "workplace_type": "remote",
  "remote": true,
  "employment_type": "FullTime",
  "salary_min": 225000,
  "salary_max": 315000,
  "salary_currency": "USD",
  "salary_period": "year",
  "posted_at": "2026-11-13T22:27:24.151Z",
  "first_seen_at": "2026-11-14",
  "apply_url": "https://jobs.ashbyhq.com/fieldguide/25902b53-e03c-40cc-8be3-72513a4eb97f/application",
  "description": "About Us\nFieldguide is establishing a new state of trust for global commerce and capital markets through automating and…"
}
```

### Which Dodo Data Actor do you need?

- **Ashby jobs from every company at once, by title, place and date:** this Actor.
- **Every career-page system at once** (Ashby and the others in one search): [Career Site Jobs Search](https://apify.com/dododata/career-jobs-search).
- **One company's Ashby board, read live from its URL:** [Ashby Jobs Scraper](https://apify.com/dododata/ashby-jobs-scraper).

### What you can search

| Filter | What it does |
|---|---|
| **Title keywords** | a title word that starts with one of these ("engineer" also finds "Engineering Manager") |
| **Exclude title words** | drop titles containing one of these whole words (senior, intern) |
| **Locations** / **Exclude locations** | whole words in the location, country or workplace type: `berlin`, `united kingdom`, `us`, `remote`. `united kingdom` also tries UK, Great Britain, England, Scotland, Wales and Northern Ireland, and the word Wales also matches New South Wales: 10 of the 4,009 jobs that search found on 12 November 2026 are in Australia |
| **Time range** / **Posted within (days)** | last 24 hours, 3, 7 or 30 days, by publish date; with both set, the narrower wins |
| **Companies** / **Exclude companies** | by Ashby board name, the word in the company's job links (`openai`, `notion`). Capitals, spaces and punctuation are ignored, so `Open AI` finds `openai`. A board name is not always the company's name: when a name returns nothing, look at one of its job links |
| **Remote only** / **Workplace type** | remote, hybrid or on-site, as the employer marks it. When a board sets no workplace type, a job it flags as remote or whose location says remote counts as remote. About 1 Ashby job in 9 has none and is left out when Workplace type is set |
| **Only jobs with a pay range** | keeps jobs whose pay range is in the index: 47% of Ashby jobs on 14 November 2026 (25,475 of 53,738; 60 of 100 in the sample run) |
| **Employment types** | full-time, part-time, contract, intern, temporary; every Ashby job states one |
| **Seniority** | as the title states it: intern, junior, senior, lead (staff, principal), director (VP, head of); most titles state no level, and "No level in the title" keeps those |
| **Max jobs per company** | keeps one company from filling a search: by default a tenth of the run (at least 2) while other companies match; when the other companies run out before **Max rows** is reached, the jobs held back fill the rest; 0 for no limit; off when you name companies |
| **Include full descriptions** | on by default; off for faster, lighter rows |
| **Max rows** | up to 5,000 per run; it is also your spend cap. Rows come back newest first. With **Max jobs per company** on (the default) they are the newest of each company, not strictly the newest overall. On the prefilled search they differ: on 14 November 2026 one company held 53 of the 100 strictly newest product manager jobs, and with the limit the 100 came from 68 companies (at most 10 from that one). Set **Max jobs per company** to 0 for the strictly newest. The form starts at 100; an API call or AI agent that leaves it out gets 20 |

Every filter runs before a row is saved, so you only pay for the jobs you get.

### How fresh it is

A private collector reads every Ashby board in the index every day and writes the result to the store this Actor searches; the run log says when it was last refreshed (14 November 2026, 03:00 UTC, for the runs on this page). A job the employer has closed leaves the index at the next refresh, within a day; until then it comes back without full text, because the text is always fetched live from the employer's board. `first_seen_at` is the date our index first listed the job, which is useful when an employer re-dates old postings. The index began on 22 October 2026, so no value is earlier: 41,488 of the 53,738 jobs carry 22 or 26 October 2026, which says when we started reading the board, not when the job opened.

### Where the jobs come from

Only from each company's own public Ashby job board, through Ashby's public job posting API (api.ashbyhq.com/posting-api), the endpoint Ashby publishes so that companies' jobs can be shown anywhere. Which companies use Ashby was found from public web data (the Common Crawl URL index) and confirmed by reading each board. No aggregator, no LinkedIn, no Indeed, nothing behind a login. Every row links back to the posting on the board it came from. Some boards belong to recruiting agencies that post jobs for client companies; **Exclude companies** drops a board. A company that wants its board left out can say so in the Issues tab and it is removed within 24 hours.

### Pay ranges

Ashby boards that publish pay do it in their compensation field; when that is empty, a range written in the job text is read out. `salary_source` says which: `structured` or `description`. Pay is in the index itself, so it comes back, and **Only jobs with a pay range** works, even with full descriptions off. In the sample run, 67 of 100 jobs had pay: 55 from the boards' own field, 12 from the text. From the board's field only the salary component is read, so equity and commission components are not mixed into base pay; in the text, a figure labelled as a bonus, an equity grant or a sign-on amount is left out.

### What we deliberately do not collect

- No personal-data fields. In the job text, e-mail addresses, phone numbers in the usual formats and contact names next to a contact label are replaced with a marker such as `[email removed]`. The filter works on patterns and errs on the side of removing: on 12 November 2026 about 1 row in 18 carried `[name removed]`, mostly in place of an ordinary word after "Hiring Manager", "Recruiter", "Head of" or "VP of" (as in "Hiring Manager Interview"). It does not catch everything. A link to a person's LinkedIn profile (in 76 of 4,999 job texts that day), an address written as "name (at) company" (in 25), a name an employer writes into its own sentence and a phone number in an unusual format stay as the employer published them. Tell us in the Issues tab and we fix the pattern.
- Nothing behind a login, no candidate data, no tracking.
- This Actor declares **limited permissions**: it can only write to its own storages on your account.

### How to run it

1. Click **Start** to run the prefilled search, or type your own title keywords.
2. Narrow with locations, remote, a time range or companies. Set **Max rows**: newest first, and it caps your spend.
3. Download as JSON, CSV or Excel, call it from the API, or let an AI agent call it through Apify's MCP server.
4. For a daily feed of new Ashby jobs, schedule it daily with **Time range: Last 3 days** and keep only the `id`s you have not seen before: some boards date a job a day or two before our daily refresh reads it, so Last 24 hours can miss a few. A few jobs are older still when we first list them (18 of the 689 first listed on 12 November 2026 were dated more than 3 days back); this feed does not return those. They are in the index, with `first_seen_at` set to the day we first listed them.

**How long it takes:** every run first loads the index: runs with nothing else to fetch took about 18 seconds on our machine. Full text is then fetched politely, at most five requests a second, and one request per company rather than per job, so the 100 jobs of the prefilled search added about 11 seconds (14 November 2026) and 5,000 jobs with full text took about 4 minutes (12 November 2026). With **Include full descriptions** off there is nothing to fetch: 5,000 jobs came back in 18 seconds (14 November 2026).

### Ten real rows

The ten newest rows of the prefilled run of 14 November 2026 (descriptions shortened here to 160 characters; the dataset carries them in full):

```json
[
  {
    "id": "ashby:phantom:48fdd46b-c061-4b27-925a-fd54616f75c9",
    "ats": "ashby",
    "company": "phantom",
    "company_name": null,
    "title": "Senior Product Manager (Prediction Markets)",
    "department": "Product & Design",
    "team": "Product",
    "location": "Remote-US",
    "locations": [
      "Remote-US"
    ],
    "country": "United States",
    "workplace_type": "remote",
    "remote": true,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": null,
    "salary_max": null,
    "salary_currency": null,
    "salary_period": null,
    "salary_text": null,
    "posted_at": "2026-11-13T23:24:04.465Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "Phantom https://phantom.com is on a mission to connect the world to the freedom of open markets. Tens of millions of people all over the world use Phantom to ac…",
    "apply_url": "https://jobs.ashbyhq.com/phantom/48fdd46b-c061-4b27-925a-fd54616f75c9/application",
    "url": "https://jobs.ashbyhq.com/phantom/48fdd46b-c061-4b27-925a-fd54616f75c9",
    "change_status": null,
    "first_seen_at": "2026-11-14",
    "last_seen_at": null,
    "scraped_at": "2026-11-14T03:31:47.837Z",
    "salary_source": null
  },
  {
    "id": "ashby:fieldguide:5014884c-a8e0-49d5-adb7-60fbbcd9447f",
    "ats": "ashby",
    "company": "fieldguide",
    "company_name": null,
    "title": "Principal/Staff Product Manager, Platform",
    "department": "Engineering, Product, and Design",
    "team": "Product Management",
    "location": "San Francisco, CA or Remote (USA)",
    "locations": [
      "San Francisco, CA or Remote (USA)"
    ],
    "country": "United States",
    "workplace_type": "remote",
    "remote": true,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": 225000,
    "salary_max": 315000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": null,
    "posted_at": "2026-11-13T22:27:26.195Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "About Us\nFieldguide is establishing a new state of trust for global commerce and capital markets through automating and streamlining the work of advisory, audit…",
    "apply_url": "https://jobs.ashbyhq.com/fieldguide/5014884c-a8e0-49d5-adb7-60fbbcd9447f/application",
    "url": "https://jobs.ashbyhq.com/fieldguide/5014884c-a8e0-49d5-adb7-60fbbcd9447f",
    "change_status": null,
    "first_seen_at": "2026-11-14",
    "last_seen_at": null,
    "scraped_at": "2026-11-14T03:31:47.837Z",
    "salary_source": "structured"
  },
  {
    "id": "ashby:fieldguide:25902b53-e03c-40cc-8be3-72513a4eb97f",
    "ats": "ashby",
    "company": "fieldguide",
    "company_name": null,
    "title": "Principal/Staff Product Manager, Risk Advisory",
    "department": "Engineering, Product, and Design",
    "team": "Product Management",
    "location": "San Francisco, CA or Remote (USA)",
    "locations": [
      "San Francisco, CA or Remote (USA)"
    ],
    "country": "United States",
    "workplace_type": "remote",
    "remote": true,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": 225000,
    "salary_max": 315000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": null,
    "posted_at": "2026-11-13T22:27:24.151Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "About Us\nFieldguide is establishing a new state of trust for global commerce and capital markets through automating and streamlining the work of advisory, audit…",
    "apply_url": "https://jobs.ashbyhq.com/fieldguide/25902b53-e03c-40cc-8be3-72513a4eb97f/application",
    "url": "https://jobs.ashbyhq.com/fieldguide/25902b53-e03c-40cc-8be3-72513a4eb97f",
    "change_status": null,
    "first_seen_at": "2026-11-14",
    "last_seen_at": null,
    "scraped_at": "2026-11-14T03:31:47.837Z",
    "salary_source": "structured"
  },
  {
    "id": "ashby:lambda:7ea9a4fa-7b86-4464-a921-24f50f6c9879",
    "ats": "ashby",
    "company": "lambda",
    "company_name": null,
    "title": "Staff Product Manager - Storage",
    "department": "Data Center Business",
    "team": "Product Engineering",
    "location": "Bellevue Office",
    "locations": [
      "Bellevue Office",
      "San Francisco Office (Fremont St)"
    ],
    "country": "United States",
    "workplace_type": "hybrid",
    "remote": false,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": 291000,
    "salary_max": 430000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": null,
    "posted_at": "2026-11-13T22:14:16.387Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "Lambda, The Superintelligence Cloud, is a leader in AI cloud infrastructure serving tens of thousands of customers. Our customers range from AI researchers to e…",
    "apply_url": "https://jobs.ashbyhq.com/Lambda/7ea9a4fa-7b86-4464-a921-24f50f6c9879/application",
    "url": "https://jobs.ashbyhq.com/Lambda/7ea9a4fa-7b86-4464-a921-24f50f6c9879",
    "change_status": null,
    "first_seen_at": "2026-11-14",
    "last_seen_at": null,
    "scraped_at": "2026-11-14T03:31:47.837Z",
    "salary_source": "structured"
  },
  {
    "id": "ashby:canals:cd6c54e7-d6ee-4fe8-981f-bbabb80c3978",
    "ats": "ashby",
    "company": "canals",
    "company_name": null,
    "title": "Senior Product Manager",
    "department": "Product",
    "team": "Product",
    "location": "Denver",
    "locations": [
      "Denver",
      "New York",
      "San Francisco",
      "Seattle"
    ],
    "country": "United States",
    "workplace_type": "remote",
    "remote": true,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": null,
    "salary_max": null,
    "salary_currency": null,
    "salary_period": null,
    "salary_text": null,
    "posted_at": "2026-11-13T21:09:38.506Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "ABOUT CANALS\nCanals builds software for wholesale distributors, helping them operate more efficiently through automation and AI.\nOur customers are the companies…",
    "apply_url": "https://jobs.ashbyhq.com/canals/cd6c54e7-d6ee-4fe8-981f-bbabb80c3978/application",
    "url": "https://jobs.ashbyhq.com/canals/cd6c54e7-d6ee-4fe8-981f-bbabb80c3978",
    "change_status": null,
    "first_seen_at": "2026-10-23",
    "last_seen_at": null,
    "scraped_at": "2026-11-14T03:31:47.837Z",
    "salary_source": null
  },
  {
    "id": "ashby:astronomer:132a4732-ee65-4879-a445-98407aa26870",
    "ats": "ashby",
    "company": "astronomer",
    "company_name": null,
    "title": "Staff Product Manager",
    "department": "Engineering",
    "team": "Engineering",
    "location": "San Francisco or New York (Hybrid)",
    "locations": [
      "San Francisco or New York (Hybrid)"
    ],
    "country": null,
    "workplace_type": "hybrid",
    "remote": false,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": 230000,
    "salary_max": 300000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": null,
    "posted_at": "2026-11-13T20:53:59.170Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "Astronomer empowers data teams to bring mission-critical software, analytics, and AI to life and is the company behind Astro, the industry-leading unified DataO…",
    "apply_url": "https://jobs.ashbyhq.com/astronomer/132a4732-ee65-4879-a445-98407aa26870/application",
    "url": "https://jobs.ashbyhq.com/astronomer/132a4732-ee65-4879-a445-98407aa26870",
    "change_status": null,
    "first_seen_at": "2026-11-14",
    "last_seen_at": null,
    "scraped_at": "2026-11-14T03:31:47.837Z",
    "salary_source": "description"
  },
  {
    "id": "ashby:jobber:b47c8ae4-225b-46f5-a6aa-9f6c509a7f72",
    "ats": "ashby",
    "company": "jobber",
    "company_name": null,
    "title": "Senior Product Manager, New Starts",
    "department": "Product Management",
    "team": "Product Management",
    "location": "Toronto",
    "locations": [
      "Toronto",
      "Vancouver",
      "Kitchener-Waterloo",
      "Edmonton"
    ],
    "country": "Canada",
    "workplace_type": "hybrid",
    "remote": false,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": null,
    "salary_max": null,
    "salary_currency": null,
    "salary_period": null,
    "salary_text": null,
    "posted_at": "2026-11-13T19:45:40.873Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "ARE YOU A DYNAMIC PRODUCT MANAGER WITH A PASSION FOR IMPACTING SMALL BUSINESSES?\nThen Jobber might be the place for you! We’re looking for a Senior Product Mana…",
    "apply_url": "https://jobs.ashbyhq.com/jobber/b47c8ae4-225b-46f5-a6aa-9f6c509a7f72/application",
    "url": "https://jobs.ashbyhq.com/jobber/b47c8ae4-225b-46f5-a6aa-9f6c509a7f72",
    "change_status": null,
    "first_seen_at": "2026-11-14",
    "last_seen_at": null,
    "scraped_at": "2026-11-14T03:31:47.837Z",
    "salary_source": null
  },
  {
    "id": "ashby:perk:055f2ea6-abe2-446e-ad57-c9ab86db4892",
    "ats": "ashby",
    "company": "perk",
    "company_name": null,
    "title": "Senior Product Manager - Cards",
    "department": "Product",
    "team": "Product",
    "location": "Boston",
    "locations": [
      "Boston"
    ],
    "country": "United States",
    "workplace_type": null,
    "remote": null,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": 140000,
    "salary_max": 170000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": null,
    "posted_at": "2026-11-13T18:07:38.014Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "About Us\nPerk (formerly TravelPerk) is the intelligent platform for travel and spend management. Built to tackle the time-consuming, manual work that gets in th…",
    "apply_url": "https://jobs.ashbyhq.com/Perk/055f2ea6-abe2-446e-ad57-c9ab86db4892/application",
    "url": "https://jobs.ashbyhq.com/Perk/055f2ea6-abe2-446e-ad57-c9ab86db4892",
    "change_status": null,
    "first_seen_at": "2026-11-14",
    "last_seen_at": null,
    "scraped_at": "2026-11-14T03:31:47.837Z",
    "salary_source": "structured"
  },
  {
    "id": "ashby:snowflake:61d48d79-aeb8-45fb-806a-5b6e9f625de7",
    "ats": "ashby",
    "company": "snowflake",
    "company_name": null,
    "title": "Senior Product Manager - Openflow",
    "department": "Product Management",
    "team": "Product Management",
    "location": "US-WA-Bellevue",
    "locations": [
      "US-WA-Bellevue"
    ],
    "country": "United States",
    "workplace_type": null,
    "remote": null,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": 236000,
    "salary_max": 339200,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": null,
    "posted_at": "2026-11-13T18:02:57.656Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "At Snowflake, we are powering the era of the agentic enterprise. To usher in this new era, we seek AI-native thinkers across every function who are energized by…",
    "apply_url": "https://jobs.ashbyhq.com/snowflake/61d48d79-aeb8-45fb-806a-5b6e9f625de7/application",
    "url": "https://jobs.ashbyhq.com/snowflake/61d48d79-aeb8-45fb-806a-5b6e9f625de7",
    "change_status": null,
    "first_seen_at": "2026-11-14",
    "last_seen_at": null,
    "scraped_at": "2026-11-14T03:31:47.837Z",
    "salary_source": "structured"
  },
  {
    "id": "ashby:doss:51debdbb-6e1d-43a3-bbcd-f3d0b0e98012",
    "ats": "ashby",
    "company": "doss",
    "company_name": null,
    "title": "Senior/Staff Product Manager, Applications",
    "department": "Product",
    "team": "Product",
    "location": "San Francisco",
    "locations": [
      "San Francisco"
    ],
    "country": "USA",
    "workplace_type": "onsite",
    "remote": false,
    "employment_type": "FullTime",
    "experience_level": null,
    "salary_min": 180000,
    "salary_max": 260000,
    "salary_currency": "USD",
    "salary_period": "year",
    "salary_text": null,
    "posted_at": "2026-11-13T16:47:16.881Z",
    "updated_at": null,
    "requisition_id": null,
    "description": "ABOUT DOSS\nDOSS IS BUILDING AN OPERATIONS CLOUD FOR THE REAL WORLD.\nA modern, AI-native platform for physical product businesses to manage the flow of goods, do…",
    "apply_url": "https://jobs.ashbyhq.com/doss/51debdbb-6e1d-43a3-bbcd-f3d0b0e98012/application",
    "url": "https://jobs.ashbyhq.com/doss/51debdbb-6e1d-43a3-bbcd-f3d0b0e98012",
    "change_status": null,
    "first_seen_at": "2026-11-14",
    "last_seen_at": null,
    "scraped_at": "2026-11-14T03:31:47.837Z",
    "salary_source": "structured"
  }
]
```

### Related Actors

- [Career Site Jobs Search](https://apify.com/dododata/career-jobs-search): the same index across every career-page system we read, in one search.
- [Ashby Jobs Scraper](https://apify.com/dododata/ashby-jobs-scraper): one company's Ashby board, read live from its URL, with a monitor mode for new, changed and closed jobs.

### Price

**$2.50 per 1,000 jobs** on Apify's free plan, less on paid plans: $2.30 on Bronze, $2.10 on Silver, $2.00 on Gold and above. Any change is announced 14 days ahead through Apify, as its rules require, and applies to every user alike.

### Questions and feedback

Something missing, wrong or unclear? Open an Issue on this page: we answer within a day, and fixes usually ship within 48 hours. If the Actor saved you time, a short review here helps other people find it.

### Changelog

- 2026-11-14, v0.1: every number and sample row on this page measured again against the index of 14 November 2026 (53,738 Ashby jobs from 2,352 companies), the day the Actor went public; the Max rows note now says the per-company limit changes the prefilled search. No change to the search itself.
- 2026-11-12, v0.1: every number and sample row on this page measured again against the index of 12 November 2026 (53,654 Ashby jobs from 2,363 companies). No change to the search itself.
- 2026-10-29, v0.1: first build. Index of 52,899 Ashby jobs from 2,369 companies; measured on local runs against the live index on 29 October 2026.

# Actor input Schema

## `keywords` (type: `array`):

Keep Ashby jobs whose title has a word starting with one of these ("engineer" also finds "Engineering Manager"). Empty for every job.

## `excludeKeywords` (type: `array`):

Drop jobs whose title contains one of these whole words, for example senior or intern.

## `locations` (type: `array`):

Keep jobs whose location, country or workplace type contains one of these whole words: berlin, united kingdom, us, remote.

## `excludeLocations` (type: `array`):

Drop jobs whose location, country or workplace type names one of these places, by the same rule as Locations: "uk" also drops "United Kingdom", "remote" drops jobs marked remote.

## `remoteOnly` (type: `boolean`):

Keep only jobs the employer marks as remote.

## `postedWithinDays` (type: `integer`):

Keep jobs published in the last N days. With Time range also set, the narrower window wins. Empty for any date.

## `timeRange` (type: `string`):

Ashby jobs published in this window (or first seen by the index when a job carries no date). The index refreshes daily; for a daily feed use Last 3 days and keep ids you have not seen, since some boards date a job before our refresh reads it.

## `companies` (type: `array`):

Keep jobs from these companies only, by Ashby board name (the word after the domain in the company's job links, such as openai). Capitals, spaces and punctuation are ignored. A board name is not always the company's name.

## `excludeCompanies` (type: `array`):

Drop jobs from these companies, by Ashby board name.

## `onlyWithSalary` (type: `boolean`):

Keep only jobs that publish a pay range.

## `employmentTypes` (type: `array`):

Keep jobs whose employment type contains one of these: full-time, part-time, contract, intern, temporary. Every Ashby job states one.

## `seniority` (type: `array`):

Keep jobs whose title states one of these levels: "Senior Data Engineer" is senior, "Staff Engineer" lead, "Head of Sales" director. Read from the title words only, never guessed; most titles state no level, which "No level in the title" keeps.

## `workplaceTypes` (type: `array`):

Keep jobs the employer marks as remote, hybrid or on-site. About one Ashby job in nine states none; those are left out when this is set.

## `maxPerCompany` (type: `integer`):

At most this many jobs from one company while other companies also match, so a few very large boards (some are agencies reposting other companies' jobs) cannot fill a search. Empty: a tenth of Max rows, at least 2. 0: no limit, and the rows are then strictly the newest matching jobs; with a limit they are the newest of each company. Not applied when you name companies.

## `includeDescription` (type: `boolean`):

Fetch the full job text for the jobs returned, live from each career site. Turn off for faster, lighter rows.

## `maxItems` (type: `integer`):

Newest first, up to 5,000 per run; it is also your spend cap. The form starts at 100; a call through the API or an AI agent that leaves it out gets 20.

## Actor input object example

```json
{
  "keywords": [
    "product manager"
  ],
  "remoteOnly": false,
  "timeRange": "",
  "onlyWithSalary": false,
  "includeDescription": true,
  "maxItems": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "product manager"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("dododata/ashby-jobs-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["product manager"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("dododata/ashby-jobs-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "product manager"
  ],
  "maxItems": 100
}' |
apify call dododata/ashby-jobs-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dododata/ashby-jobs-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WKwDv5Vk7J8ZgCKW4/builds/gFuTkQchSujcjMMkO/openapi.json
