Wellfound (AngelList) Jobs Scraper & Job Alerts — Salary/Equity
Pricing
$2.00 / 1,000 jobs
Wellfound (AngelList) Jobs Scraper & Job Alerts — Salary/Equity
Get the newest Wellfound (AngelList) startup jobs for a role or location: title, company, salary range, equity, remote policy, size and stage. Turn on job alerts and run on a schedule to get only new listings each time, billed once each.
Pricing
$2.00 / 1,000 jobs
Rating
0.0
(0)
Developer
Luke Hunter
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Wellfound (AngelList) Jobs Scraper & Job Alerts — Salary, Equity & Company Data
For recruiters, job boards and VC/startup researchers who need structured startup job data — salary, equity, company size and one-line pitch — without clicking through Wellfound (formerly AngelList Talent) one listing at a time. Search by role and/or location and get one row per job from Wellfound's first results page (the newest listings, typically about 20 per role or location), with its startup already attached. Turn on job alerts mode (onlyNewSinceLastRun) and run it on a schedule to get only newly posted jobs each time. Best used as a daily or weekly new startup jobs check across several roles or cities, not as a full archive of every Wellfound job.
Pay-per-result: $0.002 per job — 1,000 jobs = $2.
Built for people who want a Wellfound scraper / AngelList jobs scraper that returns clean, structured data — not a screen-scraping browser session.
Quick start (under a minute)
- Open the Input tab (no Wellfound account needed).
- Use this prefill, or add your own roles/locations:
{"roles": ["software-engineer"],"maxItems": 20}
- Click Start. Open the Jobs dataset view and export as CSV, Excel or JSON.
What you get
One flat row per job listing, with:
- The job: title, URL, employment type, remote policy, years of experience requested, when it went live.
- The pay: salary range and currency, equity range — parsed from Wellfound's own compensation string (see Limitations).
- The startup: name, size band, funding stage badge (e.g. "Early Stage", "Growth Stage"), and its own one-line pitch.
Use cases
- Recruiters and sourcers building a live view of who's hiring for a role, with salary/equity visible before opening a single listing.
- Job boards and aggregators pulling structured startup listings instead of maintaining their own Wellfound parser.
- VC and startup researchers tracking which companies in a space are actively hiring, at what stage, and at what comp.
Job alerts: get only new jobs
Turn on onlyNewSinceLastRun and put this Actor on a schedule to get a genuine Wellfound job alert: every run after the first delivers (and charges for) only jobs it hasn't delivered before for that exact search. It's the same wedge as Zillow Price Drop Monitor's change-event model, applied to job search.
- Set your roles/locations/filters as usual, plus:
{"roles": ["software-engineer"],"locations": ["san-francisco"],"onlyNewSinceLastRun": true,"maxItems": 100}
- Click Schedule on the run page (or create one under Schedules in the Apify Console) — daily works well for an active role.
- The first scheduled run is a baseline: it delivers every job currently listed (it's all new to you) and remembers it — you're charged normally for that run. Every run after that only delivers jobs it hasn't seen before for this exact search.
- Add a Webhook under the schedule's Integrations for
ACTOR.RUN.SUCCEEDED, pointing at:- Slack: Apify's own Slack integration (or a Zapier/Make webhook step) posting each run's new dataset items to a channel.
- Email: a Zapier/Make "on webhook, send email" step, or Apify's own email integration, summarising that run's new jobs.
- Google Sheets: the Apify-to-Google-Sheets integration, appending each run's rows to a sheet you watch.
The run's status message tells you what happened: "First run: 20 job(s) delivered and remembered; next runs return only new ones." on the baseline, then "3 new job(s) since last run (17 already seen)." on later runs. A run that finds nothing new still succeeds with an empty dataset — that's the point of the mode, not a failure.
Each distinct combination of roles/locations/remoteOnly/minSalary/keywords is tracked as its own watch, so you can run several alert schedules (e.g. one per role) without them mixing up each other's history. stateStoreName only needs changing if you want to reset a watch's memory or explicitly isolate it.
Input
{"roles": ["software engineer"],"locations": ["san francisco"],"remoteOnly": false,"minSalary": 0,"keywords": [],"maxItems": 50,"onlyNewSinceLastRun": false,"stateStoreName": "wellfound-jobs-scraper-seen-jobs"}
| Field | Type | Default | Description |
|---|---|---|---|
roles | string[] | — | Job roles, free text ("software engineer") or a slug ("software-engineer"). At least one role or location is required. Max 10. |
locations | string[] | — | Locations, free text ("san francisco") or a slug. Max 10. |
remoteOnly | boolean | false | For roles, uses Wellfound's dedicated remote-jobs page instead of the general role page. For locations, keeps only jobs Wellfound itself marks as remote. |
minSalary | integer | 0 | Drop jobs whose parsed salary range doesn't reach this (USD/year). A job with no parseable salary is dropped when this is set — see Limitations. |
keywords | string[] | [] | Keep only jobs whose title or description contains at least one of these (case-insensitive). |
maxItems | integer | 50 | 1–2000. Hard cap on jobs delivered across the whole run. You're charged per delivered job, so this is your cost cap. |
onlyNewSinceLastRun | boolean | false | Job alerts mode — see above. Delivers and charges only jobs not delivered by a previous run of the same search. |
stateStoreName | string | wellfound-jobs-scraper-seen-jobs | Name of the store that remembers what a job-alerts search has already delivered. Change it only to isolate or reset a watch. |
At least one role or location is required. Give both to search more broadly in one run — results are de-duplicated by job ID.
Example output (one row per job)
A representative delivered row:
{"jobId": "1234567","title": "Senior Software Engineer","url": "https://wellfound.com/jobs/1234567-senior-software-engineer","companyName": "Example Labs","companySlug": "example-labs","companyStage": "Early Stage","locations": ["San Francisco", "Remote"],"remote": true,"remotePolicy": "REMOTE","jobType": "full-time","salaryMin": 150000,"salaryMax": 200000,"salaryCurrency": "USD","equityMin": 0.05,"equityMax": 0.15,"role": "software-engineer","sourceUrl": "https://wellfound.com/role/software-engineer","scrapedAt": "2026-09-28T00:00:00.000Z"}
| Field | Description |
|---|---|
jobId | Wellfound's stable job listing ID. |
title, url | Job title, and a constructed link to the listing. |
companyName, companySlug, companyUrl | The startup, and a constructed link to its company page. |
companySize | Wellfound's size band code, e.g. SIZE_11_50. |
companyStage | Wellfound's own stage label, e.g. "Early Stage", "Growth Stage" — null when Wellfound doesn't show one. |
highConcept | The startup's own one-line pitch. |
locations | Location name(s) shown on the listing. |
remote, remotePolicy | Wellfound's remote flag, and category (REMOTE/ONSITE/ONSITE_OR_REMOTE). |
jobType | Employment type, e.g. full-time. |
salaryMin, salaryMax, salaryCurrency | Derived from Wellfound's compensation string. |
equityMin, equityMax | Derived equity percentage range. 0/0 for "No equity"; null/null when equity isn't mentioned. |
compensationRaw | Wellfound's own compensation string, unparsed — check the derived fields against it. |
yearsExperienceMin, yearsExperienceMax | Years of experience requested, as published. |
postedAt, liveStartAt | postedAt is derived (ISO 8601) from liveStartAt, Wellfound's own raw Unix-seconds timestamp. |
role, sourceUrl | Which requested role this job came from (if any), and the exact URL fetched. |
scrapedAt | ISO 8601 UTC timestamp of the run. |
Every field is null when Wellfound doesn't publish it. Nothing is guessed.
Limitations — please read
- One page per role/location. Every captured page we checked shows exactly one page of results, and none links to a page 2. This Actor does not guess at pagination it can't verify works — see
ENGINEERING-NOTES.mdfor the full reasoning. Each role/location search returns Wellfound's own first page (roughly 20–55 jobs in what we captured), not the full total Wellfound reports (totalJobCountcan run into the thousands for a popular role). Narrow with more specific roles/locations, or run more of them, to cover more ground. - Compensation is free text. Wellfound doesn't expose salary/equity as separate numeric fields — they're parsed from a string like
"$120k – $200k • 0.01% – 0.15%". When that string doesn't match the expected shape (e.g. "Competitive", or blank), the salary/equity fields arenullrather than guessed.compensationRawis always included so you can check. minSalaryexcludes unknowns. A job with no parseable salary can't be confirmed to meet your threshold, so it's dropped whenminSalaryis set — it is not assumed to pass.- No company pages, ever. This Actor never fetches
/company/<slug>pages (they returned an anti-bot challenge/403 for us) —companyUrlis constructed for your convenience, not scraped from a page we visited. - No personal data. Nothing about recruiters or individual employees is collected — only company and job fields.
- Polite by design. One request per role/location, at least 3 seconds apart, one honest User-Agent, no proxies, no login, no CAPTCHA-solving. If Wellfound blocks a request, that target is reported as failed (and not charged) rather than retried aggressively.
Pricing
Pay-per-event: $0.002 per delivered job — you're only charged for jobs that actually land in your dataset. 1,000 jobs = $2. A run that returns nothing is never charged.
FAQ
Does this need a Wellfound account? No — it reads Wellfound's own public role and location pages.
Can I get every job for a role? Not yet — see Limitations above on pagination. You'll get Wellfound's first page of results per role/location you search.
Why is salaryMin sometimes null even though the job has a salary? Either Wellfound didn't publish a compensation string for that listing, or it used a format outside the range shape this Actor parses (rare — check compensationRaw).
How do I get a Wellfound job alert instead of the same jobs every time? Set onlyNewSinceLastRun: true and put the Actor on a schedule — see "Job alerts" above. The first scheduled run delivers everything (and remembers it); later runs only deliver what's new.
Related Actors
Other data tools from the same developer, built to the same standard: official or public sources, hard cost caps, and honest documentation of limits.
- Remote Jobs Aggregator: remote job listings from RemoteOK, Himalayas, Jobicy and We Work Remotely in one deduplicated feed.
- Google Play App Scraper: ratings, installs, developer contact info and pricing for any Google Play app.
- Apple App Store Reviews Scraper: Apple App Store reviews for any iOS app, across countries, with rating, version and date.
- Spotify Scraper: play counts, monthly listeners and playlist track lists for any public Spotify artist, playlist, album or track.
- Walmart Category Scraper: product names, prices, was-prices and ratings from Walmart category pages.
- Shopify Store Products Scraper: full product catalogues from any Shopify store, with prices, sale prices, variants and stock.
- Vinted Scraper: Vinted search results with prices, brands, sizes and favourites, across any Vinted country.
- AliExpress Search Scraper: AliExpress search results with prices, discounts, ratings and sold counts, by keyword.