# Y Combinator Jobs Scraper — Startup Jobs, Salary & Equity (`yugenox/yc-jobs-scraper`) Actor

Scrape startup jobs from Y Combinator's job board (Work at a Startup): title, company, YC batch, location, remote, salary range, equity, job type, role, experience, visa, skills, full description and company profile. Filter by role, location, keyword, salary, batch. No login.

- **URL**: https://apify.com/yugenox/yc-jobs-scraper.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** Jobs, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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

## Y Combinator Jobs Scraper: startup jobs with salary and equity

Scrape **startup jobs from Y Combinator's job board** (Work at a Startup on ycombinator.com/jobs): every open role at YC companies with the **salary range, equity range, YC batch, location, remote flag, job type, role and specialty, minimum experience, visa policy and skills**. Turn on **Include full details** to add the **full job description, interview process, exact posting date and the company profile** (website, team size, year founded, tags, LinkedIn, X). Search by role and location, filter by keyword, minimum salary, job type, batch and visa sponsorship, get **all** matching jobs with **Complete results**, and schedule it with **Only new jobs**. No login, no cookies, no account.

### What you get

| | |
|---|---|
| **Job** | Title, ycombinator.com job URL, apply link, job ID, job type (full-time, internship, contract, part-time), role (Engineering, Design, Product, Sales …) and specialty (Full stack, Backend, Machine learning …), minimum experience, skills |
| **Pay** | Salary range as written plus min / max, currency, period (year, month, hour) and the yearly equivalent; equity range plus min / max percent |
| **Place** | Location as written, each location separately, country codes, remote yes / no |
| **Company** | Name, YC batch (W24, S25, F25 …), one-liner, logo, YC company page; with company pages or full details also website, team size, year founded, HQ, tags, status, LinkedIn and X links, long description |
| **Details** (optional) | Full job description, interview process, exact posting date |
| **Visa** | The company's visa policy ("Will sponsor", "US citizen/visa only" …) |

### How to use it

1. Pick one or more **Roles** (Engineering, Design, Product, Sales, Marketing, Operations …) and one or more **Locations** (`Remote`, `San Francisco`, `New York`, `London`, `Bengaluru`, `Toronto`, `United States`, `Europe` …). Each role × location is one search. Leave both empty for every job on the board.
2. Optionally add a **Keyword** (`founding engineer`, `machine learning`, `rust`), a **Minimum yearly salary**, **Job types**, **YC batches** or **Visa sponsorship only**.
3. Set **Max jobs** and run.

You can also list **Companies** (`airbnb`, `https://www.ycombinator.com/companies/stripe`) to get every open job at each one, or paste Y Combinator job, company or job-list URLs.

#### The top 40 or everything

Y Combinator's own job pages show the **40–50 most active jobs** for each role or city; that's what a run returns first, in seconds. When your search needs more, **Complete results** (on by default) checks the jobs page of every hiring YC company (about 1,750) and keeps the jobs that match, so you get **all** open jobs for your search. A full check of the board takes about 5–10 minutes. With **Only new jobs** on, later runs skip jobs they already saved and don't even open companies with nothing new, so a daily scheduled run is quick and cheap.

#### Input examples

10 remote engineering jobs with the full description (the default example):

```json
{
  "roles": ["software-engineer"],
  "locations": ["Remote"],
  "maxItems": 10,
  "includeDetails": true
}
```

Every sales and marketing job in New York or San Francisco paying at least $120K a year:

```json
{
  "roles": ["sales-manager", "marketing"],
  "locations": ["New York", "San Francisco"],
  "minSalary": 120000,
  "salaryCurrency": "USD",
  "maxItems": 0
}
```

New founding-engineer roles at W25–F25 companies that sponsor visas, every day (schedule it daily):

```json
{
  "keyword": "founding engineer",
  "batches": ["W25", "P25", "S25", "F25"],
  "visaSponsorship": true,
  "onlyNew": true,
  "maxItems": 0
}
```

Every open job at a few companies:

```json
{
  "companies": ["airbnb", "stripe", "https://www.ycombinator.com/companies/accord"]
}
```

### Output example

One row per job (trimmed; with **Include full details**):

```json
{
  "jobId": "94311",
  "jobKey": "nova-credit/I1dQrYC",
  "title": "Senior Software Engineer",
  "url": "https://www.ycombinator.com/companies/nova-credit/jobs/I1dQrYC-senior-software-engineer",
  "companyName": "Nova Credit",
  "companyBatch": "S16",
  "companyOneLiner": "Bridging a world of consumer-permissioned credit data",
  "location": "Remote / New York, NY, US / San Francisco, CA, US / Remote (New York, NY, US; San Francisco, CA, US; …)",
  "countries": ["US", "CA"],
  "isRemote": true,
  "jobType": "Full-time",
  "role": "Engineering",
  "roleSpecialty": "Full stack",
  "salaryRange": "$184K - $219K",
  "salaryMin": 184000,
  "salaryMax": 219000,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "salaryMinAnnual": 184000,
  "salaryMaxAnnual": 219000,
  "equityRange": null,
  "minExperience": "6+ years",
  "visa": "US citizen/visa only",
  "skills": ["Python"],
  "postedAgo": "6 months",
  "lastActiveAgo": "1 day",
  "postedAt": "2026-05-05T23:56:54.000Z",
  "description": "**WHO WE ARE**\n\nAt Nova Credit, we're on a mission to power financial inclusion globally …",
  "interviewProcess": "1. First Screen with a Recruiter - 30 minutes \n2. Coding Challenge - 60 minutes …",
  "companyWebsite": "http://www.novacredit.com/",
  "companyLinkedinUrl": "https://www.linkedin.com/company/nova-credit-inc./",
  "companyTeamSize": 100,
  "companyYearFounded": 2016,
  "companyLocation": "New York City, NY",
  "companyTags": ["Fintech", "Data Science"],
  "detailsIncluded": true,
  "searchQuery": "Engineering jobs in Remote",
  "source": "listing",
  "scrapedAt": "2026-10-29T13:40:13.714Z"
}
```

Every row has the same columns; a value the job doesn't state is `null`.

### Pricing

Pay per result, no subscription:

- **$1.00 per 1,000 jobs** saved ($0.001 per job).
- **+$0.50 per 1,000 jobs** with **Include full details** ($0.0005 per job whose own page was read: description, interview process, posting date, company profile). A pasted job URL always comes with details.
- **$0.05 per 1,000 pages checked** that gave no new matching job ($0.00005 per page). This only adds up with **Complete results** on a narrow search: checking all ~1,750 company pages without a single match costs about $0.09.
- **$0.002 per run** (start fee).

So the default example (10 jobs with details) costs about $0.017, and 1,000 jobs without details about $1.00. Jobs skipped by **Only new jobs**, pages that could not be read and jobs taken down mid-run are never charged. You never pay more than the max charge you set for the run.

### Use cases

- **Startup job search and alerts**: a daily run with **Only new jobs** for your role, city and salary floor.
- **Recruiting and talent sourcing**: see which YC companies are hiring for which roles, at what pay and equity.
- **Sales prospecting with hiring signals**: companies hiring sales, support or engineering leaders are buying; the company profile gives website, size and LinkedIn.
- **VC and market research**: hiring volume, salary bands and equity by batch, role and location.
- **Job boards and newsletters**: feed YC startup jobs into your own site.

### Tips

- **Locations**: YC has pages for ~145 places; any other place (e.g. `Nairobi`) still works with **Complete results**, by matching each job's location text. `Remote` means jobs that can be done remotely.
- **City pages mix roles**: YC pads a city page with other roles; the scraper re-checks role and location on every job, so you only get what you asked for.
- **Salaries** in other currencies (INR, GBP, EUR, CAD …) keep their currency; the minimum salary filter compares in the currency you choose and converts monthly / hourly pay to yearly.
- **Fast and cheap**: leave **Include full details** off when the listing fields are enough.

### FAQ

**Do I need a Y Combinator or Work at a Startup account?** No. The scraper reads the same public pages any visitor sees. It never logs in and never applies to anything.

**Why did a run return fewer jobs than I asked for?** That's every open job matching your search and filters. With **Complete results** off you get only what YC's own page for that role or city shows (the 40–50 most active jobs); the status message tells you when turning it on would find more.

**How fresh is the data?** Live: every run reads the board at that moment. `postedAgo` and `lastActiveAgo` are as YC shows them; `postedAt` (with full details) is the exact posting date.

**Which proxy should I use?** Keep the default (Apify Proxy, datacenter). It comes with every Apify plan, including the free one.

**Is it legal to scrape Y Combinator?** This Actor only collects publicly available data: job postings and company profiles that anyone can see on ycombinator.com without an account, such as the title, company, location, salary and equity range and the job description. Collecting publicly available data is generally legal, but you're responsible for how you use it. Job postings describe roles and companies, not people; the scraper never collects founder or hiring-manager profiles, and it removes personal e-mail addresses and phone numbers from job descriptions (company addresses like jobs@ are kept). You must follow privacy laws such as GDPR, PIPEDA and CCPA, as well as Y Combinator's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from pages Y Combinator shows to any visitor without logging in. It never touches accounts, applications or messages, and it follows the site's robots.txt.

*This Actor is not affiliated with, endorsed by or sponsored by Y Combinator.*

# Actor input Schema

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

Y Combinator's job roles. Each role is a separate search (combined with each location). Empty = all roles.

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

Cities, countries or regions, one per line — e.g. "Remote", "San Francisco", "New York", "London", "Bengaluru", "Toronto", "United States", "Europe". A job matches when its location mentions the place ("Remote" = remote jobs). Empty = everywhere.

## `keyword` (type: `string`):

Optional: only jobs whose title, specialty, skills, company name or company one-liner contain every word, e.g. "backend", "machine learning", "founding engineer", "rust".

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

Maximum number of jobs for the whole run, shared fairly between your searches. 0 = everything.

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

Also read each job's own page: the full job description, interview process, exact posting date and the company profile (website, team size, year founded, tags, LinkedIn). Charged per job as "full details" (see Pricing).

## `completeResults` (type: `boolean`):

Y Combinator's own job pages show only the 40–50 most active jobs per role or city. With this on, when a search needs more, the run checks every hiring YC company's jobs page (about 1,750) and keeps the matching jobs, so you get ALL open jobs for your search. Pages that give no new matching job are charged as "checked" (see Pricing).

## `onlyNew` (type: `boolean`):

Skip jobs that an earlier run with the same input already saved (not charged); with Complete results, companies without a new job are not even read. Ideal for a daily or weekly schedule.

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

Only these job types. Empty = all.

## `minSalary` (type: `integer`):

Only jobs whose salary range reaches at least this much per year (monthly and hourly pay are converted to yearly), in the currency below. Jobs without a salary or in another currency are left out. Empty or 0 = no salary filter.

## `salaryCurrency` (type: `string`):

Currency of the minimum salary (USD, CAD, GBP, EUR, INR …).

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

Only companies from these Y Combinator batches, e.g. "W24", "S25", "F25", "P26" (Spring 2026), "Winter 2024". Empty = all.

## `visaSponsorship` (type: `boolean`):

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

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

Optional: YC company slugs or links (e.g. "airbnb", "https://www.ycombinator.com/companies/stripe"): every open job at each company, with its company profile.

## `startUrls` (type: `array`):

Optional: job pages (ycombinator.com/companies/<company>/jobs/<job>), company pages (ycombinator.com/companies/<company>) or job-list pages (ycombinator.com/jobs/role/…, /jobs/location/…).

## `proxyConfiguration` (type: `object`):

Apify Proxy (datacenter) is used by default and works on every plan.

## Actor input object example

```json
{
  "roles": [
    "software-engineer"
  ],
  "locations": [
    "Remote"
  ],
  "maxItems": 10,
  "includeDetails": true,
  "completeResults": true,
  "onlyNew": false,
  "salaryCurrency": "USD",
  "visaSponsorship": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped jobs.

## `run` (type: `string`):

Status and statistics for this run.

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

RUN_REPORT: how the run ended, counts, requests and proxy use.

# 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 = {
    "roles": [
        "software-engineer"
    ],
    "locations": [
        "Remote"
    ],
    "maxItems": 10,
    "includeDetails": true,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/yc-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 = {
    "roles": ["software-engineer"],
    "locations": ["Remote"],
    "maxItems": 10,
    "includeDetails": True,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/yc-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 '{
  "roles": [
    "software-engineer"
  ],
  "locations": [
    "Remote"
  ],
  "maxItems": 10,
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/yc-jobs-scraper --silent --output-dataset

```

## MCP server setup

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