Wellfound (AngelList) Jobs Scraper & Job Alerts — Salary/Equity avatar

Wellfound (AngelList) Jobs Scraper & Job Alerts — Salary/Equity

Pricing

$2.00 / 1,000 jobs

Go to Apify Store
Wellfound (AngelList) Jobs Scraper & Job Alerts — Salary/Equity

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

Luke Hunter

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

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)

  1. Open the Input tab (no Wellfound account needed).
  2. Use this prefill, or add your own roles/locations:
{
"roles": ["software-engineer"],
"maxItems": 20
}
  1. 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.

  1. Set your roles/locations/filters as usual, plus:
{
"roles": ["software-engineer"],
"locations": ["san-francisco"],
"onlyNewSinceLastRun": true,
"maxItems": 100
}
  1. Click Schedule on the run page (or create one under Schedules in the Apify Console) — daily works well for an active role.
  2. 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.
  3. 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"
}
FieldTypeDefaultDescription
rolesstring[]—Job roles, free text ("software engineer") or a slug ("software-engineer"). At least one role or location is required. Max 10.
locationsstring[]—Locations, free text ("san francisco") or a slug. Max 10.
remoteOnlybooleanfalseFor roles, uses Wellfound's dedicated remote-jobs page instead of the general role page. For locations, keeps only jobs Wellfound itself marks as remote.
minSalaryinteger0Drop 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.
keywordsstring[][]Keep only jobs whose title or description contains at least one of these (case-insensitive).
maxItemsinteger501–2000. Hard cap on jobs delivered across the whole run. You're charged per delivered job, so this is your cost cap.
onlyNewSinceLastRunbooleanfalseJob alerts mode — see above. Delivers and charges only jobs not delivered by a previous run of the same search.
stateStoreNamestringwellfound-jobs-scraper-seen-jobsName 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"
}
FieldDescription
jobIdWellfound's stable job listing ID.
title, urlJob title, and a constructed link to the listing.
companyName, companySlug, companyUrlThe startup, and a constructed link to its company page.
companySizeWellfound's size band code, e.g. SIZE_11_50.
companyStageWellfound's own stage label, e.g. "Early Stage", "Growth Stage" — null when Wellfound doesn't show one.
highConceptThe startup's own one-line pitch.
locationsLocation name(s) shown on the listing.
remote, remotePolicyWellfound's remote flag, and category (REMOTE/ONSITE/ONSITE_OR_REMOTE).
jobTypeEmployment type, e.g. full-time.
salaryMin, salaryMax, salaryCurrencyDerived from Wellfound's compensation string.
equityMin, equityMaxDerived equity percentage range. 0/0 for "No equity"; null/null when equity isn't mentioned.
compensationRawWellfound's own compensation string, unparsed — check the derived fields against it.
yearsExperienceMin, yearsExperienceMaxYears of experience requested, as published.
postedAt, liveStartAtpostedAt is derived (ISO 8601) from liveStartAt, Wellfound's own raw Unix-seconds timestamp.
role, sourceUrlWhich requested role this job came from (if any), and the exact URL fetched.
scrapedAtISO 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.md for 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 (totalJobCount can 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 are null rather than guessed. compensationRaw is always included so you can check.
  • minSalary excludes unknowns. A job with no parseable salary can't be confirmed to meet your threshold, so it's dropped when minSalary is 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) — companyUrl is 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.

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.