Y Combinator Companies Scraper - $0.90 per 1,000 avatar

Y Combinator Companies Scraper - $0.90 per 1,000

Pricing

from $0.90 / 1,000 company scrapeds

Go to Apify Store
Y Combinator Companies Scraper - $0.90 per 1,000

Y Combinator Companies Scraper - $0.90 per 1,000

Filter the YC startup directory by batch (W24, S23), industry, region, tag or status and get one row per company: pitch, batch, status, team size, founded year, location, website, tags, and founder names with LinkedIn links. $0.90 per 1,000. No key, no login, no browser.

Pricing

from $0.90 / 1,000 company scrapeds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Y Combinator Companies Scraper

Ask for a batch (W24, S23, F24), an industry, a region, a tag or a status, and you get back the YC companies that match, one row each. If you already know which companies you want, paste their profile URLs instead and skip the searching.

A row carries the one-line pitch and the long description, the batch, whether the company is active, acquired, public or inactive, its team size, founding year, location, website, industries and tags. Founders come with it: name, title, and a LinkedIn link where the founder published one.

It reads the public search index the directory itself uses. No account, no API key, no browser.

Price

$0.90 per 1,000 companies, plus a $0.0005 start fee per run.

CompaniesTotal
100$0.0905
1,000$0.9005
10,000$9.0005

One company-scraped event per company row. That's the only per-row charge. Free: the sample row an empty run writes, and every diagnostic row — a filter that matched nothing, a profile URL that doesn't exist, a network problem. Those all carry "charged": false. Companies that already appeared earlier in the same run are dropped before they're charged, so a company matching two of your filters costs you once.

Filter the dataset on charged == true and the count equals the number of events you were billed for.

Input

{
"batches": ["W24", "S23"],
"industries": ["B2B"],
"statuses": ["Active"],
"maxItems": 50
}
FieldWhat it does
batchesShort (W24, S23, F24, P25) or long (Winter 2024). Up to 60 per run. Each batch is a separate query and the row budget is split between them.
industriesThe directory's own labels: B2B, Consumer, Healthcare, Fintech, Industrials, Education, Climate. Several values are OR'd.
regionsUnited States of America, Europe, India, Latin America, Africa, Remote. Also OR'd.
tagsProfile tags: Artificial Intelligence, SaaS, Developer Tools, Marketplace, Open Source.
statusesAny of Active, Acquired, Public, Inactive. Empty means all four.
searchTermsFree text over names, pitches and descriptions. Each term is searched on its own and can be combined with the filters.
companyUrlsProfile URLs or bare slugs, up to 500 per run, if you'd rather look companies up than search for them.
allCompaniesSweep the whole directory instead of filtering. Pair it with a high maxItems.
isHiringOnly companies flagged as hiring on their card.
topCompaniesOnlyOnly the ones the directory marks as top companies.
nonprofitOnlyOnly the non-profits.
includeFoundersOn by default. This is what reads each company's own profile page, and it's the only source of yearFounded, founders, city, country and the social links. Turn it off for a faster run. Price per company is the same either way.
maxItemsTotal rows across everything you asked for, split evenly. Default 20, ceiling 7,000.
proxyUrlsLeave empty. It's here for people who already pay for proxy servers and want traffic to leave through them.

Run it with empty input and you get one labelled sample row, free, so you can see the shape before spending anything.

Output

{
"ok": true,
"charged": true,
"recordType": "company",
"query": "Winter 2014",
"name": "Cruise",
"slug": "cruise",
"oneLiner": "Self-driving cars.",
"longDescription": "Cruise is building the world's most advanced, all-electric, self-driving car technology...",
"batch": "Winter 2014",
"batchCode": "W14",
"status": "Acquired",
"teamSize": 3000,
"yearFounded": 2013,
"location": "San Francisco, CA, USA",
"city": "San Francisco",
"country": "US",
"regions": ["United States of America", "America / Canada", "Remote"],
"website": "http://getcruise.com",
"ycProfileUrl": "https://www.ycombinator.com/companies/cruise",
"industry": "Industrials",
"industries": ["Industrials", "Automotive"],
"subindustry": "Industrials -> Automotive",
"tags": ["Autonomous Delivery", "Machine Learning", "Climate", "AI"],
"founders": [
{
"name": "Kyle Vogt",
"title": "Founder/CEO",
"linkedinUrl": "https://www.linkedin.com/in/kylevogt/",
"twitterUrl": null,
"bio": "Kyle started Cruise in 2013, eventually selling it to GM for $1 billion."
}
],
"founderNames": "Kyle Vogt, Daniel Kan",
"founderCount": 2,
"linkedinUrl": "https://www.linkedin.com/company/getcruise/",
"twitterUrl": "https://twitter.com/Cruise",
"facebookUrl": "https://www.facebook.com/cruiseautomation/",
"crunchbaseUrl": "https://www.crunchbase.com/organization/cruise",
"githubUrl": null,
"logoUrl": "https://bookface-images.s3.amazonaws.com/small_logos/b9aae9....png",
"formerNames": [],
"isHiring": false,
"nonprofit": false,
"topCompany": true,
"stage": "Growth",
"launchedAt": "2013-11-20T20:18:37.000Z",
"companyId": "590",
"scrapedAt": "2026-08-16T19:48:58.631Z"
}

A few fields worth explaining:

  • batch and batchCode are the same thing twice: Winter 2024 and W24. Companies with no batch on record read Unspecified.
  • teamSize is whatever the company last reported, not a live headcount.
  • location is the free-text string on the directory card. city and country come from the profile page, so they're null when includeFounders is off.
  • founders is an array of {name, title, linkedinUrl, twitterUrl, bio}. founderNames is the same names joined with commas, for spreadsheets that choke on nested arrays.
  • launchedAt is when the company first appeared on the directory, not when it was founded. That's yearFounded.
  • companyId is the directory's own numeric id as a string. It's stable across runs, so use it as your key when you re-run.

How the row budget is split

The search index answers at most 1,000 hits for any one query. That only matters if you ask for more than that, and it's handled two ways:

Several batches in one run get a query each, so ten batches and 200 rows gives you twenty companies per batch rather than two hundred from the first one. A batch smaller than its share just returns fewer; the leftover isn't handed to the others.

Set allCompanies with maxItems above 1,000 and the run walks the batch list itself, newest first. The biggest batch holds under 400 companies, so no single query ever hits the ceiling and the whole directory (roughly 6,200 companies) is reachable in one run.

Free-text terms work the same way — equal share each, and a company already delivered by an earlier term is skipped instead of charged twice.

Limits

  • Companies only. Job postings, launches, news and demo-day videos aren't in scope.
  • yearFounded is only as complete as the directory. About four companies in five publish one; the rest read null.
  • A company that lists no founders publicly comes back with an empty founders array. In a sample of 50 companies spanning 2005–2025 that was about one in twenty-five, mostly the oldest and newest entries.
  • Founder emails aren't published anywhere on the directory, so they aren't in the output and no attempt is made to guess them.
  • Some long-dormant entries from the earliest batches have no pitch and no tags, so oneLiner and tags can be empty on those.
  • Team size, hiring flag and status are a snapshot at read time. If the company edits its profile a minute later, your row is already stale.
  • Unspecified shows up in batch, region and industry on older entries. That's what the directory holds, not a scraping failure.
  • A single filter combination that genuinely matches more than 1,000 companies and isn't split by batch will stop at 1,000.
  • Turn includeFounders off and yearFounded, founders, city, country and the social links all come back null. Those live on the profile page, not the directory card.
  • Hard ceilings: 7,000 rows per run, 60 values per filter list, 500 company URLs per run.
  • The directory is the only source. Funding amounts, valuations, revenue and investor lists aren't published there, so they aren't here either.

Rows you'll see

Three kinds, easy to tell apart:

  • Real rows: "charged": true, "recordType": "company".
  • The sample row: "_sample": true, "charged": false. Exactly one, only on an empty run.
  • Diagnostics: "_diagnostic": true, "charged": false, plus an errorCodeNO_RESULTS, NOT_FOUND, NETWORK, RATE_LIMITED, TIME_BUDGET. Each carries a plain-English error and the query or inputUrl it belongs to.

A blocked or broken target produces a diagnostic row and the run still finishes as succeeded. A failed run would still bill the start fee, which would mean paying to be told something went wrong.

Questions

How do I get a whole batch? Put it in batches and set maxItems above its size. The biggest batch to date holds just under 400 companies.

How do I get every company? Tick allCompanies and set maxItems to 7000. The run walks the batch list newest first and stops when it runs out of companies or budget.

Can I get founder emails? No. The directory doesn't publish them. You get names, titles, and LinkedIn and X profiles where the founder linked one.

Do I need a proxy? No. The run brings its own egress and that cost is already in the price.

Can I schedule it? Yes. Nothing is held between runs. Diff on companyId to see what's new.