Y Combinator Jobs Scraper - YC Startup Jobs & New Postings
Pricing
from $1.75 / 1,000 job returneds
Y Combinator Jobs Scraper - YC Startup Jobs & New Postings
Job postings at Y Combinator startups from ycombinator.com/jobs pages: title, company, batch, location, salary, equity, experience, visa and apply link. Read role, location or company job pages, or monitor them and get only new postings.
Pricing
from $1.75 / 1,000 job returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Share
Job postings at Y Combinator startups, read from the public jobs pages on ycombinator.com, one row per posting: title, company, batch, location, remote flag, job type, role, salary range, equity range, minimum experience, visa policy, skills, how long ago it was posted, and the job page and apply links.
Three kinds of pages can be read, in any mix:
- Role pages -
ycombinator.com/jobs/role/<role>(software-engineer, designer, product-manager, ...). - Location pages -
ycombinator.com/jobs/location/<location>(remote, san-francisco, new-york, ...), or role + location pages. - Company jobs pages -
ycombinator.com/companies/<slug>/jobs, the open postings of one company.
Turn on monitoring and run it on a schedule to get only the postings that were not there before.
No login, no cookies. Only what the public page shows is returned. The apply link is passed through as a column; it is never opened.
What you get
| Column | Meaning |
|---|---|
jobId, title, jobUrl | YC's numeric id of the posting, its title and its page on ycombinator.com |
companyName, companySlug, companyUrl, companyBatch, companyOneLiner, companyLogoUrl | The company as shown on the posting, its YC page and batch (S22) |
location, isRemote | Location text as written (New York, NY, US / Remote (US)); isRemote is true when that text contains "Remote" |
jobType | Full-time, Contract, Internship |
role, roleName, roleSpecialty | Role code (eng), its display name (Engineering) and specialty (Backend) |
salaryRange, equityRange | As written on the page ($120K - $180K, 0.10% - 0.50%), not converted |
minExperience, minSchoolYear | As written (3+ years, Any (new grads ok)) |
visa | As written: Will sponsor, US citizen/visa only, US citizenship/visa not required |
skills | Skills listed on the posting |
hiringManager | The hiring manager's name when the page shows one. It was empty on every posting sampled on 2026-10-05. No contact details are added |
postedAgo, lastActiveAgo | The page's own relative text (2 months, 6 days). The page gives no exact date, so none is invented |
applyUrl | The page's apply link (a Y Combinator sign-in address) |
listedOn, postingsOnPage | The page this posting was read from, and how many postings that page carried |
change, previousCheckedAt | Monitoring runs only: new-job, and when jobs were last recorded for these filters |
input, scrapedAt, status | What you typed, when the page was read, ok for a job row |
A value that is not on the page is null, never an empty string.
A posting that appears on several pages is returned once and charged once (matched by jobId); listedOn is the first page it was read from.
How much of the job board this covers
Each page carries a limited set of postings, and that set is all the Actor can read from it:
- A company jobs page lists that company's open postings (3 for Stripe, 0 for Airbnb on 2026-10-05).
- A role or location page shows a selection, not every open job: 39 postings on the software-engineer page, 25 on designer, 35 on remote, 50 on boston on 2026-10-05. Reading the same page three times a few seconds apart gave the same set of postings.
- The pages have no "next page" link, and addresses with a query (
?...) are not used, so there is no way to page further. The site does not publish a total number of open jobs.
Every row has postingsOnPage, and the log states the count for each page. To cover more, give several roles and locations (or turn on role + location pages, which are separate selections), and add the companies you care about by slug. This Actor does not claim to return every job at every YC company.
Input
roles- role slugs, one per line. On 2026-10-05 the site listed:software-engineer,designer,product-manager,recruiting-hr,sales-manager,marketing,support,operations,science.locations- location slugs, one per line:remote,san-francisco,new-york,los-angeles,seattle,boston,austin,chicago,india.combineRolesAndLocations- when both are filled in, read one page per role + location pair (/jobs/role/software-engineer/remote) instead of the separate role and location pages.companies- company slugs (stripe) or YC company page addresses, one per line.remoteOnly,visaSponsorshipOnly,withSalaryOnly,keywords- filters, applied after a page has been read. All filters that are set must match; any one keyword is enough. A posting with no location does not matchremoteOnly, and one with no salary range does not matchwithSalaryOnly.maxJobs- with monitoring off, stop when this many rows have been returned (default 200).monitoringMode,resetMonitoringState- see below.useProxy- requests go directly to www.ycombinator.com; a residential proxy is tried once per refused request, at most three times in a run, only when the site answers HTTP 403 or 429.
At most 200 pages are read in one run.
The site answers an unknown role with its Software Engineer page and an unknown location with a general list, both with HTTP 200. Before any row is returned, the role, location or company the page itself reports is compared with what was asked for; if they differ, nothing from that page is returned (a free no-such-page or page-mismatch row instead).
Monitoring mode
Turn monitoringMode on and schedule the Actor with the same input.
- The first time a page is read with a given set of filters, the postings on it are only remembered. Nothing is returned and nothing is charged for that page (a free
baseline-savedrow). To get the postings that are listed now, run once with monitoring off. - On later runs, each page that is read and compared is charged one monitoring check (
page-checked), and only postings whosejobIdhas not been seen before come back, withchange: "new-job". A page with nothing new returns one freeno-new-jobsrow and costs only the check. The check applies to every page that is read and compared, including a company page with no open posting and a page whose postings were all returned from another page in the same run. maxJobsis not applied in monitoring mode: every new posting on the pages you gave is returned.- A posting that could not be delivered because of a charge limit is not remembered; it still counts as new. A page that could not be read is not charged and nothing about it is remembered.
- A posting that did not match your filters when it was first seen is remembered and is not returned later, even if the posting is edited.
"New" means new on the pages you watch. A company jobs page lists all of that company's open postings, so a new row there is a newly listed posting. A role or location page shows a selection, so an older posting that enters the selection is also returned once; postedAgo tells them apart.
Job ids are remembered per set of filters, so two schedules with different filters do not affect each other. Do not run two schedules with the same filters at the same moment: the platform's key-value store has no atomic update, so two runs finishing together can overwrite each other's record and return the same posting twice.
What is charged
job-returned- one per job row.page-checked- monitoring mode only: one per page that was read and compared with the remembered job ids. The first read of a page (which only remembers its postings) is not charged, and runs with monitoring off never charge it.
There is no start fee and no monthly fee. Postings dropped by your filters are not charged. Rows that explain why nothing was returned are free: no-such-company, no-such-page, page-mismatch, no-jobs-on-page, invalid-input, duplicate-input, unreadable, blocked, robots-disallowed, no-match, no-new-jobs, already-returned, baseline-saved, limit-reached, not-read, budget-reached.
If you set a maximum total charge for a run, the Actor stops at the first page for which the limit has no room for one more job row (in monitoring mode: one check plus one row) and adds a free not-read row naming the pages it did not read. The first monitoring read of a page costs nothing, so it is read even when the limit is used up, unless the run has already stopped.
How it reads
robots.txtof www.ycombinator.com is read at the start of every run and followed (rules forUser-agent: *). Only/jobs/role/...,/jobs/location/...and/companies/<slug>/jobsare requested, never an address with a query.- One request at a time with a pause between them; a failed request is retried once. Redirects are not followed.
- If a page is refused (HTTP 403 / 429 or a verification page), or three pages in a row cannot be read, the run stops sending requests and reports what it did not read.
Limits
- Coverage is what the pages carry (see above), not the whole job board.
- The full job description text is not included;
jobUrlleads to it. - Dates are relative text as shown on the page.
- This Actor is not affiliated with or endorsed by Y Combinator. You are responsible for how you use the data, including Y Combinator's terms of use.
Thanks for using this Actor
We build these tools for people who run them every day, and we improve them from what users tell us.
- Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
- Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.
If this Actor saved you time, a short review helps other people find it.