跳到正文
DEV Community· Gio Rich·· 4 小時前AI 評分50

如何用 Y Combinator Companies Scraper 在 10 秒內將 Y Combinator 公司名錄連同創辦人資料匯入試算表

How to pull the whole Y Combinator company directory into a spreadsheet (with founders) in 10 seconds

AI 導讀

Gio Rich 介紹自己開發的 Apify Actor Y Combinator Companies Scraper,可在約 10 秒內擷取 Y Combinator 約 6,300 間初創公司的名錄資料。

正文

I built this actor; it's a paid tool on Apify with a free trial credit.

Y Combinator lists every company it has funded at ycombinator.com/companies: about 6,300 startups with batch, status, industry, team size, location and tags, and a page per company with founders and social links. It's a great lead list and a great market map, but the site only lets you scroll and click. There's no export.

I'm an 18-year-old engineering student, and I wrapped the directory in an actor called Y Combinator Companies Scraper. This post shows how to call it from Python and Node, what the data looks like, and one small project: a founder outreach list for the latest batch.

How it works, briefly

The YC directory is a search UI on top of a public search index. The actor reads the current search key from the page, queries the index with the same filters the website uses (batch, status, industries, regions, tags, hiring, top company, team size), and splits big result sets by batch because the index returns at most 1,000 hits per query. No browser, no login. The whole directory downloads in about 10 seconds.

With includeDetails: true it also opens each company's YC page and adds founders (name, title, LinkedIn/Twitter URL), the company's LinkedIn, Twitter/X, Crunchbase and GitHub links, year founded, city, country and open job titles. That's one extra request per company, still 5-10 companies per second.

Python example

pip install apify-client
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run = client.actor("rel8ble/yc-companies-scraper").call(run_input={
    "batches": ["W25", "S25"],
    "statuses": ["Active"],
    "industries": ["B2B"],
    "teamSizeMin": 2,
    "teamSizeMax": 50,
    "includeDetails": True,
    "maxResults": 0,
})

for c in client.dataset(run["defaultDatasetId"]).iterate_items():
    founders = ", ".join(f["name"] for f in c.get("founders", []))
    print(c["batchShort"], c["name"], c["website"], c["teamSize"], founders)

Node example

npm install apify-client
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });

const run = await client.actor('rel8ble/yc-companies-scraper').call({
    query: 'AI agents',
    statuses: ['Active'],
    sortBy: 'launch_date',
    maxResults: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const c of items) console.log(c.batchShort, c.name, c.oneLiner, c.website);

What a result looks like

{
    "id": 30355,
    "name": "assistant-ui",
    "ycUrl": "https://www.ycombinator.com/companies/assistant-ui",
    "website": "https://assistant-ui.com",
    "oneLiner": "Open Source React.js Library for AI Chat",
    "batch": "Winter 2025",
    "batchShort": "W25",
    "status": "Active",
    "industry": "B2B",
    "subindustry": "Infrastructure",
    "tags": ["Developer Tools", "Generative AI", "Chat", "Web Development", "AI Assistant"],
    "regions": ["United States of America", "America / Canada"],
    "locations": "San Francisco, CA, USA",
    "teamSize": 3,
    "launchedAt": "2025-02-06T20:25:28.000Z",
    "isHiring": false,
    "yearFounded": 2024,
    "city": "San Francisco",
    "country": "US",
    "linkedinUrl": "https://linkedin.com/company/assistant-ui",
    "twitterUrl": "https://x.com/assistantui",
    "githubUrl": "https://github.com/assistant-ui",
    "founders": [
        { "name": "Simon Farshid", "title": "Founder/CEO", "linkedinUrl": "https://linkedin.com/in/simon-farshid", "twitterUrl": "https://twitter.com/simonfarshid", "isActive": true }
    ],
    "openJobsCount": 0,
    "launchesCount": 1
}

A small project: founder outreach list for the newest batch

Say you sell a developer tool and want to reach technical founders from the most recent batch who are building infrastructure or dev tools. Three filters do it:

run = client.actor("rel8ble/yc-companies-scraper").call(run_input={
    "batches": ["S26"],
    "statuses": ["Active"],
    "tags": ["Developer Tools", "Infrastructure", "Open Source"],
    "includeDetails": True,
    "maxResults": 0,
})

import csv
rows = []
for c in client.dataset(run["defaultDatasetId"]).iterate_items():
    for f in c.get("founders", []):
        rows.append({
            "company": c["name"], "website": c["website"], "one_liner": c["oneLiner"],
            "team_size": c["teamSize"], "founder": f["name"], "title": f["title"],
            "linkedin": f["linkedinUrl"], "company_linkedin": c["linkedinUrl"],
        })

with open("yc_founders.csv", "w", newline="", encoding="utf-8") as fh:
    w = csv.DictWriter(fh, fieldnames=rows[0].keys())
    w.writeheader(); w.writerows(rows)
print(len(rows), "founders")

One row per founder, with the company context next to it. At $1 per 1,000 companies, a whole batch costs about 25 cents.

Things I learned building it

  • Filters are exact-match on YC's labels. "Fintech" works, "fin tech" doesn't. The README lists every industry, region and tag with its company count, so you can copy them.
  • The 1,000-hit cap is real but invisible to you: the actor splits by batch automatically (the biggest batch, Winter 2022, has 398 companies).
  • Fill rates on the full directory: website 99%, one-liner 97%, description 93%, team size 98%, tags 86%. With details: company LinkedIn 97%, Twitter/X 70%, GitHub 33%, Crunchbase 10%.
  • Founder data is what YC publishes: names, titles, LinkedIn/Twitter URLs. No emails, no photos. The actor deliberately drops the avatar and email-availability fields that the page carries.

If something breaks or a field is wrong, the Issues tab on the actor page reaches me directly.

Y Combinator Companies Scraper on Apify


This article was drafted with AI and published by me.

來源:DEV Community · dev.to