Wellfound Jobs Scraper avatar

Wellfound Jobs Scraper

Pricing

from $0.78 / 1,000 job listings

Go to Apify Store
Wellfound Jobs Scraper

Wellfound Jobs Scraper

Scrape Wellfound (AngelList) startup jobs by role, location or both, remote-only, with optional full detail: description, structured salary, company website. No login, no browser.

Pricing

from $0.78 / 1,000 job listings

Rating

0.0

(0)

Developer

Romy

Romy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Scrape Wellfound (formerly AngelList Talent) startup jobs by role, by location, or both -- with optional full job detail (description, structured salary, company website). Plain HTTP, no login, no browser, no proxy needed for listings.

Why

Wellfound has no public API. This reads its own server-rendered pages, verified live from a home IP and from Apify's direct, datacenter and residential IPs.

  • Any role or location works, not just the ~12 roles / ~10 cities Wellfound links in its navigation. backend-engineer, kubernetes, berlin, toronto, singapore were all verified. Type a name; it is lowercased and hyphenated for you.
  • Role x location is a real combined filter (Wellfound's own /role/l/<role>/<location> listing), not two searches intersected after the fact. Give both lists and every pair is scraped.
  • Remote-only is honest about what exists. Wellfound has a remote listing per role, and a global remote feed -- but none per location. So remoteOnly works with roles alone, or with nothing else set (global feed), and is rejected with locationSlugs instead of silently ignored.
  • Detail is parsed from structured data: every job page embeds a schema.org JobPosting block, so salary comes back as real numbers (currency / min / max / unit), not scraped text.
  • Duplicates are dropped across sources, and maxJobs counts unique jobs.

Input

FieldTypeDefaultDescription
roleSlugsstring[]--Roles, e.g. software-engineer, Product Manager.
locationSlugsstring[]--Locations, e.g. san-francisco, berlin. Alone: all roles there. With roleSlugs: each pair.
remoteOnlybooleanfalseRemote jobs only. Roles alone, or no lists (global remote feed). Not allowed with locationSlugs.
maxPagesPerSourceinteger5Listing pages per role/location (~30-50 jobs each; popular roles run 40-90+ pages).
maxJobsinteger100Stop after this many unique jobs in total.
scrapeJobDetailbooleanfalseAlso open each job for description, structured salary, date posted, industry, company website/logo.

At least one of roleSlugs, locationSlugs or remoteOnly is required.

Output

One dataset row per job.

Always: id, slug, url, title, companyName, companySlug, employmentType, salaryText, equityText, locationText, postedText, source (which role/location it came from), sourcePage.

salaryText, equityText and locationText are the strings Wellfound shows ("$100k – $180k", "0.05% – 0.25%", "Remote only • Canada + 3") and are null when a job doesn't show that item. Enable scrapeJobDetail for structured numbers.

With scrapeJobDetail: description (simple HTML), datePosted (ISO), industry, companyWebsite, companyLogo, locations, salaryCurrency, salaryMin, salaryMax, salaryUnit, and detailError (set, with the detail fields null, if that job's page could not be read).

Pricing

Pay-Per-Event, standard tiered ladder (FREE/BRONZE/SILVER/GOLD/PLATINUM/DIAMOND = 100/92/85/78/72/68%):

EventFREE tier
job-listing-scraped (per job row)$0.001
job-detail-scraped (per job whose detail was read)$0.002

A job with full detail costs $0.003 at the FREE tier. A failed detail fetch is not charged.

Known limitations

  • No company profile data (size, funding, about page): Wellfound returns 403 for /company/... on every IP tier tested, including residential.
  • No salary / equity / experience / job-type filters: they exist only in Wellfound's interactive search, which sits behind a Cloudflare challenge. Filter the output instead.
  • Detail pages are sometimes refused (403) through Apify's datacenter proxy tier while working on direct and residential; the actor retries, and reports detailError if it still fails.
  • Listing counts move as Wellfound updates; postedText is relative ("1 week ago") -- use scrapeJobDetail for an exact datePosted.