Naive prefix-matching assigned 789 unrelated fund filings to startups named "Galaxy" and "Stellar." The fix: filer name must equal the company name exactly, or name + corporate-suffix tokens only. Result: 428 clean filings.
startup_
graveyard
a census of yc outcomes · 2021–2026 · receipts included
What actually happens to startups after the launch tweet? This is a census, not a highlight reel: every Y Combinator company from the 2021–2026 batches — all 3,566 of them — tracked from demo day to whatever came next, using five free public sources and a pipeline where every fact carries its source URL. It is a lifecycle study, not a failure study: the cohort holds every outcome from acquisition to wind-down, and it's that full denominator that makes the rates mean anything. Survival curves come with confidence bands, funding gets tested against death, and silence gets recorded as silence — because most startups never write a goodbye post.
00 / window
three regimes, one cohort
Five years is not an arbitrary slice. The 2021+ window catches three funding climates inside a single comparable population — same accelerator, same selection, same directory, only the weather changed. That is what makes cohort-to-cohort comparison legitimate here and illegitimate almost everywhere else.
the ai-wave cohorts are the largest ever and the least dead — but they are also the youngest, and a young cohort is an unfinished observation, not a healthy one. only the first two regimes have had enough time on the clock to produce a rate worth quoting.
01 / verdict
six numbers that survived the analysis
Every number below carries its denominator, its cohort window, and — where it's a rate — a Wilson 95% confidence interval. The most interesting finding is a null result, which is exactly why it's publishable.
of the ZIRP-peak 2021 batch is gone five years later. The correction was real — but quieter than the discourse suggested.
What you build matters more than when. Consumer startups die at 3.5× the healthcare rate, and the confidence intervals don't touch.
Companies with no Form D on file die at 14.2%; companies that filed $5M+ die at 11.1%. The intervals overlap. Money postpones the question; it doesn't answer it.
Most startups die silently. No founder letter, no HN thread, no news story — just a website that stops answering. The failure discourse is written by the loudest 2%.
Homepage-notice mining caught companies listed as "inactive" that were actually acquired (Fabius, Flike, Launcher Labs). Directory labels lag reality; receipts don't.
Fundraising events pulled straight from SEC EDGAR filings — dollar amounts from the filings themselves, not press-release rounding.
02 / survival
how cohorts actually decay
Kaplan-Meier survival per cohort year, with Greenwood 95% bands. Companies enter at their batch start (winter = jan, spring = apr, summer = jun, fall = sep); death is proxied by the last month a company's website returned HTTP 200 to the Wayback Machine; active, acquired, and public companies are right-censored at the export date — an acquisition is not a death, and acquisition dates aren't public. The 2021 cohort — funded at the peak — sits at 81.2% survival at month 66.
y-axis starts at 70% — no cohort's curve goes below it. survival at last observed month: 2021 → 81.2%, 2022 → 86.1%, 2023 → 87.1%.
| company | announced | proxy says | delta | evidence |
|---|
the proxy runs late: websites outlive companies (median +3 months; moxion power's site zombied for 20). read km lifespans as upper bounds — that's a documented bias, not a footnote.
03 / mortality
what you build decides how you die
Shutdown rate by industry, 2021–23 cohorts only (later cohorts haven't had time to die yet). Whiskers are Wilson 95% intervals — small industries get honest, wide ones.
consumer's interval [20.5%, 33.8%] clears healthcare's [4.8%, 11.7%] with room to spare — one of the few differences in this dataset that survives its own error bars.
2024–26 cohorts look immortal because they're young, not because they're better. this is right-censoring wearing a flattering outfit.
04 / money
funding doesn't buy survival
Every company matched against SEC EDGAR Form D filings — exact-name matching, ambiguity dropped, amounts from the filings. Then the obvious question: do funded companies die less? Within this window, not detectably.
all three intervals overlap. and the honest caveats: "no form d found" ≠ "raised nothing" (only us exempt offerings get filed), and selection effects — better companies raise more — likely make money's causal effect even smaller than the observed 3pp gap.
05 / the build
five sources, one duckdb file, $0
The dataset is the product. Everything below is free public data — the price is politeness delays, entity-resolution rigor, and recording every check so nothing runs twice. Any step can be re-run safely; every fact carries its source URL.
ingest (per source) ─→ resolve (canonical id + guards) ─→ enrich (llm, receipts) ─→ export ─→ dashboard │ duckdb · data/lifecycle.duckdb · 8 tables · idempotent upserts on natural keys
the sources
| source | provides | politeness |
|---|---|---|
| yc directory | The cohort itself with labeled outcomes — the denominator every rate in this report divides by. | static json |
| wayback cdx | Monthly website-liveness timeline per company; last live snapshot is the death-date proxy. | 1s delay |
| wayback snapshots | Final-homepage shutdown notices — founder-letter-grade evidence, mined and human-reviewed. | 3s + 30s backoff |
| hn (algolia) | Launch posts, shutdown threads, community post-mortems — comments say what founder letters won't. | 0.3s delay |
| sec edgar | Form D fundraising events with dollar amounts, straight from the filings. | 0.5s + declared ua |
considered and rejected: crunchbase (five figures), linkedin (tos + litigation), x (api cost). the price of $0 data is patience.
the schema
| table | contents | natural key |
|---|---|---|
| companies | Canonical company — slug, name, apex domain, batch, cohort year, status, industry, team size. | company_id |
| company_sources | Per-source identity plus the raw record: the entity-resolution ledger. | company_id + source |
| funding_rounds | Form D filings with amount_usd (totalAmountSold, falling back to totalOfferingAmount) and filing URL. | source_url |
| timeline_events | One dated stream of everything — yc_listed, funding, layoff, shutdown_notice. A company page is an ORDER BY. | — |
| wayback_snapshots | One row per company-month with its HTTP status: the liveness heartbeat. | company_id + month |
| wayback_notices | Final-snapshot checks; a null phrase means "checked, found nothing" — which is what makes the miner resumable. | company_id |
| hn_mentions | Hacker News stories that survived the homonym filter. | company_id + story_id |
| shutdown_enrichment | LLM extraction: reasons, category, confidence, and a verbatim quote + source URL, both NOT NULL. | company_id |
every ingester is idempotent — insert-or-replace on the natural key — so any step can be re-run without duplicating a single row.
rebuild it yourself
git clone https://github.com/rohitvpgawli/why-startups-die && cd why-startups-die python3 -m venv .venv && .venv/bin/pip install -r requirements.txt # duckdb, httpx, anthropic lifecycle init-db apply schema.sql lifecycle ingest-yc ~30s · 3,566 companies lifecycle ingest-wayback --status Inactive ~30min · liveness timelines lifecycle ingest-hn --status Inactive ~10min · hn mentions lifecycle ingest-edgar ~75min · form d, full cohort lifecycle ingest-wayback-notices ~20min · resumable; re-run to retry errors lifecycle enrich needs ANTHROPIC_API_KEY; skips enriched lifecycle export && dashboard/build.py export.json → self-contained dashboard
scripts/refresh.sh chains the whole thing. re-running later grows the dataset — new deaths arrive as yc flips a directory status, which is the one part of this pipeline nobody controls.
the actual hard part: entity resolution
Companies named June, Cache, Fable, and Nexus match endless unrelated news. A story counts only if the company's domain is in the URL, or the exact name appears in the title alongside startup-context tokens ("YC", "Show HN", "shut down", "raises").
A company matching more than two distinct SEC CIKs is dropped entirely. A filing matching two different YC companies (there are two "Hyper"s) is dropped for both. Recall is sacrificed for precision, on purpose, everywhere.
"Acquired by" on a homepage only counts if it's about this company — team-bio brags about other companies' exits were rejected on manual review. Human review of snippets is a pipeline step, not a nice-to-have.
Every resolution rule is pinned to the concrete failure that motivated it — Galaxy-fund pollution, Abel/June homonyms, month-name subjects. Writing the tests caught two further live filter leaks.
Claude Opus 4.8 extracts shutdown reasons under structured output, into an eleven-term controlled vocabulary — but confidence is capped by source quality (founder letter ≤ 0.9, community ≤ 0.7, dead-website inference ≤ 0.4), and a verbatim quote + source URL is mandatory. No receipt, no row.
licence · code (src, dashboard, scripts, schema, tests) under mit · data compilation under cc by 4.0. both permit commercial use; the data asks for attribution.
gawli, r. (2026). the startup lifecycle project: outcomes of y combinator startups, 2021–2026 batches. data release v1.0.0.
06 / registry
the graveyard, row by row
All 300 companies the YC directory marks inactive — each with its lifespan, last sign of life, Form D filings, HN record, and (where the public record supports one) an evidence-linked shutdown reason. Companies, not people; outcomes, not morality plays.
07 / limitations
disclose these when citing
A dataset that hides its weaknesses is marketing. These are the load-bearing caveats.
form d ≠ funding. Only US exempt offerings actually filed appear; "no Form D found" does not mean "raised nothing."
correlation only. The funding-vs-death comparison is correlational; selection effects likely shrink money's causal role further.
labels lag. YC's own statuses trail reality — "inactive" conflates shutdown, zombie, and pivoted-elsewhere, and we caught quiet acquisitions hiding in it.
enrichment is honest, not complete. ~10 evidence-backed shutdown reasons out of 300 deaths, because that is all the public record supports.
precision over recall. Common-word company names are dropped from EDGAR rather than guessed.
the proxy runs late. Websites outlive companies (median +3 months, one 20-month zombie); KM lifespans are upper bounds.
the archive throttles. archive.org rate-limits sustained crawls, so coverage is a function of patience. Every check is recorded — including the ones that found nothing — so a re-run only visits what it hasn't seen.