Y Combinator · YC · Only $1💰 · Jobs & Companies scraper
Pricing
from $1.99 / 1,000 results
Y Combinator · YC · Only $1💰 · Jobs & Companies scraper
Y Combinator Jobs & Companies Scraper covers both YC companies and open roles - batch, industry, regions, team size, stage, top-company and hiring flags, launch date, website and tags. 🚀 Dual-mode startup intelligence in one run.
Pricing
from $1.99 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Hub
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
🚀 Y Combinator Jobs & Companies Scraper – YC Startup Directory, Hiring & Salary Data
The Y Combinator Jobs & Companies Scraper extracts structured data from both halves of the YC ecosystem: the Work at a Startup job board and the YC startup directory. Switch mode to jobs and you get job listings with salary ranges, equity ranges, required experience, visa policy, skills and the hiring company. Switch it to companies and you get the startup directory — batch, industry, team size, stage, region, launch date, website and long description — with optional founder details, open roles and best-effort contact emails layered on top.
Y Combinator's portfolio is one of the most-watched datasets in technology. Investors track which sectors each batch is weighted towards, recruiters mine Work at a Startup for openings that never reach the big job boards, sales teams build lists of newly funded companies before anyone else is calling them, and job seekers want salary and equity bands they can compare. This YC scraper gives all of them the same underlying data in a form that can be filtered, joined and monitored over time.
📊 What Data Can You Extract with This Y Combinator Scraper?
The actor emits two record shapes depending on mode. Grouped by theme, the available fields cover:
| Category | Fields | What you get |
|---|---|---|
| 🏢 Company identity | id, slug, name, url, website, logo, formerNames | The YC company record, its directory URL, its own website and branding assets |
| 🏷️ Company classification | batch, industry, subindustry, industries, tags, stage, status, nonprofit, topCompany | How YC categorises the startup, including batch, sector taxonomy and top-company flag |
| 📍 Company profile | oneLiner, longDescription, teamSize, regions, allLocations, launchedAt, isHiring | The pitch, the narrative description, headcount, geography and hiring status |
| 💼 Job listing core | title, role, roleSpecificType, prettyRole, type, location, skills | The role as posted, its category, employment type, location and listed skills |
| 💰 Compensation & requirements | salaryRange, equityRange, minExperience, minSchoolYear, visa | Pay band, equity band, experience floor and visa eligibility as published |
| 🔗 Job application routing | applyUrl, ctaUrl, hiringManager, createdAt, lastActive, isIncomplete | Where to apply, who is hiring, and how fresh the posting is |
| 🏭 Job's employer context | companyName, companyBatchName, companyOneLiner, companyUrl, companyLogoUrl | The hiring startup attached to each job record |
| 🧭 Run metadata | scrapedAt, isNew, sourceRole, sourceLocation, demoDayVideoPublic, appVideoPublic | When the record was captured, whether it is new since the last run, and which query produced it |
The standout field for most users is salaryRange, paired with equityRange and minExperience. YC job postings publish compensation openly far more often than the wider market does, which makes this one of the few places you can benchmark startup pay by role and seniority using primary data rather than survey estimates.
🌟 Key Features of the Y Combinator Scraper
| Feature | Description |
|---|---|
| 🔀 Dual mode | One actor covers both Work at a Startup job listings and the YC company directory via the mode input |
| 🎛️ Rich directory filtering | Filter companies by batch, industries, regions, team size range, isHiring, nonprofit and topCompany |
| 🔗 Direct URL targeting | startUrls accepts company search pages, individual company pages or job-role pages and overrides mode defaults |
| 👥 Founder enrichment | scrapeFounderDetails pulls founder names, titles, bios and social links from each company page |
| 📋 Per-company open roles | scrapeOpenJobs fetches the live job postings listed on each company's YC page |
| 📧 Best-effort email enrichment | enrichEmails visits each company's own website looking for a public contact or mailto address |
| 🔔 Change monitoring | monitoringMode compares against the previous run via the key-value store and tags each item with isNew |
| ⚙️ Concurrency control | maxConcurrency, minConcurrency and maxRequestRetries let you tune throughput against reliability |
| 💰 Open compensation data | Job records carry salaryRange, equityRange, minExperience and visa exactly as published |
🚀 Why Choose This Y Combinator Scraper?
Two datasets, one consistent interface. Jobs and companies are usually scraped by separate tools with incompatible outputs. Here they share an input schema and a dataset, so joining a job's companyName back to a company record from a second run is trivial.
Filtering happens at the source, not after export. Batch, industry, region, team size and hiring status are all applied as part of the directory query. You are not downloading five thousand companies to keep forty — you request the slice you want.
Monitoring is built in. With monitoringMode enabled, the actor diffs each run against the previous one and stamps every record with isNew. That turns a scraper into a change feed: new batch members, newly opened roles, companies that just started hiring.
Enrichment goes beyond the listing page. scrapeFounderDetails, scrapeOpenJobs and enrichEmails each fetch additional pages to attach founder profiles, live openings and public contact addresses — the fields that turn a directory dump into a workable prospect or candidate list.
📥 Input
{"mode": "jobs","startUrls": [],"role": "software-engineer","location": "san-francisco","batch": ["All Batches"],"industries": ["All industries"],"regions": ["Anywhere"],"minEmployeeSize": "1+","maxEmployeeSize": "1000+","isHiring": false,"scrapeOpenJobs": false,"scrapeFounderDetails": false,"enrichEmails": false,"monitoringMode": false,"maxItems": 100,"maxConcurrency": 10,"proxy": { "useApifyProxy": true }}
🔧 Y Combinator Scraper Input Fields
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
mode | string (jobs, companies) | Yes | jobs | jobs scrapes Work at a Startup job listings; companies scrapes the YC startup directory. |
startUrls | array | No | [] | Direct ycombinator.com URLs: a company search page, a single company page, or a job-role page. Overrides mode-based defaults when present. |
role | string | No | "" | Role slug used to build a jobs URL when no startUrls are given, e.g. software-engineer. |
location | string | No | "" | Location slug used to build a jobs URL when no startUrls are given, e.g. san-francisco. |
queries | array | No | [] | Free-text search terms applied against the companies index (company name / description). |
batch | array | No | ["All Batches"] | Filter companies by YC batch, e.g. Spring 2026. Use All Batches for no filter. |
industries | array | No | ["All industries"] | Filter companies by industry, e.g. B2B. Use All industries for no filter. |
regions | array | No | ["Anywhere"] | Filter companies by region. Use Anywhere for no filter. |
minEmployeeSize | string | No | 1+ | Minimum team size, e.g. 1+. |
maxEmployeeSize | string | No | 1000+ | Maximum team size. A + suffix means no upper bound. |
isHiring | boolean | No | false | Only include companies currently marked as hiring. |
nonprofit | boolean | No | false | Only include nonprofit companies. |
topCompany | boolean | No | false | Only include companies YC has flagged as a top company. |
scrapeOpenJobs | boolean | No | false | For each company result, also fetch its open job postings from its company page. |
scrapeFounderDetails | boolean | No | false | For each company result, also fetch founder names, titles, bios and social links. |
enrichEmails | boolean | No | false | Best-effort: visit each company's own website and look for a public contact/mailto email address. Not always available. |
monitoringMode | boolean | No | false | Compare this run's results against the previous run and tag each item with isNew. |
maxItems | integer | No | 100 | Maximum number of items to output across all sources. |
maxConcurrency | integer | No | 10 | Maximum number of concurrent requests. |
minConcurrency | integer | No | 1 | Starting/minimum number of concurrent requests. |
maxRequestRetries | integer | No | 3 | Maximum retry attempts per failed request. |
proxy | object | No | { "useApifyProxy": true } | Apify proxy configuration. Residential proxies are strongly recommended. |
💡 Input Examples
Scrape software engineering jobs in San Francisco:
{"mode": "jobs","role": "software-engineer","location": "san-francisco","maxItems": 200}
Pull a filtered slice of the company directory with founder details:
{"mode": "companies","batch": ["Spring 2026"],"industries": ["B2B"],"isHiring": true,"scrapeFounderDetails": true,"maxItems": 150}
Monitor new listings from direct URLs:
{"mode": "companies","startUrls": ["https://www.ycombinator.com/companies?batch=Spring%202026&industry=B2B"],"monitoringMode": true,"scrapeOpenJobs": true,"maxItems": 300}
📤 Output
{"id": 101592,"title": "Principal Data Engineer","url": "https://www.ycombinator.com/companies/tilt-fka-delphia/jobs/J4WV5Bg-principal-data-engineer","type": "Full-time","role": "eng","roleSpecificType": "Data science","prettyRole": "Engineering","location": "Remote (US)","salaryRange": "$210K - $270K","equityRange": "","minExperience": "6+ years","visa": "US citizen/visa only","skills": ["ETL"],"createdAt": "15 days","lastActive": "12 days","isIncomplete": false,"companyName": "Tilt (f.k.a. Delphia)","companyBatchName": "W18"}
🧾 Y Combinator Job Output Fields
| Field | Type | Description |
|---|---|---|
id | integer | null | Unique identifier of the job posting. |
title | string | null | Job title as posted. |
url | string | null | Canonical URL of the job listing. |
applyUrl | string | null | URL to apply for this job. |
ctaUrl | string | null | URL of the listing's call-to-action. |
type | string | null | Employment type, e.g. Full-time. |
role | string | null | Role category slug. |
roleSpecificType | string | null | More granular role specialisation. |
prettyRole | string | null | Human-readable role category. |
location | string | null | Location of the role. |
salaryRange | string | null | Published salary band. |
equityRange | string | null | Published equity band. |
minExperience | string | null | Minimum experience required. |
minSchoolYear | — | Minimum school year, where specified. |
visa | string | null | Visa eligibility statement. |
skills | array | null | Skills required or listed. |
hiringManager | — | Hiring manager attached to the posting. |
createdAt | string | null | When the posting was created. |
lastActive | string | null | When the posting was last active. |
isIncomplete | boolean | null | Whether the posting is incomplete. |
companyName | string | null | Hiring company name. |
companyBatchName | string | null | YC batch of the hiring company. |
companyOneLiner | string | null | One-line company pitch. |
companyUrl | string | null | Company URL. |
companyLogoUrl | string | null | Company logo URL. |
sourceRole | string | null | Role slug that produced this item. |
sourceLocation | string | null | Location slug that produced this item. |
🧾 Y Combinator Company Output Fields
| Field | Type | Description |
|---|---|---|
id | integer | null | Unique identifier of the company. |
slug | string | null | URL-friendly identifier. |
name | string | null | Company name. |
url | string | null | Canonical YC directory URL. |
website | string | null | Company's own website address. |
batch | — | YC batch the company belongs to. |
industry | — | Primary industry. |
subindustry | — | Sub-industry classification. |
industries | — | All industry tags. |
regions | — | Regions associated with the company. |
allLocations | — | All listed locations. |
oneLiner | — | Short company pitch. |
longDescription | string | null | Long-form company description. |
teamSize | — | Headcount. |
status | string | null | Company status. |
stage | — | Company stage. |
topCompany | — | Whether YC flags it as a top company. |
isHiring | boolean | null | Whether the company is currently hiring. |
nonprofit | — | Whether the company is a nonprofit. |
launchedAt | string | null | When the company launched. |
logo | — | Logo image URL. |
tags | array | null | Tags attached to the company. |
formerNames | — | Previous company names. |
appVideoPublic | — | Whether the application video is public. |
demoDayVideoPublic | — | Whether the demo day video is public. |
scrapedAt | string | null | When this record was scraped. |
isNew | boolean | null | Whether the record is new since the previous run, when monitoring mode is on. |
💻 How to Use the Y Combinator Scraper (Step by Step)
Step 1: Choose jobs or companies mode
mode is the first decision and it shapes everything else. Set it to jobs to scrape Work at a Startup listings, which produces records centred on title, salaryRange, location and the hiring company. Set it to companies to scrape the YC startup directory, which produces records centred on name, batch, industry, teamSize and longDescription. The filter inputs for batch, industry, region and team size apply to companies mode.
Step 2: Target by role and location, or by direct URL
For jobs mode without any URLs, set role and location to slugs — software-engineer and san-francisco, for instance — and the actor constructs the jobs URL for you. If you already know the exact page you want, put it into startUrls. That accepts a company search page with query parameters, a single company page, or a job-role page, and it overrides the mode-based defaults entirely.
Step 3: Narrow the company directory with filters
In companies mode the filters do the heavy lifting. batch selects cohorts such as "Spring 2026", industries restricts to sectors such as "B2B", regions limits geography, and minEmployeeSize with maxEmployeeSize bracket headcount. The boolean filters isHiring, nonprofit and topCompany narrow further. Leave the defaults — "All Batches", "All industries", "Anywhere" — in place for an unfiltered sweep.
Step 4: Turn on the enrichment you actually need
scrapeOpenJobs, scrapeFounderDetails and enrichEmails each fetch additional pages per company, so each one lengthens the run. Enable scrapeFounderDetails when you need names and bios of the people behind a startup, scrapeOpenJobs when you want live roles attached to each company record, and enrichEmails when you need a public contact address — bearing in mind that it is best-effort and not always available.
Step 5: Enable monitoring mode for recurring runs
If you plan to run the scraper on a schedule, set monitoringMode to true. The actor stores the previous run's results in its key-value store and compares against them, tagging every item with isNew. Filtering on isNew afterwards gives you a clean change feed of newly listed companies or newly posted roles instead of a full re-export each time.
Step 6: Tune limits, concurrency and proxying
maxItems caps total output across all sources — keep it low for a first run. maxConcurrency and minConcurrency control how aggressively the scraper fetches, and maxRequestRetries decides how many attempts a failed request gets. The proxy input takes a standard Apify proxy configuration and defaults to using Apify Proxy; residential proxies are strongly recommended for this target.
Step 7: Run, review and export the YC data
Start the run and follow the log as it works through pages and enrichment steps. When it finishes, open the Dataset tab. For jobs, sorting on salaryRange and filtering on prettyRole gives an immediate view of the compensation landscape; for companies, grouping on batch and industry shows how a cohort is distributed. Export to CSV, JSON or Excel, or pull the items via the API.
🔌 API Access & Integrations
Run the Y Combinator scraper and get dataset items back in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers-hub~y-jobs-companies-scrapers/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "jobs","role": "software-engineer","location": "san-francisco","maxItems": 100}'
The same run in Python, filtering the results as they stream in:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("scrapers-hub/y-jobs-companies-scrapers").call(run_input={"mode": "companies","batch": ["Spring 2026"],"industries": ["B2B"],"isHiring": True,"scrapeFounderDetails": True,"maxItems": 150,})for company in client.dataset(run["defaultDatasetId"]).iterate_items():print(company["name"], "|", company.get("teamSize"), "|", company.get("website"))
Because results sit in a standard Apify dataset, they connect straight to Zapier, Make, Google Sheets or Slack, and a webhook on run completion can push new YC jobs or companies into your ATS, CRM or data warehouse.
💡 Best Use Cases for Y Combinator Jobs & Companies Data
💼 Startup job search and role tracking
Job seekers can filter listings by prettyRole, location and minExperience, then compare salaryRange and equityRange across companies. Because createdAt and lastActive show posting freshness, it is easy to prioritise roles that are actively being worked rather than stale listings.
💰 Startup compensation benchmarking
YC roles publish pay bands unusually openly. Aggregating salaryRange by prettyRole, location and minExperience produces a primary-source benchmark of startup compensation — far more grounded than survey data, and refreshable whenever you rerun the scraper.
🎯 Sales prospecting into funded startups
Companies mode with batch set to a recent cohort and isHiring set to true gives you a list of startups that are both newly funded and actively growing. Adding enrichEmails and scrapeFounderDetails turns that into a contactable prospect list with named decision makers.
📈 Venture and market research
Filtering the directory by batch, industry and regions and counting the results shows how YC's sector weighting shifts cohort to cohort. Combining teamSize, stage and launchedAt gives a rough view of company maturity across a portfolio without any manual data entry.
🧑💻 Technical recruiting and talent market analysis
Recruiters can track which skills appear across postings, how visa policies differ between companies, and where roles are concentrated by location. Running the scraper weekly with monitoringMode on gives an isNew flag that surfaces fresh openings the moment they appear.
🔍 Competitive intelligence on hiring signals
A company's open roles are a public statement of strategy. Using scrapeOpenJobs against a target set of companies and watching how title and roleSpecificType change over time reveals where a competitor is investing before any announcement is made.
📊 Building a YC portfolio dataset
For anyone maintaining a longitudinal dataset of YC companies, id, slug and scrapedAt make records stable and versionable, while longDescription, tags and industries supply enough text and taxonomy for classification and search.
⚙️ Tips for Better Y Combinator Scraping Results
- Start with a low
maxItems. Confirm the record shape and filter behaviour on 20 items before committing to a full directory sweep with enrichment enabled. - Enable enrichment selectively.
scrapeOpenJobs,scrapeFounderDetailsandenrichEmailseach add page fetches per company; turning all three on for a large run multiplies the work considerably. - Use
startUrlswhen you have already built the filter in the browser. Constructing the search on ycombinator.com and pasting the resulting URL is often faster and more precise than reproducing the same filters through individual inputs. - Pair
monitoringModewith a schedule. TheisNewflag is only meaningful across consecutive runs, so it earns its value on a recurring schedule rather than a one-off run. - Use residential proxies. The
proxyinput defaults to Apify Proxy, and residential proxies are strongly recommended for this target — lower-quality egress leads to more retries and slower runs. - Lower
maxConcurrencyif requests start failing. High concurrency is efficient until it is not; dropping it and raisingmaxRequestRetriesusually stabilises a run that is producing errors.
🛠️ Troubleshooting
The run returned no items.
Check your filters first. Combining a narrow batch with a specific industry, a restrictive team size range and topCompany can legitimately match nothing. Widen the filters back to their defaults and reintroduce them one at a time to find the one that is over-constraining.
Jobs mode is not using my role and location.
startUrls overrides mode-based defaults. If it contains any URL, the role and location slugs are ignored. Clear startUrls to have the jobs URL built from role and location instead.
Email enrichment produced almost no addresses.
enrichEmails is explicitly best-effort — it visits each company's own website looking for a public contact or mailto address, and many startups do not publish one. Sparse results here are expected rather than a fault.
Several fields are null on company records.
YC directory entries vary a great deal in completeness. Fields such as stage, subindustry, formerNames and the video flags are only populated where the company has supplied them, so nulls reflect the source data.
Requests are failing or the run is slow.
Reduce maxConcurrency, raise maxRequestRetries, and make sure the proxy configuration is using Apify Proxy with residential proxies, which are strongly recommended for this target.
❓ Frequently Asked Questions About Y Combinator Scraping
What does this Y Combinator scraper extract?
In jobs mode it extracts Work at a Startup listings with titles, salary and equity ranges, locations, skills, experience requirements, visa policy and the hiring company. In companies mode it extracts the YC startup directory with batch, industry, team size, stage, region, website and descriptions.
Can I scrape both YC jobs and YC companies in one run?
Each run uses a single mode. To collect both, run the actor twice and join the results on the company name or slug.
How do I scrape YC jobs for a specific role and city?
Set mode to jobs, leave startUrls empty, and set role and location to the appropriate slugs, for example software-engineer and san-francisco.
Does the scraper return salary data for YC jobs?
Yes, where the posting publishes it. The salaryRange field carries the band exactly as listed, alongside equityRange for equity.
Can I filter YC companies by batch?
Yes. The batch array accepts values such as "Spring 2026", and "All Batches" disables the filter.
How do I find only YC companies that are currently hiring?
Set isHiring to true in companies mode. Combine it with scrapeOpenJobs to attach each company's live postings to its record.
What does monitoring mode do?
With monitoringMode enabled, the actor compares the current run against the previous one stored in its key-value store and tags every item with isNew, giving you a change feed rather than a full re-export.
Can I get founder names and profiles from YC company pages?
Yes. Enable scrapeFounderDetails and the actor fetches founder names, titles, bios and social links from each company page.
Does the YC scraper find company email addresses?
enrichEmails makes a best-effort attempt by visiting each company's own website and looking for a public contact or mailto address. It is not always available.
How many YC companies or jobs can I scrape in one run?
Up to maxItems, which defaults to 100 and applies across all sources in the run.
Can I scrape a single YC company page?
Yes. Put the company page URL, in the form /companies/{slug}, into startUrls. It overrides the mode-based defaults.
Do I need to configure a proxy for this YC scraper?
The proxy input takes a standard Apify proxy configuration and defaults to using Apify Proxy. Residential proxies are strongly recommended for this target.
How do I export YC job listings to a spreadsheet? Export the dataset as CSV or Excel from the run's Dataset tab, or connect it to Google Sheets, Zapier or Make.
What is the difference between role, prettyRole and roleSpecificType?
role is the underlying role category slug, prettyRole is its human-readable form such as "Engineering", and roleSpecificType is a finer specialisation such as "Data science".
Can I schedule the Y Combinator scraper to track new listings?
Yes. Schedule it on Apify and enable monitoringMode so each run flags newly appeared companies and jobs with isNew.
🆘 Support & Feedback
If the Y Combinator scraper returns something unexpected for a particular filter combination or URL, open a report on the actor's Issues tab and include the input JSON you used. That makes the behaviour reproducible and the fix much faster.
For custom work — additional fields, a different output shape, or an integration into your ATS, CRM or warehouse — email scraperhubapi@gmail.com with what you need.
If this YC scraper is useful, a review on the actor page is genuinely appreciated and helps others find it.
⚖️ Disclaimer
This Y Combinator scraper collects only publicly accessible pages from ycombinator.com. It does not log in, access private or gated content, or bypass any authentication.
You are responsible for how the extracted data is used. Founder names, bios, social links and any contact emails collected through enrichment are personal data under GDPR, the UK GDPR, CCPA and comparable laws — process them only with a lawful basis, keep no more than you need, honour erasure requests, and comply with anti-spam rules such as CAN-SPAM, CASL and PECR before contacting anyone. Job and compensation data should be treated as published snapshots, not verified facts.
Use of this actor must also comply with Y Combinator's terms of service and Apify's platform terms. Scrape at a reasonable rate and use the concurrency controls responsibly.
If you believe personal data collected through this actor should be removed, contact scraperhubapi@gmail.com and the request will be handled.