Wellfound Startup Jobs Scraper (role, location, remote, salary) avatar

Wellfound Startup Jobs Scraper (role, location, remote, salary)

Pricing

from $1.00 / 1,000 result items

Go to Apify Store
Wellfound Startup Jobs Scraper (role, location, remote, salary)

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

Viktor Dubnytskiy

Maintained by Community

Actor 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

FieldRow from /role/software-engineerRow from /location/berlin
id46398213165360
titleSoftware EngineerSoftware Architect (L3/L4/L5)
companyNameCheckropenigloo
companySize501-100011-50
companyStageScale StageEarly Stage
companyTags["Actively Hiring", "B2B", "Top Investors", "YC Funded", "Valuation $1B+", ...]["Actively Hiring", "Top 5% of responders", "B2C", "B2B"]
locationDenver, San FranciscoBerlin, Hyderabad
remote / remoteTypefalse / —false / ONSITE
compensation$150k – $176k$50k – $80k • 0.01% – 0.1%
salaryMin / salaryMax / currency150000 / 176000 / USD50000 / 80000 / USD
equity0.01% – 0.1%
postedAt2026-08-27T20:06:24Z2026-09-03T18:50:20Z
urlhttps://wellfound.com/jobs/4639821-software-engineerhttps://wellfound.com/jobs/3165360-ai-software-engineer

Input

FieldMeaningDefault
rolesRole slugs or plain words, one per line: software-engineer, Data Scientist, product-designerempty
locationsCities or regions, one per line: san-francisco, Berlin, new-yorkempty
landingUrlsReady-made Wellfound landing URLs (/role/…, /location/…, /role/l/…/…)empty
remoteOnlyKeep only postings Wellfound marks as remotefalse
maxJobsPerQueryStop each role/location query after this many jobs100
strictQueryMatchDrop a landing Wellfound resolved to something other than what you asked fortrue
maxItemsStop the whole run after this many rows100
modescrape or monitor (only new/changed since the last run)scrape
monitorKey, webhookUrl, telegramBotToken, telegramChatIdMonitor-mode state key and alert targetsempty

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

EventPrice
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 maxJobsPerQuery says.
  • 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. With strictQueryMatch on (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 to false if 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, companyTags and companyPitch come from the landing page itself; there is no headcount, funding total or investor list beyond the badges Wellfound prints.
  • compensation is the string the employer published; salaryMin / salaryMax / currency are parsed from it and are null when the posting publishes no pay. Equity-only strings (No equity, 0.5% – 1.0%) land in equity with the salary fields empty.
  • Proxy tiers are walked cheapest-first: residential, then Web Unblocker only if residential is challenged. The run reports blocked rather 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 into landingUrls (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; description and companyPitch are 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.