Wellfound Startup Jobs Scraper (role, location, remote, salary)
Pricing
from $1.00 / 1,000 result items
Wellfound Startup Jobs Scraper (role, location, remote, salary)
Wellfound (AngelList Talent) startup jobs as flat rows: title, company, size, funding stage, badges, pay range, equity, remote flag, locations, posted date and full description. Search by role, by city or both, filter remote-only, and get monitor-mode alerts on new startup jobs.
Pricing
from $1.00 / 1,000 result items
Rating
0.0
(0)
Developer
Viktor Dubnytskiy
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
Scrape startup job listings from Wellfound (ex AngelList Talent) public landing pages. Give it a role, a city, or both, and get one flat row per job with the hiring startup's public profile inlined: company name, size, funding stage, badges, one-line pitch, plus the posting's pay range, equity, remote flag, locations and the full job description.
No login, no cookies, no account. Only pages Wellfound serves to logged-out visitors are read.
What you get
One row per job listing:
id / jobId, url, title, roleTitle, companyName, companySlug, companyUrl, companySize,
companyStage, companyTags, companyPitch, companyLogoUrl, location, locations, remote,
remoteType, remoteLocations, jobType, compensation, salary, salaryMin, salaryMax, currency,
equity, yearsExperienceMin, yearsExperienceMax, postedAt, description, atsSource, query,
page, rank, scrapedAt.
id is the Wellfound job listing id, so the same posting never appears twice in one dataset even when it is
found through two different landings, and monitor mode can track it across runs.
Example output
| Field | Row from /role/software-engineer | Row from /location/berlin |
|---|---|---|
id | 4639821 | 3165360 |
title | Software Engineer | Software Architect (L3/L4/L5) |
companyName | Checkr | openigloo |
companySize | 501-1000 | 11-50 |
companyStage | Scale Stage | Early Stage |
companyTags | ["Actively Hiring", "B2B", "Top Investors", "YC Funded", "Valuation $1B+", ...] | ["Actively Hiring", "Top 5% of responders", "B2C", "B2B"] |
location | Denver, San Francisco | Berlin, Hyderabad |
remote / remoteType | false / — | false / ONSITE |
compensation | $150k – $176k | $50k – $80k • 0.01% – 0.1% |
salaryMin / salaryMax / currency | 150000 / 176000 / USD | 50000 / 80000 / USD |
equity | — | 0.01% – 0.1% |
postedAt | 2026-08-27T20:06:24Z | 2026-09-03T18:50:20Z |
url | https://wellfound.com/jobs/4639821-software-engineer | https://wellfound.com/jobs/3165360-ai-software-engineer |
Input
| Field | Meaning | Default |
|---|---|---|
roles | Role slugs or plain words, one per line: software-engineer, Data Scientist, product-designer | empty |
locations | Cities or regions, one per line: san-francisco, Berlin, new-york | empty |
landingUrls | Ready-made Wellfound landing URLs (/role/…, /location/…, /role/l/…/…) | empty |
remoteOnly | Keep only postings Wellfound marks as remote | false |
maxJobsPerQuery | Stop each role/location query after this many jobs | 100 |
strictQueryMatch | Drop a landing Wellfound resolved to something other than what you asked for | true |
maxItems | Stop the whole run after this many rows | 100 |
mode | scrape or monitor (only new/changed since the last run) | scrape |
monitorKey, webhookUrl, telegramBotToken, telegramChatId | Monitor-mode state key and alert targets | empty |
Give roles alone and the actor walks /role/<role>. Give locations alone and it walks /location/<city>.
Give both and it walks the combined /role/l/<role>/<city> landing for every pair, up to 20 queries per run.
Free text is slugified for you, so Data Scientist and data-scientist are the same query.
Job alerts (monitor mode)
Set mode: monitor and save the run as a task on a schedule. Each run compares against the previous one and
returns only new or changed postings, keyed by the job listing id, with the change decided on
title | companyName | compensation | location. Point webhookUrl or the Telegram fields at your own channel
and every new startup job matching your roles arrives there. You pay one monitor-check event per run plus one
change event per posting that actually moved.
Pricing
| Event | Price |
|---|---|
| result | $0.001 per job ($1 per 1,000) |
| monitor-check | $0.005 per monitor run |
| change | $0.001 per new/changed job |
You are charged only for rows actually pushed. Postings dropped by remoteOnly are filtered before the
dataset and are never charged. Proxy traffic is billed by Apify on top of these events: every request goes
through a residential exit and a landing page is roughly 0.6 MB, so budget for it in your plan. If Cloudflare
puts a security check on the residential exit, the actor steps up to Apify's Web Unblocker for the rest of the
run (Web Unblocker is priced per request, so a run that escalates costs noticeably more); if the check survives
that too and nothing has been collected, the run stops and reports blocked instead of spending further.
Limits
- Wellfound paginates its landing pages by startup, 20 startups per page, and shows up to 3 open jobs per
startup — so a page yields roughly 30-45 jobs. The actor stops by itself at the last page Wellfound
publishes: asking for a page past the end silently serves page 1 again, and the walk detects that instead of
re-charging the same rows. A hard ceiling of 25 pages per query applies whatever
maxJobsPerQuerysays. - A role or city Wellfound does not know answers with HTTP 404 and the run ends with no rows and no charge —
there is no filler-results page, so you never pay for unrelated jobs. One case is not a 404: an unknown
role paired with a real city (
/role/l/veterinarian/berlin) silently degrades to that city's whole landing. WithstrictQueryMatchon (the default) the actor notices — the page echoes back which role and city Wellfound actually resolved — and drops the query instead of charging you for jobs that have nothing to do with the role. Set it tofalseif you would rather have the city's jobs than nothing. - The landing pages show each startup's highlighted open jobs, not necessarily every job it has open.
- Company profile pages (
wellfound.com/company/<slug>) sit behind a Cloudflare challenge and are not opened.companyUrl,companySize,companyStage,companyTagsandcompanyPitchcome from the landing page itself; there is no headcount, funding total or investor list beyond the badges Wellfound prints. compensationis the string the employer published;salaryMin/salaryMax/currencyare parsed from it and arenullwhen the posting publishes no pay. Equity-only strings (No equity,0.5% – 1.0%) land inequitywith the salary fields empty.- Proxy tiers are walked cheapest-first: residential, then Web Unblocker only if residential is challenged.
The run reports
blockedrather than retrying forever when both are refused. - Only three routes are ever requested —
/role/<role>,/location/<city>and/role/l/<role>/<city>, with?page=N. Anything else pasted intolandingUrls(a company profile, a job page, Wellfound's own/search, a candidate profile) is rejected before a request is made. Wellfound's search route is disallowed by its robots.txt and is not used. - No person-level data. No candidate profiles, no recruiter or founder names, no emails, no phone numbers,
no avatars. Rows describe a job posting and the hiring company, nothing else. Some employers type a contact
address into the posting text itself;
descriptionandcompanyPitchare scrubbed of e-mail addresses and dialable phone numbers before the row is pushed, and a posting that carries neither is returned untouched.
FAQ
Can I combine several roles and cities? Yes. Roles and locations form a cross product of landing pages,
capped at 20 queries per run; each row carries the landing URL it came from in query.
Why do two landings return the same job? They share startups. The job listing id is the dataset key, so duplicates collapse into one row automatically.
What happens when nothing is found? No rows are pushed and no result events are charged. The RUN_SUMMARY
record in the run's key-value store carries emptyReason, which separates a genuinely empty landing
(no_matches) from a refused request (blocked) or moved markup (source_changed).
Changelog
- 0.1: initial release — role, location and role+location landings, pagination, remote filter, parsed pay and equity, startup profile fields, monitor mode.
If this actor saved you time, a short review on its Store page genuinely helps other people find it. Found a bug or need a field that is missing? Open a ticket on the Issues tab.