# YC Startup Jobs Scraper: Salary, Equity & Visa (`precious_bathmat/yc-startup-jobs-scraper`) Actor

Scrape every open job at Y Combinator startups: title, role, salary range, equity, visa sponsorship, experience, location and remote, plus company batch, size and industry. A startup hiring and pay report per run. No login, no API key.

- **URL**: https://apify.com/precious_bathmat/yc-startup-jobs-scraper.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.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.

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

## YC Startup Jobs Scraper: Salary, Equity & Visa

Scrape **every open job at Y Combinator startups** with no login and no API key: all ~1,500 hiring YC companies are checked on every run, and you get a **startup hiring and pay report**:

- **Every job**: title, role and specialty (backend, full stack, account executive ...), job type, location and remote, **salary range**, **equity range**, **visa sponsorship**, minimum experience, skills, posted date, link
- **Company on every row**: YC batch, one-liner, website, team size, industry, stage, top-company flag
- **Salary as numbers**: dollars, pounds, euros, rupees and more, hourly and monthly pay converted to a year
- **Filters**: keywords, roles, job type, locations, remote only, visa sponsorship only, minimum salary, maximum experience asked, YC batch ("W25", "S24"), industry, company region, top companies only, company search
- **Optional job details**: full description, interview process, exact posting date
- **Hiring report** over every matching job: salary by role, specialty and experience, equity, remote and visa share, top hiring startups, batches, industries and cities, highest-paid jobs

### What does this YC jobs scraper do?

```
YC startups · all open jobs · 6,352 jobs at 1,393 companies
 Salary shown on 80% · median $165,000 (middle half $122,500 – $200,000)
 Engineering $175,000 · Product $175,000 · Sales $130,000
 Equity offered on 31% of full-time jobs · 36% remote · 11% sponsor visas
```

1. Optionally enter **keywords**, **roles** and other job filters, or **company filters** like batch and industry.
2. The Actor finds every hiring YC company in YC's public directory and reads each one's jobs page.
3. You get **the newest matching jobs** (up to your maximum) and **one report over every match**.

```mermaid
flowchart LR
    A[Company filters<br/>batch, industry,<br/>region] --> B[YC company<br/>directory<br/>~1,500 hiring]
    B --> C[Each company's<br/>jobs page]
    D[Job filters<br/>keywords, role,<br/>visa, salary] --> C
    C --> E[Jobs<br/>salary, equity,<br/>visa, experience]
    C --> F[Report<br/>pay by role,<br/>equity, remote,<br/>top startups]
```

### Who is it for?

- **Engineers, designers, sales and ops people** looking at startups: every YC job with pay and equity in one sheet
- **International candidates**: filter to startups that **sponsor visas**
- **Recruiters and talent agencies**: which YC startups are hiring most, for which roles, at what pay
- **Founders and hiring managers**: benchmark salary and equity for a role against other YC companies
- **Investors and analysts**: hiring momentum by batch, industry and city across the YC portfolio

### What data do you get?

**Jobs** (dataset, one row per job)

| Field | What it tells you |
|---|---|
| `id`, `title`, `url`, `companyUrl` | The job and the company page |
| `role`, `specialty`, `jobType`, `skills` | Engineering / Sales / ..., the specialty, full-time / internship / contract |
| `location`, `city`, `isRemote` | Where, and whether remote is possible |
| `salaryText`, `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod`, `yearlySalaryMin`, `yearlySalaryMax` | Pay as listed and as a yearly amount |
| `equityMinPercent`, `equityMaxPercent` | Equity range |
| `visa`, `sponsorsVisa` | "Will sponsor", "US citizen/visa only" or "not required" |
| `minExperience`, `minExperienceYears` | Experience asked |
| `postedAt`, `postedAgo` | When it was posted |
| `company`, `batch`, `companyOneLiner`, `companyWebsite`, `companyTeamSize`, `companyIndustry`, `companySubindustry`, `companyStage`, `isTopCompany` | The startup |
| With **job details**: `description`, `interviewProcess` | The full ad |

**Hiring report** (`REPORT`, over every matching job)

| Field | What it tells you |
|---|---|
| `companiesChecked`, `companiesWithMatchingJobs`, `jobsMatched`, `jobsSaved` | Coverage |
| `jobsByRole`, `jobsBySpecialty` | What startups hire for |
| `yearlySalaryUsd`, `yearlySalaryUsdByRole`, `yearlySalaryUsdBySpecialty`, `yearlySalaryUsdByExperience` | Pay median and middle half (USD, internships excluded) |
| `equityFullTime` | Share of full-time jobs with equity, median top of range |
| `remotePercent`, `visaSponsorshipPercent`, `visa`, `experience` | Remote, visa and experience mix |
| `topHiringCompanies`, `jobsByBatch`, `jobsByIndustry`, `topCities`, `highestPaid` | Who, which batches, which industries, where, best-paid |

`REPORT_CSV` is a flat salary table by role, specialty and experience.

### Example: 17 October 2026

**Every open YC job**, no filters: **1,492 hiring companies checked, 6,352 jobs at 1,393 companies, 92 seconds**.

| Role | Jobs | Median salary (USD) | Middle half |
|---|---|---|---|
| Engineering | 2,910 | $175,000 | $145,000 – $205,000 |
| Operations | 1,380 | $163,500 | $113,750 – $225,000 |
| Sales | 828 | $130,000 | $92,500 – $190,000 |
| Marketing | 423 | $125,000 | $85,000 – $155,500 |
| Product | 245 | $175,000 | $141,250 – $204,375 |
| Design | 186 | $165,000 | $125,000 – $195,000 |

- **Experience pays**: new-grad-friendly jobs $150,000 median, "6+ years" $189,500.
- **Equity** is listed on 31% of full-time jobs (median top of range 0.75%).
- **36% of jobs allow remote** and **11% sponsor visas**. Engineering jobs that sponsor visas: 410 matches; 150 with full descriptions in 179 seconds.
- Most open roles: **Astranis (185), Legion Health (155), Whatnot (149), Zip (128)**.

### Pricing

**$0.002 per job saved**, **$0.001 per job with details** (only when details are on) and **$0.02 per hiring report**.

- Every open engineering job (about 2,900) with a report: about **$5.82**
- 500 newest jobs with a report: **$1.02**
- Just the report (save 1 job): **$0.022**

The report always covers every matching job, even when you save only a few.

### Good to know

- **All hiring companies are checked on every run**, so the report is the whole YC market for your filters; **Maximum jobs saved** only limits the rows you pay for.
- **Salaries** are the ranges startups list on YC. Hourly pay is converted at 2,080 hours a year, monthly at 12 months. About 1 in 5 jobs lists no salary.
- **Posting dates** are approximate ("about 1 month ago") unless job details are on, which gives the exact date.
- **Batches** take YC's short names ("W25", "S24", "F24") or full names ("Summer 2024").
- **Privacy**: founder and hiring-manager names are not collected.
- Data comes from **Y Combinator's public company directory and job pages**. **Not affiliated with Y Combinator.**

### Input

| Field | Meaning |
|---|---|
| **Keywords** | Words in the title, specialty or skills; empty = every job |
| **Roles** | Engineering, Sales, Operations, Product, Marketing, Design, Recruiting & HR, Support, Science, Finance, Legal |
| **Job type** | Full-time, internship, contract |
| **Locations** | Words in the job location ("San Francisco", "London") |
| **Remote jobs only**, **Visa sponsorship only** | Switches |
| **Minimum salary (USD a year)**, **Maximum experience asked** | Pay and seniority filters |
| **YC batches**, **Industries**, **Company regions**, **Top YC companies only**, **Company search** | Which startups |
| **Maximum jobs saved** | 1 to 50,000 (default 500), newest first |
| **Job details** | Off by default |
| **Hiring report** | On by default |

### Integrations

Export to JSON, CSV, Excel or Google Sheets, or connect through the Apify API, webhooks, Make, Zapier and n8n. **Schedule it weekly** to track startup hiring and pay over time.

# Actor input Schema

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

Optional words to match in the job title, specialty or skills, e.g. "backend", "founding engineer", "account executive". Empty = every job.

## `roles` (type: `array`):

Optional: only these roles.

## `jobTypes` (type: `array`):

Optional: only these job types.

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

Optional words to match in the job location, e.g. "San Francisco", "New York", "London", "Bengaluru".

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

Only jobs whose location includes remote.

## `visaSponsorshipOnly` (type: `boolean`):

Only jobs where the startup says it will sponsor a visa.

## `minSalaryUsd` (type: `integer`):

Only jobs paying up to at least this much (hourly and monthly pay converted to a year).

## `maxExperienceYears` (type: `integer`):

Only jobs asking for at most this many years, e.g. 0 for new-grad jobs.

## `batches` (type: `array`):

Optional batches, e.g. "W25", "S24", "Summer 2023".

## `industries` (type: `array`):

Optional industries as YC names them, e.g. "B2B", "Fintech", "Healthcare", "Developer Tools", "Consumer".

## `regions` (type: `array`):

Optional company regions as YC names them, e.g. "United States of America", "Europe", "India", "Remote", "Fully Remote".

## `topCompaniesOnly` (type: `boolean`):

Only companies YC marks as top companies.

## `companyQuery` (type: `string`):

Optional search over company names and descriptions, e.g. "AI agents" or "payments".

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

Most jobs to save, newest first (1 to 50,000). The report still covers every matching job.

## `includeDetails` (type: `boolean`):

Open each saved job's page for the full description, the interview process and the exact posting date. Charged per job.

## `includeReport` (type: `boolean`):

One report over every matching job: jobs by role and specialty, salary median and range by role, specialty and experience, equity, remote and visa sponsorship share, top hiring startups, batches, industries and locations, highest-paid jobs.

## Actor input object example

```json
{
  "keywords": [
    "engineer"
  ],
  "remoteOnly": false,
  "visaSponsorshipOnly": false,
  "topCompaniesOnly": false,
  "maxJobs": 500,
  "includeDetails": false,
  "includeReport": true
}
```

# Actor output Schema

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

One row per job: title, role, specialty, salary and equity range, visa, experience, location, remote, company batch, size and industry, links.

## `report` (type: `string`):

Over every matching job: salary by role, specialty and experience, equity, visa and remote share, top hiring startups, batches, industries.

## `reportCsv` (type: `string`):

Salary median and range per role, specialty and experience level.

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

Companies checked, requests, problems and the limits of the data.

# 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": [
        "engineer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/yc-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 = { "keywords": ["engineer"] }

# Run the Actor and wait for it to finish
run = client.actor("precious_bathmat/yc-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 '{
  "keywords": [
    "engineer"
  ]
}' |
apify call precious_bathmat/yc-startup-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,precious_bathmat/yc-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/IyPOZVs8Xy7juvicj/builds/IoCYDD3XLXqjuBOpA/openapi.json
