Wellfound Scraper - Startup Jobs, Salary, Equity
Pricing
Pay per event
Wellfound Scraper - Startup Jobs, Salary, Equity
Scrape startup job listings from Wellfound, formerly AngelList Talent. Returns title, company, salary range parsed into numbers, equity band, remote flag, locations and posting date. Salary and equity are published openly on Wellfound, which most job boards do not do.
Pricing
Pay per event
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Wellfound Scraper
Startup jobs from Wellfound, formerly AngelList Talent, with the salary and the equity. That is the reason this one exists: most job boards let companies hide compensation, and Wellfound does not. Every listing publishes a pay range, and many publish an equity band alongside it.
So a run here gives you something you cannot get from a general job board: a straight read on what startups are actually paying, by role, right now.
What each job gives you
title,url, androle, Wellfound's own category for the positioncompany,company_url,company_slug,company_sizeandcompany_tagline, the one-line description of what the startup doescompensationexactly as published, plussalary_minandsalary_maxparsed into plain numbers you can sort and averageequity, as a band such as0.1%-0.5%, or the stringnonewhen the listing explicitly says no equityremote, pluslocationsandremote_locations, which are different lists: the second is the set of places the company will accept a remote worker from, and it is often much wider than the firstposted_atin ISO 8601 andposted_timestampas a Unix time
Three things this gets right that are easy to get wrong
$60k is sixty thousand. Strip the suffix and you get 60, which is a
number, looks like a salary, and is wrong by three orders of magnitude. Both
k and m are applied, and a range is split into its two bounds.
The company is a pointer, not an object. Wellfound is a Next.js app and its
embedded state is an Apollo normalised cache: a job's company is stored as a
reference like {"__ref": "Startup:12345"}, with the actual company sitting
elsewhere in a flat lookup table. A parser that reads the job object alone
returns fifty jobs with fifty empty company columns. Those references are
resolved before any row is emitted, and a reference that points at nothing
still produces a row rather than an exception.
The dash in 0.1% – 0.5% is not a hyphen. It is an en dash, and a range
pattern written with a plain - matches only the first half, quietly turning a
band into a flat figure. Both characters are accepted.
Each of those three would produce output that looks completely fine. That is what makes them worth stating.
Input
Give it a list of targets:
jobsfor the main board- a role slug such as
software-engineer,product-managerordata-scientistfor a role page - any Wellfound URL, pasted as-is
Plus, optionally, how many pages to walk per target, an upper bound on rows, how many pages to fetch at once, retries, and a country to request from.
Run summary
Jobs returned, how many carried a salary, how many carried equity, how many are remote, the number of unique companies, and the median advertised minimum salary across the run. That median is the fastest read on whether a role category pays what you thought it did.
Company names are counted separately in withCompanyName, which exists as a
health check: if that number ever drops well below the job count, the reference
resolution described above has stopped working and the run should not be
trusted. A silent column of blanks is exactly the failure this actor is built
to avoid, so it is measured rather than assumed.
Scale
Each page costs one fetch and holds roughly fifty listings. A single target at one page returned 50 jobs in about two seconds in testing, 48 of them with a salary and 44 distinct companies.
Rows are deduplicated on the job id across every target and page in a run, so overlapping searches do not inflate the count.
What people use this for
Compensation benchmarking. This is the main one. Run a role page on a
schedule and you build a real series of advertised startup pay for that role.
Because salary_min and salary_max are numbers, medians and percentiles are
a one-line calculation rather than a parsing project.
Equity norms by stage. equity combined with company_size shows how
bands move as companies grow. Very few sources publish this at all, and almost
none publish it next to the salary it comes with.
Sourcing and lead lists. company, company_url, company_size and
company_tagline together make a usable list of startups that are actively
hiring, which is a strong buying signal if you sell to startups.
Remote-policy mapping. remote_locations is the interesting column: it is
the set of countries a company will actually employ from, which is a much
sharper filter than a yes-or-no remote flag and is rarely published anywhere
else in structured form.
Notes
Salaries are annual figures in US dollars unless the listing itself says otherwise, and they are what the company advertised rather than what anyone was paid. Equity bands are similarly an offer range, not a grant.
Listings that have been filled or withdrawn simply stop appearing. Because
job_id is stable, running the same target on a schedule and keeping the rows
lets you see how long postings stay open, which is a decent proxy for how hard
a role is to fill.
Nothing here needs a login, a cookie or an API key.