# Y Combinator Companies Scraper: YC Startups, Founders & Jobs (`tidyharvest/yc-companies-scraper`) Actor

All 6,300 Y Combinator companies with founders (LinkedIn, bio, email), year founded, socials, news and open jobs. Built to beat Y Combinator Scraper (michael.g): same founders and jobs on a 25-company test, plus news, at $2 vs $12.50 per 1,000 with founders. From $1 per 1,000.

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

## Pricing

Pay per event

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

## Y Combinator Companies Scraper: YC Startups, Founders & Jobs

Export the **Y Combinator startup directory**: every **YC company** (about 6,300, all batches since 2005) with batch,
status, industry, tags, location, team size and hiring flag, plus, from each company's YC profile, the **founders**
(name, title, bio, LinkedIn, X), year founded, company **LinkedIn / X / Facebook / Crunchbase / GitHub** links,
**news headlines**, **open jobs**, launches and YC partner. Optional **founder emails** from the company's own website.
Three outputs from one actor: **companies**, **founders** or **jobs** (Work at a Startup). No login needed.

### What you can do with it

- **Lead generation:** every startup in a batch, industry or region with founders' LinkedIn and an email for each founder.
- **Investor and market research:** the whole directory in one run (about a minute without profiles), sliced by batch,
  industry, tag (AI, Fintech, Developer Tools...), stage, status (Active / Acquired / Public / Inactive) and team size.
- **Recruiting and job search:** every open job at YC companies with salary, equity, experience, visa and the full
  description; filter by role, type, location or remote.
- **Monitoring:** schedule it with "only new" to get each new batch, new company, new founder or new job once.

### Input

| Field | What it does |
|---|---|
| `mode` | `companies` (default), `founders` (one row per founder) or `jobs` (one row per open job). |
| `query` | Free-text search, as on ycombinator.com/companies. |
| `batches` | `W24`, `S25`, `P25` (Spring), `F25` (Fall), `Winter 2024`, or a year (`2025` = every 2025 batch). |
| `industries`, `tags`, `regions`, `status`, `stages` | YC's own labels; any value in a list matches. |
| `locations` | Keep companies whose location contains any of these (San Francisco, London, Bangalore). |
| `isHiring`, `topCompany`, `nonprofit` | Only hiring companies / YC Top Companies / nonprofits. |
| `teamSizeMin`, `teamSizeMax` | Team size range. |
| `companies` | Specific companies by slug or profile URL. |
| `startUrls` | Any ycombinator.com link: a filtered directory URL, a company profile, a job board page or a job. |
| `includeDetails` | Founders, news, jobs, launches and social links from each YC profile (default on). |
| `findEmails` | Emails and phones from the company website, and an email per founder (see below). |
| `jobRoles`, `jobTypes`, `jobLocations`, `remoteOnly`, `includeJobDescriptions` | Jobs mode filters. |
| `onlyNew`, `monitorName` | Return only rows this monitor has not returned before. |
| `maxItems` | Hard cap on rows (and cost). Empty = no limit. |

Empty input = the whole directory. Examples:

```json
{ "batches": ["W25", "S25"], "tags": ["Artificial Intelligence"], "maxItems": 500 }
```

```json
{ "mode": "founders", "batches": [2025], "findEmails": true }
```

```json
{ "mode": "jobs", "jobRoles": ["eng"], "jobLocations": ["San Francisco", "remote"] }
```

### Output

One item per company (abridged):

```json
{
  "name": "Sennu AI", "slug": "sennu-ai", "url": "https://www.ycombinator.com/companies/sennu-ai",
  "website": "https://www.sennu.ai", "domain": "sennu.ai", "oneLiner": "We turn traditional companies into AI companies",
  "batch": "Winter 2025", "batchCode": "W25", "status": "Active", "stage": "Early", "industry": "B2B",
  "industries": ["B2B"], "tags": ["Artificial Intelligence", "Generative AI", "SaaS"], "regions": ["United States of America"],
  "locations": "San Francisco, CA, USA", "teamSize": 2, "isHiring": false, "topCompany": false, "launchedAt": "2025-01-24",
  "yearFounded": 2025, "country": "US", "linkedinUrl": "https://www.linkedin.com/company/sennu-ai",
  "twitterUrl": "https://x.com/SennuAI", "crunchbaseUrl": "https://www.crunchbase.com/organization/sennu-ai",
  "primaryPartner": {"name": "Tyler Bosmeny", "url": "https://www.ycombinator.com/people/tyler-bosmeny"},
  "founders": [{"name": "Sukhjit Singh", "title": "Founder/CEO", "bio": "Building Sennu AI | prev @ Brex",
                "linkedinUrl": "https://www.linkedin.com/in/sukhjit-singh-ut/", "twitterUrl": "https://x.com/ssinghh14",
                "email": "sukhjit@sennu.ai", "emailSource": "common-pattern"}],
  "founderCount": 2, "news": [], "openJobs": [], "openJobsCount": 0,
  "launches": [{"title": "Sennu AI: Hands off Salesforce QA", "date": "2025-06-28", "votes": 9, "url": "https://www.ycombinator.com/launches/..."}],
  "detailsStatus": "ok"
}
```

Each founder also has `hnUsername`, `region`, `photoUrl`, `ycBatches`, `isActive` and `onCompanyPage`.
Founders mode returns one row per founder with the company as a nested `company` object. Jobs mode returns `title,
location, type, role, roleDetail, salary, salaryMin, salaryMax, salaryCurrency, salaryPeriod, equity, minExperience,
visa, skills, remote, postedAt, description, interviewProcess, hiringManager, url` plus the company.

**Founder emails** (`findEmails`): each founder gets `email` and `emailSource`:
`website` (the company's site publishes it), `site-pattern` (built from the naming pattern of a founder address the site
publishes) or `common-pattern` (first-name@domain, only for domains that accept mail; labelled as a guess, turn off with
`emailGuesses: false`). Mailboxes are not test-sent. Company-wide addresses and phones from the site come in
`companyEmails` and `companyPhones`.

### Pricing

Pay per result; filters and caps apply before you are charged. Prices on the Bronze plan (lower on Silver and Gold):
| Event | Price per 1,000 |
|---|---|
| Company (`company-scraped`) | $1.00 |
| + founders, news, jobs and links from the YC profile (`company-details`) | $1.00 |
| Founder row in founders mode (`founder-scraped`) | $1.00 |
| Job row in jobs mode (`job-scraped`) | $1.00 |
| + emails found on the company website / founder emails (`contacts-found`, per company with at least one) | $2.00 |

The whole directory with founders, news and jobs costs about **$12.60** (6,306 companies x $2.00 per 1,000).
A run that finds nothing fails instead of silently returning an empty dataset.

### How well it works (Oct 2026)

- **The whole directory:** 6,306 of 6,306 companies YC lists, no duplicates, in about 1.5 minutes without profiles or
  17 minutes with them. 6,305 of 6,306 profiles read.
- **Founders:** 13,308 founders in one founders-mode run (20 minutes), including 1,733 co-founders that company
  profile pages don't show. 98.7% of companies have at least one founder; 98% of founders shown on profiles have a
  LinkedIn link, 79% a bio.
- **Jobs:** all 6,348 open jobs at 1,406 hiring companies, each with its full description (26 minutes); 80% show a salary.
- **Founder emails** (with `findEmails`, 200 Summer 2024 companies): an email for 97% of 377 founders.

### Compared with Y Combinator Scraper (michael.g)

Same 25 Winter 2024 companies, both with founders and open jobs, October 2026:
| | This actor | michael.g/y-combinator-scraper |
|---|---|---|
| Founders / open jobs returned | 49 / 65 | 49 / 65 |
| Year founded, LinkedIn, X, GitHub, Crunchbase, YC partner | same on every company | same |
| News headlines, launches, regions, launch date | yes | no |
| Founder emails: same address as their 26 "verified" ones | 25 of 26 | (their own) |
| Founders mode, jobs mode with full descriptions and dates, only-new monitoring | yes | no |
| What the 25 companies cost | $0.05 at Bronze prices ($0.10 with emails) | $0.31 (Silver plan) |

**Where it still does more:** it marks each email "verified" or "risky" after testing the mailbox; we label how each
address was found and don't test-send.

### Limits and notes

- Covers what YC lists publicly at ycombinator.com/companies. Companies YC hides from the public directory are not included.
- Founder email addresses are not verified by sending mail; `emailSource` tells you how each one was found.
- Email runs read each company's website, so they are slower: about 2 s per company at the default 256 MB, 0.7 s at
  1,024 MB (for runs over ~1,000 companies, pick 1,024 MB in the run options; it costs slightly more).
- Founders: everyone YC lists as a founder of the company, including co-founders the company's profile page doesn't
  show. Those come with `onCompanyPage: false` (name, title, HN username, region, photo; no bio or LinkedIn, and no
  email guess).
- Image links YC signs for one hour (founder photos) are left out; company logos are permanent links.

### Is it legal?

It reads public pages anyone can open without an account. Founder names, titles and links are what founders publish on
their YC profiles; emails come from the company's own website or a labelled pattern. If you contact people, follow the
rules that apply to you (GDPR, CAN-SPAM, and similar).

# Actor input Schema

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

Companies: one row per YC company. Founders: one row per founder with the company attached. Jobs: one row per open job at YC companies (Work at a Startup).

## `query` (type: `string`):

Free-text search, the same as the search box on ycombinator.com/companies (e.g. AI agents, payroll, robotics). Empty = no text filter.

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

Batch codes or names: W24, S25, P25 (Spring), F25 (Fall), Winter 2024, or a year (2025 = every 2025 batch). Empty = all batches.

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

Top-level or sub-industry as YC labels it (B2B, Fintech, Healthcare, Engineering, Product and Design...). Any of them matches.

## `tags` (type: `array`):

YC tags such as Artificial Intelligence, AI, Generative AI, SaaS, Developer Tools, Robotics. Any of them matches. Examples: B2B, SaaS, Artificial Intelligence, AI, Fintech, Developer Tools, Marketplace, Generative AI, Consumer, Machine Learning, E-commerce, Healthcare, Analytics, Hardware, Health Tech

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

YC's HQ regions: United States of America, India, United Kingdom, Europe, Latin America, Remote... Any of them matches.

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

Keep companies whose location text contains any of these (e.g. San Francisco, London, Bangalore).

## `status` (type: `array`):

Empty = every status.

## `stages` (type: `array`):

Empty = every stage.

## `isHiring` (type: `boolean`):

Only companies with open jobs on Work at a Startup.

## `topCompany` (type: `boolean`):

Only companies YC lists as Top Companies.

## `nonprofit` (type: `boolean`):

Only nonprofits.

## `teamSizeMin` (type: `integer`):

Smallest team size to keep (YC's employee count).

## `teamSizeMax` (type: `integer`):

Largest team size to keep.

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

YC company slugs or profile URLs (airbnb, https://www.ycombinator.com/companies/stripe). Combined with the search above only if you also set filters.

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

Any ycombinator.com URL: a filtered directory link (companies?batch=Winter%202025\&industry=Fintech), a company profile, a job board page (/jobs/role/software-engineer/san-francisco) or a job link.

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

Read each company's YC profile: founders (name, title, bio, LinkedIn, X), year founded, LinkedIn/X/Facebook/Crunchbase/GitHub links, news headlines, open jobs, launches, YC partner. Off = directory fields only (cheaper and faster). Always on in founders and jobs mode.

## `findEmails` (type: `boolean`):

Read each company's own website for published emails and phones, and give each founder an email: the address the site publishes for them, else one built from the site's naming pattern, else first-name@domain (labelled as a guess; turn guesses off below). Charged per company with at least one email.

## `emailGuesses` (type: `boolean`):

Off = only addresses the website itself publishes.

## `jobRoles` (type: `array`):

eng, design, product, sales, marketing, operations, recruiting, support, science (or YC's slugs such as software-engineer). Empty = all.

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

Empty = all.

## `jobLocations` (type: `array`):

e.g. San Francisco, New York, India, remote.

## `jobKeywords` (type: `array`):

Keep jobs whose title, specialty or skills contain any of these (e.g. machine learning, React, founding).

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

Only jobs open to remote work.

## `postedWithinDays` (type: `integer`):

Only jobs posted in the last N days. Empty = any date.

## `includeJobDescriptions` (type: `boolean`):

Adds the full description, exact posting date, salary min/max, interview process and hiring manager for each job.

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

For scheduled runs: return (and charge) only companies, founders or jobs this monitor has not returned before.

## `monitorName` (type: `string`):

Keeps separate 'only new' memories for different schedules.

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

Hard cap on rows for the whole run (also caps your cost). 0 or empty = no limit (the full directory is about 6,300 companies).

## Actor input object example

```json
{
  "mode": "companies",
  "query": "AI",
  "batches": [
    "W25"
  ],
  "includeDetails": true,
  "findEmails": false,
  "emailGuesses": true,
  "includeJobDescriptions": true,
  "maxItems": 20
}
```

# Actor output Schema

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

Companies, founders or jobs, one item each.

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

Counts for this run.

# 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 = {
    "query": "AI",
    "batches": [
        "W25"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("tidyharvest/yc-companies-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 = {
    "query": "AI",
    "batches": ["W25"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("tidyharvest/yc-companies-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 '{
  "query": "AI",
  "batches": [
    "W25"
  ],
  "maxItems": 20
}' |
apify call tidyharvest/yc-companies-scraper --silent --output-dataset

```

## MCP server setup

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