Y Combinator Jobs Scraper - YC Startup Jobs & New Postings avatar

Y Combinator Jobs Scraper - YC Startup Jobs & New Postings

Pricing

from $1.75 / 1,000 job returneds

Go to Apify Store
Y Combinator Jobs Scraper - YC Startup Jobs & New Postings

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

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

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:

  1. Role pages - ycombinator.com/jobs/role/<role> (software-engineer, designer, product-manager, ...).
  2. Location pages - ycombinator.com/jobs/location/<location> (remote, san-francisco, new-york, ...), or role + location pages.
  3. 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

ColumnMeaning
jobId, title, jobUrlYC's numeric id of the posting, its title and its page on ycombinator.com
companyName, companySlug, companyUrl, companyBatch, companyOneLiner, companyLogoUrlThe company as shown on the posting, its YC page and batch (S22)
location, isRemoteLocation text as written (New York, NY, US / Remote (US)); isRemote is true when that text contains "Remote"
jobTypeFull-time, Contract, Internship
role, roleName, roleSpecialtyRole code (eng), its display name (Engineering) and specialty (Backend)
salaryRange, equityRangeAs written on the page ($120K - $180K, 0.10% - 0.50%), not converted
minExperience, minSchoolYearAs written (3+ years, Any (new grads ok))
visaAs written: Will sponsor, US citizen/visa only, US citizenship/visa not required
skillsSkills listed on the posting
hiringManagerThe 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, lastActiveAgoThe page's own relative text (2 months, 6 days). The page gives no exact date, so none is invented
applyUrlThe page's apply link (a Y Combinator sign-in address)
listedOn, postingsOnPageThe page this posting was read from, and how many postings that page carried
change, previousCheckedAtMonitoring runs only: new-job, and when jobs were last recorded for these filters
input, scrapedAt, statusWhat 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 match remoteOnly, and one with no salary range does not match withSalaryOnly.
  • 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-saved row). 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 whose jobId has not been seen before come back, with change: "new-job". A page with nothing new returns one free no-new-jobs row 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.
  • maxJobs is 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.txt of www.ycombinator.com is read at the start of every run and followed (rules for User-agent: *). Only /jobs/role/..., /jobs/location/... and /companies/<slug>/jobs are 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; jobUrl leads 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.