Y Combinator Jobs Scraper
Pricing
from $0.02 / 1,000 job results
Y Combinator Jobs Scraper
Extract public YC Work at a Startup jobs with company, batch, location, salary, equity, visa, skills, and apply URLs.
Pricing
from $0.02 / 1,000 job results
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
191
Total users
29
Monthly active users
19 days ago
Last modified
Categories
Share
Extract public job postings from YC Work at a Startup.
What does Y Combinator Jobs Scraper do?
Y Combinator Jobs Scraper collects the public job postings currently embedded on the YC jobs page at https://www.ycombinator.com/jobs.
It returns a clean dataset with job titles, company names, YC batches, locations, role categories, salary ranges, equity ranges, visa requirements, experience requirements, skills, public job URLs, and apply URLs. For recruiting or job-feed exports that need richer context, enable includeDetails to enrich matched rows from each public YC job detail page with full descriptions, industry, team size, company website, and publicly listed founders.
Use it when you want a fast, HTTP-only way to monitor publicly visible roles at YC-backed startups, with optional public YC job detail enrichment when you need complete records.
Who is it for?
Recruiters can use it to watch hiring demand across YC companies.
Startup analysts can track which YC batches and sectors are actively hiring.
Job-board operators can enrich startup job feeds with YC-specific company metadata.
Candidates can export the currently public YC jobs list for research and shortlisting.
Sales and partnership teams can find recently hiring startups that may need recruiting, payroll, developer tooling, finance, or HR products.
Why use this actor?
⚡ It is HTTP-only and lightweight.
🏢 It includes YC company context, not just raw job titles.
📄 Opt-in includeDetails enrichment adds the public full description and company/founder context while maxDetailRequests keeps detail traffic bounded.
💼 It extracts compensation and role metadata when YC exposes it.
🔎 It supports keyword, role, type, batch, and remote filters.
📦 It produces a flat dataset that is easy to export to CSV, JSON, Google Sheets, or your own pipeline.
What data can I extract?
| Field | Description |
|---|---|
id | YC job posting ID |
title | Job title |
url | Public YC job URL |
applyUrl | Apply URL exposed by YC |
companyName | YC company name |
companySlug | Company slug from YC URL |
companyBatch | YC batch, for example W21 or S21 |
companyOneLiner | YC one-line company description |
location | Location text from YC |
isRemote | Boolean derived from the location text |
type | Employment type |
role | YC role code |
roleSpecificType | More specific role subtype |
prettyRole | Human-readable role category |
salaryRange | Salary range when present |
equityRange | Equity range when present |
minExperience | Minimum experience text |
minSchoolYear | School year requirement when present |
visa | Visa requirement text |
skills | Skills/tags listed by YC |
createdAt | Relative posting age shown by YC |
lastActive | Relative company/activity metadata shown by YC |
descriptionText | Normalized plain-text full description from the public YC job detail page when enriched |
descriptionHtml | Sanitized HTML fragment for the public job description when enriched |
industry | Public company industry or primary YC tag when available |
companySize | Public team size when available |
companyWebsiteUrl | Public company website when available |
founders | Public founder names, titles/bios, and public profile URLs when available |
detailStatus | enriched, unavailable, or failed for the row's detail request |
scrapedAt | Timestamp of the actor run |
How much does it cost to scrape YC jobs?
This actor uses pay-per-event pricing.
You pay one tiered run-start event plus one result event for each YC job posting saved to the dataset:
| Apify plan | Run start | Price per job result |
|---|---|---|
| Free | $0.005750 | $0.000045127 |
| Bronze | $0.005000 | $0.000039241 |
| Silver | $0.003900 | $0.000030608 |
| Gold | $0.003000 | $0.000023544 |
| Platinum | $0.002000 | $0.000015696 |
| Diamond | $0.001400 | $0.000010987 |
Because the scraper is HTTP-only and does not use a browser, typical runs are designed to be inexpensive. Enabling detail enrichment adds bounded HTTP requests but does not add a new charge event: every saved row still produces exactly one existing result event.
How to scrape YC jobs
- Open the actor on Apify.
- Set
maxItemsto the number of jobs you want. - Optionally add a keyword such as
software engineer,sales, orremote. - Optionally filter by role, job type, YC batch, or remote-only jobs.
- For full descriptions and company context, enable
includeDetailsand setmaxDetailRequestsbetween 1 and 100. - Run the actor.
- Export the dataset as JSON, CSV, Excel, XML, or HTML.
Input options
maxItems
Maximum number of matching jobs to save.
Start with 25 for a quick test.
query
A free-text search across title, company, one-liner, location, role, salary, equity, experience, visa, and skills.
role
Filter by YC role/category. Examples include eng, Engineering, product, sales, design, or operations.
jobType
Filter by employment type such as Full-time, Internship, or Cofounder.
remoteOnly
When enabled, only jobs whose location text includes Remote are saved.
companyBatch
Filter to a YC batch such as W24, S21, or F24.
includeIncomplete
YC marks some listings as incomplete. This is disabled by default so the output stays cleaner.
includeDetails
Enable opt-in enrichment from each already-matched public YC job detail page. It defaults to false, so existing Tasks keep the same index-only request path and performance.
maxDetailRequests
Maximum number of matched rows to enrich when includeDetails is enabled. It defaults to 25 and accepts 1–100. Rows beyond the bound are retained with detailStatus: "unavailable".
Example input
{"maxItems": 25,"query": "software engineer","remoteOnly": false,"includeDetails": true,"maxDetailRequests": 25}
Example output
{"id": 93174,"title": "Forward Deployed Engineer","url": "https://www.ycombinator.com/companies/confido/jobs/XgiWhOL-forward-deployed-engineer","companyName": "Confido","companyBatch": "S21","location": "NYC Office","isRemote": false,"type": "Full-time","prettyRole": "Engineering","salaryRange": "$150K - $200K","equityRange": "0.05% - 0.10%","minExperience": "3+ years","visa": "US citizen/visa only","descriptionText": "Build customer-facing integrations with the engineering team...","industry": "B2B","companySize": 25,"companyWebsiteUrl": "https://example.com/","founders": [{"name": "Example Founder","title": "Co-founder and CEO","profileUrl": "https://www.linkedin.com/in/example-founder"}],"detailStatus": "enriched"}
Tips for better results
Use a broad query if you want to search multiple fields at once.
Use companyBatch when you want to focus on a specific YC cohort.
Use remoteOnly for candidate sourcing workflows.
Leave includeIncomplete disabled unless you specifically need all public rows YC exposes.
Leave includeDetails disabled for lightweight index monitoring. Enable it for recruiting exports or job feeds that need full descriptions, and set maxDetailRequests to the smallest useful bound.
Use small maxItems values for scheduled monitoring runs.
Integrations
Send new YC jobs to Google Sheets for recruiting dashboards.
Load the dataset into Airtable to build a startup hiring tracker.
Connect Apify webhooks to Slack to notify your team when matching jobs appear.
Export JSON to enrich your own job-board database.
Use the Apify API to run daily monitoring jobs from cron or CI.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/ycombinator-jobs-scraper').call({maxItems: 25,query: 'software engineer'});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('MY-APIFY-TOKEN')run = client.actor('automation-lab/ycombinator-jobs-scraper').call(run_input={'maxItems': 25,'query': 'software engineer',})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~ycombinator-jobs-scraper/runs?token=MY-APIFY-TOKEN' \-H 'Content-Type: application/json' \-d '{"maxItems":25,"query":"software engineer"}'
MCP integration
Use this actor through Apify MCP with Claude Code, Claude Desktop, Cursor, or VS Code.
Claude Code
$claude mcp add --transport http apify-yc-jobs "https://mcp.apify.com/?tools=automation-lab/ycombinator-jobs-scraper"
Claude Desktop, Cursor, and VS Code
Add this actor-scoped server to your client's MCP JSON configuration:
{"mcpServers": {"apify-yc-jobs": {"url": "https://mcp.apify.com/?tools=automation-lab/ycombinator-jobs-scraper"}}}
Example prompts:
- “Run the YC jobs scraper for remote software engineer roles and summarize the companies.”
- “Find public YC jobs with salary ranges and export them as a CSV.”
- “Compare YC batches represented in the latest public jobs dataset.”
Scheduling
You can schedule this actor daily or weekly to monitor public YC hiring signals.
For monitoring workflows, keep maxItems modest and use a keyword or role filter.
Data freshness
The actor reads the public YC jobs page at run time.
Fields such as createdAt and lastActive are relative strings as displayed by YC.
The scrapedAt field records when your run collected the row.
Limitations
The actor does not log in to YC or Work at a Startup.
It reads only anonymously accessible public YC index and job detail pages. It does not visit application pages or collect candidate data.
Detail enrichment is best effort. A missing public detail response keeps the index row with detailStatus: "unavailable"; a request failure keeps it with detailStatus: "failed" and null detail fields.
Apply URLs may lead to YC account or candidate profile flows, but the actor records rather than visits them.
If YC changes the embedded page structure, the actor may need an update.
Legality
This actor collects publicly visible information from YC pages.
Use the data responsibly and respect applicable laws, website terms, and privacy requirements.
Do not use scraped data for spam or abusive outreach.
FAQ and troubleshooting
Why did I get fewer jobs than maxItems?
Your filters may match fewer public postings than requested, or the public YC page may expose fewer rows at that moment.
Why is applyUrl an account URL?
YC may route applications through an account or candidate profile flow. The actor records the URL exposed publicly by YC.
Why are salary or equity fields empty?
Not every posting includes compensation details.
Why is detailStatus not enriched?
unavailable means enrichment was disabled, the row was beyond maxDetailRequests, or YC did not expose supported detail data. failed means both bounded attempts to fetch that public detail page failed; the original index row is still preserved.
Does detail enrichment cost another result event?
No. Each emitted job is charged through the same single result event whether or not details are enabled.
Related scrapers
Explore related actors by Automation Lab:
- https://apify.com/automation-lab/ycombinator-scraper
- https://apify.com/automation-lab/linkedin-company-scraper
- https://apify.com/automation-lab/company-funding-tracker
- https://apify.com/automation-lab/google-jobs-scraper
Changelog
0.1
- Added opt-in public YC job detail enrichment with
includeDetailsandmaxDetailRequests. - Added full descriptions, company context, founders, and per-row
detailStatuswhile preserving the default index-only workflow. - Initial build for public YC job postings.
Support
If the actor stops returning public YC jobs, open an issue with your run URL and input.
Summary
Y Combinator Jobs Scraper collects structured public YC hiring data through a lightweight index workflow, with bounded opt-in enrichment for full job and company context.