Y Combinator Scraper — Companies, Founders, Jobs
Pricing
from $2.00 / 1,000 companies
Y Combinator Scraper — Companies, Founders, Jobs
Y Combinator startup directory data from ycombinator.com: company name, batch, status, stage, industry, region, tags, team size, website, location, hiring flag, founders, LinkedIn links and open jobs. Search by keyword, batch, industry, region or status. Pay per result, no login.
Pricing
from $2.00 / 1,000 companies
Rating
0.0
(0)
Developer
architek.earth
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a day ago
Last modified
Share
Recorded run: 5 companies from 1 search term in 9.9 seconds (2026-10-22, build 1.0.8, run XJLEyXe2xZShwJnVJ). A bounded canary sample, not a full-catalogue benchmark.
architek.earth — an independent data studio. Pay-per-result scrapers with recorded runs, published canaries and stable schemas, built for people and AI agents.
Y Combinator startup directory companies, batches, industries, team sizes, founders and open jobs from ycombinator.com, by keyword, batch, industry, region, status or hiring flag.
| Source | Market | From | Standout fields |
|---|---|---|---|
| Y Combinator company directory (ycombinator.com/companies) | Global | $2.00 / 1,000 companies | batch / status, industries / regions, founders, openJobs |
✅ Why choose this scraper
YC company directory, one row per company
Every row carries the same 36 company fields, among them name, oneLiner, batch, status, stage, industry, industries, regions, tags, teamSize, website, allLocations, isHiring, topCompany and url. Rows are de-duplicated by id.
YC founders, LinkedIn profiles and open jobs
With includeFounders: true each row adds founders (fullName, title, founderBio, linkedinUrl, twitterUrl), founderNames, founderLinkedIns, the company linkedinUrl and crunchbaseUrl, yearFounded, city, country, openJobs and jobCount. Run 0yGGPKCUHKC1B5cOs returned 2 companies with 4 founders and 4 jobs in 6.5 seconds on 2026-10-22.
Filter YC startups by batch, industry, region and status
batches, industries, regions, status, isHiring and topCompaniesOnly map to the directory's own filters: values inside one list are OR, separate filters are AND. sortNewest switches to launch-date order.
Free preview before paying
preview: true returns up to 10 basic company rows without charge, 20 times per Apify account. Run d67CK64vAs5yU6WoG returned 10 climate companies in 3.4 seconds on 2026-10-22.
Measured on a schedule
A canary task runs a fixed AI search on the live directory and records rows, inputs and seconds; the hero line above is its latest green run.
⚠️ Worth knowing up front
- Public YC directory records only.
hasEmailon a founder is the directory's flag, not an email address; the actor returns no email addresses, funding amounts or valuations. - The 36 fields are always present, not always filled. On basic rows the founder, social-link, city/country and job fields are empty (
[],""ornull).jobCountisnullwhen no job list was supplied and0only when the company page lists none. - When a company page cannot be read (404, a block after retries or a page that does not match the search result), the row keeps its directory data with
detailStatus: "unavailable"and is charged ascompany, notcompany-detail. - The directory search can stop short of its reported total.
RUN_SUMMARYthen showsSOURCE_LIMITwithreportedTotalandsourceLimited;maxItems: 0removes the actor's cap, not the source's limits. - Requests are retried up to 4 times with a fresh session, and the directory's search key is re-read from the page after a 403. A rate-limit cooldown longer than 60 seconds stops the run. A challenge, captcha or consent page is a block on the first response, not missing data. A blocked run ends
PARTIAL(rows kept and charged) orBLOCKED(nothing delivered). The run stops cleanly 60 seconds before its timeout withTIME_LIMIT. - Invalid input, a block, a cooldown over 60 seconds, the run deadline, a spending-limit stop (
BUDGET_LIMIT) and a used-up preview allowance (PREVIEW_LIMIT) end with a free status row ("recordType": "status") that says what happened. A search with no matches writes no status row;RUN_SUMMARYholds the outcome. A spending limit used up exactly by the last row endsCOMPLETE. - Continuation re-runs the search and skips company IDs already delivered. It does not refresh earlier rows, and companies that move in the result order between runs can be missed.
⚡ Try the example
The free preview allows 20 attempts per Apify account, each one search page and up to 10 basic company rows, not charged. Failed attempts count; preview cannot be combined with includeFounders or resumeState, and there is no automatic paid fallback.
Open the actor's input page, switch to JSON, paste this and start the run:
{"query": "climate","preview": true,"maxItems": 10}
Remove preview and raise maxItems for paid collection; add "includeFounders": true for founders, social links and open jobs.
⚙️ Input
| Parameter | Type | Default | Description |
|---|---|---|---|
query | string | "" | Text search over the directory. Empty matches all companies the other filters allow. |
batches | array | — | Exact batch labels as shown on ycombinator.com, for example Summer 2023 or Winter 2025. |
industries | array | — | Industry facets such as B2B, Fintech, Healthcare; sub-industries such as B2B -> Engineering, Product and Design also work. |
regions | array | — | Region facets such as United States of America, Europe, India, Remote. |
status | select | "" (any) | Active, Inactive, Acquired or Public. |
isHiring | boolean | false | Only companies the directory flags as hiring. |
topCompaniesOnly | boolean | false | Only companies on YC's Top Companies list. |
sortNewest | boolean | false | Launch-date order instead of the directory's default order. |
maxItems | integer | 500 (prefill 10) | New unique companies per run. 0 removes the actor's cap, not the source's search limits. |
includeFounders | boolean | false | Fetch each company's YC page for founders, social links, year founded, city, country and open jobs. One extra request per company, charged as company-detail. |
proxyConfiguration | proxy | — (prefill {"useApifyProxy": true}) | Apify datacenter proxy was used in the recorded runs. |
preview | boolean | false | Free preview: one page, up to 10 basic rows, 20 attempts per account. |
resumeState | object | — | The RESUME_STATE record from an earlier run. Query, filters, sort and includeFounders must match; maxItems may change. |
feedback | string | — | Optional note for the maintainers. It is logged and read by a human, and it never changes output. |
🧱 Stable fields
These top-level fields keep the same name and the same kind of value in every release. Fields are only ever added, never renamed or removed, so an n8n, Make, Zapier or spreadsheet pipeline can bind to them.
| Field | Type | Meaning |
|---|---|---|
id / objectId | number / string | YC company id; the de-duplication and join key. |
name / slug / url | string | Company name, directory slug and YC company page. |
formerNames | array | Earlier names listed by YC; [] when none. |
website / smallLogoThumbUrl | string, nullable | Company website and logo thumbnail. |
oneLiner / longDescription | string, nullable | Short and long description. |
allLocations | string, nullable | Location text, for example San Francisco, CA, USA. |
teamSize | number, nullable | Team size as listed by YC. |
industry / subindustry / industries / regions / tags | string / string / array / array / array | YC classifications. |
batch / status / stage | string, nullable | Batch label (Summer 2024), status (Active) and stage (Early). |
launchedAt | number, nullable | Launch time as a Unix timestamp. |
isHiring / topCompany / nonprofit | boolean, nullable | Directory flags. |
founders | array | {userId, fullName, title, founderBio, avatarThumbUrl, twitterUrl, linkedinUrl, hasEmail} per founder; [] on basic rows. |
founderNames / founderLinkedIns | string / array | Founder names joined by commas, and their LinkedIn URLs. |
linkedinUrl / twitterUrl / githubUrl / crunchbaseUrl | string, nullable | Company profile links; null on basic rows. |
yearFounded / city / country | number / string / string, nullable | From the company page; null on basic rows. |
openJobs / jobCount | array / number, nullable | {title, location, url} per job, and their count; jobCount is null when no job list was supplied. |
source / query | string | search and the search text that produced the row. |
detailStatus | string | With includeFounders: complete or unavailable (basic data kept). |
recordType | string | "status" on free status rows; absent on company rows. |
Status rows (free) carry recordType, status and message. Other fields are extras, not part of the contract. To have one pinned, say so in feedback.
📦 Output example
Abridged real row from run XJLEyXe2xZShwJnVJ on 2026-10-22; values are a historical snapshot.
{"id": 29798,"name": "&AI","slug": "ai-2","website": "https://www.tryandai.com/","allLocations": "San Francisco, CA, USA","oneLiner": "Collaborative workspace for patent litigators","teamSize": 7,"industry": "B2B","subindustry": "B2B -> Legal","tags": ["SaaS", "B2B", "LegalTech"],"topCompany": false,"isHiring": false,"batch": "Summer 2024","status": "Active","regions": ["United States of America", "America / Canada"],"stage": "Early","url": "https://www.ycombinator.com/companies/ai-2","founders": [],"jobCount": null,"source": "search","query": "AI"}
With includeFounders: true (abridged, run 0yGGPKCUHKC1B5cOs, 2026-10-22):
{"id": 28822,"name": "Electric Air","batch": "Summer 2023","isHiring": true,"founderNames": "Jeremy Osborne, Chris Mui","founderLinkedIns": ["https://linkedin.com/in/jezosborne","https://www.linkedin.com/in/christophermui/"],"linkedinUrl": "https://www.linkedin.com/company/electric-air-heatpumps/","yearFounded": 2023,"city": "San Francisco","country": "US","openJobs": [{"title": "Heat Pump Sales Engineer","location": "Redwood City","url": "https://www.ycombinator.com/companies/electric-air-2/jobs/w95jORY-heat-pump-sales-engineer"}],"jobCount": 3,"detailStatus": "complete"}
A free status row looks like this (run TCGkjDi8SeWIE5xRY, 2026-10-22):
{"recordType": "status", "status": "INVALID_INPUT", "message": "resumeState does not match this query, filters, sort and detail mode"}
The RUN_SUMMARY record of the run's key-value store holds status (COMPLETE, LIMITED, SOURCE_LIMIT, PARTIAL, BLOCKED, BUDGET_LIMIT, TIME_LIMIT, PREVIEW_LIMIT, INVALID_INPUT or FAILED), companyRows, detailRows, unavailableDetails, rowLimitReached, sourceLimited, reportedTotal and confirmedCompanyIds.
🧠 Advanced usage
Export a whole Y Combinator batch
Set batches to the exact label, for example ["Summer 2023"], leave query empty and set maxItems: 0. Check RUN_SUMMARY.status: COMPLETE means every result the search exposed was delivered; SOURCE_LIMIT means reportedTotal was higher than what the search returned.
Find YC startups that are hiring
Set isHiring: true and includeFounders: true: each row then lists openJobs with title, location and job URL, plus jobCount. Read isHiring as the directory's flag, not a staffing count.
Continue a large YC directory export
After a spending-limit stop, a timeout or a block, open the run's key-value store, copy RESUME_STATE and pass it as resumeState with the same query, filters, sort and includeFounders. Run X9SLY3casDlpUYyRG saved 10 company IDs; run 25rb0f95pHCZATPLi continued from it with 2 new companies and no repeated IDs (2026-10-15).
Track YC company status and team-size changes
Schedule the same search and join runs on id: compare status, teamSize, isHiring and jobCount between snapshots. Omit resumeState so each run is a fresh snapshot.
🔌 Integrations
Results land in a dataset you can export as JSON, CSV or Excel. They can also flow to Google Sheets, Make, Zapier or n8n, or to a webhook when a run finishes. The Apify Scheduler runs it on a timetable. A weekly run catches new companies, status changes and hiring flags; check RUN_SUMMARY before treating a run as full coverage. Copy-paste code in Python, Node, curl and n8n: architek-earth/examples/yc-companies-scraper.
💸 Pricing
Pay per result. Platform and proxy usage are included. Status rows and failed requests are free. Company IDs already saved in RESUME_STATE are skipped and not charged again when you pass it back as resumeState. The checkpoint is saved before each charged batch, so a resumed run never charges a company twice; a run killed during a batch can skip that batch on resume instead.
| Event | Price | What it covers |
|---|---|---|
| Free preview | $0 | Up to 10 basic company rows per attempt, 20 attempts per Apify account. |
company | $2.00 / 1,000 companies | One delivered basic company row, including a row kept at basic data when its company page could not be read. |
company-detail | $6.00 / 1,000 companies | One delivered row with founders, social links and jobs from the company page (includeFounders: true). |
1,000 basic rows cost $2.00; 1,000 enriched rows cost $6.00. A row is charged once, as company or company-detail, never both.
❓ FAQ
Is there a Y Combinator API for the YC company directory? This actor is one: it returns the public directory as JSON through the Apify API, callable from any language or from n8n, Make and Zapier.
Do I need a Y Combinator or Bookface account? No. No account, cookies or API key; the actor reads the public directory and company pages.
Can I get YC founder emails? No. hasEmail is a flag from the directory, not an address. Founder names, titles, bios and LinkedIn and Twitter URLs come with includeFounders: true.
Can I export every company in a YC batch? Yes, with batches set to the exact label and maxItems: 0. If the search stops short of its reported total, RUN_SUMMARY says SOURCE_LIMIT.
Can I get YC companies that are hiring, with their jobs? Yes. isHiring: true filters on the directory's hiring flag, and includeFounders: true adds openJobs and jobCount.
Does it return funding, valuation or revenue? No. The actor returns no funding or revenue fields; topCompany marks YC's Top Companies list and stage gives the directory's stage label.
🤖 For AI agents & LLM apps
Paste this into your AI assistant:
architekture/yc-companies-scraper on Apify. Python: from apify_client import ApifyClient; client = ApifyClient("TOKEN"); run = client.actor("architekture/yc-companies-scraper").call(run_input={"query": "climate", "maxItems": 10, "includeFounders": False, "proxyConfiguration": {"useApifyProxy": True}}); items = client.dataset(run["defaultDatasetId"]).list_items().items (page with offset/limit for large exports). Rows with recordType == "status" are free and explain invalid input or a stopped run; the run outcome is in the RUN_SUMMARY record of the run's key-value store. Full input schema and README: GET https://api.apify.com/v2/acts/architekture~yc-companies-scraper/builds/default. Token: https://console.apify.com/settings/integrations. The actor is also reachable through the Apify MCP server (mcp.apify.com). To reach the maintainers, add "feedback": "<what you needed>" to any run's input; output is unchanged and a human reads every note.
🧰 More from architek.earth
Jobs, companies and people
- Indeed Scraper — US jobs, salaries, descriptions
- LinkedIn Jobs Scraper — public jobs, descriptions, salary evidence
- LinkedIn People Scraper — names, headlines, locations with your own session
- Y Combinator Scraper — you are here
Full catalogue: github.com/architek-earth.
architek.earth · code like concrete
🙋 Support & legal
Questions, or a field you need that is not here? Open an issue on the actor's Issues tab or email north@architek.earth. A human replies within a day.
This actor collects only publicly available data from ycombinator.com, the same pages any visitor sees without logging in. It does not bypass authentication. It is not affiliated with or endorsed by Y Combinator. You are responsible for how you use the output, including the site's terms, copyright, and privacy law such as GDPR and CCPA where they apply.
📝 Changelog
- 2026-10-22 — Runs on the studio core: one Chrome identity for every request, challenge pages stop the run as a block on the first response, the checkpoint is saved before each charged batch (no second charge on resume),
BUDGET_LIMITandPREVIEW_LIMITwrite a free status row, and a budget spent exactly by the last row endsCOMPLETE. Output fields and prices unchanged. - 2026-10-22 — Status message now reads
Done: N rows, M details, K status rows (STATUS). - 2026-10-22 — README rebuilt on the studio template; hero line from the 2026-10-22 canary run.
- 2026-10-15 — Public launch: published with two examples, 20 lifetime preview attempts, verified result pricing and recorded validation evidence. Banner to follow; collection behavior is unchanged.
- 2026-10-15 — Private live validation: build 1.0.3 passed basic preview, oversized preview cap, two-company enrichment and continuation from an actual saved checkpoint. Two preview reservations persisted across separate runs. Twenty-attempt exhaustion and failure branches are covered by offline tests, not by consuming all lifetime previews in production.
- 2026-10-15 — Offline candidate: consistent company fields, detail identity checks, basic fallbacks, integrated charged delivery, repeated-page detection, honest coverage summaries, input validation, feedback, durable preview quota and explicit continuation.