# Y Combinator Scraper (Cheap) (`data_api/y-combinator-scraper-cheap`) Actor

Y Combinator company scraper that searches the YC startup directory by keyword, batch, industry, or region. Get company names, websites, team sizes, and hiring status exported directly to a dataset.

- **URL**: https://apify.com/data\_api/y-combinator-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Developer tools, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Y Combinator Companies Scraper

![Y Combinator Companies Scraper](cover.jpg)

The YC company directory holds thousands of startups, but the site only lets you browse a page at a time and there's no export button. If you want a clean spreadsheet of companies by batch, industry, or region, you're stuck copying cells by hand. This scraper does that part for you. Give it a keyword or a few filters and it returns each company's name, batch, website, team size, hiring status, and more as structured rows you can drop straight into a sheet or database. It talks to the same public search API the YC site uses, so results come back quickly.

### What you get

Each company comes back as one tidy row with the same shape every time, so your columns line up whether you load the data into a spreadsheet, a database, or a notebook. The fields fall into a few groups:

- **Identity** — `companyName`, `companySlug`, `tagline`, `aboutText`, `logoUrl`, `websiteUrl`, `ycProfileUrl`
- **YC details** — `batchCode`, `operatingStatus`, `topRated`, `isNonprofit`, `hiringNow`
- **Classification** — `industryList`, `subindustryName`, `companyTags`, `regionList`, `officeLocations`
- **Company size** — `headcount`
- **Run metadata** — `matchedTerm`, `collectedAt`

### Quick start

1. Click **Try for free** to open the input form.
2. Type a keyword into **Keyword**, or add several in **Keyword list** to run them together.
3. Optionally narrow things down with **Batch codes**, **Industry tags**, **Regions**, or the hiring and top-company toggles.
4. Set a **Results cap** to control how many companies come back per keyword.
5. Press **Start**, then export the rows as JSON, CSV, Excel, or XML once the run finishes.

![How it works](how-it-works.jpg)

### Use cases

- **Investor sourcing** — pull every company in a batch or industry to build a deal-flow list
- **Sector mapping** — group companies by subindustry or region to chart a vertical
- **Recruiting and job hunting** — filter for companies that are hiring right now
- **Batch tracking** — grab each new YC batch the moment it lands to keep your portfolio view current
- **Competitive research** — see who else YC backed in your space, with websites and one-liners ready to read
- **Partnership outreach** — screen nonprofits or top-company badge holders for grants or collaboration

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchTerm` | string | No | A single keyword or phrase to search across the directory. Leave empty to match every company. |
| `searchTerms` | array of strings | No | Several keywords to run in one job; results are de-duplicated by company. Merges with `searchTerm` if both are set. |
| `batchCodes` | array of strings | No | Keep only the YC batches you list (for example S23, W22). Several batches use OR logic. |
| `industryTags` | array of strings | No | Keep only companies with the industry labels you choose. Several labels use OR logic. |
| `regionFilter` | array of strings | No | Keep only companies based in the regions you name. Several regions use OR logic. |
| `hiringOnly` | boolean | No | Return only companies with open roles. Default `false`. |
| `topRatedOnly` | boolean | No | Return only companies YC tags as top companies. Default `false`. |
| `resultsLimit` | integer | No | Most companies to return per keyword, up to 1000. Default `50`. |
| `timeoutSeconds` | integer | No | Seconds to wait on each HTTP request before giving up. Default `45`. |
| `proxyConfiguration` | object | No | Proxies for your requests. Defaults to Datacenter (Anywhere); switch to Residential if datacenter IPs get blocked. |

#### Example input

```json
{
    "searchTerms": ["climate", "robotics"],
    "batchCodes": ["S23", "W22"],
    "industryTags": ["Healthcare"],
    "regionFilter": ["Europe"],
    "hiringOnly": true,
    "resultsLimit": 50,
    "timeoutSeconds": 45,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

Every company matched by your search becomes one row, and each row carries the same set of fields, so the dataset stays rectangular and easy to load anywhere.

#### Example output

```json
{
    "companyName": "Stripe",
    "companySlug": "stripe",
    "websiteUrl": "https://stripe.com",
    "officeLocations": "San Francisco, CA, USA",
    "logoUrl": "https://bookface-images.s3.amazonaws.com/small_logos/example.png",
    "tagline": "Economic infrastructure for the internet.",
    "aboutText": "Stripe builds economic infrastructure for the internet, helping businesses accept payments and manage their finances online.",
    "batchCode": "S09",
    "companyTags": ["fintech", "payments"],
    "operatingStatus": "Active",
    "headcount": 8000,
    "industryList": ["Fintech", "B2B"],
    "subindustryName": "Financial Services",
    "regionList": ["America / USA"],
    "hiringNow": false,
    "isNonprofit": false,
    "topRated": true,
    "ycProfileUrl": "https://www.ycombinator.com/companies/stripe",
    "matchedTerm": "fintech",
    "collectedAt": "2026-06-29T12:00:00.000000+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `companyName` | string | Name of the company |
| `companySlug` | string | Directory slug that identifies the company in YC URLs |
| `websiteUrl` | string | Link to the company's own website |
| `officeLocations` | string | Every office location listed for the company |
| `logoUrl` | string | Link to the company's small logo image |
| `tagline` | string | One-line summary of what the company does |
| `aboutText` | string | Long-form description of the company |
| `batchCode` | string | Code of the YC batch the company joined (for example W21, S24) |
| `companyTags` | array | Labels attached to the company |
| `operatingStatus` | string | Current state of the business (for example Active, Acquired) |
| `headcount` | integer | Reported number of staff |
| `industryList` | array | Industry labels the company falls under |
| `subindustryName` | string | Main subindustry the company belongs to |
| `regionList` | array | Regions the company operates from |
| `hiringNow` | boolean | Whether the company currently has open roles |
| `isNonprofit` | boolean | Whether the company runs as a nonprofit |
| `topRated` | boolean | Whether YC has flagged this as a top company |
| `ycProfileUrl` | string | Full link to the company's YC profile page |
| `matchedTerm` | string | The keyword that surfaced this company |
| `collectedAt` | string | ISO 8601 timestamp marking when the row was captured |

### Tips for best results

- **Try a small run first.** Set `resultsLimit` to 25 or so, confirm the columns match your pipeline, then raise it for the full pull.
- **Leave the keyword empty to grab everything.** With no `searchTerm` or `searchTerms`, the actor returns all companies up to your cap, which is handy paired with batch or industry filters.
- **Combine filters to zero in.** Filters across different facets use AND logic, so batch `W24` plus industry `Fintech` returns only W24 fintech companies. Several values inside one facet use OR logic.
- **The cap is per keyword.** When you pass a `searchTerms` list, each term collects up to `resultsLimit` on its own, so a list of five with a cap of 50 can return up to 250 rows before de-duplication.
- **Proxies are optional.** The YC search API is public and rarely throttles, so the default works for most runs. Switch to Residential only if you start seeing blocks.

### How can I use Y Combinator company data?

**How can I use the Y Combinator Companies Scraper to build a startup list for investor research?**
Pick a batch, industry, or region in the filters and run it. Each company comes back with its name, website, one-liner, team size, and YC profile link, so you can sort and rank deal flow in a spreadsheet without copying anything by hand from the directory.

**How can I find Y Combinator startups that are hiring right now?**
Turn on the **Hiring companies only** toggle and add any keyword or industry tag you care about. The scraper returns just the companies with open roles, along with their websites and profile pages, which makes it a quick way to build a target list for a job search or recruiting outreach.

**How can I export YC companies by batch to a spreadsheet?**
Enter one or more codes in **Batch codes** (such as S23 or W22), leave the keyword blank to capture the whole batch, then run it and download the dataset as CSV or Excel. You get one row per company with batch, status, headcount, and tags already split into columns.

**How can I track new Y Combinator companies over time?**
Run the scraper against each fresh batch code as it is announced and append the output to your existing dataset. Because every row carries a `collectedAt` timestamp and a stable `companySlug`, you can spot newly added companies and watch how details like hiring status change between runs.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `searchTerm` (type: `string`):

A single word or phrase to look up across the YC directory. Want several keywords in one go? Use the 'Keyword list' field below instead.

## `searchTerms` (type: `array`):

Several keywords or phrases to run in one job. Each term is searched on its own and the combined output is de-duplicated by company. Merges with any value set in 'Keyword'.

## `batchCodes` (type: `array`):

Keep only companies from the YC batches you list (for example S23, W22, S21). List several to widen the net — they are matched with OR logic. Leave it blank to include every batch.

## `industryTags` (type: `array`):

Keep only companies carrying the industry labels you choose (for example Healthcare, Consumer, B2B, Education). Several labels are matched with OR logic.

## `regionFilter` (type: `array`):

Keep only companies headquartered in the regions you name (for example Europe, India, America / Canada). Several regions are matched with OR logic.

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

Switch this on to return only the companies that currently have open roles.

## `topRatedOnly` (type: `boolean`):

Switch this on to return only the companies YC has tagged as top companies.

## `resultsLimit` (type: `integer`):

The most companies to pull back for each keyword. When you pass several keywords, the cap applies to each one on its own. Ceiling is 1000.

## `timeoutSeconds` (type: `integer`):

How long to wait on each individual HTTP call before giving up, in seconds.

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

Choose the proxies routing your requests. Helpful for sidestepping IP blocks and rate caps. Datacenter is quickest; Residential is the hardest to spot.

## Actor input object example

```json
{
  "searchTerm": "developer tools",
  "searchTerms": [
    "climate",
    "robotics",
    "developer tools"
  ],
  "batchCodes": [
    "S23",
    "W22"
  ],
  "industryTags": [
    "Healthcare",
    "Education"
  ],
  "regionFilter": [
    "Europe"
  ],
  "hiringOnly": false,
  "topRatedOnly": false,
  "resultsLimit": 50,
  "timeoutSeconds": 45,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "searchTerms": [
        "climate",
        "robotics"
    ],
    "resultsLimit": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/y-combinator-scraper-cheap").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 = {
    "searchTerms": [
        "climate",
        "robotics",
    ],
    "resultsLimit": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("data_api/y-combinator-scraper-cheap").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "climate",
    "robotics"
  ],
  "resultsLimit": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call data_api/y-combinator-scraper-cheap --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=data_api/y-combinator-scraper-cheap",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/VYEEOQag0QPwIscIG/builds/rkR5Ybjb72dghedoY/openapi.json
