# Ashby Jobs Scraper · Job Board Postings, Teams & Compensation (`reapx/ashby-jobs-scraper`) Actor

Scrape Ashby job board listings across tech and high-growth companies. Extract job titles, departments, teams, employment types, locations, remote status, published dates, application URLs, and full salary/compensation tiers. Export clean JSON or CSV.

- **URL**: https://apify.com/reapx/ashby-jobs-scraper.md
- **Developed by:** [Tarek Etman](https://apify.com/reapx) (community)
- **Categories:** Jobs, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.30 / 1,000 job posting returneds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

![reapX — public sources in, addressable records out](https://reapx.dev/reapx.gif)

## Ashby Jobs Scraper · Job Board Postings, Teams & Compensation

The **Ashby Jobs Scraper** extracts public job postings, hiring team structures, locations, employment types, and detailed compensation tiers directly from company Ashby job boards. Designed for recruitment intelligence, compensation benchmarking, market research, and talent acquisition teams looking to monitor job board listings without browser automation or API keys.

> Maintained by **reapX**. Every row cites the Apify run that produced it — nothing is
> inferred, modelled or filled in, and a field absent from the source is absent from the row.
> The extracted archive for this source is browsable at
> [reapx.dev/data/ashby-jobs-scraper/](https://reapx.dev/data/ashby-jobs-scraper/) and mirrored as an open dataset on
> [Hugging Face](https://huggingface.co/datasets/reapxdev/ashby-jobs-scraper) and
> [Kaggle](https://www.kaggle.com/datasets/reapxdev/ashby-jobs-scraper). Questions: reapxdev@proton.me

### Features

- **Multi-Organization Extraction**: Scrape open roles across multiple companies in a single run (e.g., Notion, Ramp, Linear, OpenAI, Sentry).
- **Salary & Compensation Tiers**: Extract full compensation ranges, min/max salary numbers, currency codes, and equity indicators.
- **Team & Department Hierarchy**: Capture department names, internal team groupings, and workplace models (Remote, Hybrid, Onsite).
- **Structured JSON & CSV Output**: Standardized schema designed for automated pipelines, entity indexing, and LLM processing.
- **Fast HTTP Client**: Clean API integration operating over HTTP with zero browser overhead for maximum speed and minimal resource usage.

### How to Scrape Ashby Job Boards

1. **Provide Organization Slugs**: Pass a list of company slugs (e.g. `["notion", "ramp", "linear", "openai"]`).
2. **Enable Compensation Data**: Set `includeCompensation` to `true` to pull salary tiers and compensation summaries.
3. **Set Max Jobs Limit**: Cap total job postings per run to match your budget and analysis scope.
4. **Run Scraper & Export**: Execute the scraper and download results as JSON, CSV, or Excel.

### Input Configuration Example

```json
{
  "organizations": ["notion", "ramp", "linear", "openai"],
  "includeCompensation": true,
  "maxJobs": 1000
}
```

### Output Data Schema Example

```json
{
  "companyName": "Ramp",
  "orgSlug": "ramp",
  "jobId": "5f7a903e-36e4-492c-ac09-f2745d717daa",
  "title": "Senior Software Engineer, Core Systems",
  "department": "Engineering",
  "team": "Core Systems",
  "employmentType": "FullTime",
  "location": "New York, NY",
  "isRemote": true,
  "workplaceType": "Hybrid",
  "publishedAt": "2026-04-02T21:00:55.755Z",
  "isListed": true,
  "jobUrl": "https://jobs.ashbyhq.com/ramp/5f7a903e-36e4-492c-ac09-f2745d717daa",
  "applyUrl": "https://jobs.ashbyhq.com/ramp/5f7a903e-36e4-492c-ac09-f2745d717daa/application",
  "compensationSummary": "$211.4K – $290.6K • Offers Equity",
  "salaryMin": 211400,
  "salaryMax": 290600,
  "salaryCurrency": "USD",
  "descriptionPlain": "Ramp is the financial operations platform designed to save businesses time and money..."
}
```

### ❓ FAQ

#### What is an Ashby organization slug?

An Ashby organization slug is the company identifier found in their public job board URL (for example, in `https://jobs.ashbyhq.com/notion`, the slug is `notion`).

#### Does this scraper require login or API keys?

No, the scraper accesses publicly available job board data directly without requiring user credentials, cookies, or Ashby API tokens.

#### How is compensation data formatted?

When compensation is published by the hiring company, the scraper extracts both formatted text summaries (`$211.4K – $290.6K • Offers Equity`) and numeric values (`salaryMin`, `salaryMax`, `salaryCurrency`) for straightforward quantitative benchmarking.

***

Unofficial - not affiliated with Ashby. Collects public data only. reapx. Contact reapxdev@proton.me.

### 🧪 Example input

A real, runnable configuration — this is an actual input this Actor has run with.

```json
{
  "organizations": [
    "notion",
    "ramp",
    "linear",
    "sentry"
  ],
  "includeCompensation": true,
  "maxJobs": 1000
}
```

### 📄 Sample output

One real row from a real run of this Actor, unedited.

```json
{
  "companyName": "Notion",
  "orgSlug": "notion",
  "jobId": "05e14247-17c4-4e98-9a13-53828a4e2f13",
  "title": "Business Development Representative, New York",
  "department": "Early Career",
  "team": "Early Career",
  "employmentType": "FullTime",
  "location": "New York, New York",
  "isRemote": true,
  "workplaceType": "Hybrid",
  "publishedAt": "2026-04-02T21:00:55.755+00:00",
  "isListed": true,
  "jobUrl": "https://jobs.ashbyhq.com/notion/05e14247-17c4-4e98-9a13-53828a4e2f13",
  "applyUrl": "https://jobs.ashbyhq.com/notion/05e14247-17c4-4e98-9a13-53828a4e2f13/application",
  "compensationSummary": "",
  "salaryMin": null,
  "salaryMax": null,
  "salaryCurrency": null,
  "descriptionPlain": "WHO WE ARE\n\nNotion is the collaborative AI workspace where teams and agents think together https://www.youtube.com/watch?v=vkpYpWfEK5s. We're building one place where your knowledge, projects, meetings, and AI tools live side by side, so work is faster, clearer, and less fragmented. Millions of individuals, small teams, and large companies run their work on Notion.\n\n\n\nNotinos (our employees) are customer zero in bringing this future of work to life. We care about craft, building things that last, and the belief that great work is still fundamentally human. Our goal isn’t to ship the next feature. Each and every team of Notinos is working to set the standard for how humans work together in the AI era. From building a business’s system of record to making and managing AI agents to automating away the busy work, we care deeply about giving our customers more time for their life’s work.\n\n\n\n\nABOUT US:\n\nNotion helps you build beautiful tools for your life’s work. In today's world of endless apps and tabs, Notion provides one place for teams to get everything done, seamlessly connecting docs, notes, projects, calendar, and email—with AI built in to find answers and automate work. Millions of users, from individuals to large organizations like Toyota, Figma, and OpenAI, love Notion for its flexibility and choose it because it helps them save time and money. \n\n \n\nIn-person collaboration is essential to Notion's culture. We require all team members to work from our offices on Mondays, Tuesdays, and Thursdays, our designated Anchor Days. Certain teams or positions may require additional in-office workdays.\n\n\n\n\nABOUT THE ROLE:\n\nWe're looking for a motivated early career sales professional with an entrepreneurial and building spirit to join our Outbound Sales Development team! As a member of the team, you'll be instrumental in helping define our outbound sales motion, meaningfully shape our future product, and drive business revenue all while having a blast doing it!\n\n\n\n\nWHAT YOU'LL ACHIEVE:\n\n - Work with our outbound sales team to experiment with pipeline generation tactics and strategic approaches\n\n - Identify and analyze target prospects based on market, firmographic, and product signals\n\n - Reach out to prospects via email, phone, and LinkedIn to educate them on our products\n\n - Experiment with different audiences, messaging, and channels to generate Enterprise opportunities\n\n - Conduct high-level discovery calls wit
```

### How it works

1. You set the filters below, or none at all.
2. The Actor calls the source's own public endpoint and pages through the results.
3. Every row is pushed to the dataset **as it is built**, not buffered to the end — so a
   run that hits its time limit still returns everything it collected up to that point.
4. You are charged per row returned, so the maximum-results field is also your cost cap.

### 💬 Your feedback

Found a bug, or need a field this does not return yet? Open an issue on the Actor's **Issues**
tab, or write to **reapxdev@proton.me**. Bugs get fixed and reasonable field requests get
added.

### ⚠️ Run outcomes and error handling

This Actor reports what happened in the run's **status message**, and it always keeps whatever it collected. These are the outcomes you can get and what each one means.

| Outcome | What it means |
|---|---|
| **Success** | Rows were returned and you were charged `job-posting` at $0.002 per row. |
| **No matches** | The source returned nothing for your filters. **Nothing is charged.** Widen the date window or drop a filter. |

#### What is guaranteed either way

- **Every row is pushed as it is built**, not buffered to the end of the run. Anything that buffers output loses everything to a timeout, a block or a migration; this does not.
- **A field absent from the source is absent from the row.** Nothing is inferred, modelled or filled in to make a row look complete.

# Actor input Schema

## `organizations` (type: `array`):

List of Ashby organization slugs to scrape (e.g. <code>notion</code>, ramp, linear, openai, sentry, vanta). Each task must specify multiple organizations.

## `includeCompensation` (type: `boolean`):

Whether to request compensation data and salary ranges from Ashby.

## `maxJobs` (type: `integer`):

Maximum total number of job postings to return across all specified organizations.<br><br>The higher the number, the longer the run takes and the more you are charged, because you pay per row returned.

## Actor input object example

```json
{
  "organizations": [
    "notion",
    "ramp",
    "linear"
  ],
  "includeCompensation": true,
  "maxJobs": 1000
}
```

# Actor output Schema

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

Every job posting found by this run, one row per item, in the default dataset.

# 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 = {
    "organizations": [
        "notion",
        "ramp",
        "linear"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("reapx/ashby-jobs-scraper").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 = { "organizations": [
        "notion",
        "ramp",
        "linear",
    ] }

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

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

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

```

## CLI example

```bash
echo '{
  "organizations": [
    "notion",
    "ramp",
    "linear"
  ]
}' |
apify call reapx/ashby-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=reapx/ashby-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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