Y Combinator Companies Scraper - YC Startup Directory
Pricing
from $0.87 / 1,000 companies
Y Combinator Companies Scraper - YC Startup Directory
Search the Y Combinator startup directory by batch (W24, S23), industry, region, tag, status or stage. Each company row has the pitch, batch, status, team size, founded year, location, website, tags and founders with LinkedIn and X links. $0.90 per 1,000 companies.
Pricing
from $0.87 / 1,000 companies
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
Scrape the Y Combinator startup directory by batch, industry or tag: pick a batch like W24, an
industry, a region, a tag or a status, or paste company profile URLs, and get one row per company with
the pitch, the long description, batch, status, team size, founded year, location, website, tags and
the founders with their LinkedIn and X links.
The awkward bit is the founded year. It comes off the company's own profile page, and a fair number
of profiles simply do not carry one, so yearFounded arrives null rather than estimated.
| Input | Batches, industries, regions, tags, statuses, stages, search terms or profile URLs |
| Output | One row per company: pitch, description, batch, status, team size, founded year, location, website, tags, founders with LinkedIn and X links |
| Ceiling | 7,000 companies per run |
| Account needed | None |
| Price | $0.90 per 1,000 companies on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 5,500 |
π What Y Combinator Companies Scraper does
The YC directory is a searchable index of the companies YC lists, and each company also has its own profile page. This reads both and joins them into one row.
The directory card gives you the name, one-liner, batch, status, team size, industries, regions, tags, logo and website. The profile page adds the founders with their titles and bios, the year the company was founded, the city and country, and links to LinkedIn, X, Facebook, Crunchbase and GitHub. Every row has the same keys whichever way you searched.
Filters combine the way you would expect. Values inside one list are OR'd together, and different
lists narrow each other. Ask for W24 and S23 with industries: ["B2B"] and you get B2B
companies from either batch.
π What data you get from each Y Combinator company
| What you get | Field |
|---|---|
| The company, its slug, the directory id and its YC page | name, slug, companyId, ycProfileUrl |
| The pitch and the long description | oneLiner, longDescription |
| Batch, status, stage and team size | batch, batchCode, status, stage, teamSize |
| Industries, tags and regions | industry, industries, subindustry, tags, regions |
| Where it is, and its website | location, city, country, website |
| The year it was founded, and when its directory record was created | yearFounded, launchedAt |
| The founders, with titles, bios and LinkedIn and X links | founders, founderNames, founderCount |
| The company's own social links | linkedinUrl, twitterUrl, facebookUrl, crunchbaseUrl, githubUrl |
| Logo and names it traded under before | logoUrl, formerNames |
| Hiring, top company and non-profit flags | isHiring, topCompany, nonprofit |
| Which of your searches found it | query, scrapedAt |
βΆοΈ How to scrape Y Combinator companies
- Open Y Combinator Companies Scraper and click Try for free.
- Put batches in Batches, or terms in Search terms, or slugs in Company profile URLs.
- Narrow it with Industries, Regions, Tags or Company status if you want.
- Set Maximum companies, keeping it low on the first run.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it from the Apify API.
Run it with the input empty and you get one labelled sample row back, which is not charged.
π° How much does it cost to scrape Y Combinator companies?
$0.90 per 1,000 companies on the Free plan. Paid plans pay a little less: $0.89 on Starter, $0.88 on Scale and $0.87 on Business. On the free plan, the $5 Apify gives you each month covers about 5,500 companies.
One charge per company row. The same company returned by two of your filters is only charged once.
Sample rows and diagnostic rows are never charged, and neither are companies a stage filter leaves
out. Reading each company's profile page for the founders does not change the rate: it is the same
per company with includeFounders on or off.
π₯ What you give it
Every field is optional.
{"batches": ["W24", "S23"],"industries": ["B2B"],"statuses": ["Active"],"maxItems": 200}
| Field | Default | What it is |
|---|---|---|
batches | none | Short (W24, S23, F24, P25) or long (Winter 2024). Up to 60. Each is queried separately, so ten batches and 100 rows gives ten from each. |
industries | none | The directory's own labels: B2B, Consumer, Healthcare, Fintech and so on. Up to 60. |
regions | none | The directory's region labels, like United States of America, Europe, India, Remote. Up to 60. |
tags | none | The free-form profile tags, like Generative AI, Marketplace, Open Source. Up to 60. |
statuses | all four | Active, Acquired, Public, Inactive. |
stages | both | Early, Growth. The directory's search can't filter on stage, so the run reads its results and keeps the companies that match, reading at most ten times maxItems entries a run (1,000 to 10,000). A rare stage can return fewer companies than maxItems, with a free READ_LIMIT row saying so. Searches only, not companyUrls. |
searchTerms | none | Free text across names, pitches and descriptions. Each term is searched on its own. |
companyUrls | none | Up to 500 profile URLs or bare slugs, to look companies up instead of searching. |
allCompanies | off | Sweep the whole directory, batch by batch, newest first. Pair it with a high row limit. |
isHiring | not applied | Three-state. See the note below. |
topCompaniesOnly | off | Only companies the directory marks as top companies. |
nonprofitOnly | off | Only the non-profits. |
includeFounders | true | Reads each profile page too, which is what fills in the founders, founded year, city, country and social links. Turn it off for a lighter run. The price is the same either way. |
maxItems | 20 | Total rows for the run, 1 to 7,000, shared across your batches and terms. |
proxyUrls | none | Leave it empty for a normal run. It is there for callers who want traffic to leave through servers they already pay for, as http://user:pass@host:port. |
isHiring has three states, not two. Leave it out and no hiring filter is applied. Set it true
and you get companies flagged as hiring. Set it to false and you get only the companies that are
not hiring, which is a legitimate query and almost never what somebody means. The Console writes
a literal false into the input once you have ticked the box and unticked it again, so if a run
comes back full of companies that are not hiring, remove the field rather than unticking it.
π€ What you get back
A real row from a run in September 2026, with longDescription and logoUrl cut short. A real row
carries both in full.
{"ok": true, "charged": true, "recordType": "company", "query": "Winter 2024","name": "Indemni", "slug": "indemni","oneLiner": "Cargo Theft and Fraud Prevention Platform","longDescription": "We are building a safer supply chain. Cargo Theft has been increasing yearly, ...","batch": "Winter 2024", "batchCode": "W24", "status": "Active","teamSize": 7, "yearFounded": 2024,"location": "San Francisco, CA, USA", "city": "San Francisco", "country": "US","regions": ["United States of America", "America / Canada", "Remote", "Partly Remote"],"website": "http://www.indemni.com","ycProfileUrl": "https://www.ycombinator.com/companies/indemni","industry": "B2B", "industries": ["B2B", "Supply Chain and Logistics"],"subindustry": "B2B -> Supply Chain and Logistics","tags": ["Identity", "Logistics", "Supply Chain", "Fraud Prevention", "Fraud Detection"],"founders": [{ "name": "...", "title": "Founder","linkedinUrl": "https://linkedin.com/in/...","twitterUrl": "https://twitter.com/...","bio": "Ex-DoorDash, worked on Fraud, Growth and Logistics. Currently building!" }],"founderNames": "...", "founderCount": 1,"linkedinUrl": "https://www.linkedin.com/company/100487698/admin","twitterUrl": null, "facebookUrl": null, "crunchbaseUrl": null, "githubUrl": null,"logoUrl": "https://bookface-images.s3.amazonaws.com/small_logos/a4f88ce8a0...png","formerNames": ["Alacrity"],"isHiring": false, "nonprofit": false, "topCompany": false, "stage": "Early","launchedAt": "2024-02-15T20:40:36.000Z", "companyId": "29533","scrapedAt": "2026-09-21T01:52:29.035Z"}
| Field | How to read it |
|---|---|
companyId | The directory's own id, as a string. Use it as your dedupe key. |
query | Which batch, term or filter produced this row, so you can tell where a result came from when you searched several things at once. |
founders | Objects with name, title, linkedinUrl, twitterUrl and bio. founderNames is the same names flattened for a spreadsheet. |
formerNames | Names the company has traded under before. Useful when your own list is out of date. |
batch, batchCode | Winter 2024 and W24. Both are there so you do not have to convert. |
stage | The directory's own label, Early or Growth. The stages filter reads it. |
launchedAt | When the directory record was created, in ISO UTC. Not the founding date. |
π§Ύ Reading the output
Three kinds of row.
| Row | How to spot it | Billed |
|---|---|---|
| A company | recordType: "company" | yes |
| The sample row | _sample: true, and only when the input named no filter and no URL | no |
| A diagnostic | _diagnostic: true and ok: false | no |
charged is set when the row is built, a moment before the charge goes out, so read it as "this is a
real row" rather than as a receipt. A failed charge adds a CHARGE_ERROR diagnostic at the end.
The Console's default table hides the diagnostic columns, so those rows look blank there. Read them from the JSON.
| Code | What it means |
|---|---|
NO_RESULTS | The filter ran and matched nothing, or nothing at the stage you picked. An unrecognised batch string does this. |
READ_LIMIT | With stages set, the run read as many directory entries as it reads for one and stopped with what matched. |
BAD_INPUT | A value in stages is not Early or Growth. Nothing was searched. |
NOT_FOUND | A slug in companyUrls is not in the directory. |
RATE_LIMITED | The directory would not answer more on this run. Ask for less in one run. |
NOT_SERVED | This company was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED. |
NETWORK | A request could not be completed. Re-run it. |
TIME_BUDGET | The run ran out of time before that slice was read. |
PROXY_INPUT_ADJUSTED | Something in your proxyUrls was not usable and was adjusted. |
π‘ What people use it for
- Pulling a whole batch the week it is announced, for a newsletter or a tracker.
- Filtering the directory for a thesis: a region, an industry and
Activestatus together. - Checking which YC companies in a space are hiring, then pairing it with a jobs scraper.
- Refreshing a stale list, using
formerNamesto catch companies that renamed.
π§ What it does not do
- Companies only. No YC jobs, no Launch YC posts, no news, no funding rounds.
- No founder emails, and no contact details of any kind. Names and social links are what the directory publishes.
yearFounded,city,countryand the social links come from the profile page, so they arenullwhenincludeFoundersis off.- A profile page that fails to load still ships its row, and still bills, with
foundersempty and those profile-only fieldsnull. Nothing on the row separates "could not read" from "not published", so re-run any slug that comes back suspiciously bare. - One filter with no batches tops out at 1,000 matches, because that is as far as the directory's own search will page. Split the request by batch to go further.
- 60 values per filter list, 500 URLs, 7,000 rows in a run. Anything past that is dropped.
- Team size and status are whatever the directory says today. They are not audited and they go stale when a company does not update its own record.
- It is not an official Y Combinator tool. Dami's Studio is independent and is not affiliated with or endorsed by Y Combinator, or by any other company named on this page.
π§ Which startup data scraper do you need?
| If you want | Use |
|---|---|
| The Y Combinator startup directory | This one |
| New product launches, with upvotes and makers | Product Hunt Scraper |
| Startup jobs with the full description, salary and equity | Wellfound Jobs Scraper |
| Company pages on LinkedIn, from the URLs you have | LinkedIn Companies Scraper |
| Newly incorporated UK companies, day by day | New UK Companies Scraper |
β Questions people ask
Do I need a YC login or an API key?
No. Nothing to paste in and nothing to renew.
How do I get one whole YC batch?
Put the batch code in batches and set maxItems above the batch size. A recent batch runs to a few
hundred companies.
Can I get the entire Y Combinator directory?
Tick allCompanies and raise maxItems. It walks batch by batch, newest first, and you pay per
company, so decide the number before you start it.
Why did one filter stop at 1,000 companies?
Because the directory's search pages that far and no further. Add batches and the run splits the
query per batch, which covers the rest.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has
ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP
client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/ycombinator-companies-scraper.
Either way the run happens on your Apify account at the same price.
Is it legal to scrape the YC directory?
The directory and the profile pages are public. Rows carry founders' names and links, which data-protection law covers, so have a reason for collecting them. Apify's write-up on the legality of web scraping is a fair start, and we are not lawyers.
π If something breaks
Open the Issues tab on the actor page. Send the run ID and the input you used. A diagnostic
row's errorCode and the query field on it usually point straight at the filter that went wrong.