# Y Combinator Company Directory: YC Startups by Batch (`pistachio_implementation/yc-company-directory`) Actor

Export every Y Combinator startup from YC's public directory. Filter by batch (W24, S25), industry, region, status, hiring and team size. Website, domain, description, tags, team size, and optional LinkedIn, X, Crunchbase links and open jobs. No founder personal data.

- **URL**: https://apify.com/pistachio\_implementation/yc-company-directory.md
- **Developed by:** [Hay Equipos](https://apify.com/pistachio_implementation) (community)
- **Categories:** Lead generation, Business
- **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.

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 Company Directory: YC Startups by Batch

Export every company in Y Combinator's public startup directory, about 6,300 of them, as a clean table. Filter by batch (W24, S25, X25, F25 and every batch back to 2005), industry, region, status, hiring and team size, or search by keyword. Each row has the company website and domain, one liner, full description, tags, team size, location, status and YC page link. Turn on detail enrichment to add year founded, city, country, company LinkedIn, X, Facebook, Crunchbase and GitHub links, and the titles of open jobs.

The actor reads the same public search that powers ycombinator.com/companies, so it is fast (thousands of companies a minute) and does not break when the page design changes. Founder names, bios, photos and emails are deliberately left out: this is company data, not people data.

### What you can use it for

- Build a lead list of every YC startup in your target industry or region.
- Track each new batch the week it launches.
- Find YC companies that are hiring right now, with their open roles.
- Enrich a CRM with domains, team size and company social links.
- Research markets: how many YC fintech companies were acquired, which industries grow batch by batch.

### Input

| Field | What it does | Default |
|---|---|---|
| Search text | Free text search over name, one liner and description | empty (everything) |
| Batches | Codes like `W24`, `S25`, `X25` (Spring), `F25` (Fall) or names like `Winter 2024` | all |
| Industries | As named in the directory, for example `B2B`, `Fintech`, `Healthcare`, `Consumer`, `Industrials`. Case does not matter | all |
| Regions | For example `United States of America`, `Europe`, `India`, `Remote` | all |
| Company status | `Active`, `Acquired`, `Inactive`, `Public` | all |
| Only companies that are hiring | Keep companies YC marks as hiring | off |
| Only YC top companies | Keep companies on YC's top companies list | off |
| Minimum and maximum team size | Employee count as listed by YC | none |
| Add company page details | Year founded, city, country, company social links, open jobs | off |
| Maximum companies | Stop after this many rows | 100 |

A filter value that does not exist in the directory is ignored with a warning in the log, as long as at least one other value in the same filter is valid. If every batch, every industry or every region you entered is invalid, the run stops and returns no rows (the reason is saved as `OUTPUT` in the key value store), so a typo never silently returns the whole directory. If every status value is invalid, the status filter is dropped with a warning and the run continues without it.

Example input:

```json
{
  "batches": ["W24", "S24"],
  "industries": ["Fintech"],
  "hiringOnly": true,
  "includeDetails": true,
  "maxItems": 200
}
```

### Output

One row per company. Download as JSON, CSV, Excel or HTML, or read it through the API.

```json
{
  "name": "Healia",
  "slug": "healia",
  "ycUrl": "https://www.ycombinator.com/companies/healia",
  "website": "https://www.healiahealth.com/",
  "domain": "healiahealth.com",
  "oneLiner": "Modern health insurance for dual income families",
  "description": "Healia is reinventing health insurance for dual income families...",
  "batch": "Winter 2024",
  "batchCode": "W24",
  "status": "Active",
  "stage": "Early",
  "industry": "Fintech",
  "subindustry": "Fintech -> Insurance",
  "industries": ["Fintech", "Insurance"],
  "tags": [],
  "regions": ["United States of America", "America / Canada", "Remote", "Partly Remote"],
  "locations": "Columbus, OH, USA",
  "teamSize": 15,
  "isHiring": true,
  "topCompany": false,
  "nonprofit": false,
  "launchedAt": "2024-02-15T03:22:25.000Z",
  "logoUrl": "https://bookface-images.s3.amazonaws.com/small_logos/4bc553e9eb10d4c49558bf19ed0f8c9bf7411984.png",
  "yearFounded": 2022,
  "city": "Columbus",
  "country": "US",
  "linkedinUrl": "https://www.linkedin.com/company/healia-health",
  "twitterUrl": "https://twitter.com/healiahealth",
  "facebookUrl": null,
  "crunchbaseUrl": null,
  "githubUrl": null,
  "openJobs": 7,
  "jobTitles": ["Business Operations Specialist", "Senior Software Engineer (Full Stack)", "Account Executive"],
  "jobsUrl": "https://www.ycombinator.com/companies/healia/jobs",
  "scrapedAt": "2026-09-27T06:10:16.828Z"
}
```

The fields from `yearFounded` to `jobsUrl` appear only when "Add company page details" is on.

### Pricing

Pay per event, no subscription, no charge for platform usage on top.

| Event | Price |
|---|---|
| Company saved | $0.0009 (90 cents per 1,000 companies) |
| Company page details added | $0.001 extra per company (only when enrichment is on and the page was read) |
| Actor start | $0.00005 per run (Apify's standard start event) |

The whole directory without details costs about $5.70. A batch of 200 companies with details costs about $0.38. You can set a maximum charge per run in Apify and the actor stops cleanly when it is reached.

### Limits

- The directory search returns at most 1,000 companies per query, so larger exports are split by batch automatically. Every company appears once. A single batch that on its own matched more than 1,000 companies would be cut at 1,000 (no batch is that large today).
- Detail enrichment opens one YC page per company, about one per second, so 1,000 companies with details take roughly 17 minutes.
- Team size, status and hiring flags are what YC shows; they can lag behind reality.
- Founder information is not collected, by design.

### FAQ

**Do I need a YC account or an API key?** No. The directory is public and the actor uses only what any visitor's browser receives.

**How fresh is the data?** Live. Every run reads the directory at that moment, so new batches appear as soon as YC lists them.

**Why are there no founder names or emails?** They are personal data. This actor sells company facts only, which keeps it simple and low risk for you to use.

**Can I get only one batch every season?** Yes. Put the batch code in "Batches" and schedule the actor in Apify; each run returns the current list.

**What happens if YC changes its site?** The actor reads the directory's search settings from the page on every run instead of hard coding them, so most changes need no update. If something does break, open an issue on the Issues tab.

**Is this affiliated with Y Combinator?** No. It is an independent tool that reads YC's public directory.

# Actor input Schema

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

Optional free text search over company name, one liner and description, for example "AI agents" or "payments". Leave empty to list everything that matches the filters.

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

YC batches to include. Use codes like W24, S25, X25 (Spring), F25 (Fall) or full names like "Winter 2024". Empty means all batches.

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

Industries as named in the YC directory, for example B2B, Fintech, Healthcare, Consumer, Industrials, Education, "Real Estate and Construction", Government. Case does not matter. Empty means all.

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

Regions as named in the YC directory, for example "United States of America", "America / Canada", Europe, "United Kingdom", India, Remote. Empty means all.

## `statuses` (type: `array`):

Keep only companies with these statuses. Empty means all.

## `hiringOnly` (type: `boolean`):

Keep only companies YC marks as hiring.

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

Keep only companies on YC's top companies list.

## `minTeamSize` (type: `integer`):

Keep only companies with at least this many employees, as listed by YC.

## `maxTeamSize` (type: `integer`):

Keep only companies with at most this many employees, as listed by YC.

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

Also open each company's YC page to add year founded, city, country, company LinkedIn, X, Facebook, Crunchbase and GitHub links, and open job titles. Slower (about one company per second) and charged as an extra event.

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

Stop after this many companies. The whole directory is about 6,300 companies.

## Actor input object example

```json
{
  "query": "",
  "batches": [
    "S25"
  ],
  "hiringOnly": false,
  "topCompaniesOnly": false,
  "includeDetails": false,
  "maxItems": 100
}
```

# Actor output Schema

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

All rows the run saved to the default dataset.

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

// Run the Actor and wait for it to finish
const run = await client.actor("pistachio_implementation/yc-company-directory").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": ["S25"] }

# Run the Actor and wait for it to finish
run = client.actor("pistachio_implementation/yc-company-directory").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": [
    "S25"
  ]
}' |
apify call pistachio_implementation/yc-company-directory --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pistachio_implementation/yc-company-directory"
        }
    }
}
```

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/i1brluA3d11pbF10h/builds/lYAZaHiu35fdmJxV8/openapi.json
