corralm
yc-scraper
Python

✌️Y Combinator directory scraper

Last updated May 22, 2026
99
Stars
39
Forks
0
Issues
0
Stars/day
Attention Score
23
Language breakdown
Python 54.6%
JavaScript 26.4%
CSS 11.4%
HTML 7.6%
Files click to expand
README

Y Combinator Directory Scraper

License: MIT Python 3.11+

A Python scraper for extracting company data from the Y Combinator directory, featuring an interactive web-based explorer.

Features

  • 🚀 User-Friendly Selenium Scraping: No API keys required - just Firefox and geckodriver
  • 💾 30-Day URL Caching: Avoid unnecessary re-scraping
  • 🔄 Checkpoint/Resume: Recover from interrupted scrapes
  • 🎯 Flexible Batch Filtering: Select specific batches or recent N batches
  • 🌐 Interactive Web Explorer: Browse and filter companies with a sleek UI
  • 📊 Rich Dataset: Includes founder profiles with bios and social links

About Y Combinator

Y Combinator is a startup accelerator that has invested in over 4,000 companies with a combined valuation exceeding $600B. Notable alumni include Airbnb, Stripe, DoorDash, Coinbase, and Reddit.

Requirements

Installing geckodriver

macOS:

brew install geckodriver

Linux:

wget https://github.com/mozilla/geckodriver/releases/download/v0.35.0/geckodriver-v0.35.0-linux64.tar.gz tar -xvzf geckodriver-v0.35.0-linux64.tar.gz sudo mv geckodriver /usr/local/bin/

Windows: Download from GitHub releases and add to PATH.

Installation

  • Clone the repository
git clone https://github.com/corralm/yc-scraper.git
   cd yc-scraper
  • Create a virtual environment (recommended)
python -m venv .venv
   source .venv/bin/activate  # On Windows: .venv\Scripts\activate
  • Install dependencies
pip install -r requirements.txt

Usage

Quick Start

# Step 1: Extract company URLs (takes 10-15 minutes)
python yclinksextractor.py

Step 2: Scrape company data

cd scrapy-project scrapy runspider ycombinator/spiders/yscraper.py -o output.jl

Step 3: Analyze data with Pandas

python -c "import pandas as pd; df = pd.read_json('output.jl', lines=True); print(df.head())"

Step 1: Extract Company URLs

python yclinksextractor.py

This script:

  • Opens the YC directory in headless Firefox
  • Iterates through all batch filters (Summer 2007 - present)
  • Collects unique company URLs
  • Saves to scrapy-project/ycombinator/start_urls.txt

Step 2: Scrape Company Data

cd scrapy-project
scrapy runspider ycombinator/spiders/yscraper.py -o output.jl

Supported output formats:

  • JSON Lines (.jl) - Recommended for large datasets
  • JSON (.json) - Standard JSON array
  • CSV (.csv) - Spreadsheet format

Step 3: Analyze Data

import pandas as pd

Load data

df = pd.read_json('output.jl', lines=True)

Basic statistics

print(f"Total companies: {len(df)}") print(f"Active companies: {len(df[df['status'] == 'Active'])}")

Top industries

print("\nTop 10 Industries:") print(df['tags'].explode().value_counts().head(10))

Geographic distribution

print("\nTop 10 Locations:") print(df['location'].value_counts().head(10))

Optional: Launch Web Explorer

After scraping, you can launch an interactive web-based explorer:

# Convert scraped data to JSON format for the web UI
python scripts/convertoutputto_json.py

Launch local web server

python -m http.server 3000

Then open http://localhost:3000 in your browser.

Web Explorer Features:

  • 🔍 Real-time search and filtering by batch, tags, and keywords
  • 📊 Sortable directory with ascending/descending options
  • 👥 Full founder profiles with bios and social links
  • 📥 Export filtered results as JSON
  • ⚡ Lazy loading for smooth performance with thousands of companies

Data Schema

| Attribute | Description | Type | |-------------------|-----------------------------------|--------| | company_id | Company ID provided by YC | int | | company_name | Company name | string | | short_description | One-line description | string | | long_description | Full company description | string | | batch | YC batch (e.g., "W23", "S24") | string | | status | Active, Inactive, Public, etc. | string | | tags | Industry tags | list | | location | City | string | | country | Country code | string | | year_founded | Year founded | int | | num_founders | Number of founders | int | | founders_names | List of founder names | list | | founder_details | Extended bios and social links | list | | team_size | Number of employees | int | | website | Company website | string | | cb_url | Crunchbase URL | string | | linkedin_url | LinkedIn URL | string |

Example Output

| companyid | companyname | batch | status | location | yearfounded | teamsize | |------------|--------------|-------|--------|---------------|--------------|-----------| | 240 | Stripe | S09 | Active | San Francisco | 2010 | 7000 | | 271 | Airbnb | W09 | Public | San Francisco | 2008 | 6132 | | 325 | Dropbox | S07 | Public | San Francisco | 2008 | 4000 | | 439 | Coinbase | S12 | Public | San Francisco | 2012 | 6112 | | 531 | DoorDash | S13 | Public | San Francisco | 2013 | 8600 |

Troubleshooting

Issue: WebDriverException: 'geckodriver' executable needs to be in PATH

Solution:

brew install geckodriver  # macOS geckodriver --version     # Verify installation


Issue: FileNotFoundError: Start URLs file not found

Solution: Run python yclinksextractor.py first to generate the URLs file.


Issue: Scraper gets stuck or times out

Solution:

  • Check your internet connection
  • Verify Firefox isn't already running
  • Ensure YC website is accessible: curl https://www.ycombinator.com/companies

Debug Mode

Enable verbose logging:

LOGLEVEL=DEBUG python yclinksextractor.py

Data Analysis Examples

Companies by Batch

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_json('output.jl', lines=True) active = df[df['status'] == 'Active']

batchcounts = active['batch'].valuecounts().sort_index() batch_counts.plot(kind='bar', figsize=(15, 5)) plt.title('Active YC Companies by Batch') plt.show()

Industry Trends

# Most common industries
tags = df['tags'].explode()
top15 = tags.valuecounts().head(15)
print(top_15)

Geographic Analysis

# Companies by country
countries = df['country'].value_counts()
print(countries.head(10))

Dataset

For a pre-scraped dataset, check out Y Combinator Directory on Kaggle.

License

MIT License - see LICENSE for details.

Contributors

Original Author: Miguel Corral Jr.

Web Explorer Contributor: Tario You

Last Updated: October 2025

© 2026 GitRepoTrend · corralm/yc-scraper · Updated daily from GitHub