Y Combinator Jobs Scraper avatar

Y Combinator Jobs Scraper

Pricing

from $1.99 / 1,000 results

Go to Apify Store
Y Combinator Jobs Scraper

Y Combinator Jobs Scraper

Y Combinator Jobs Scraper extracts Work at a Startup roles - title, company, YC batch, tagline, job type, role category, salary and equity ranges, location, remote flag and apply URL. ๐Ÿš€ For startup job boards and talent research.

Pricing

from $1.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Hub

Scrapers Hub

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

๐Ÿ’ผ Y Combinator Jobs Scraper โ€“ Startup Job Listings, Salary Data & Company Intelligence

The Y Combinator Jobs Scraper extracts job listings from workatastartup.com and returns them as structured JSON โ€” role details, parsed salary and equity ranges, location and remote status, full job descriptions, and a deep block of company intelligence covering the YC batch, team size, founding year, tech stack, industry and founders. One search produces a dataset that would otherwise take hours of manual browsing to assemble.

Work at a Startup is the official job board for Y Combinator companies, which makes it an unusually concentrated source of early-stage hiring data. Every listing belongs to a funded startup with a known batch, a known team size and a public trajectory. This Y Combinator jobs scraper turns that board into recruitment data you can filter, join and analyse โ€” whether you are a candidate tracking the market, a recruiter mapping talent demand, or an analyst studying startup hiring trends.


๐Ÿ“Š What Data Can You Extract with This Y Combinator Jobs Scraper?

Each dataset item is one job listing enriched with the company behind it. The fields group into seven categories.

CategoryFieldsWhat it gives you
๐Ÿ†” Job identityjobId, title, url, applyUrl, postedAgo, scrapedAtThe listing's identifier, title, canonical and application URLs, how long ago it was posted, and when the record was captured
๐Ÿ’ฐ CompensationsalaryRange, salaryMin, salaryMax, salaryCurrency, equity, equityMin, equityMaxThe advertised salary as displayed plus parsed numeric bounds and currency, and the same treatment for equity
๐Ÿ—บ๏ธ Location and work modelocation, isRemote, visaSponsorshipWhere the role is based, whether it is remote, and what the listing says about visa sponsorship
๐Ÿท๏ธ Role classificationjobType, roleCategory, roleSubcategory, experience, skillsEmployment type, role category and subcategory, required experience, and the listed skills
๐Ÿ“„ Job contentdescription, descriptionHtml, interviewProcessThe full job description in plain text and HTML, plus the interview process where published
๐Ÿข Company profilecompanyName, companySlug, companyUrl, companyTagline, companyDescription, companyHiringDescription, companyWebsite, companyLogoEverything the board publishes about the hiring company
๐Ÿ“ˆ Company signalsycBatch, companyFounded, companyTeamSize, companyStatus, companyLocation, companyIndustry, companyTechStack, foundersThe YC batch, founding year, headcount, status, HQ, industry, technology stack and founder details

The standout is the parsed salary trio โ€” salaryMin, salaryMax and salaryCurrency. Job boards publish compensation as free text like $124K - $188K CAD, which is unusable for analysis. Having the numeric bounds and the currency as separate fields means you can filter, sort and benchmark salary data directly, without writing a parser of your own.


๐ŸŒŸ Key Features of the Y Combinator Jobs Scraper

FeatureDescription
๐Ÿ” Free-text searchsearchQuery matches the same way as the search box on workatastartup.com/jobs
๐Ÿ—‚๏ธ Role category filteringRestrict results to engineering, design, product, sales, marketing, operations, recruiting, science, legal or finance
๐Ÿ“ Location filteringlocationFilter does a case-insensitive substring match on the listing's location text, including values like "Remote"
๐Ÿ’ต Parsed salary dataSalary is returned both as displayed text and as numeric salaryMin, salaryMax and salaryCurrency fields
๐Ÿ“Š Parsed equity dataEquity ranges are similarly split into equityMin and equityMax alongside the raw equity string
๐Ÿข Deep company enrichmentEvery job carries the company's YC batch, team size, founding year, industry, tech stack, status and founders
๐Ÿ“ Description in two formatsdescription for text analysis and descriptionHtml when you need the original formatting preserved
๐ŸŽ“ Interview process captureinterviewProcess returns what the company publishes about how it hires, where available
๐ŸŽฏ Result capmaxResults keeps runs predictable, defaulting to a modest 25 listings

๐Ÿš€ Why Choose This Y Combinator Jobs Scraper?

Compensation data you can actually compute on. Most job scrapers hand back a salary string and leave the parsing to you. This one returns salaryMin, salaryMax and salaryCurrency as separate typed fields, so median-by-role queries and cross-currency comparisons are a single aggregation rather than a regex project.

Company context arrives with every listing. You do not need a second lookup to know who is hiring. ycBatch, companyTeamSize, companyFounded, companyIndustry, companyTechStack and founders come attached to each job, which makes cohort analysis โ€” "what are S21 companies hiring for now?" โ€” trivial.

Equity is treated as first-class data. Early-stage compensation is not just salary. equity, equityMin and equityMax let you compare the full offer shape across companies and stages, something almost no aggregated job dataset supports.

Filters mirror the source board. searchQuery, roleFilter and locationFilter behave the way the site's own filters behave, so what you see when browsing manually is what you get in the dataset. No surprises between preview and export.


๐Ÿ“ฅ Input

{
"searchQuery": "software engineer",
"roleFilter": "engineering",
"locationFilter": "Remote",
"maxResults": 100
}

๐Ÿ”ง Y Combinator Jobs Scraper Input Fields

FieldTypeRequiredDefaultDescription
searchQuerystringNo""Free-text search term, matched the same way as the search box on workatastartup.com/jobs (e.g. "software engineer")
roleFilterstringNo""Restrict results to one role category
locationFilterstringNo""Only keep jobs whose location text contains this string (e.g. "San Francisco", "Remote"). Case-insensitive substring match
maxResultsintegerNo25Maximum number of job listings to scrape

Role category options for roleFilter

ValueLabel
""Any
engineeringEngineering
designDesign
recruitingRecruiting
scienceScience
productProduct
operationsOperations
salesSales
marketingMarketing
legalLegal
financeFinance

๐Ÿ’ก Input Examples

Remote engineering roles

{
"roleFilter": "engineering",
"locationFilter": "Remote",
"maxResults": 200
}

Specific role search in one city

{
"searchQuery": "machine learning engineer",
"locationFilter": "San Francisco",
"maxResults": 50
}

Full board sweep for market analysis

{
"searchQuery": "",
"roleFilter": "",
"locationFilter": "",
"maxResults": 500
}

๐Ÿ“ค Output

A real job listing from an actual run:

{
"jobId": "93806",
"title": "Senior Software Developer",
"url": "https://www.workatastartup.com/jobs/93806",
"companyName": "Hive",
"companySlug": "hive",
"companyUrl": "https://www.workatastartup.com/companies/hive",
"companyTagline": "Marketing automation for event promoters (email, sms, ads, CRM)",
"ycBatch": "S14",
"jobType": "Full-time",
"roleCategory": "Engineering",
"roleSubcategory": "Full stack",
"salaryRange": "$124K - $188K CAD",
"salaryMin": 124000,
"salaryMax": 188000,
"salaryCurrency": "CAD",
"equity": "",
"equityMin": null,
"equityMax": null,
"location": "Remote",
"isRemote": true,
"postedAgo": ""
}

๐Ÿงพ Y Combinator Jobs Output Fields โ€” Job Data

FieldTypeDescription
jobIdstringIdentifier of the job
titlestringJob title
urlstringCanonical URL of the listing
applyUrlstringURL to apply for this job
jobTypestringEmployment type of the job
roleCategorystringRole category of the listing
roleSubcategorystringRole subcategory of the listing
salaryRangestringSalary range as displayed on the board
salaryMinintegerLower bound of the advertised salary range
salaryMaxintegerUpper bound of the advertised salary range
salaryCurrencystringCurrency of the advertised salary
equitystringEquity range as displayed
equityMinnumberLower bound of the advertised equity range
equityMaxintegerUpper bound of the advertised equity range
locationstringLocation of the role
isRemotebooleanWhether the role is remote
postedAgostringHow long ago the listing was posted
experiencestringRequired experience
visaSponsorshipstringWhat the listing says about visa sponsorship
skillsarraySkills required or listed
descriptionstringFull job description in plain text
descriptionHtmlstringJob description with original HTML formatting
interviewProcessstringThe company's published interview process
scrapedAtstringWhen this record was scraped

๐Ÿงพ Y Combinator Jobs Output Fields โ€” Company Data

FieldTypeDescription
companyNamestringCompany name
companySlugstringCompany slug used in URLs
companyUrlstringCompany page on the board
companyTaglinestringOne-line description of what the company does
companyDescriptionstringLonger company description
companyHiringDescriptionstringWhat the company says about hiring
companyTechStackstringTechnologies the company uses
companyFoundedintegerYear the company was founded
companyTeamSizeintegerNumber of people at the company
companyStatusstringCompany status
companyLocationstringCompany headquarters location
companyIndustrystringIndustry the company operates in
companyLogostringCompany logo URL
companyWebsitestringCompany website
ycBatchstringY Combinator batch, e.g. S14
foundersarrayFounder details collected for the company

๐Ÿ’ป How to Use the Y Combinator Jobs Scraper (Step by Step)

Step 1: Decide what you are searching for

Start by deciding whether you want a targeted search or a broad sweep. A targeted search uses searchQuery with a specific role phrase โ€” "backend engineer", "product designer", "technical recruiter" โ€” and returns closely matching listings. A broad sweep leaves searchQuery empty and relies on roleFilter and maxResults to define the scope, which is what you want for market analysis rather than job hunting.

Step 2: Apply a role category filter

roleFilter restricts results to one of ten categories: engineering, design, recruiting, science, product, operations, sales, marketing, legal or finance. Leave it empty for all categories. It is more reliable than a free-text search for category-level work, because it uses the board's own classification rather than keyword matching against titles that may be phrased in unexpected ways.

Step 3: Filter by location

locationFilter performs a case-insensitive substring match against the listing's location text. That makes it flexible: "San Francisco" matches listings written as "San Francisco, CA", and "Remote" matches any listing whose location text mentions remote work. Because it is a substring match, keep the value short โ€” a long, precisely formatted string will match fewer listings than you expect.

Step 4: Set the result cap

maxResults defaults to 25, which is deliberately small so a first run completes quickly and shows you the record shape. Raise it once you have confirmed the filters return what you want. For serious market analysis you will typically want several hundred listings; for a candidate's weekly job search, a few dozen filtered results is usually more useful than a large unfiltered dump.

Step 5: Run and monitor

Start the run from the Apify Console or via the API. The scraper works directly against workatastartup.com without needing a browser or proxy configuration, so runs are straightforward. Watch the log to see listings being collected and to catch any filter that is unexpectedly returning nothing.

Step 6: Analyse compensation and company signals

Once the dataset is populated, the parsed fields are where the value is. Filter on salaryMin to set a floor, group by roleCategory to compare bands, and check salaryCurrency before comparing figures across countries โ€” a CAD range and a USD range are not directly comparable. Cross-reference ycBatch, companyTeamSize and companyFounded to understand what stage of company each offer comes from.

Step 7: Export or automate

Export the dataset as CSV for spreadsheet analysis, or JSON to preserve the skills and founders arrays. For ongoing tracking, schedule the actor to run daily or weekly with the same input and diff on jobId to detect newly posted roles. Pair that with a webhook and you have an alerting pipeline for the roles you care about.


๐Ÿ”Œ API Access & Integrations

Run the Y Combinator jobs scraper over HTTP and get the dataset items back in the same request:

curl -X POST "https://api.apify.com/v2/acts/scrapers-hub~workatastartup-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchQuery": "software engineer",
"roleFilter": "engineering",
"locationFilter": "Remote",
"maxResults": 100
}'

With the Python client:

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("scrapers-hub/workatastartup-jobs-scraper").call(run_input={
"roleFilter": "engineering",
"locationFilter": "Remote",
"maxResults": 250,
})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
usd = [r for r in rows if r.get("salaryCurrency") == "USD" and r.get("salaryMin")]
usd.sort(key=lambda r: r["salaryMax"] or 0, reverse=True)
for job in usd[:10]:
print(f"{job['title']} @ {job['companyName']} ({job['ycBatch']}) "
f"{job['salaryMin']}-{job['salaryMax']} {job['salaryCurrency']}")

Results can also be pushed into Zapier, Make, Google Sheets or Slack, or delivered to your own service with an Apify webhook on run completion.


๐Ÿ’ก Best Use Cases for Y Combinator Jobs Data

๐ŸŽฏ Startup Job Hunting and Application Tracking

Candidates can filter the entire YC board by roleCategory, locationFilter and a salary floor on salaryMin, then work from a single ranked list instead of scrolling the site. applyUrl takes you straight to the application, interviewProcess tells you what to prepare for, and visaSponsorship answers the question that otherwise costs an email exchange to resolve.

๐Ÿ’ฐ Compensation Benchmarking

With salaryMin, salaryMax and salaryCurrency parsed out, you can compute real salary bands by roleCategory, roleSubcategory and companyTeamSize. Adding equityMin and equityMax gives the full compensation picture, which matters enormously at seed and Series A stage where equity is a large share of the offer.

๐Ÿงฒ Recruitment Market Intelligence

Recruiters and talent teams can track which roles YC companies are hiring for and how they are pricing them. Grouping by ycBatch and companyFounded shows which cohorts are actively scaling, while companyTechStack reveals which technologies are in demand โ€” useful both for sourcing strategy and for advising candidates.

๐Ÿ“Š Startup Ecosystem Research

Analysts studying the early-stage ecosystem can use ycBatch, companyTeamSize, companyIndustry and companyStatus across a large sweep to measure hiring velocity by cohort and sector. Because scrapedAt timestamps every record, repeated runs build a time series showing which industries are expanding and which have stalled.

๐Ÿ› ๏ธ Technology Trend Analysis

companyTechStack and skills together form a demand signal for specific technologies. Aggregating them across hundreds of listings shows which frameworks, languages and tools early-stage companies are actually betting on โ€” typically a leading indicator relative to enterprise adoption surveys.

๐Ÿค Sales Prospecting into Startups

Companies selling to startups can use hiring activity as a buying signal. A company with a growing companyTeamSize posting multiple engineering roles is scaling infrastructure; one hiring across sales and marketing is scaling go-to-market. companyWebsite, companyIndustry and founders give the context needed to write a relevant approach.

๐ŸŒ Remote Work and Location Analysis

Filtering on isRemote and grouping by location and companyLocation shows how remote-friendly the YC portfolio is and where the concentrations sit. Comparing salaryMin between remote and location-specific listings for the same roleCategory quantifies whether remote roles are priced differently.


โš™๏ธ Tips for Better Y Combinator Jobs Scraping Results

  • Prefer roleFilter over keyword search for category work. The board's own classification is more consistent than matching free text against job titles that vary widely in phrasing.
  • Keep locationFilter short. It is a case-insensitive substring match, so "San Francisco" works well while a fully formatted address string will match almost nothing.
  • Always check salaryCurrency before comparing salaries. The board carries USD, CAD and other currencies. Comparing raw salaryMin values across currencies produces nonsense.
  • Start with the default maxResults of 25. Confirm your filters return the right kind of listing before scaling to hundreds of records.
  • Handle empty compensation fields. Not every listing publishes salary or equity โ€” equity, equityMin and equityMax can be empty or null. Filter those out before aggregating rather than treating them as zero.
  • Diff on jobId across scheduled runs. It is the stable identifier, so comparing jobId sets between runs is the cleanest way to detect newly posted and removed roles.

๐Ÿ› ๏ธ Troubleshooting

My search returned no jobs. Check the filters in combination. searchQuery, roleFilter and locationFilter all apply together, so a narrow query plus a narrow location can eliminate everything. Clear locationFilter first, since substring matching is the most common cause of an unexpectedly empty result.

I got fewer results than maxResults. maxResults is a ceiling, not a quota. The board simply may not have that many listings matching your filters at the moment you run. Broaden the search or remove a filter.

Salary fields are empty on some listings. Not every company publishes compensation. When the board shows no range, salaryRange is empty and salaryMin, salaryMax and salaryCurrency cannot be parsed. The same applies to equity. Exclude these rows from compensation aggregations.

locationFilter set to "Remote" is missing jobs I expected. The match runs against the listing's location text. A role advertised as "San Francisco or remote" will match, but one advertised only as "Distributed" will not, because the substring differs. Try a broader run with no location filter and inspect the location and isRemote values yourself.

postedAgo is empty for some jobs. The board does not always publish a posting age. When it is absent the field is returned empty rather than guessed at. Use scrapedAt to establish when you observed the listing, and compare across scheduled runs if you need genuine recency tracking.


โ“ Frequently Asked Questions About Y Combinator Jobs Scraping

What does the Y Combinator Jobs Scraper extract? Job listings from workatastartup.com, including title, role category, location, remote status, parsed salary and equity ranges, full descriptions, required skills, visa sponsorship, interview process, and detailed company data such as YC batch, team size, founding year, industry, tech stack and founders.

Do I need an account on workatastartup.com? No. The scraper reads publicly accessible listing pages. Note that applyUrl typically leads to an authenticated application flow, so you will need your own account to actually apply.

How many job listings can I scrape at once? maxResults sets the maximum and defaults to 25. Raise it for larger sweeps; the practical limit is how many listings match your filters on the board.

Can I filter by role category? Yes. roleFilter accepts engineering, design, recruiting, science, product, operations, sales, marketing, legal or finance, or an empty string for all categories.

How does the location filter work? locationFilter is a case-insensitive substring match against the listing's location text. "Remote" matches any listing whose location mentions remote work; "San Francisco" matches "San Francisco, CA".

Is salary data included in the output? Yes, when the company publishes it. You get the displayed salaryRange plus parsed salaryMin, salaryMax and salaryCurrency, which is what makes numeric analysis possible.

Does it capture equity as well as salary? Yes. equity holds the displayed range and equityMin and equityMax hold the parsed bounds, where the listing publishes them.

What company information comes with each job? companyName, companySlug, companyUrl, companyTagline, companyDescription, companyHiringDescription, companyWebsite, companyLogo, companyIndustry, companyLocation, companyStatus, companyTechStack, companyFounded, companyTeamSize, ycBatch and founders.

Can I find only remote startup jobs? Yes. Set locationFilter to "Remote", or scrape more broadly and filter on the boolean isRemote field afterwards, which is the more reliable of the two approaches.

Does the scraper tell me about visa sponsorship? The visaSponsorship field returns whatever the listing publishes on the subject. Not every company states a position, so the field can be empty.

Can I see a company's interview process? Where the company publishes it, interviewProcess returns that text. It is one of the more useful fields for candidates preparing applications.

Do I need a proxy to run this scraper? No. The actor works directly against the source site and does not require proxy configuration.

Can I schedule recurring scrapes of the YC job board? Yes. Use Apify's Scheduler with saved input and compare jobId values between runs to spot new listings. Combined with a webhook, this makes an effective new-job alerting system.

What export formats are supported? JSON, CSV, Excel and XML from the Apify Console, or the items directly in the API response via run-sync-get-dataset-items. JSON preserves the skills and founders arrays; CSV flattens them.

Why do description and descriptionHtml both exist? description is plain text, which is what you want for keyword analysis, embeddings or LLM processing. descriptionHtml preserves the original markup, which is what you want if you are rendering the listing in your own interface.


๐Ÿ†˜ Support & Feedback

Hit a bug, a parsing problem, or a filter behaving unexpectedly? Open a ticket in the Issues tab on the actor page and include the run ID and your input so it can be reproduced.

Need a custom build โ€” additional fields, a different filtering model, or direct delivery into your ATS or data warehouse? Email scraperhubapi@gmail.com with your requirements.

If the Y Combinator jobs scraper is useful to you, please leave a rating and a short review on the actor page. Feedback directly shapes what gets improved next.


โš–๏ธ Disclaimer

This Y Combinator jobs scraper collects only publicly available job listing data from workatastartup.com โ€” the same information any visitor to the board can see. It does not authenticate, does not access private employer dashboards, and does not retrieve applicant data of any kind.

You are responsible for how you use this actor and the data it produces, including compliance with workatastartup.com's terms of service and Y Combinator's policies. Scraped job data should be used for legitimate purposes such as job searching, market research, recruitment intelligence and analysis โ€” not for spamming employers or republishing listings as if they were your own.

Some fields, notably founders and company profile text, may contain personal data. Under GDPR, CCPA and comparable privacy regimes you act as the data controller for anything you store: keep only what you need, secure it appropriately, and honour access and deletion requests. Using founder or company contact information for unsolicited outreach is subject to marketing and anti-spam law in your jurisdiction.

Job listing content, descriptions and company logos remain the property of the respective companies. If you believe data collected through this actor should be removed, contact scraperhubapi@gmail.com with the details and the request will be handled.