# Method

Licence: CC BY 4.0. Attribution: FundingWatcher. Data as of 2026-09-04.

## What was measured

Every Y Combinator company listed on ycombinator.com/companies with a domain
was embedded once, and similarity between any two companies is the cosine
between their unit-normalised vectors.

## Embedding

Model: OpenAI text-embedding-3-large at 1024 dimensions.

The text embedded is not the company's homepage copy. It is a standardised
five-sentence description written by gpt-5-mini from two inputs: a ScrapingBee
render of the company's current homepage, and search snippets for the domain
from Serper. The prompt asks for the same five things about every company, in
the same order, in neutral wording: what it sells, who buys it, how it is
delivered, what market it sits in, and what it charges for. Without that step
the measure picks up website copywriting style rather than what the company
does.

Where the homepage returned nothing usable, 206 companies or 3.4% of the file,
the description falls back to YC's own one-liner and long description. Those
fallbacks are concentrated in older batches.

## Limitation: today, not batch time

The vectors describe each company as its website describes it today. There is no
snapshot of these homepages at batch time. A company that pivoted will match the
batches it pivoted towards, not the batch it was funded in. Two examples from
the published files:

- Sendbird and Netomi, both Winter 2016, score 0.932. Both sell AI customer
  support in 2026. In 2016 one was a chat SDK and the other a messaging bot
  company.
- Bumpline, Summer 2017, is listed by YC as "Captain Tailor is the Uber for
  tailoring" and scores 0.951 against Booth AI, Winter 2023, a generative AI
  product photography company. The domain no longer runs a tailoring service.

This means the numbers here measure what the alumni look like now. They cannot
separate "YC funded two similar companies" from "two companies grew similar".

## Thresholds

- 0.75, roughly the same broad market. Two B2B SaaS tools for different jobs.
- 0.80, the same product category. GovDash (W22) and GovEagle (W23), both
  selling government-contracting software, are matched at this level.
- 0.85, companies a reader would call competitors. Hammr (W23) and Trayd (S23),
  both construction payroll platforms, score 0.952.

## Controls

Two controls run against every batch, and both average ten random draws.

The within-batch control draws a random sample of YC companies from all years,
the same size as the batch, and takes the average pairwise cosine inside that
draw. It appears as `control_mean_pair_sim` in batch_stats.csv.

The prior control draws a fixed 500 companies from batches earlier than the one
being measured, and takes each company's best match into that 500. It appears as
`prior_fixed500_mean_nn` in prev_batch_stats.csv and as the `fx500_*` columns in
prior_twin_share_controlled.csv.

The fixed 500 is the part of the design that matters most. A batch compared
against every company funded before it is compared against a pool that grows
with batch order, so the measure rises on pool size alone. Summer 2013 had 500
earlier companies and Summer 2025 had 5,184; against the full pool the share
with a 0.80 match reads 23.5% and 89.1%. Against a fixed 500 the same two
batches read 23.5% and 46.5%. The report uses the fixed 500 everywhere. Batches
earlier than Summer 2013 have fewer than 500 prior companies and get no
controlled number.

All random draws use numpy `default_rng` with seed 17.

## Clusters

Connected components at 0.80 are built by linking every pair of companies in a
batch at or above the threshold and taking the components of the resulting
graph. They are transitive: a 46-company component does not mean 46 companies
that all resemble each other, it means every pair of them is joined by a path in
steps of 0.80 or better.

## Data funnel

    YC companies listed with a domain field                  6,146
    Unique domains after normalisation                       6,143
    Domains with a vector                                    6,143
    Row under a future batch (Winter 2027), dropped              1
    Companies in the published file                          6,142
    Batches represented                                         48
    Batches with 10+ companies, within-batch stats              46
    Batches with 30+ companies, cohort charts                   37
    Companies in those 37 batches                            5,956

Three rows dropped as duplicate domains, two of them because the listed website
is an app store link (`apps.apple.com` and `itunes.apple.com` both normalise to
`apple.com`). Twenty-one rows had a subdomain removed by normalisation. Most are
harmless (`business.stayflexi.com` to `stayflexi.com`); a few are not
(`play.google.com` to `google.com`, `lakonia.us.com` to `us.com`). Lakonia
(Fall 2025) is excluded from the isolated-company results for that reason.

Eleven batches hold fewer than 30 companies with vectors, 186 companies in
total, and are left out of the cohort charts: the ten batches from Summer 2005
to Winter 2010, and Fall 2026 with 19 companies.
