# Startup Jobs Scraper - Ashby Startup Career Pages (`firsthand-data/startup-jobs-scraper`) Actor

Jobs straight from the career pages of 2,344 startups that hire through Ashby, plus any startup you add: title, team, location, remote flag, salary as numbers, dates, links and description. Only-new mode returns new and closed jobs since your last run. No login, no proxy.

- **URL**: https://apify.com/firsthand-data/startup-jobs-scraper.md
- **Developed by:** [Firsthand Data](https://apify.com/firsthand-data) (community)
- **Categories:** Jobs, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 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

## Startup Jobs Scraper - Ashby Startup Career Pages

**Startup jobs straight from the career pages of 2,344 startups: 44,624 open jobs and about 660 new
a day on October 20, 2026.** The startups hire through Ashby, the applicant tracking system popular
with venture-backed startups. These are not reposts from job boards: every job comes from the
startup's own hiring system, so it is live, complete and links to the real job page. Pick the
ready-made list or add your own startups, filter by title words, locations and remote, and get
titles, teams, locations, salaries as numbers, dates, links and full descriptions.

**Example output.** The prefilled run on October 20, 2026 returned 158 open jobs of Linear, PostHog,
n8n and Lovable for about $0.32. Three of them:

| Company | Title | Location | Workplace | Salary | Published |
|---|---|---|---|---|---|
| Lovable | Solutions Architect, San Francisco | San Francisco | onsite | 181,000-246,500 USD | 2026-10-13 |
| n8n | Enterprise Sales Leader West Coast | California | remote | 177,500-228,500 USD | 2026-07-31 |
| Linear | Senior / Staff Product Engineer | Europe | remote | | 2022-01-22 |

**Try it free in a minute.** Click **Try for free**, then **Start**, and see the jobs of the four
prefilled startups in seconds. The Apify free plan needs no credit card, and its $5 of credit every
month covers about 2,500 jobs at $2 per 1,000. Then pick **Startups on Ashby** in **Ready-made
company lists** and narrow it down with title words, locations or **Remote jobs only**.

**Want the new startup jobs every morning?**
[Job Monitor](https://apify.com/firsthand-data/career-page-job-monitor) watches the same 2,344
startups and returns only the new jobs: the first run brings the last 7 days, and a quiet day costs
nothing. Also from Firsthand Data:
[Remote Jobs Scraper](https://apify.com/firsthand-data/remote-jobs-scraper) for 1,040 remote-first
companies and [Career Page Jobs Scraper](https://apify.com/firsthand-data/career-page-jobs-scraper)
for any company by board, link or website.

### Why use this startup jobs scraper?

- ✅ 2,344 startups, checked by us and refreshed monthly: 44,624 open jobs on October 20, 2026
- ✅ Straight from startup career pages: no reposts, no stale copies, direct links to the job
- ✅ Remote, hybrid or on-site on every job where the startup says it: 12,803 remote jobs at 1,407 startups
- ✅ Salary parsed into minimum, maximum and currency: 52% of the jobs publish a range
- ✅ New and closed jobs between runs; closed rows are free
- ✅ Add any startup on Ashby, Greenhouse, Lever or SmartRecruiters by board name, link or website
- ✅ Official public job board APIs: no login, no API key, no proxies, no browser
- ✅ No personal data: recruiter fields are dropped, emails and phone numbers are removed from descriptions
- 💲 **$2 per 1,000 jobs.** The Apify free plan ($5 of credit every month) covers about 2,500 jobs.

### What can you do with startup job data?

- **Startup job boards and newsletters.** Build a daily feed of new startup jobs with direct links.
  Only-new mode also tells you which jobs closed, so you can expire them.
- **Job seekers and career coaches.** Watch roles in your field at two thousand startups the day
  they are posted, with the salary range when the startup publishes it.
- **Recruiters and agencies.** See which startups are hiring, for which roles and where.
- **Investors and market research.** Hiring is a growth signal: a startup that opens ten sales roles
  is scaling. Compare roles, pay ranges and locations across the startup market.
- **AI agents.** Let Claude, Cursor or any MCP client answer "which AI startups hire product
  designers in London?" with live data.

### How to scrape startup jobs

1. Click **Try for free**. The Apify free plan needs no credit card.
2. In **Ready-made company lists**, pick **Startups on Ashby**. Or keep the four prefilled startups
   for a quick test.
3. Optionally add filters: words in the job title (`engineer`, `designer`, `sales`), locations
   (`United States`, `London`, `Germany`) and **Remote jobs only**.
4. Click **Start**. Download the results as JSON, CSV or Excel, or read them through the Apify API.

The form comes prefilled with four startups: Linear, PostHog, n8n and Lovable. On October 20, 2026
they had 158 open jobs (71 remote, 25 with a salary range): about $0.32 for the run.

### Get only new startup jobs every morning

1. Set **What to return** to **Only new and closed since the last run** and give the watch a
   name, for example `startup-engineering`.
2. Run it once. The first run returns all matching jobs as new: this is your starting point.
3. Click **Save as new task**, open **Schedules** and run the task every day (or every hour).
4. In the task's **Integrations** tab, send the results to Slack, email, Zapier, Make or n8n
   (and from there to Google Sheets, Airtable or your job board), or to your own webhook.

Every later run returns only jobs that are new (`changeStatus: "new"`) and jobs that disappeared
from the board (`changeStatus: "closed"`). Closed rows are free, and a quiet day costs nothing.
Use a separate watch name for each feed.

### The startup list

| List | Who is in it | Companies | Open jobs |
|---|---|---|---|
| Startups on Ashby | companies that hire through Ashby, an applicant tracking system popular with venture-backed startups, with 1 to 300 open jobs | 2,344 | 44,624 on October 20, 2026 |

The list includes Linear, Supabase, Ramp, Vanta, Cursor, ElevenLabs, Perplexity, PostHog, n8n,
Lovable and two thousand more. We rebuild it every month from the live job boards, so startups
that stop hiring drop out and new ones come in.

What the whole list returned on October 20, 2026 (by words in the title and location):

| Jobs with... | Jobs | Remote |
|---|---|---|
| engineer, developer, DevOps or SRE in the title | 14,413 | 3,436 |
| sales, account executive, business development, SDR or BDR | 5,325 | 1,871 |
| data, analytics, machine learning or AI | 3,999 | 1,260 |
| marketing, growth, SEO or content | 2,572 | 830 |
| product manager or designer | 2,219 | 683 |
| operations | 1,864 | 427 |
| customer success or support | 1,374 | 559 |
| recruiting, talent or people | 1,292 | 286 |
| finance, accounting or payroll | 949 | 270 |
| location names the United States | 26,583 | |
| Europe (the UK, Germany, France, Spain and more) | 9,354 | |
| United Kingdom | 3,811 | |
| Canada | 2,000 | |
| Latin America | 1,354 | |
| India | 1,015 | |

A job can match more than one row. 4,622 jobs were published in the 7 days before October 20, 2026:
about 660 new startup jobs a day. The whole list took less than three minutes.

A whole list returns many jobs: running it once without filters costs about $89. To pay less,
add title words, locations or **Remote jobs only**, use only-new mode, or set **Maximum cost per
run**. Example: the list with the title word `engineer` returned 14,413 jobs (about $28.80).
Switch that to only-new mode and schedule it daily: you get a feed of new startup engineering jobs.

### What data do you get?

| Field | Example | Notes |
|---|---|---|
| `company` | n8n | name from the job board |
| `title` | Enterprise Sales Leader West Coast | |
| `department`, `team` | Sales | where the board gives it |
| `location`, `city`, `region`, `country` | California | `allLocations` keeps every location of the job |
| `workplaceType` | remote | `remote`, `hybrid`, `onsite` or `unknown` |
| `employmentType` | full_time | where the board gives it |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | 177500, 228500, USD | from salary fields or the description text |
| `salaryText` | original salary text | |
| `publishedAt`, `updatedAt` | 2026-07-31T09:12:44.000Z | |
| `url`, `applyUrl` | link to the job on the startup's job board | |
| `description` | plain text | emails and phone numbers removed |
| `id`, `source`, `board`, `sourceJobId` | ashby:n8n:6f1c... | stable id for de-duplication |
| `changeStatus` | new, closed or empty | only in only-new mode |
| `scrapedAt` | time of the run | |

Six rows from the prefilled run on October 20, 2026:

| Company | Title | Location | Workplace | Salary | Published |
|---|---|---|---|---|---|
| Lovable | Solutions Architect, San Francisco | San Francisco | onsite | 181,000-246,500 USD | 2026-10-13 |
| Lovable | Product Partnership Engineer | New York City | onsite | 199,000-271,000 USD | 2026-09-08 |
| n8n | Enterprise Sales Leader West Coast | California | remote | 177,500-228,500 USD | 2026-07-31 |
| n8n | Senior Product Engineer (TS/NodeJS/Vue) | Berlin Office | remote | 72,800-144,400 EUR | 2026-03-04 |
| Linear | Senior / Staff Fullstack Engineer | Europe | remote | | 2021-04-27 |
| Linear | Senior / Staff Product Engineer | Europe | remote | | 2022-01-22 |

Empty cells are values the startup does not publish. Some startups keep evergreen jobs open for
years: `publishedAt` shows when the job was first posted.

### How much does it cost to scrape startup jobs?

- **$2 per 1,000 jobs** (pay per event). Apify platform usage is included in the price.
- **Free:** closed-job rows, companies without jobs, companies that are not found, errors.
- In only-new mode the first run returns all matching jobs (your starting point); later runs return
  only new ones.
- The Apify free plan gives $5 of credit every month: about 2,500 jobs.
- Set **Maximum cost per run** in the run options: the scraper stops before it goes over your limit.

| What you run | Jobs | Cost |
|---|---|---|
| The prefilled input (4 startups) | 158 | about $0.32 |
| Remote jobs only, the whole list, once | 12,803 | about $25.60 |
| The list with the title word `engineer`, once | 14,413 | about $28.80 |
| The whole list, once | 44,624 | about $89 |
| The `engineer` feed every day in only-new mode, at about 180 new jobs a day | about 5,400 a month | about $11 a month |

### Input

#### Companies

Use the ready-made list, your own startups, or both. Three ways to add a company:

| You write | Example | What happens |
|---|---|---|
| `system:board` | `ashby:linear`, `greenhouse:yourstartup`, `lever:yourstartup`, `smartrecruiters:yourstartup` | read directly |
| Job board link | `https://jobs.ashbyhq.com/linear` | read directly |
| Company website | `linear.app` | the scraper looks for a job board link on the website; if there is none, it tries the domain name as a board name and says so in the run summary |

The same company written twice (in any letter case, as different links or also in the list) is
read and charged once.

#### Example input

```json
{
  "companyLists": ["startups"],
  "companies": ["ashby:linear"],
  "mode": "changes",
  "watchName": "startup-design-europe",
  "includeKeywords": ["designer", "product manager"],
  "excludeKeywords": ["intern"],
  "locations": ["Europe", "United Kingdom", "Germany"],
  "remoteOnly": false,
  "includeDescription": true
}
```

#### Run summary

Each run saves a summary to the key-value store record `OUTPUT`: for every company the system,
board, status (`ok`, `not_found` or `error`), the number of jobs and a note when something needs
your attention. A company that fails never stops the run.

### Which job boards are supported?

| System | Board link | Notes |
|---|---|---|
| Ashby | `jobs.ashbyhq.com/{board}` | the whole startup list; unlisted jobs are skipped |
| Greenhouse | `boards.greenhouse.io/{board}`, `job-boards.greenhouse.io/{board}` | salary is often found in the description text |
| Lever | `jobs.lever.co/{board}` | salary range where the company publishes it |
| SmartRecruiters | `jobs.smartrecruiters.com/{board}` | public jobs only; each description is a separate request |

Job boards hosted in the EU (`eu.greenhouse.io`, `jobs.eu.lever.co`) are not supported yet.

### Use it with AI agents (MCP)

This scraper works as a tool for AI agents through the Apify MCP server: Claude, Cursor, VS Code,
n8n and other MCP clients. Add this URL as a remote MCP server and sign in to Apify when your
browser opens:

```
https://mcp.apify.com?tools=firsthand-data/startup-jobs-scraper
```

Then ask, for example, "list new data engineer jobs at startups in Europe". Turn off **Include
job description** to keep answers short.

### Integrations

- **Slack and email:** the **Integrations** tab of a run or a saved task.
- **Zapier, Make, n8n:** start on "Run succeeded" and read the dataset; from there send jobs to
  Google Sheets, Airtable, your job board or any other app.
- **Webhooks:** your endpoint gets a call when a run finishes.
- **API:** JavaScript, Python and CLI examples are on the **API** tab of this page.

### Fair use and data quality

- Reads only the official public job board APIs that these systems provide for career pages.
- Keeps to each source's rules: SmartRecruiters at most about 9 requests per second (their limit
  is 10), Lever job pages at most one request per second (their robots.txt), company websites
  only where robots.txt allows.
- No logins, no proxies, no hidden or unlisted jobs.
- No personal data: recruiter names and photos are not collected; emails and phone numbers are
  removed from descriptions.
- Results and the only-new memory stay in your own Apify account. We do not keep copies.
- Not affiliated with Ashby, Greenhouse, Lever or SmartRecruiters, or with the startups in the
  list. Their names are trademarks of their owners.

### FAQ

**What counts as a startup?**
A company that hires through Ashby, an applicant tracking system popular with venture-backed
startups, and has 1 to 300 open jobs. We do not use funding data, so the rule is the hiring
system and the size: companies with more than 300 open jobs are left out, they are usually large
companies rather than startups. Add or skip any company with **Companies** and the filters.

**Do I need an API key or a proxy?**
No. All four systems publish open jobs through public job board endpoints.

**How is this different from startup job boards?**
Job boards repost jobs, often late and often without salary. This scraper reads the startups' own
career pages, so you get every job the moment it is published, with the original link, salary
range and full description.

**Can I add startups that are not in the list?**
Yes. Add them in **Companies**: any company on Ashby, Greenhouse, Lever or SmartRecruiters.

**What counts as a new job?**
A job that the watch has not returned before. The same job is never returned as new twice.

**What if I leave Companies empty and pick no list?**
The run does not fail. With title words or locations it searches the whole startup list; without
any filter it runs the four sample startups (about 160 jobs), so an empty call through the API or
an AI agent never costs the price of the whole list.

**How fresh is the data?**
Live: the scraper reads each job board at the moment you run it.

### Changelog and support

- **0.1 (October 2026):** first public version: 2,344 startups on Ashby, only-new mode, title,
  location and remote filters.
- We add output fields; we do not rename or remove them. Price changes are announced in advance.
- Questions, bugs or a startup you want in the list: open an issue on the **Issues** tab. We
  usually answer within 1-3 days.
- If this scraper saved you time, a short review helps other people find it. Thank you!

# Actor input Schema

## `companyLists` (type: `array`):

Pick "Startups on Ashby" to scan all 2,344 startups that hire through Ashby (about 44,600 open jobs on Oct 20, 2026). The list is checked by us and refreshed monthly. A whole list returns many jobs: add title filters, use "Only new and closed" or set the maximum cost per run to control the price.

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

Add your own startups, one per line: "system:board" (ashby:linear, ashby:posthog), a job board link (https://jobs.ashbyhq.com/linear) or the company website (linear.app) - the scraper finds the job board itself. Startups on Greenhouse, Lever and SmartRecruiters work too.

## `mode` (type: `string`):

All open jobs every run, or only jobs that are new or closed since the previous run with the same watch name (you pay only for new jobs; closed rows are free).

## `watchName` (type: `string`):

Used only with "Only new and closed": the robot remembers what it already returned under this name. Use a different name for each feed, e.g. "startup-engineering".

## `includeKeywords` (type: `array`):

Keep only jobs whose title contains at least one of these words, e.g. "engineer", "designer", "sales". Case-insensitive. Empty - keep all jobs.

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

Drop jobs whose title contains any of these words, e.g. "intern", "senior".

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

Keep only jobs whose location text, region or country contains one of these, e.g. "United States", "London", "Germany".

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

Keep only jobs the startup marks as remote (29% of the list on Oct 20, 2026).

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

Plain-text description without emails and phone numbers. Turn off for shorter results on big lists.

## Actor input object example

```json
{
  "companies": [
    "ashby:linear",
    "ashby:posthog",
    "ashby:n8n",
    "ashby:lovable"
  ],
  "mode": "all",
  "watchName": "default",
  "remoteOnly": false,
  "includeDescription": true
}
```

# Actor output Schema

## `jobs` (type: `string`):

Every job returned by this run: company, title, department, location, workplace type, salary, dates, links, description and change status (new or closed in only-new mode).

## `summary` (type: `string`):

For every company: job board system, board name, status (ok, not_found or error), number of jobs and a note when something needs attention.

# 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": [
        "ashby:linear",
        "ashby:posthog",
        "ashby:n8n",
        "ashby:lovable"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("firsthand-data/startup-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 = { "companies": [
        "ashby:linear",
        "ashby:posthog",
        "ashby:n8n",
        "ashby:lovable",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("firsthand-data/startup-jobs-scraper").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": [
    "ashby:linear",
    "ashby:posthog",
    "ashby:n8n",
    "ashby:lovable"
  ]
}' |
apify call firsthand-data/startup-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,firsthand-data/startup-jobs-scraper"
        }
    }
}
```

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/oMNmkQsmfw47PKit0/builds/MIyDCmGGlai4iZhKx/openapi.json
