Ycombinator at a glance
Ycombinator is a ready-to-run Apify actor from abotapi for collecting developer tools data. Its documented output includes id, slug, company, url and pitch, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $0.80 per 1,000 results on the Apify Free plan, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Developer Tools, Lead Generation, Automation
- Pricing
- $0.80 per 1,000 results (Free plan)
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 30 options
- Run success
- 100.0% of completed public runs in the last 30 days
Pull every ycombinator.com company across every batch, with founders, social URLs, application Q&A, demo-day video, photos, and partner. Filter by 14 dimensions or paste any /companies search URL straight from your browser.
What Ycombinator $0.8💰 Companies Scraper can do
- Deep company profiles. 50+ fields per company when detail fetching is on: founders with bio, title and social links, LinkedIn, Twitter, Crunchbase, GitHub and Facebook URLs, demo-day and application videos, application answers, photos, and the primary YC partner.
- Open roles and coverage. Job postings with title, location, salary range, equity range, visa notes and an apply URL, plus news mentions and Launch YC product launches.
- 14 filter dimensions. Free-text query, batch, industry, subindustry, region, tag, status, funding stage, hiring-only, top-ranked, nonprofit, and public-media flags, all combinable in one search.
- Two ways in. Build filters in the input form, or paste any /companies search or company URL copied from a browser (multiple URLs supported in one run).
- Streaming output. Each company is written to the dataset as soon as it's collected, so a stopped run still keeps everything found so far.
- Resumable at two levels. A killed or migrated run picks itself back up automatically without re-charging for companies already saved, and a brand-new run can continue a previous one by ID.
Choose what to collect
These inputs let you configure Ycombinator $0.8💰 Companies Scraper. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Search mode = configure filters below. URL mode = paste any /companies search URL already refined in a browser (recommended for complex filters). |
querystring | Optional keyword search across company name, one-liner, and description. Leave blank to match all companies. |
batchesarray | Filter by YC batch. Accepts full names (Winter 2024, Summer 2023) or short codes (W24, S23, F25, X26 for Spring). Multiple values are OR'd. Leave empty for all batches. |
industriesarray | Top-level industry. Multiple values are OR'd. |
subindustriesarray | Refined industry tag (e.g. 'Fintech -> Payments', 'Healthcare -> Therapeutics'). Multiple values OR'd. See ycombinator.com/companies for the full list. |
regionsarray | HQ region or country. Examples: 'United States of America', 'Europe', 'Remote', 'India', 'Latin America'. Multiple values OR'd. |
tagsarray | Topic tags. Examples: 'SaaS', 'Artificial Intelligence', 'Developer Tools', 'Marketplace', 'Crypto / Web3'. Multiple values OR'd. |
Show 23 more inputs
| Input | What it controls |
|---|---|
statusesarray | Company status filter. Multiple values OR'd. |
stagesarray | Funding / maturity stage. Multiple values OR'd. |
isHiringboolean | Only return companies with active job postings. |
topCompanyboolean | Only YC top-ranked companies (~91 of ~5,800). |
nonprofitboolean | Only nonprofit companies (~42 of ~5,800). |
hasDemoDayVideoboolean | Only companies with a public demo-day video. |
hasAppVideoboolean | Only companies whose YC application video is public. |
hasAppAnswersboolean | Only companies whose YC application answers are public. |
sortBystring | Results are ordered by 'relevance' by default; 'launch-date-desc' surfaces the newest companies first. |
urlsarray | One or more YC URLs: search pages (/companies?batch=...?query=...&sortBy=created_at_desc?isHiring=true&top_company=true?page=N?industry=Healthcare?regions=Europe?tags=SaaS), industry pages (/companies/industry/fintech), location pages (/companies/location/san-francisco or /india), and company pages (/companies/airbnb, /companies/dropbox/jobs, numeric /companies/531, apex-host ycombinator.com). The founders directory is not supported and is skipped with a warning. Filter-mode fields above are ignored. |
fetchDetailsboolean | When ON (default), the scraper fetches each company's profile page and adds founders, social URLs (LinkedIn, Twitter, Crunchbase, GitHub, Facebook), application Q&A, demo-day video, photos, partner, jobs, news, launches, year founded, city. Adds ~1 HTTP call per company. Turn OFF only if you want a fast SERP-only run. |
fetchJobDetailsboolean | When ON, each open job posting also gets its full description text and a remote flag (one extra page fetch per posting; needs 'Fetch full detail page' ON). Skills, salary, equity, experience and visa are always included in jobPostings. Default OFF. |
maxListingsinteger | Maximum number of companies to collect. 0 = unlimited (all ~5,800 across the public index). |
maxPagesinteger | Optional bound on search pages walked per query (each page returns up to 100 hits). Leave empty to walk every result page until maxListings is hit or the result set ends. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a full-catalogue walk across separate runs. Companies already collected there (matched by objectID) are skipped, so this run only saves the new ones. Leave empty for a normal fresh run. Do not combine with Incremental mode below unless this is the very first incremental run for a new state key, the two solve different problems (one interrupted run vs. recurring monitoring of the same search). |
incrementalModeboolean | For a search/URL set you run on a schedule (e.g. daily). The actor remembers the companies it saw last time and labels every row's changeType: NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED (only when 'Emit expired' is on). Distinct from 'Resume from a previous run' above, which continues one interrupted run instead of tracking a recurring search. Off by default so a normal run's output shape is unchanged. |
stateKeystring | Names the saved baseline this run compares against. Leave empty to auto-derive one from your filters/URLs (so two different searches never share a baseline). Set your own value if you want multiple scheduled runs of the SAME search to intentionally share one baseline, or to give a search a stable name across small filter tweaks. |
emitUnchangedboolean | When ON, incremental mode also pushes companies with no detected change (changeType=UNCHANGED). Off by default: a quiet run returns only what's new or changed. Turning this on returns, and bills, a row for every tracked company, every run. |
emitExpiredboolean | When ON, incremental mode pushes a changeType=EXPIRED row for any previously-tracked company no longer found, but ONLY after a run that scanned the full tracked search with no cap/page limit cutting it short and no resumeFromRunId (a partial scan can never prove a company is really gone). Off by default: this also bills one extra row per expired company. |
ignoreFieldsForChangesarray | Field names to leave out when deciding whether a company changed, so a change in them alone never produces an UPDATED row (they are still returned in every row). Use a top-level name such as photos, or a dotted path such as founders.linkedinUrl to ignore a key inside every element of a list. scrapedAt is always ignored. Changing this list never causes a one-time wave of UPDATED rows. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
idIDslugSlugnameCompanyurlURL (link)oneLinerPitchchangeTypeChange type (incremental mode)batchBatchbatchNameBatch NamestatusStatusstageStageindustryIndustrysubindustrySubindustryShow 28 more fields
tagsTagsregionsRegionsallLocationsLocationscityCityteamSizeTeamyearFoundedFoundedisHiringHiringtopCompanyTopnonprofitNonprofithasAppVideoAppVidhasDemoDayVideoDDayVidhasQuestionAnswersQ&AwebsiteWebsite (link)logoUrlLogo (image)linkedinUrlLinkedIn (link)twitterUrlTwitter (link)crunchbaseUrlCrunchbase (link)githubUrlGitHub (link)founderCountFoundersjobPostingCountJobsnewsCountNewslaunchCountLaunchesscrapedAtScrapedchangedFieldsChanged fields (incremental mode)firstSeenAtFirst seen (incremental mode)lastSeenAtLast seen (incremental mode)foundersFoundersjobPostingsjobPostingsExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"id": 12345,
"slug": "example-co",
"objectID": "12345",
"name": "Example Co",
"url": "https://www.ycombinator.com/companies/example-co",
"oneLiner": "One sentence company pitch.",
"longDescription": "Longer multi-paragraph description from the application.",
"website": "https://example.com",
"batch": "W24",
"batchName": "Winter 2024",
"status": "Active",
"stage": "Seed",
"industry": "B2B",
"subindustry": "B2B -> Productivity",
"industries": [
"B2B",
"Productivity"
],
"tags": [
"SaaS",
"AI"
],
"regions": [
"United States of America",
"Remote"
],
"allLocations": "San Francisco, CA, USA; Remote",
"teamSize": 8,
"yearFounded": 2024,
"launchedAt": 1700000000,
"isHiring": true,
"topCompany": false,
"nonprofit": false,
"logoUrl": "https://bookface-images.s3.us-west-2.amazonaws.com/logos/0000000000000000000000000000000000000000.png",
"location": "San Francisco, CA, USA",
"city": "San Francisco",
"country": "United States",
"linkedinUrl": "https://www.linkedin.com/company/example-co",
"twitterUrl": "https://twitter.com/example_co",
"crunchbaseUrl": "https://www.crunchbase.com/organization/example-co",
"githubUrl": "https://github.com/example-co",
"primaryGroupPartner": {
"id": 1,
"fullName": "Partner Name",
"url": "https://www.ycombinator.com/people/partner-name",
"avatarUrl": "https://example-cdn.ycombinator.com/avatars/partner.jpg"
},
"founders": [
{
"fullName": "Founder Name",
"title": "CEO",
"bio": "Founder bio text.",
"linkedinUrl": "https://www.linkedin.com/in/founder-name",
"twitterUrl": "https://twitter.com/founder_name",
"isActive": true
}
],
"founderCount": 1,
"jobPostings": [
{
"title": "Senior Engineer",
"location": "Remote",
"type": "Full-time",
"role": "eng",
"salaryRange": "$140K - $180K",
"equityRange": "0.10% - 0.50%",
"visa": "Open to all",
"applyUrl": "https://www.workatastartup.com/jobs/0000"
}
],
"jobPostingCount": 1,
"newsItems": [
{
"title": "Article title",
"url": "https://example.com/article",
"date": "Jan 01, 2026"
}
],
"newsCount": 1,
"launches": [
{
"title": "Launch announcement title",
"body": "Body of the Launch YC post."
}
],
"launchCount": 1,
"scrapedAt": "2026-01-01T00:00:00.000Z"
}Ways to use this data
- Recruiting and talent sourcing: filter hiring companies by industry, region or stage and pull their open roles in one pass.
- Investor and market research: scan a batch or stage for company counts, industries and funding stage mix.
- Sales and partnership prospecting: build lead lists by industry, region or tag, with founder names and company sites.
- Founder benchmarking and competitive tracking: compare peer companies in the same subindustry or batch.
- Journalism and content: track Launch YC announcements and news mentions as they appear.
- Recurring monitoring: schedule a saved search and get only the companies that are new, changed, or newly listed since the last run.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Ycombinator return?
The documented output for Ycombinator includes id, slug, company, url, pitch, change type (incremental mode), batch and batch name. Availability of each field depends on the source page and the selected mode.
How much does Ycombinator cost?
It costs $0.80 per 1,000 results on the Apify Free plan, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed companies on a schedule?
Yes. Schedule the actor from the Schedules tab with the same filters or URLs each time, and turn on Incremental mode. Each run then labels every company NEW, UPDATED, UNCHANGED (not returned unless you turn that on), and, only after a run that scans the whole tracked search with nothing cutting it short (a search over 1000 matches is split into per-batch slices, newest batch first, only when the item limit is unlimited or above 1000; a capped run or one that cannot be split never writes EXPIRED), EXPIRED. A company only comes back as REAPPEARED if an earlier complete scan had already marked it EXPIRED and it shows up again later.
What's the difference between "Resume from a previous run" and "Incremental mode"?
Resume from a previous run continues one specific interrupted or capped run: paste its run or dataset ID and this run appends only the companies it hasn't already saved. Incremental mode is for monitoring the same search or URL set over time on a schedule; it remembers state itself and classifies every row. Don't combine the two for a search that already has saved incremental state, the run stops with an error rather than guessing which baseline to use.
Why did my run fail instead of returning an empty dataset?
An empty dataset usually means your filters or URLs matched nothing, or requests were quietly refused for part of the run; this actor does not fail the whole run for that, it saves whatever it managed to collect, which can be nothing. Try loosening your filters or running again. If not a single results page could be loaded, the run ends FAILED (not empty) with "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search." An actual failed run happens only for a handful of clear input problems: a Resume from a previous run ID that doesn't match any run or dataset this account can read, combining that field with an incremental search that already has saved state, or URL mode with no usable URL. A malformed entry, a non-Y Combinator address, an unknown industry page or the founders directory is skipped with a warning that names it, and the run fails only when no usable URL is left (an explicitly empty list included), so check the log if rows are missing.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
