himself65/yc-reader
> Look up Y Combinator companies, batches, and startup ecosystem data using the yc-oss API (read-only). Use this skill whenever the user wants to research YC-backed startups, find companies in a specific batch or industry, check which YC companies are hiring, explore top YC companies, or analyze startup trends by sector or tag. "top Y Combinator companies", "find YC companies tagged AI", "W25 batch", "S24 companies", "YC stats", "Y Combinator portfolio", "startup research", "which YC companies do X", "venture research on YC", any mention of Y Combinator, YC batch, or YC-backed companies in the context of startup research, venture analysis, or market intelligence. This is a read-only data source — the API is a static JSON dataset updated daily.
npx skills add https://github.com/himself65/finance-skills --skill yc-reader
Fetches Y Combinator company data from the yc-oss/api, an unofficial open-source API that indexes all publicly launched YC companies. The data is sourced from YC's Algolia search index and updated daily via GitHub Actions.
This is a read-only data source. It provides company profiles, batch listings, industry/tag breakdowns, hiring status, and diversity data. No write operations exist — the API serves static JSON files.
No authentication required. The API is public and free. Just use curl to fetch JSON endpoints.
This skill only needs curl (to fetch data) and jq (to parse/filter JSON). Both are pre-installed on most systems.
!`(command -v curl > /dev/null && echo "CURL_OK" || echo "CURL_MISSING") && (command -v jq > /dev/null && echo "JQ_OK" || echo "JQ_MISSING")`
If JQ_MISSING, install it:
# macOS
brew install jq
# Linux (Debian/Ubuntu)
sudo apt-get install jq
If jq is unavailable, you can still fetch raw JSON with curl and parse it inline with Python or other tools — but jq makes filtering much easier.
Match the user's request to the appropriate endpoint. See references/api_reference.md for full details.
| User Request | Endpoint | Notes |
|---|---|---|
| Overall YC stats | meta.json | Company count, batch list, industry/tag lists |
| All companies | companies/all.json | Full dataset (~5,700 companies) — large response |
| Top companies | companies/top.json | ~91 top-performing YC companies |
| Companies hiring | companies/hiring.json | ~1,400 currently hiring |
| Non-profit companies | companies/nonprofit.json | YC-backed non-profits |
| Diversity data | companies/black-founded.json, hispanic-latino-founded.json, women-founded.json | Founder diversity |
| Specific batch | batches/{batch-name}.json | e.g., winter-2026.json, spring-2026.json, fall-2025.json |
| Single company profile | batches/{batch-name}/{slug}.json | e.g., batches/summer-2009/stripe.json, batches/winter-2009/airbnb.json |
| By industry | industries/{industry}.json | e.g., fintech.json, healthcare.json |
| By tag | tags/{tag}.json | e.g., ai.json, developer-tools.json |
Batches use {season}-{year} format: winter-2026, spring-2026, summer-2026, fall-2025. Older batches follow the same pattern back to summer-2005. The short form (w09, s21) also works for the per-company endpoint.
Use lowercase with hyphens for multi-word names: real-estate, developer-tools, machine-learning.
https://yc-oss.github.io/api/
# Fetch and pretty-print
curl -s https://yc-oss.github.io/api/companies/top.json | jq .
# Count companies in a result
curl -s https://yc-oss.github.io/api/batches/winter-2025.json | jq length
# Filter by field (e.g., hiring companies in a batch)
curl -s https://yc-oss.github.io/api/batches/winter-2025.json | jq '[.[] | select(.isHiring == true)]'
# Extract specific fields
curl -s https://yc-oss.github.io/api/companies/top.json | jq '.[] | {name, one_liner, batch, team_size, website}'
# Search by name (case-insensitive)
curl -s https://yc-oss.github.io/api/companies/all.json | jq '[.[] | select(.name | test("stripe"; "i"))]'
-s flag with curl to suppress progress outputjq for readable output and filteringcompanies/all.json unless necessary — it's a large response (~5,700 companies). Prefer more specific endpoints (batches, industries, tags) when possiblejq select/filter to narrow results client-side when the API doesn't have a specific endpoint for what the user wantswinter-2025 not Winter 2025 or W25developer-tools not Developer Tools| Filter | Purpose |
|---|---|
| jq length | Count results |
| jq '.[0]' | First company |
| jq '.[:10]' | First 10 companies |
| jq '[.[] \| select(.isHiring == true)]' | Only hiring companies |
| jq '[.[] \| select(.status == "Active")]' | Only active companies |
| jq '[.[] \| select(.team_size > 100)]' | Companies with 100+ employees |
| jq '.[] \| {name, one_liner, batch, website}' | Select specific fields |
| jq '[.[] \| select(.name \| test("query"; "i"))]' | Search by name |
| jq 'sort_by(-.team_size) \| .[:10]' | Top 10 by team size |
After fetching data, present it clearly for startup/venture research:
If a request fails:
| Error | Cause | Fix |
|-------|-------|-----|
| 404 Not Found | Invalid batch, industry, or tag name | Check meta.json for valid names |
| Empty array [] | No companies match the query | Broaden the search or check spelling |
| curl: Could not resolve host | No internet connection | Check network connectivity |
| Large/slow response | Fetching companies/all.json (5,700+ entries) | Use a more specific endpoint or add jq filters |
To discover valid batch, industry, and tag names:
# List all batches
curl -s https://yc-oss.github.io/api/meta.json | jq '.batches[].name'
# List all industries
curl -s https://yc-oss.github.io/api/meta.json | jq '.industries[].name'
# List all tags (there are 333+)
curl -s https://yc-oss.github.io/api/meta.json | jq '.tags[].name'
references/api_reference.md — Complete endpoint reference with company schema, all endpoint URLs, and research workflow examplesRead the reference file when you need the exact company field schema, valid batch/industry/tag names, or detailed research workflow patterns.
Take himself65/yc-reader from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference brew, apt.
Without those the skill loads but fails at the first command.