ActorStack.dev

How to scrape the Y Combinator companies list

Exporting YC companies, founders and jobs from the public directory: one row type per run, the 1,000-result ceiling and the batch split that gets past it, measured fill rates, and what a founder email candidate actually is.

By Oswaldo Carabano8 min read

Short answer

To scrape the Y Combinator companies list, choose one row type — companies, founders or jobs — filter by YC's own region, batch, industry or tag labels, and cap the run with `maxItems`. The public directory listed 6,267 companies on 1 October 2026; one directory query stops at 1,000 results, so the Y Combinator Scraper splits large searches by batch and reached all 6,267. On 80 Latin American companies, domain was filled on 100%, company LinkedIn on 93.8% and founder LinkedIn on 99.4% of 80 founders. The default run of 50 companies with founders and jobs cost $0.45 on 2 October 2026.

Key points

  • The Y Combinator directory listed 6,267 companies on 1 October 2026, of which 221 were tagged Latin America and 1,487 were hiring.
  • One directory query returns at most 1,000 results, so a whole-directory export has to be split; splitting by YC batch reached 6,267 of 6,267 companies.
  • One run of the Y Combinator Scraper produces one row type: companies with founders and jobs nested, one row per founder, or one row per job.
  • Founder email candidates were present for 91.1% of 80 founders, but the pattern behind them was backed by a published email for only 6 of 80 companies.
  • The default run of 50 Latin American companies with founders and jobs cost $0.45 on 2 October 2026 and finished in 10 seconds.
  • Y Combinator's robots.txt disallows `/companies?*`, and the Actor never requests the directory with a query string.
On this page8 sections

The Y Combinator directory at ycombinator.com/companies is the canonical list of YC-funded startups, and it is served to anyone without an account. Exporting it is mostly a question of knowing how the directory addresses its own data, and where its one hard ceiling sits.

What the YC directory exposes

The directory page is a shell that queries a search index with a public, read-only key embedded in the page — the same key every anonymous visitor's browser uses. Each company then has its own page with founders, jobs, news and launch posts, and each job has a page with the full description and the hiring manager. On 1 October 2026 the index held 6,267 companies, 221 of them tagged Latin America and 1,487 flagged as hiring.

Step 1 — choose one row type

One run of the Y Combinator Scraper produces one type of row, set by outputType:

outputTypeOne row isCharged as
companiesA company with founders and jobs nested$0.008, or $0.003 with founders and jobs off
foundersOne founder with the company's domain, size and location$0.004
jobsOne open role with salary and the company's founders$0.006 with the job page read, $0.003 without

Each row is charged one row event by depth, never two added together. The email pattern is a separate $0.01 event, charged at most once per domain and only when evidence backs it.

Step 2 — filter with YC's own labels

regions, batches, industries and tags take YC's own labels and are checked against the live directory before the run starts. Batches accept full names or codes — W24, S25, F24, and X25 for Spring. The default is Latin America; an empty regions means the whole directory.

input.json
{
  "outputType": "founders",
  "regions": [],
  "batches": ["Fall 2026"],
  "maxItems": 250
}

Two filters behave differently from the rest. stages is applied after the search, because the directory cannot filter by stage, so a stage-filtered run reads companies it then drops. And the jobs output always restricts to hiring companies, which in Latin America meant 18 of 221 on 1 October 2026.

The 1,000-result ceiling and the batch split

One directory query returns at most 1,000 results, whatever the total says. A whole-directory export with one query would silently stop at the first thousand. The Actor splits any search larger than that by YC batch, runs each slice, and deduplicates; measured that way it reached 6,267 of 6,267 companies.

What is filled in, measured

Measured on the Actor's own output on 1 October 2026: 80 Latin American companies with their pages read, 80 founders and 60 jobs. Rates for other regions were not measured field by field; a wider 310-company sample read from the source gives company LinkedIn 88.1% and team size 99.7%.

FieldFilledSample
Website and domain100%80 companies
Company LinkedIn93.8%80 companies
At least one founder listed98.8%80 companies
Founder LinkedIn99.4%80 founders
Founder bio93.9%80 founders
Founder past companies48.3%80 founders
GitHub organization11.3%80 companies
Emails the company published25%80 companies
Job description and hiring manager100%60 jobs, page read

Numeric salary was present on 95% of Latin American jobs and 70% of Remote jobs in the same 60-job sample; the gap is companies that list no range. The Actor's own development record notes a correction in build 0.1.5: a range written with a suffix, such as / monthly or CAD, had produced salaryMax equal to salaryMin on 820 of 6,112 jobs in one platform run, and a salaryPeriod field was added. Why the site publishes corrections rather than quietly applying them is in publishing measured fill rates.

Founder email candidates, read carefully

91.1% of the 80 founders got an emailCandidate. That number is easy to misread. Only 6 of the 80 companies had published an email that let the Actor match a pattern to a name; for the rest, the candidate is the provider's most common format applied to the founder's name, marked emailCandidateInferred: true with a confidence of 0.05 to 0.10.

founder row (fictitious)
{
  "fullName": "Ana Example",
  "emailCandidate": "ana@acmepay.example.com",
  "emailCandidateConfidence": 0.75,
  "emailCandidateInferred": false
}

Filter on emailCandidateInferred: false before treating a candidate as anything more than a format. Neither case is verified: the Actor resolves MX records and never connects to a mail server. The difference between the layers is the subject of what is stated and what is inferred, and the obligations attached to using these addresses at all are in founder data under the GDPR and CCPA.

What a run costs

Measured on the Apify platform on 2 October 2026, at the default 512 MB and without a proxy:

InputRowsTimeCost
Default: 50 Latin American companies with details5010 s$0.45
Founders, 40 rows406 s$0.19
Jobs with descriptions, 30 rows308 s$0.18
Directory only, batch Winter 2024403 s$0.12
Whole directory, 500 companies with details50083 s$4.38

The 500-company run paid for 38 evidence-backed patterns, 7.6% of domains. Across the 14 platform runs made that day, 0 of 2,177 requests were blocked or rate-limited.

robots.txt and YC's terms

ycombinator.com/robots.txt, fetched on 10 October 2026, disallows /companies?*, /library?* and /verify/* for all user agents, and allows everything else. The Actor requests /companies without a query string, company pages and job pages, and its URL guard rejects any query string on those paths. How to read a file like that is covered in robots.txt as a specification.

Y Combinator's Site Terms of Use go further than robots.txt. They prohibit data mining, robots and scraping; they ask a blocked visitor not to circumvent the block, for example with a proxy IP; and they prohibit harvesting contact information to send unsolicited email. The Actor connects directly by default and measured no blocks, and its README states that it switches to a fresh session if the site starts blocking. Those are the facts; whether a given use is acceptable under the terms is for the person running it to judge.

The same tension, with a different decision, is described for the Wellfound Actor in how to scrape Wellfound jobs.

Frequently asked questions

Is there an official Y Combinator companies API?
The Y Combinator Scraper does not rely on an official API. The directory page at ycombinator.com/companies is served to anonymous visitors, and its search runs on an index the page itself queries with a public, read-only search key, which the Actor reads from the page on every run.
How do I export only one YC batch?
Set `batches` to the batch's full name, such as `Winter 2024`, or its code, such as `W24`, and leave `regions` empty so the run covers every region. Batch names are checked against the live directory before the run starts.
Why does a stage filter make a run slower?
The directory cannot filter by stage, so the Y Combinator Scraper applies `stages` after the search. A run filtered by stage therefore reads companies it then discards, and delivers fewer rows than it read.

Sources

Every URL below was requested and returned a page on the date shown.

  1. Operator claimchecked 10 Oct 2026
    Y Combinator Scraper — Actor README and input schemaActorStack / Apify Store
  2. Site declarationchecked 10 Oct 2026
    ycombinator.com/robots.txtY Combinator
  3. Operator claimchecked 10 Oct 2026
    Y Combinator — Site Terms of Use and Privacy PolicyY Combinator
  4. Platform docschecked 18 Aug 2026
    Actor pricing modelsApify
A laptop screen showing a plain text-mode terminal with a command prompt.
Company dataGuide

Stated vs inferred company data

Company data comes in three layers — what a source publishes, what can be derived from it, and what is constructed from a rule. Two Actors, and how each one labels which layer a value came from.

7 min
A laptop screen showing a plain text-mode terminal with a command prompt.
Company dataGuide

Email format from GitHub commits

Every commit pairs an author's name with an address. How the Company Email Pattern Finder turns that into a company email format with a confidence score, how well it worked on 46 domains, and why it stops at the MX record.

8 min
A laptop screen showing a plain text-mode terminal with a command prompt.
Company dataExplainer

Founder data, GDPR and CCPA

A founder's work address is personal data even when nobody published it and a pattern produced it. What the GDPR and CCPA texts say, what the two company-data Actors do by default, and what the platforms' own terms add.

7 min