# Y Combinator Scraper: YC Companies & Founders (`tortuga/ycombinator-scraper`) Actor

YC startup directory as a table: company name, website, one-liner, batch, status, industry, tags, team size and location, plus founders with LinkedIn and X links, open jobs with salary ranges and news. Filter by batch, industry, region or hiring. $2 per 1,000 companies, no start fee.

- **URL**: https://apify.com/tortuga/ycombinator-scraper.md
- **Developed by:** [Trevor Ortega](https://apify.com/tortuga) (community)
- **Categories:** Lead generation
- **Features:** Limited permissions
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 companies

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 Scraper: YC Companies & Founders

Export the Y Combinator startup directory (ycombinator.com/companies) as a clean table: one row per YC company with its website, one-liner, batch, status, industry, tags, team size and location. Switch on **Include founders and company details** and every company also gets its founders (name, title, bio, LinkedIn and X links), open jobs with salary and equity ranges, recent news and social profiles.

Two optional add-ons turn the list into leads and job data: **Include website contacts** visits each company's own website and adds the emails, phone numbers and social profiles published there, and **Output open jobs as rows** gives one row per open YC job, with the full job description if you want it.

Filter by batch (`W24`, `S25`, `X25`, ...), industry, region, tag, status, hiring or a search phrase, or leave the filters empty for the whole directory (about 6,200 companies). The Actor reads the same public search index the YC website uses, so a whole batch takes seconds. **$2 per 1,000 companies**, plus $3 per 1,000 when details are on. No start fee, no login, no API key.

**What you get**

- **Company:** name, website, one-liner, full description, logo, former names, YC profile URL
- **YC data:** batch (`W24` / `Winter 2024`), status (Active, Acquired, Public, Inactive), stage, Top Company and hiring flags
- **Market:** industry, sub-industry, tags, team size, location and regions
- **Founders** (details on): name, title, bio, LinkedIn and X profile links
- **Jobs** (details on): open roles with location, salary range, equity range, experience level and visa
- **More** (details on): latest news, Launch YC posts, company LinkedIn / X / Crunchbase / GitHub, year founded
- **Website contacts** (option): emails, phone numbers and social profiles (LinkedIn, X, Instagram, YouTube, GitHub, ...) from the company's own website, plus its contact page
- **Job rows** (option): one row per open job with salary, equity, experience, visa, skills and the company's name, batch and website; full description and hiring manager on request

**Try it:** the input is prefilled with batch `W24` and 50 companies. Click **Start** and the rows are there in a few seconds, for about $0.10. To get the founders, turn on **Include founders and company details** (`includeCompanyDetails: true`).

**Sample output** (one company with details on, trimmed; the full field list and example follow below):

```json
{
  "name": "Airbnb",
  "website": "http://airbnb.com",
  "oneLiner": "Book accommodations around the world.",
  "batch": "W09",
  "status": "Public",
  "industry": "Consumer",
  "tags": ["Marketplace", "Travel"],
  "teamSize": 6132,
  "location": "San Francisco, CA, USA",
  "isHiring": true,
  "founders": [
    { "name": "Brian Chesky", "title": "Founder/CEO", "linkedinUrl": "https://www.linkedin.com/in/brianchesky/", "twitterUrl": "https://twitter.com/bchesky" }
  ],
  "url": "https://www.ycombinator.com/companies/airbnb"
}
```

### What data does Y Combinator Companies Scraper extract?

Every company is one row (`type: "company"`). Fields marked *details* are only present when **Include founders and company details** is on, fields marked *contacts* only when **Include website contacts** is on.

| Field | Description |
|---|---|
| `id` | YC's numeric company id |
| `slug` / `url` | Company slug and its YC directory page, e.g. `https://www.ycombinator.com/companies/airbnb` |
| `name` / `formerNames` | Company name and previous names |
| `website` | Company website |
| `oneLiner` / `longDescription` | Short tagline and the full description from the YC profile |
| `batch` / `batchName` | Short and long batch, e.g. `W24` / `Winter 2024` |
| `status` | `Active`, `Acquired`, `Public` or `Inactive` |
| `stage` | YC growth stage (`Early`, `Growth`, ...) when set |
| `industry` / `subindustry` / `industries` | Primary industry, sub-industry, and the combined list YC uses for filtering |
| `tags` | Tags such as `SaaS`, `Artificial Intelligence`, `Developer Tools` |
| `teamSize` | Number of employees reported to YC |
| `location` / `regions` | Location string (e.g. `San Francisco, CA, USA`) and region facets (`United States of America`, `Europe`, `Remote`, ...) |
| `isHiring` / `isTopCompany` / `isNonprofit` | Flags from the directory |
| `hasDemoDayVideo` / `hasAppVideo` | Whether the profile has a public Demo Day or application video |
| `launchedAt` | When the company launched on YC (ISO 8601) |
| `smallLogoUrl` | Logo thumbnail |
| `founders` | *details* - list of `{name, title, bio, linkedinUrl, twitterUrl, isActive}` |
| `founderBios` / `activeFoundersCount` | *details* - founder bios and how many founders are still active |
| `jobsCount` / `jobs` | *details* - open roles with `title, url, location, type, role, salaryRange, equityRange, minExperience, visa, skills` |
| `latestNews` | *details* - recent press `{title, url, date}` |
| `launches` | *details* - Launch YC posts `{title, tagline, url, createdAt, voteCount}` |
| `socialLinks` | *details* - `{linkedin, twitter, facebook, crunchbase, github}` company profiles from the YC page |
| `foundedYear` / `city` / `country` / `primaryPartner` / `logoUrl` | *details* - extra profile fields |
| `emails` | *contacts* - email addresses written on the company's website, its own domain first |
| `phones` | *contacts* - phone numbers from the website in international format (`+14157147580`) |
| `websiteSocialLinks` | *contacts* - profiles linked from the website: `{linkedin, twitter, facebook, instagram, youtube, tiktok, github, discord, telegram, pinterest, whatsapp}`, each a list (team members' LinkedIn profiles on an About page land here too) |
| `contactPageUrl` | *contacts* - the website's contact page, when it has one |
| `websiteCrawl` | *contacts* - `{status, finalUrl, pagesVisited, visitedUrls, error}`: `ok`, `noWebsite`, `unreachable`, `blocked`, `httpError`, ... so you can see why a row has no contacts |
| `scrapedAt` | Timestamp of the run (ISO 8601) |

With **Output open jobs as rows** on, the dataset also holds one row per open job (`type: "job"`):

| Field | Description |
|---|---|
| `jobId` / `title` / `url` | YC job id, job title and the job page on ycombinator.com |
| `location` / `jobType` / `role` / `roleSpecificType` | e.g. `San Francisco, CA, US`, `Full-time`, `Engineering`, `Full stack` |
| `salaryRange` / `equityRange` | e.g. `$175K - $200K`, `0.05% - 0.50%` (null when the company does not say) |
| `minExperience` / `visa` / `skills` | e.g. `3+ years`, `US citizen/visa only`, `["Python", "TypeScript"]` |
| `postedAgo` | How long ago the job was posted, as YC shows it (`about 1 month`) |
| `description` / `hiringManager` / `interviewProcess` | With **Include job descriptions**: the full description (Markdown), the hiring manager's name and the interview process when given |
| `companyId` / `companySlug` / `companyName` / `companyUrl` / `companyWebsite` | The company the job belongs to |
| `companyBatch` / `companyStatus` / `companyOneLiner` / `companyIndustry` / `companyTeamSize` / `companyLocation` / `companyLogoUrl` | Company context, so a job row works on its own in a spreadsheet |

The **Dataset** tab has ready-made views: *Companies*, *Founders & jobs*, *Website contacts* and *Job rows*.

### How to scrape Y Combinator companies by batch

1. Put one or more batches into **Batches**: `W24`, `S25`, `X25` (Spring), `F24` (Fall) or `Winter 2024`. Leave it empty to scrape the whole directory (about 6,200 companies).
2. Optionally narrow by **Industries** (`B2B`, `Fintech`, `Healthcare`, `Developer Tools`, ...), **Regions** (`United States of America`, `Europe`, `India`, `Remote`, ...), **Tags**, **Status** or **Search query**.
3. Set **Max companies** to cap the run and the cost, and click **Start**. Results appear in the **Dataset** tab.

The scraper enumerates the directory through the same public search index the YC website uses, so it is fast (a whole batch takes seconds) and returns exactly what the directory shows.

### Input example

```json
{
  "batches": ["W24", "S24"],
  "industries": ["Fintech"],
  "status": "Active",
  "isHiring": true,
  "maxItems": 200,
  "includeCompanyDetails": true
}
```

A lead list with founders and website contacts, plus job rows:

```json
{
  "batches": ["S25"],
  "maxItems": 100,
  "includeCompanyDetails": true,
  "includeWebsiteContacts": true,
  "includeJobs": true,
  "includeJobDescriptions": false
}
```

### Output example

```json
{
  "type": "company",
  "id": 271,
  "slug": "airbnb",
  "name": "Airbnb",
  "url": "https://www.ycombinator.com/companies/airbnb",
  "website": "http://airbnb.com",
  "oneLiner": "Book accommodations around the world.",
  "longDescription": "Founded in August of 2008 and based in San Francisco, California, Airbnb is a trusted community marketplace ...",
  "batch": "W09",
  "batchName": "Winter 2009",
  "status": "Public",
  "stage": "Growth",
  "industry": "Consumer",
  "subindustry": "Travel, Leisure and Tourism",
  "industries": ["Consumer", "Travel, Leisure and Tourism"],
  "tags": ["Marketplace", "Travel"],
  "teamSize": 6132,
  "location": "San Francisco, CA, USA",
  "regions": ["United States of America", "America / Canada"],
  "isHiring": true,
  "isTopCompany": true,
  "isNonprofit": false,
  "launchedAt": "2009-01-01T00:00:00Z",
  "smallLogoUrl": "https://bookface-images.s3.amazonaws.com/small_logos/3e9a....png",
  "founders": [
    { "name": "Brian Chesky", "title": "Founder/CEO", "bio": "Brian Chesky is the co-founder ...", "linkedinUrl": "https://www.linkedin.com/in/brianchesky/", "twitterUrl": "https://twitter.com/bchesky", "isActive": true }
  ],
  "activeFoundersCount": 3,
  "foundedYear": 2008,
  "jobsCount": 0,
  "latestNews": [{ "title": "Airbnb launches Airbnb Rooms ...", "url": "https://www.usatoday.com/...", "date": "May 03, 2023" }],
  "socialLinks": { "linkedin": "https://www.linkedin.com/company/airbnb/", "twitter": "https://twitter.com/Airbnb", "facebook": "https://www.facebook.com/airbnb/", "crunchbase": "https://www.crunchbase.com/organization/airbnb", "github": null },
  "scrapedAt": "2026-09-07T22:40:00Z"
}
```

Website contact fields of one S25 company (**Include website contacts** on, the other 10 social networks trimmed):

```json
{
  "name": "Juxta",
  "batch": "S25",
  "website": "https://juxta.com",
  "emails": ["support@juxta.com", "info@juxta.com", "careers@juxta.com"],
  "phones": ["+18587538444"],
  "websiteSocialLinks": { "linkedin": ["https://www.linkedin.com/company/use-juxta"] },
  "contactPageUrl": "https://www.juxta.com/contact",
  "websiteCrawl": {
    "status": "ok",
    "finalUrl": "https://www.juxta.com/",
    "pagesVisited": 4,
    "visitedUrls": ["https://www.juxta.com/", "https://www.juxta.com/contact", "https://www.juxta.com/about", "https://www.juxta.com/terms"],
    "error": null
  }
}
```

One job row (**Output open jobs as rows** on):

```json
{
  "type": "job",
  "jobId": 84779,
  "title": "Senior Software Engineer",
  "url": "https://www.ycombinator.com/companies/f2/jobs/ejl3hKh-senior-software-engineer",
  "location": "San Francisco, CA, US",
  "jobType": "Full-time",
  "role": "Engineering",
  "roleSpecificType": "Full stack",
  "salaryRange": "$175K - $200K",
  "equityRange": null,
  "minExperience": "3+ years",
  "visa": "US citizen/visa only",
  "skills": ["Node.js", "Python", "TypeScript"],
  "postedAgo": "about 1 year",
  "companyId": 30832,
  "companySlug": "f2",
  "companyName": "F2",
  "companyUrl": "https://www.ycombinator.com/companies/f2",
  "companyWebsite": "http://f2.ai",
  "companyBatch": "S25",
  "companyStatus": "Active",
  "companyOneLiner": "The AI platform for private markets investors",
  "companyIndustry": "B2B",
  "companyTeamSize": 15,
  "companyLocation": "New York City, NY, USA",
  "scrapedAt": "2026-11-06T23:43:13Z"
}
```

### How to get YC founders with their LinkedIn and X profiles

Turn on **Include founders and company details** (`includeCompanyDetails: true`). Each company then gets a `founders` list with name, title, bio and the LinkedIn and X links the founder chose to show on their YC profile; YC profiles carry no other founder links. In a test on 10 W24 companies (November 2026) every company had founders, all 19 founders had a LinkedIn link and 11 of 19 had an X link. The scraper does not read founders' private emails: YC hides them behind a login, and nothing is guessed.

### How to get emails and phone numbers of YC startups

Turn on **Include website contacts** (`includeWebsiteContacts: true`). For each company the scraper opens its own website: the homepage plus up to 3 linked pages, picked in this order: contact, imprint, about, team, support and legal pages (at most 4 pages per company, robots.txt respected). It returns the emails, phone numbers and social profiles published there, own-domain addresses first, and the contact page URL. These are the addresses the company publishes, often `founders@`, `hello@` or `support@`, sometimes a founder's own address when the website shows it. Only what is written on the website is returned: no guessed patterns like `first.last@`, no email lookups or data brokers, and placeholders (`name@example.com`, `555-01xx` demo numbers, regulator hotlines quoted in privacy policies) are dropped.

In tests in November 2026, 33 of 40 S25 companies (82%) had at least one email on their website, 5 (12%) a phone number and 25 (62%) social links. Websites built entirely in JavaScript or sites that block datacenter IPs can return nothing; `websiteCrawl.status` tells you why. Websites are always fetched through the plain datacenter proxy (or none when Apify Proxy is off), never a residential proxy.

### How to scrape YC jobs from Work at a Startup

Turn on **Output open jobs as rows** (`includeJobs: true`): every open job becomes its own row with title, location, employment type, role, salary and equity range, minimum experience, visa requirement and skills, plus the company's name, batch, website and one-liner. Add **Include job descriptions** for the full description, the hiring manager's name and the interview process (one extra page load per job). Set **Hiring only** to get only companies with open roles; companies that are not hiring cost nothing extra. Jobs come from the public YC company pages (the Work at a Startup postings YC shows there), without login. In the S25 test, 18 of 40 companies were hiring with 98 open jobs between them.

### Does it work without login or proxies?

Yes. Everything comes from the public directory, public company and job pages and the companies' own public websites. Apify Proxy is on by default for reliability on large runs, but the scraper works without it.

### Pricing

Pay per event, no subscription and no start fee:

| What | Price | When it is charged |
|---|---|---|
| Company | $0.002 | Every company row |
| Company details | $0.003 | Per company page opened with **Include founders and company details** |
| Website contacts | $0.006 | Per company whose website shows at least one email or phone number, with **Include website contacts**; nothing found or no website = free |
| Job | $0.001 | Per job row with **Output open jobs as rows** (descriptions included at no extra charge) |

Example: 100 companies with founders and website contacts cost at most $1.10 ($0.20 + $0.30 + up to $0.60). The Apify free plan is enough to scrape several batches. Set a maximum cost per run in the run options to cap any run.

### Integrations and API

Use the run in Zapier, Make, n8n, Google Sheets, or call it from Python/Node with the Apify client. See the **API** tab for ready-made snippets. To load job rows and company rows separately, filter the dataset on the `type` field (`company` or `job`).

### Is it legal to scrape Y Combinator?

This Actor collects only publicly available business information: company data from the YC directory and company profiles, founder names, titles and the public LinkedIn and X links shown on the YC page, public job listings, and, when you turn the option on, the contact details companies publish on their own websites. It does not log in, does not read anything behind a login (such as founders' private emails), and does not guess or buy email addresses. You are responsible for how you use the data and for complying with YC's terms and applicable law, including GDPR/CCPA and anti-spam rules (CAN-SPAM, PECR) when you process names or contact businesses.

### Support

Found a bug or need a field added? Open an issue in the **Issues** tab; it is usually answered within a day.

### Related scrapers

- [Glassdoor Scraper](https://apify.com/tortuga/glassdoor-scraper): Jobs, Salaries & Company Ratings
- [Crunchbase Scraper](https://apify.com/tortuga/crunchbase-scraper): Companies, Funding & Investors
- [Kickstarter Scraper](https://apify.com/tortuga/kickstarter-scraper): Projects, Funding, Backers & Rewards
- [Luma Events Scraper](https://apify.com/tortuga/luma-scraper): lu.ma Hosts & Tickets
- [Product Hunt Scraper](https://apify.com/tortuga/producthunt-scraper): Launches, Upvotes & Makers

### Found it useful?

A ★ review on this Actor's Apify Store page helps other users find it and tells us what to improve. Issues and feature requests are welcome in the Actor's **Issues** tab.

# Actor input Schema

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

YC batches to include, e.g. W24, S25, X25 (Spring), F24 (Fall) or 'Winter 2024'. Leave empty for all batches (about 6,200 companies since 2005).

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

Industry or sub-industry names as shown in the directory sidebar, e.g. B2B, Fintech, Healthcare, Consumer, Industrials, Developer Tools, Infrastructure. Any of the values matches (OR).

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

Region facet values, e.g. 'United States of America', Europe, India, 'Latin America', 'United Kingdom', Remote, 'Fully Remote'. Any of the values matches (OR).

## `status` (type: `string`):

Company status as shown by YC.

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

Company tags, e.g. 'Artificial Intelligence', SaaS, 'Developer Tools', Marketplace, Climate. Any of the values matches (OR).

## `searchQuery` (type: `string`):

Free-text search over company name, one-liner, description and website (same as the directory search box).

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

Only companies with open job postings on Work at a Startup.

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

Only companies on YC's Top Companies list.

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

Stop after this many companies. Keeps cost predictable. The full directory is about 6,200 companies.

## `includeCompanyDetails` (type: `boolean`):

Turn this on to get founders: open each company page to add founders (name, title, bio, LinkedIn and X links), open jobs with salary and equity ranges, latest news, Launch YC posts, social links, year founded and the full description. Adds one page load and a small extra charge per company.

## `includeWebsiteContacts` (type: `boolean`):

Visit each company's own website (the homepage plus up to 3 linked pages such as contact, about and team, at most 4 pages) and add the emails, phone numbers and social profile links published there. Only addresses written on the website are returned; nothing is guessed or looked up elsewhere. Charged per company where at least one email or phone number was found; companies with nothing found or no reachable website are free.

## `includeJobs` (type: `boolean`):

Also output one row per open job (type 'job'): title, location, employment type, role, salary and equity range, minimum experience, visa and skills, plus the company's name, batch and website. Jobs come from the public company page; only hiring companies' pages are opened when company details are off. Charged per job row. Big companies can list 30 or more jobs.

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

With 'Output open jobs as rows' on, open each job page to add the full job description (Markdown), the hiring manager's name and the interview process. One extra page load per job, no extra charge.

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

Apify Proxy is recommended for reliability on large runs. Company websites (website contacts) are always fetched through the plain datacenter proxy (or without a proxy when Apify Proxy is off), never residential.

## Actor input object example

```json
{
  "batches": [
    "W24"
  ],
  "status": "all",
  "isHiring": false,
  "topCompaniesOnly": false,
  "maxItems": 50,
  "includeCompanyDetails": false,
  "includeWebsiteContacts": false,
  "includeJobs": false,
  "includeJobDescriptions": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "batches": [
        "W24"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tortuga/ycombinator-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 = {
    "batches": ["W24"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("tortuga/ycombinator-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 '{
  "batches": [
    "W24"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call tortuga/ycombinator-scraper --silent --output-dataset

```

## MCP server setup

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