Wellfound All-in-One API
Pricing
from $0.78 / 1,000 job listing items
Wellfound All-in-One API
Always-on REST API for Wellfound (AngelList) startup jobs: browse by role, location or both, remote-only, and full job detail with structured salary. No login, no browser.
Pricing
from $0.78 / 1,000 job listing items
Rating
0.0
(0)
Developer
Romy
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
5 days ago
Last modified
Categories
Share
Unofficial, always-on REST API for Wellfound (wellfound.com, formerly AngelList Talent) startup job listings: browse by role, by location, by both together, remote-only, or fetch full job detail. No account, login, app or device needed for any endpoint here.
Why
Wellfound has no public JSON API -- this wraps its own server-rendered pages, verified live (2026-09-23) from a home IP and from Apify's own direct, datacenter and residential proxy IPs. Every filter below was live-tested and classified as a real filter or confirmed non-existent before being exposed here -- nothing is guessed from the UI alone.
- Role and location slugs are open, not a curated list. Wellfound's nav
only links ~12 roles and ~10 locations, but arbitrary slugs work fine --
verified live with
backend-engineer,devops-engineer,kubernetes,berlin,toronto, and more. A slug is the lowercase, hyphenated form of the role/location name; an unrecognized one 404s. - The combined role+location filter is real, but it lives at a different
URL shape than you'd guess:
/role/l/:role/:location, not a query string. Query-string filters (?role=,?location=on/jobsor on/role/r/:slug) were live-tested and confirmed inert -- silently ignored, not an error -- so this API doesn't offer them. - Remote-only is role-specific, not location-specific.
/role/r/:slug(a real, separately-paginated subset) exists; the equivalent for location (/location/r/:slug) does not -- live-tested, 404. Use/jobs/remotefor global remote listings across every role instead. - No salary/equity/job-type/experience/company-stage filter parameters exist as crawlable URLs -- checked directly in the page UI, not assumed. Those only exist in Wellfound's interactive client-side search, which is gated by a Cloudflare Turnstile challenge and out of scope here.
- Company profile pages are not available.
wellfound.com/company/:slugreturns 403 on every IP tier tested, including residential from a home network. Job detail responses still carry company name, website and logo (from the job's own embedded structured data), just not company size/funding/about-page content. - Job detail is parsed from real structured data, not fragile HTML
scraping: every job page embeds a schema.org
JobPostingJSON-LD block (full description, structured salary, employment type, company info, date posted) that this API parses directly.
Endpoints
Jobs
GET /jobs/by-role
One page of job listings for a role slug (any location, or remote-only with remoteOnly=true). Each item is a listing-level summary (title, company, salary/equity range, location text, employment type, posted date) -- call /job for the full description and structured salary from any given result.
| Param | Required | Description |
|---|---|---|
slug | yes | Role slug, as it appears in a Wellfound "Jobs by Role" URL (wellfound.com/role/ROLE). Not limited to a curated list -- live-verified 2026-09-23 that arbitrary slugs work (e.g. "backend-engineer", "devops-engineer", "kubernetes", "berlin", "toronto"), derived by lowercasing the title and joining words with hyphens. An unrecognized slug returns 404, not an error. |
page | no | Listing page number, 1-based (default 1). Popular role/location combinations can run 40-90+ pages. |
remoteOnly | no | If true, only remote-eligible jobs for this role (maps to wellfound.com/role/r/ROLE, a real, separately-paginated subset -- roughly half the page count of the non-remote-filtered listing for the same role, verified live). Default false (all jobs for the role, any location). |
Billed per item returned (job-listing-scraped event); an empty result is free.
GET /jobs/by-location
One page of job listings for a location slug (any role). There is no remote-only variant of this endpoint -- live-verified: wellfound.com/location/r/SLUG 404s. Use /jobs/remote for global remote jobs.
| Param | Required | Description |
|---|---|---|
slug | yes | Location slug, as it appears in a Wellfound "Jobs by Location" URL (wellfound.com/location/LOCATION). Global, not US-only (e.g. "berlin", "singapore", "toronto" all verified working). Not limited to a curated list -- live-verified 2026-09-23 that arbitrary slugs work (e.g. "backend-engineer", "devops-engineer", "kubernetes", "berlin", "toronto"), derived by lowercasing the title and joining words with hyphens. An unrecognized slug returns 404, not an error. |
page | no | Listing page number, 1-based (default 1). Popular role/location combinations can run 40-90+ pages. |
Billed per item returned (job-listing-scraped event); an empty result is free.
GET /jobs/by-role-location
One page of job listings for a role AND a location together (wellfound.com/role/l/ROLE/LOCATION). This is a real, separately-paginated combined filter -- not a client-side intersection of two calls.
| Param | Required | Description |
|---|---|---|
role | yes | Role slug, as it appears in a Wellfound "Jobs by Role" URL (wellfound.com/role/ROLE). Not limited to a curated list -- live-verified 2026-09-23 that arbitrary slugs work (e.g. "backend-engineer", "devops-engineer", "kubernetes", "berlin", "toronto"), derived by lowercasing the title and joining words with hyphens. An unrecognized slug returns 404, not an error. |
location | yes | Location slug, as it appears in a Wellfound "Jobs by Location" URL (wellfound.com/location/LOCATION). Global, not US-only (e.g. "berlin", "singapore", "toronto" all verified working). Not limited to a curated list -- live-verified 2026-09-23 that arbitrary slugs work (e.g. "backend-engineer", "devops-engineer", "kubernetes", "berlin", "toronto"), derived by lowercasing the title and joining words with hyphens. An unrecognized slug returns 404, not an error. |
page | no | Listing page number, 1-based (default 1). Popular role/location combinations can run 40-90+ pages. |
Billed per item returned (job-listing-scraped event); an empty result is free.
GET /jobs/remote
One page of globally remote job listings across every role (wellfound.com/remote).
| Param | Required | Description |
|---|---|---|
page | no | Listing page number, 1-based (default 1). Popular role/location combinations can run 40-90+ pages. |
Billed per item returned (job-listing-scraped event); an empty result is free.
GET /job
Full detail for one job, parsed from the schema.org JobPosting structured data Wellfound embeds on every job page: description (simple HTML -- paragraphs, lists, links -- as Wellfound itself stores it, not plain text), structured salary (currency/min/max), employment type, datePosted, and company name/website/logo. Company SIZE/funding/about-page data is NOT available -- wellfound.com/company/:slug pages return 403 on every IP tier tested, including residential.
| Param | Required | Description |
|---|---|---|
slug | yes | Full job slug: the "ID-title-words" segment after wellfound.com/jobs/ (as returned in the slug field by any /jobs/by-* or /jobs/remote listing call). The bare numeric id alone does NOT resolve -- live-verified: wellfound.com/jobs/{id} without the title slug 404s. |
Billed once per successful request (job-detail-scraped event).
Pricing
Pay-Per-Event. Listing endpoints (/jobs/by-role, /jobs/by-location,
/jobs/by-role-location, /jobs/remote) are billed per job item returned --
an empty page (e.g. past the last page) is free. /job (full detail) is
billed once per successful call.
Known limitations
- No cursor/keyset pagination beyond what Wellfound's own
?page=Nexposes; popular role/location combinations run 40-90+ pages. - Company profile data (size, funding, about page) is not available -- see "Why" above.
- Listing-page fields (salary/equity/location text) are display strings as
Wellfound renders them (e.g.
"$100k – $180k","Remote only • Canada + 3"), not normalized numbers -- call/jobfor structured salary (currency/min/max) on any result you need to sort or filter on precisely. /job'sdescriptionfield is simple HTML (paragraphs, lists, links) as Wellfound itself stores it, not plain text -- strip tags client-side if you need plain text.