Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Wellfound Jobs Scraper (AngelList) icon

Wellfound Jobs Scraper (AngelList)

Scrape Wellfound (AngelList) startup jobs by role, city or remote: full Markdown description, salary, company badges. $0.085 per 1,000 jobs.

586 runs on Apify $0.000085 per job ($0.085 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust roleSlugs, searchQueries, locationSlugs (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.000085 per job = $0.085 per 1,000

You are charged forWhenPrice
Job returnedCharged once per unique real Wellfound job row returned. Sample and diagnostic rows are never charged.$0.000085

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-10, and they are what you are actually charged.

Inputs

FieldWhat it doesType
roleSlugsWellfound role slugs, for example software-engineer, product-manager, data-scientist. Plain phrases are slugified, and wellfound.com/role/{slug} URLs are accepted.array
searchQueriesAlias for role slugs. 'Data Scientist' becomes data-scientist.array
locationSlugsOptional Wellfound location slugs, for example san-francisco, new-york, london. Each role is crawled once per location using wellfound.com/role/l/{role}/{location}. Write the city the way Wellfound's own addresses do: a slug it has no page for, such as nyc or remote, comes back as one uncharged row and no jobs.array
remoteOnlyUse Wellfound's remote role pages (wellfound.com/role/r/{role}) and keep only listings flagged remote. Ignored when location slugs are supplied. A role with no remote page on Wellfound comes back as one uncharged row.boolean
jobTypesKeep only these Wellfound job types. Observed values: full-time, part-time, contract, internship, cofounder.array
locationFiltersKeep only jobs whose location or accepted remote location contains one of these strings. Case-insensitive substring match.array
keywordsKeep only jobs whose title, company or description contains one of these strings. Case-insensitive substring match.array
seniorOnlyKeep only jobs whose title says Senior, Sr, Staff, Principal, Lead or Head of, or that ask for at least 5 years of experience. Wellfound states the years on only some jobs, which is why the title counts too. Jobs left out are not charged.boolean
minSalaryUsdKeep only jobs whose salary is posted in US dollars and starts at this amount or more, for example 150000. A $140k to $180k job is left out at 150000. Jobs paid in another currency, or with no salary shown, are left out too. Jobs left out are not charged.integer
excludeCompaniesCompany names, Wellfound company slugs such as keeper-tax, or wellfound.com/company/{slug} addresses. Their jobs are left out and not charged.array
maxItemsMaximum unique job rows to return and charge for.integer
maxPagesPerSourceListing pages to walk for each role (or role and location pair). Each page carries roughly 40 to 49 jobs.integer
maxRetriesWellfound 403s a share of requests. Each attempt uses a new proxy session and a different browser fingerprint.integer
requestTimeoutSecsMaximum duration of each network request.integer

What you get

A structured dataset — each result includes fields like:

titlecompanyNamelocationsremotejobTypecompensationpostedAtjobUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

1 ready-to-run use cases

Wellfound Remote Engineering Jobs

Find remote engineering jobs on Wellfound: title, company, location, salary when shown and the apply link.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

Wellfound Jobs Scraper: startup jobs with the full description, by role or city

Give it a Wellfound role like software-engineer, add a city or switch on remote, and every listing comes back as a row. The whole job description in Markdown, not a teaser. The salary and the equity as separate fields. The company with its size, its tagline and its Wellfound badges. And the exact minute the job went live.

The description arriving with the listing is what makes this cheap to run: one page request carries roughly 40 to 49 complete jobs, so 200 jobs is five requests rather than 205. What it cannot reach is a company's own jobs page on Wellfound, which needs a login.

InputWellfound role slugs, optionally with cities or remote
OutputOne row per job, description included
Ceiling5,000 jobs per run
Account neededNone, no login and no cookie
Price$0.085 per 1,000 jobs, flat on every plan

💼 What Wellfound Jobs Scraper does

It walks Wellfound's role pages. wellfound.com/role/software-engineer on its own, or wellfound.com/role/l/software-engineer/san-francisco when you add a city, or the remote pages when you switch Remote only on.

Each page is read in full and turned into one row per job. A listing that appears under two of your roles is written once and billed once.

Six filters run on your side after the rows arrive, and anything they drop is not billed: job type, a substring match on location, a substring match on keywords, senior roles only, a minimum salary in US dollars, and companies to leave out. One warning about the keyword filter. It looks at the title, the company and the whole description, so a short needle like go or ai keeps nearly every row. Use a phrase.

📥 What you give it

{
  "roleSlugs": ["software-engineer", "product-manager"],
  "locationSlugs": ["san-francisco"],
  "jobTypes": ["full-time"],
  "keywords": ["python"],
  "maxItems": 200,
  "maxPagesPerSource": 5
}
FieldDefaultWhat it is
roleSlugsnone, the form starts with software-engineerWellfound role slugs. A plain phrase is slugified, so Data Scientist becomes data-scientist, and a full wellfound.com/role/<slug> URL works too.
searchQueriesnoneThe same thing under another name, if you prefer phrases.
locationSlugsnoneCity slugs such as san-francisco, new-york, london. Each role is walked once per city. Write the city the way Wellfound's own addresses do: a slug it has no page for, such as nyc or remote, comes back as one uncharged BAD_INPUT row and no jobs.
remoteOnlyfalseUse Wellfound's remote pages and keep only listings flagged remote. Ignored when you give cities. A role with no remote page comes back as one uncharged BAD_INPUT row.
jobTypesnoneKeep only these: full-time, part-time, contract, internship, cofounder.
locationFiltersnoneKeep only jobs whose location or accepted remote location contains one of these strings.
keywordsnoneKeep only jobs whose title, company or description contains one of these. Read the warning above.
seniorOnlyfalseKeep only jobs whose title says Senior, Sr, Staff, Principal, Lead or Head of, or that ask for 5 or more years. Wellfound states the years on only some jobs, so the title counts too.
minSalaryUsdnoneA yearly amount in US dollars, such as 150000. Keeps jobs whose posted range starts at or above it, so $140k – $180k is left out at 150000. Jobs paid in another currency, or with no salary shown, are left out too.
excludeCompaniesnoneCompany names, slugs such as keeper-tax, or wellfound.com/company/ addresses. Their jobs are left out.
maxItems100Unique job rows to return and charge for, up to 5,000. This is your spending cap.
maxPagesPerSource5Listing pages per role, or per role and city pair, up to 60. Each page carries roughly 40 to 49 jobs.
maxRetries6How many times to try a listing page that does not come back, up to 12.
requestTimeoutSecs25How long a single request may take, 5 to 60.
proxyConfigurationnoneOptional. Leave it empty for a normal run. Your own server URLs are used exactly as given.

📤 What you get back

A real row from a recent run, with the description cut short. The real one runs to several thousand characters:

{
  "ok": true,
  "_sample": false,
  "jobId": "4639821",
  "title": "Software Engineer",
  "jobUrl": "https://wellfound.com/jobs/4639821-software-engineer",
  "companyName": "Checkr",
  "companyUrl": "https://wellfound.com/company/checkr",
  "companySlug": "checkr",
  "companyTagline": "The only background check company using artificial intelligence and machine learning",
  "companySize": "SIZE_501_1000",
  "companyLogoUrl": "https://photos.wellfound.com/startups/i/395014-2a2164ef6a8cd5954eb970228e62ce15-medium_jpg.jpg?buster=1692326450",
  "companyBadges": ["Actively Hiring", "Responds within two weeks", "B2B", "Scale Stage", "Top Investors", "YC Funded", "Valuation $1B+", "Highly rated"],
  "primaryRoleTitle": "Software Engineer",
  "jobType": "full-time",
  "remote": false,
  "remoteKind": null,
  "locations": ["Denver", "San Francisco"],
  "remoteLocations": [],
  "compensation": "$150k – $176k",
  "salaryText": "$150k – $176k",
  "equityText": null,
  "yearsExperienceMin": null,
  "description": "As a Software Engineer at Checkr, you will work on high-impact engineering projects that help build a fairer future for all. ...",
  "postedAt": "2026-08-27T20:06:24.000Z",
  "autoPosted": false,
  "atsSource": null,
  "sourceUrl": "https://wellfound.com/role/software-engineer",
  "page": 1,
  "scrapedAt": "2026-09-14T05:47:49.550Z"
}
FieldWhat it is
descriptionThe whole description in Markdown, as Wellfound stores it.
compensation, salaryText, equityTextcompensation is Wellfound's raw string, for example $135k – $175k • 0.05% – 0.25%. The other two are that string split in half. Nothing is invented, and nothing is turned into numbers.
companySize, companyBadgesWellfound's own enum such as SIZE_11_50, and its own labels such as YC Funded or Top Investors.
remote, remoteKind, locations, remoteLocationsWhether it is remote, Wellfound's ONSITE_OR_REMOTE or REMOTE_ONLY enum, the office cities, and the countries a remote role accepts.
postedAtThe exact time the listing went live, in UTC.
autoPosted, atsSourceWhether it came in from an applicant tracking system, and which one.
jobIdStable. Use it as your dedupe key across runs.

How often each field was filled, measured on a 200-row run on 10 August 2026 across two roles and 83 companies:

FieldFilled
title, jobUrl, companyName, companySize, companyBadges, jobType, description, postedAt100%
companyTagline97.5%
compensation, salaryText92.5%
locations87.0%
atsSource80.0%
remoteKind28.5%
yearsExperienceMin21.5%
equityText14.5%

Those move with the roles you pick. Equity is the one to watch: most posters leave it blank, and it is left blank here rather than guessed.

🧾 Reading the output

RowHow to spot itCharged
A jobok: true and _sample: falseyes
The sample row_sample: true and a _noticeno
A diagnosticok: false, _diagnostic: true and an errorCodeno

Run it with no role and you get the sample row. It is a real-looking listing, and in the Console's table view it sits there looking like data, so filter on _sample rather than trusting your eyes.

CodeWhat it means
BAD_INPUTA role or city slug could not be used, either because it could not be read or because Wellfound has no page for it. Check the spelling against the address of the page on Wellfound.
NO_RESULTSThe role pages were read and no job survived your filters.
BLOCKEDA listing page never came back after all its attempts. One code covers every cause here, a refusal, a timeout and a server error alike. Run it again.

A page that fails is one uncharged row, and the run carries on with the rest.

▶️ How to run it

1. Open Wellfound Jobs Scraper and click Try for free. 2. Put one or more role slugs into Role slugs. 3. Add Location slugs, or switch on Remote only, if you want to narrow it. 4. Set Maximum jobs, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.085 per 1,000 jobs. Flat on every Apify plan, no volume tiers.

One charge per unique job row. The same listing found under two roles is billed once, rows dropped by your filters are not billed, and neither is the sample row or a diagnostic row. There is no second charge for the description, because it arrives with the listing.

💡 What people use it for

  • Watching who is hiring in a role and a city, on a schedule, and diffing on jobId.
  • Building a list of startups that are actively hiring, using companyBadges and companySize.
  • Salary research on a role, from the raw salaryText across a few hundred listings.
  • Feeding whole descriptions into a model to pull out the stack, the seniority or the benefits.
  • Finding remote roles that accept your country, using remoteLocations.

🚧 What it does not do

  • No company jobs pages. wellfound.com/company/<slug>/jobs needs a Wellfound login, so that

input is not offered rather than offered and broken.

  • No recruiter contacts and no candidate profiles. It does not apply to anything either.
  • No salary normalisation. Wellfound publishes a string and you get the string, plus its salary

and equity halves.

  • The location and keyword filters are plain substring matches, so short keywords keep nearly

everything.

  • Only what a role page lists. There is no search box behind this, so a job with an unusual

title may sit under a role you did not think to ask for.

  • Rows are a snapshot. A listing can be filled or pulled after it was read, and postedAt tells

you how old it already was.

🧭 Which job scraper do you need?

If you wantUse
Startup jobs from Wellfound, with the full descriptionThis one
Jobs in Germany, Austria and SwitzerlandXING Jobs Scraper
Jobs in Germany, Austria, the UK, the Netherlands or BelgiumStepStone Jobs Scraper
Jobs in FranceHelloWork Jobs Scraper
Hackathons, internships and student jobs in IndiaUnstop Scraper

❓ Questions people ask

What is a role slug? The last part of a Wellfound role URL. wellfound.com/role/software-engineer gives you software-engineer. Pasting the whole URL works.

Do I really get the full description? Yes, in Markdown, on every job row. The median in the measured run was 4,663 characters.

How many jobs are on a page? Roughly 40 to 49. Maximum pages per role decides how deep it goes, and deep paging works: page 20 and page 60 both returned jobs in testing.

Can I filter to remote jobs? Switch on Remote only. It uses Wellfound's remote pages and drops anything not flagged remote. Not every role has one, and a role without it comes back as one uncharged BAD_INPUT row.

Why did I get fewer jobs than I asked for? Either the role ran out of pages, or your filters dropped rows. Neither costs you anything. A strict mix of filters can use up Maximum pages per role before it finds enough, so raise that to look deeper.

Is the sample row charged? No, and nor is any diagnostic row.

Is this legal? These are public job listings. They name companies rather than people, but treat anything personal in a description with the same care. Apify's write-up on scraping and the law is a good start, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the role slug you used and the run ID. The errorCode on the diagnostic row usually names the problem on its own.