How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
W24in Batches. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Scrape the public Y Combinator company directory (ycombinator.com/companies) and get one clean row per YC startup: batch, status, industry, location, team size, website, founders with LinkedIn and X links, open jobs and the YC partner. No login, no cookies and no API key.
- Search the directory (
mode: "search", default): keep the companies that match your filters, newest batches first. - Look up specific companies (
mode: "companies"): give up to 1000 company slugs or YC URLs and get one row for each.
Good for
- Build a lead list of YC startups from one batch, industry or region.
- Find founders of YC companies and their public LinkedIn and X profiles.
- Find YC startups that are hiring now, with job titles, salary and equity ranges as listed on YC.
- Get only the companies added since your last run (for a weekly or daily schedule).
Not a good fit
- No emails or phone numbers. The Actor never returns founder emails or phone numbers, and it removes them from descriptions and bios.
- Only public data from ycombinator.com. No Bookface, no private YC data, no funding amounts or valuations.
- The Actor does not visit company websites, LinkedIn or X. Links are copied as YC shows them.
- Data is as fresh as the YC directory at run time. Team size, status and jobs are what founders reported to YC; they can be out of date.
Who uses it
B2B sales teams
Build a lead list of startups from one YC batch.
Recruiters and job seekers
Find YC startups that are hiring now.
Investors and analysts
Map an industry with YC companies and their status.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.003 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Company (directory fields) | $0.0009 (from $0.00075 on paid Apify plans) | One saved company row without founders: includeFounders off, a partial row, or a not_found lookup. |
| Company with founders | $0.0018 (from $0.0015 on paid Apify plans) | One saved company row with founders, social links, YC partner and open jobs. |
Examples
- One company: about $0.0048.
- 1,000 companies: about $1.80.
- Every day 100 companies, for 30 days: about $5.49 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 2,700 companies.
Prices checked on 24 October 2026. See the current price on Apify.
Questions
Can I get founder emails?
No. The tool returns public LinkedIn and X links, not emails or phones.
How many YC companies are there?
The directory has about 6,300 companies. One run can read them.
Do I need a YC account?
No. The tool reads the public directory only.
Is this an official Y Combinator tool?
No. It is an independent tool that reads the public YC website.
Do I need a YC account, cookies or an API key?
No. The Actor reads only the public directory and public company pages.
How fresh is the data?
Every run reads the YC directory live. Team size, status, hiring and jobs are what each company shows on YC at that moment; YC does not guarantee they are current.
Why are some fields null?
YC does not show that value for this company, or details were not read (includeFounders: false or a partial row).
Details
Step by step on Apify
- Open the Input tab.
- Keep the example: Batches =
W24, Max companies =30. - Keep Include founders, socials and jobs on.
- Click Start.
- Open the Output tab. The Companies view shows one row per company; the Founders & socials view shows founders, links and jobs.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Lead list of startups in one YC batch | batches, industries | company | name, website, oneLiner, linkedinUrl, teamSize | CSV/Excel to a CRM |
| Reach out to founders | batches, includeFounders | company with founders | founders[].name, founders[].title, founders[].linkedinUrl | LinkedIn outreach tools |
| Startups that are hiring | isHiring, regions | company with jobs | openJobsCount, jobs[].title, jobs[].salaryRange, jobs[].url | Recruiting spreadsheet |
| Market map of an industry | industries, status, minTeamSize | company | industry, subindustry, tags, status, batchCode | BI tool / Google Sheets |
| Enrich your own list of YC companies | mode: companies, companies | company with founders | slug, groupPartner, yearFounded, founders | Your database via API |
| Alert on new YC companies | onlyNew, stateKey + a schedule | new companies only | name, batchCode, launchedAt, url | Slack / email via webhook |
Tips for better results
- Use batch codes like W24 or S23 to narrow the list.
- Turn on hiring now to keep startups with open jobs.
- For the full directory with founders, raise the timeout to about 3,600 seconds.
Limits and good to know
errorrows (company page failed incompaniesmode) are free- If you set a maximum cost per run, the Actor stops before it would go over it, keeps the rows it already saved and finishes with a
PARTIALstatus maxItemsup to 10000; the directory has about 6300 companiescompaniesmode: up to 1000 slugs or URLs per run- Full rows take about 0.28 seconds each, because the Actor opens one company page per row and keeps a polite request rate. The default run timeout is 300 seconds (enough for about 900 full rows). For larger runs with founders, raise the timeout in Run options: about 3600 seconds for the whole directory
- If the timeout is close, the Actor stops on its own, keeps all saved rows and finishes with
PARTIAL - Links are returned as companies wrote them on YC. Some of them are outdated or point to a wrong page; the Actor does not check them
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"recordStatus": "complete",
"ycId": 29517,
"name": "RetailReady",
"slug": "retailready",
"url": "https://www.ycombinator.com/companies/retailready",
"website": "https://www.retailreadyai.com/",
"oneLiner": "An AI-powered supply chain compliance engine",
"batch": "Winter 2024",
"batchCode": "W24",
"status": "Active",
"industry": "B2B",
"subindustry": "B2B -> Supply Chain and Logistics",
"industries": ["B2B", "Supply Chain and Logistics"],
"tags": ["B2B", "Compliance", "Logistics", "Supply Chain", "AI"],
"regions": ["United States of America", "America / Canada"],
"location": "San Francisco, CA, USA",
"teamSize": 12,
"isHiring": true,
"isTopCompany": false,
"isNonprofit": false,
"stage": "Early",
"launchedAt": "2024-01-16T16:52:04.000Z",
"detailsIncluded": true,
"yearFounded": 2024,
"city": "San Francisco",
"country": "US",
"linkedinUrl": "https://www.linkedin.com/company/retailreadyai/",
"twitterUrl": null,
"githubUrl": null,
"crunchbaseUrl": null,
"groupPartner": "<YC partner name>",
"foundersCount": 2,
"founders": [
{ "name": "<Founder 1>", "title": "Founder", "bio": "<short bio from YC>", "linkedinUrl": "https://linkedin.com/in/<profile>", "twitterUrl": null },
{ "name": "<Founder 2>", "title": "Founder", "bio": "<short bio from YC>", "linkedinUrl": "https://linkedin.com/in/<profile>", "twitterUrl": null }
],
"openJobsCount": 4,
"jobs": [
{
"title": "Full Stack Software Engineer",
"url": "https://www.ycombinator.com/companies/retailready/jobs/wEGXWv4-full-stack-software-engineer",
"location": "San Francisco, CA, US",
"type": "Full-time",
"role": "Engineering",
"salaryRange": "$110K - $170K",
"equityRange": "0.05% - 0.25%",
"minExperience": "Any (new grads ok)",
"visa": "US citizen/visa only"
}
],
"errorMessage": null,
"source": "ycombinator.com",
"fetchedAt": "2026-10-14T02:07:18.929Z"
}Use it from code
Actor ID: cliqtomedia/y-combinator-companies. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/y-combinator-companies").call(run_input={
"mode": "search",
"batches": [
"W24"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~y-combinator-companies/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "search", "batches": ["W24"]}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/y-combinator-companies")
result = tool.invoke({"run_input": {"mode": "search", "batches": ["W24"]}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (40)
| Field | Type | Meaning |
|---|---|---|
recordStatus | string | complete = all requested data; partial = directory fields only because the company page failed (see errorMessage); not_found = no public YC page for this slug (charged as a directory row); error = page failed in companies mode (free). |
ycId | integer | YC directory company ID. |
name | string | Company name. |
slug | string | YC directory slug, e.g. doordash. Use it in companies mode. |
url | string | YC company page URL. |
website | string | Company website. |
oneLiner | string | Short YC tagline. |
longDescription | string | Long company description from YC. |
batch | string | YC batch name, e.g. Winter 2024. |
batchCode | string | Short batch code, e.g. W24, S23, X25 (Spring), F24 (Fall). |
status | string | Company status in the YC directory: Active, Acquired, Public or Inactive. |
industry | string | Main YC industry, e.g. B2B. |
subindustry | string | YC sub-industry path, e.g. B2B -> Supply Chain and Logistics. |
industries | array | All YC industry labels. |
tags | array | YC tags, e.g. Fintech, AI. |
regions | array | YC region labels, e.g. United States of America, America / Canada. |
location | string | Locations as shown in the directory. |
teamSize | integer | Team size reported to YC. |
isHiring | boolean | true if the company has open jobs on YC. |
isTopCompany | boolean | true if YC lists it as a top company. |
isNonprofit | boolean | true for nonprofits. |
stage | string | Company stage label from YC, e.g. Early, Growth. |
launchedAt | string | When the company profile was launched in the YC directory (ISO 8601). |
formerNames | array | Previous company names. |
logoUrl | string | Company logo URL (only stable, non-expiring links). |
detailsIncluded | boolean | true when the company page was read (founders, socials, jobs). false when includeFounders is off or the page failed. |
yearFounded | integer | Year founded (company page). |
city | string | City (company page). |
country | string | Country (company page). |
linkedinUrl | string | Company LinkedIn URL. |
twitterUrl | string | Company X/Twitter URL. |
facebookUrl | string | Company Facebook URL. |
githubUrl | string | Company GitHub URL. |
crunchbaseUrl | string | Company Crunchbase URL. |
groupPartner | string | YC group partner name. |
foundersCount | integer | Number of founders listed on the YC page. |
founders | array | Founders: name, title, bio, linkedinUrl, twitterUrl. Never emails or phone numbers. null when details were not read. |
openJobsCount | integer | Open jobs listed on the YC page. |
jobs | array | Open jobs: title, url, location, type, role, salaryRange, equityRange, minExperience, visa. null when details were not read. |
errorMessage | string | Why a row is partial, not_found or error; null when complete. |
Input settings (15)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Mode | mode | string | "search" |
| Batches | batches | array | ["W24"] |
| Keyword | search | string | |
| Industries | industries | array | |
| Regions | regions | array | |
| Company status | status | array | |
| Hiring now only | isHiring | boolean | false |
| Top companies only | topCompaniesOnly | boolean | false |
| Min team size | minTeamSize | integer | |
| Max team size | maxTeamSize | integer | |
| Include founders, socials and jobs | includeFounders | boolean | true |
| Companies (companies mode) | companies | array | |
| Only new companies | onlyNew | boolean | false |
| State key | stateKey | string | "default" |
| Max companies | maxItems | integer | 30 |
Use cases with this tool
Each guide shows all the steps and the other tools.