# Ashby Job Scraper — VC-Backed Tech Startups | Salary Data (`bovi/ashby-job-scraper-vc-startups`) Actor

Scrape job postings from Ashby-powered career pages at well-known VC-backed startups — OpenAI, Ramp, Linear, Notion, Deel — via the official public API. Returns salary ranges, remote/hybrid/onsite, seniority, and parse\_confidence. No login, no proxy, no browser.

- **URL**: https://apify.com/bovi/ashby-job-scraper-vc-startups.md
- **Developed by:** [Vitalii Bondarev](https://apify.com/bovi) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.16 / 1,000 ashby job scraper — vc-backed tech startups | salary data

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?

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

## Ashby Job Scraper — VC-Backed Tech Startups | Salary Data | $1.50/1K

Scrape jobs from **VC-backed tech startups using Ashby**, with a curated default preset for recruiters, VCs, salary-benchmarking and comp benchmarking buyers, and hiring-intelligence pipelines.

The preset includes `ramp`, `linear`, `openai`, `notion`, and `deel`. All five Ashby boards were verified live:

- Ramp — https://jobs.ashbyhq.com/ramp
- Linear — https://jobs.ashbyhq.com/linear
- OpenAI — https://jobs.ashbyhq.com/openai
- Notion — https://jobs.ashbyhq.com/notion
- Deel — https://jobs.ashbyhq.com/deel

This actor uses the same official public posting API scraper as the original actor; the difference is the curated VC-backed-startup preset and buyer positioning, not new scraping logic or database-as-API behavior.

For recruiters, talent ops, and AI pipelines that need Ashby job data with structured salary ranges — directly from the official API.

**Pay per result — $1.50 / 1,000 jobs.** No API key. No login. No proxy required. Runs in Apify cloud.

**Scrape any Ashby HQ job board by company slug.** Get clean job postings with salary ranges, remote/hybrid/onsite classification, seniority, descriptions, and parse\_confidence — all from Ashby's official public posting API. No proxy, no login, no browser.

**The ONLY Ashby scraper that returns machine-readable `salary_min_usd` and `salary_max_usd` as integers** — not just a text string. Built for salary analysis, comp benchmarking, and LLM job-matching pipelines.

### What you get

Every job includes:

| Field | Example |
|---|---|
| `title` | "Senior Software Engineer" |
| `company` | "ramp" |
| `location` | "New York, NY (HQ)" |
| `secondary_locations` | \["Remote (US)", "Miami, FL"] |
| `remote_type` | `remote` / `hybrid` / `onsite` |
| `seniority` | `senior` / `mid` / `director` / ... |
| `salary` | "$211.4K – $290.6K" |
| `salary_min_usd` | 211400 |
| `salary_max_usd` | 290600 |
| `employment_type` | `full_time` / `contract` / `intern` |
| `department` | "Engineering" |
| `url` | jobs.ashbyhq.com link |
| `posted_at` | ISO-8601 timestamp |
| `description_text` | plain text |
| `description_html` | raw HTML |
| `parse_confidence` | 0.0–1.0 quality score |

### Why this actor

Most Ashby scrapers return just title + URL. This one is different:

- **Salary data** — Ashby's API returns structured compensation tiers with min/max integers. We expose both the human-readable string and the machine-readable `salary_min_usd` / `salary_max_usd` for direct filtering and analysis.
- **Full remote taxonomy** — `remote_type` (`remote|hybrid|onsite`) derived from the official `workplaceType` field plus `isRemote` flag, not guessed from text.
- **Secondary locations** — many Ashby jobs list multiple offices. We capture all of them in `secondary_locations`.
- **Seniority inference** — title-based regex engine covering 11 canonical levels: executive, vp, director, manager, principal, staff, lead, senior, mid, entry, intern.
- **Descriptions included by default** — Ashby returns full `descriptionHtml` + `descriptionPlain` in the list response. No extra per-job API calls.
- **parse\_confidence** — every record has a quality score (0.0–1.0) and a `warnings` list. If Ashby changes their API schema, your pipeline sees degraded confidence before it sees broken output.

### Usage

1. Find your company slug: go to the Ashby careers page → the slug is the identifier in the URL. For `jobs.ashbyhq.com/ramp` → slug is `ramp`.
2. Add slugs to the **Company slugs** input field.
3. Run — results appear in the dataset immediately as they are pushed.

#### Finding Ashby slugs

Any company using Ashby has a public job board at `https://jobs.ashbyhq.com/{slug}`. You can also find the slug by looking at their careers page URL on their main website.

Popular Ashby companies: `ramp`, `linear`, `openai`, `retool`, `rippling`, `benchling`, `vercel`, `figma`, `notion`, `loom`, `scale`, `anduril`, `brex`.

### Input

| Field | Default | Description |
|---|---|---|
| `companies` | `["ramp","linear","openai"]` | Ashby company slugs |
| `titleKeyword` | — | Filter by title substring |
| `locationKeyword` | — | Filter by location substring |
| `remoteOnly` | false | Return only remote jobs |
| `maxJobsPerCompany` | 50 | Cap per company (0 = unlimited) |
| `includeDescriptions` | true | Include full description text + HTML |
| `includeSalaryBreakdown` | true | Include `salary_min_usd`, `salary_max_usd`, `salary_currency` |

### Pricing

Pay per result (job posted to dataset). First jobs free on the Apify free plan.

**Worked example:** 3 companies × 50 jobs = 150 results = **$0.23**. 10 companies × 100 jobs = 1,000 results = **$1.50**.

### FAQ

**Do I need an API key or proxy?**
No. Ashby's Posting API is fully public — no auth, no IP restrictions, no proxy required.

**What output formats are available?**
JSON, JSONL, CSV, and Excel via the Apify dataset export, plus the Apify REST API.

**Can I run it on a schedule?**
Yes — use Apify Scheduler to refresh daily or hourly. Each run pushes the current open jobs; combine with your own dedup logic on `global_id`.

**What if a company returns 0 jobs?**
The actor logs a warning, records the slug in `failedCompanies`, and continues — the run never crashes. Check `OUTPUT.failedCompanies` in the key-value store for details.

### Technical notes

- **Source:** Ashby official Posting API (`api.ashbyhq.com/posting-api/job-board/{slug}?includeCompensation=true`)
- **No auth required** — Ashby job boards are fully public
- **Rate limits** — none observed; actor respects HTTP 429 with backoff
- **Reliability** — API-based (not DOM scraping) → no breakage from UI changes; `parse_confidence` signals any schema drift
- **No proxy required** — Ashby API has no IP restrictions

### Output schema

The dataset view shows the most useful fields. The full record also includes `global_id` (unique `ashby:{company}:{job_id}` identifier for deduplication), `apply_url`, `description_html`, `description_text`, `team`, and `scraped_at`.

### Vs competitor comparison

| Feature | This scraper | Typical Ashby scrapers |
|---|---|---|
| `salary_min_usd` / `salary_max_usd` (integers) | Yes | No (string only) |
| `secondary_locations` (multi-office) | Yes | No |
| `parse_confidence` score | Yes | No |
| Seniority (11 levels) | Yes | Rarely |
| Official Posting API (no DOM scraping) | Yes | Yes |
| Price | $1.50/1k | varies |

### Use with AI agents (MCP)

This actor is MCP-compatible. Use it as a data source in n8n, Make, or any LLM agent pipeline.

```
https://mcp.apify.com/?tools=bovi/ashby-job-scraper-vc-startups
```

The flat JSON schema with `global_id` (`ashby:<company>:<job_id>`) and `parse_confidence` makes it drop-in-ready for vector databases, RAG pipelines, and structured resume-matching workflows. Schema includes `salary_min_usd` / `salary_max_usd` as integers for direct salary-band filtering without regex. Need to cover Greenhouse, Lever, Recruitee, SmartRecruiters and Personio in the same pipeline? Use the flagship [Multi-ATS Job Scraper](https://apify.com/bovi/greenhouse-lever-ashby-job-scraper-vc-startups).

### Changelog

- **0.1** (2026-05-31) — Initial release. Full salary breakdown, remote\_type, seniority, secondary\_locations, parse\_confidence.

### Integrations

Built for recruiters and comp-benchmarking tools pulling structured salary ranges and job specs from Ashby-powered boards — the JSON/dataset output drops into the tools you already run, no glue code:

- **n8n / Make / Zapier** — trigger a run or pipe every new dataset item into 500+ apps (Google Sheets, Airtable, Slack, HubSpot, your database) with no code: [n8n](https://docs.apify.com/platform/integrations/n8n), [Make](https://docs.apify.com/platform/integrations/make), [Zapier](https://docs.apify.com/platform/integrations/zapier).
- **Webhooks** — fire your own endpoint the moment a run finishes, to push results straight into your pipeline ([docs](https://docs.apify.com/platform/integrations/webhooks)).
- **MCP server** — expose this actor as a tool to Claude, Cursor, or any [MCP client](https://mcp.apify.com) so an AI agent can pull this data mid-conversation ([guide](https://blog.apify.com/how-to-use-mcp/)).
- **API & SDKs** — fetch the dataset as JSON, CSV, or Excel through the Apify REST API or the Python / JS SDKs.

See all [Apify integrations](https://apify.com/integrations).

### More scrapers from our toolkit

Building a data pipeline? These actors pair well with this one — each runs on your own Apify account with the same pay-per-result pricing, no subscription:

- [Dice Jobs Scraper](https://apify.com/bovi/dice-jobs-scraper)
- [Glassdoor Scraper](https://apify.com/bovi/glassdoor-scraper)
- [Greenhouse Job Scraper](https://apify.com/bovi/greenhouse-job-scraper)
- [Greenhouse, Lever & Ashby Job Scraper](https://apify.com/bovi/greenhouse-lever-ashby-job-scraper-vc-startups)
- [Jobstreet Jobs Scraper](https://apify.com/bovi/jobstreet-jobs-scraper)
- [Lever Job Scraper](https://apify.com/bovi/lever-job-scraper)

Chain any of them together from the **Integrations** tab (the *Run succeeded* trigger) to build a multi-step workflow — one actor's output feeds the next.

# Actor input Schema

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

Ashby company slugs to scrape. The slug is the identifier in the careers URL: jobs.ashbyhq.com/{slug}. Example: for jobs.ashbyhq.com/ramp the slug is "ramp". Add one slug per line.

## `titleKeyword` (type: `string`):

Keep only jobs whose title contains this text (case-insensitive). Leave empty for no filter. Example: "engineer", "marketing".

## `locationKeyword` (type: `string`):

Keep only jobs whose location contains this text (case-insensitive). Leave empty for no filter. Example: "New York", "Remote".

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

When enabled, only jobs with remote\_type = "remote" are returned.

## `maxJobsPerCompany` (type: `integer`):

Maximum jobs to push per company after filtering. Set to 0 for no limit. Default 50 keeps trial runs cheap.

## `includeDescriptions` (type: `boolean`):

Return full job description text and HTML. Ashby includes descriptions in the list response — no extra API calls needed. Turn off for smaller, faster output.

## `includeSalaryBreakdown` (type: `boolean`):

In addition to the human-readable salary string, include salary\_min\_usd and salary\_max\_usd as integers for easy filtering and analysis.

## Actor input object example

```json
{
  "companies": [
    "ramp",
    "linear",
    "openai",
    "notion",
    "deel"
  ],
  "remoteOnly": false,
  "maxJobsPerCompany": 50,
  "includeDescriptions": true,
  "includeSalaryBreakdown": true
}
```

# Actor output Schema

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

Dataset containing Ashby Job Scraper records (title, company, location, remote\_type, seniority, salary, salary\_min\_usd, employment\_type, department, posted\_at, url, parse\_confidence).

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

// Run the Actor and wait for it to finish
const run = await client.actor("bovi/ashby-job-scraper-vc-startups").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 = { "companies": [
        "ramp",
        "linear",
        "openai",
        "notion",
        "deel",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("bovi/ashby-job-scraper-vc-startups").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 '{
  "companies": [
    "ramp",
    "linear",
    "openai",
    "notion",
    "deel"
  ]
}' |
apify call bovi/ashby-job-scraper-vc-startups --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bovi/ashby-job-scraper-vc-startups"
        }
    }
}

```

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/x857Q0D1LorPbE6uv/builds/SkxrMAJ8OTNDW0ooN/openapi.json
