Wellfound Startup Job Scraper avatar

Wellfound Startup Job Scraper

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Wellfound Startup Job Scraper

Wellfound Startup Job Scraper

Scrape startup jobs from Wellfound (AngelList Talent) with full job descriptions, salary and equity bands, company size, funding stage and YC/top-investor signals — plus incremental change tracking and notifications. No account needed.

Pricing

from $2.99 / 1,000 results

Rating

5.0

(1)

Developer

Corvuslab

Corvuslab

Maintained by Community

Actor stats

1

Bookmarked

7

Total users

2

Monthly active users

11 hours ago

Last modified

Share

What does Wellfound Startup Job Scraper do?

Extract structured startup job data from Wellfound (formerly AngelList Talent) — with full job descriptions, salary and equity bands, company size, funding stage, and Y Combinator / top-investor signals.

No Wellfound account, cookie or session token required. Every job comes back with its complete description included — not truncated, not empty, at no extra per-job fee.

Great for job-market research, startup lead generation, compensation and equity benchmarking, recruiting intelligence, and feeding live startup jobs into dashboards or AI agents.

📚 What data can you extract from Wellfound?

Every record carries 80 fields, grouped like this:

GroupWhat you get
Core listingtitle, slug, portalUrl, detailUrl, jobType, employmentType, liveStartAt, wfhFlexible, yearsExperienceMin, yearsExperienceMax, primaryRoleTitle, atsSource …and 19 more
Contacts & demand signalsextractedEmails, extractedPhones
CompanycompanyId, companyName, companySlug, companyUrl, companyLogo, companyTagline, companySize, companySizeLabel, companyStage, companyValuation, companyBadges, companyWebsite …and 1 more
Pay & budgetcompensation, salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryMinDetail, salaryMaxDetail, salaryHidden, equityMin, salaryEquityMin, equityMax
LocationlocationNames, acceptedRemoteLocationNames, remote, remoteKind, latitude, longitude, addressLocality, addressRegion, addressCountry, stateKey
DescriptionexperienceRequirements, description, descriptionMarkdown, descriptionHtml
Dates & change trackingpostedAt, autoPosted, changeType, firstSeenAt, lastSeenAt

Every field is nullable — missing values come back as null. Compact mode returns the core fields only for lean AI/MCP payloads, and excludeEmptyFields drops empties entirely.

✨ Key features

  • 📄 Full descriptions on every job, for free — every listing arrives with its complete description, in text, markdown and HTML. No enrichment toggle, no second per-job fee, no empty description field.
  • 💰 Salary and equity, parsed"$135k – $175k • 0.05% – 0.25%" becomes salaryMin, salaryMax, salaryCurrency, equityMin, equityMax, plus a salaryHidden flag. Filter on any of them.
  • 🏢 Startup firmographics — company size band, funding stage (early / growth / scale), $1B+ / $500M valuation flags, tagline, logo and profile URL.
  • 🟠 Y Combinator & top-investor flagsisYCombinator, hasTopInvestors, isGrowingFast, isActivelyHiring, isQuickResponder as first-class booleans you can filter on.
  • 🎯 Role × location searches — combine any number of roles and locations; every pair runs as its own search and results are deduplicated by job ID.
  • 🔍 Filters that actually apply to descriptions — because the full text is already in hand, keyword, salary, equity and experience filters are exact, and filtered-out jobs never reach your bill.
  • ♻️ Incremental mode — recurring runs emit only what changed. Unchanged jobs are recognised before any enrichment, so you skip the work and the per-result fee.
  • 🔁 Repost & change tracking — every record carries changeType (NEW / UPDATED / UNCHANGED / REAPPEARED / EXPIRED), plus repost detection.
  • 🏢 Lead-generation modecompanyOnlyMode emits one record per company with jobCount and sample titles, ideal for building a startup prospect list.
  • 🔔 Notifications — push matching jobs to Telegram, Slack, Discord, WhatsApp or any webhook (n8n, Make, Zapier).
  • 🪶 AI-friendly outputcompact mode, description truncation, single-format descriptions and excludeEmptyFields for lean records in LLM and MCP pipelines.

🚀 How to scrape Wellfound

  1. Open the Actor and enter a role or keyword (e.g. product designer), or paste a Wellfound URL you already have.
  2. Add the filters you care about — location, remote, role type and the startup attributes.
  3. Set Max results and choose whether to fetch full details for each listing.
  4. (Optional) Turn on incremental mode and a notification channel, then schedule it from the Schedules tab.
  5. Click Start, then export as JSON, CSV or Excel — or pull the results from the API.

No login and no setup: it runs out of the box.


📉 Example: recurring monitoring savings

Monitoring a search of 250 jobs, once a day for 30 days. Without incremental mode every run re-emits all 250 records:

With incrementalMode on, the first run stores a baseline and every later run emits — and charges for — only jobs that are new, updated or reappeared. What you pay for is the genuine churn:

Daily churnof 1,000 trackedbillable recordsyou save
5 %1,0005095 %
15 %1,00015085 %
30 %1,00030070 %

Most role × location searches sit in the 5–15% band, so a daily watch on a 250-job search typically bills 85–95% less than re-scraping the whole search every day.

This is measured, not modelled: on a back-to-back test of a 117-job search the first run billed 117 results and the second billed 0, because unchanged jobs are recognised before any enrichment happens. A run that finds nothing new bills the run-start fee and nothing else.

⚠️ Keep maxResults high enough to cover the whole search and identical between runs — see Recurring monitoring above for why.

⚙️ Input

Everything is optional — run it with no input at all and it scrapes software engineering jobs.

FieldTypeDescription
querystringKeyword, e.g. "rust engineer". Picks the closest role pages and is enforced against every title and description.
rolesarrayWellfound role pages: software-engineer, product-manager, data-scientist, … Each runs as its own search.
locationarraysan-francisco, new-york, remote, united-states, … Paired with every role.
remotebooleanSearch the remote-only variant of each role page.
searchUrlsarrayPaste any Wellfound search URL to reach slugs not in the dropdowns.
startUrlsarrayAlias of searchUrls; both are merged and deduplicated.
maxResultsintegerTotal jobs to output. 0 = no limit (capped at 5,000). Default 100.
maxPagesintegerDepth bound per search. Each page returns ~25–56 jobs. Default 25.
includeKeywords / excludeKeywordsarrayKeep or drop jobs matching these terms (title, description, role, company).
jobTypeenumfull-time, part-time, contract, internship, cofounder.
experienceLevelenumentry (0–2 yrs), mid (2–5), senior (5–8), staff (8+).
salaryMin / salaryMaxintegerSalary band bounds in the listed currency. 0 = no bound.
equityMinnumberMinimum maximum-equity grant, in percent.
remoteOnlybooleanDrop anything not flagged remote.
excludeLocationsarrayDrop jobs whose locations mention these, e.g. India.
companySizearrayHeadcount bands, e.g. SIZE_11_50, SIZE_51_200.
yCombinatorOnlybooleanOnly companies carrying Wellfound's YC badge.
fromDate / toDatestringPosting-date window (YYYY-MM-DD, toDate inclusive).
maxAgeMinutesintegerOnly jobs posted within N minutes — pairs with a schedule for a live feed.
customFiltersarrayRules over any output field, e.g. [{"field":"companyStage","operator":"equals","value":"early_stage"}].
enrichDetailbooleanAdds company website, industry, employment type and map coordinates. Not needed for descriptions. Costs one extra request per job, so large runs take considerably longer — budget roughly maxResults × requestDelayMs.
includeDetailsbooleanAlias of enrichDetail.
extractContactsbooleanBest-effort extractedEmails / extractedPhones from descriptions.
companyOnlyModebooleanOne record per company instead of per job.
descriptionFormatenumall, text, markdown, html.
descriptionMaxLengthintegerTruncate descriptions (0 = full text).
compactbooleanCore fields only, for AI agents and MCP.
excludeEmptyFieldsbooleanDrop null and empty fields.
incrementalModebooleanEmit only new / changed jobs on recurring runs.
stateKeystringNames the tracking state; auto-derived if blank.
emitUnchanged / emitExpiredbooleanAlso emit UNCHANGED / EXPIRED records.
skipRepostsbooleanDrop jobs re-listed under a new ID.
telegramToken + telegramChatIdstringNotify Telegram.
slackWebhookUrl / discordWebhookUrlstringNotify a Slack / Discord webhook.
whatsappPhoneNumberId + whatsappAccessToken + whatsappTostringNotify WhatsApp via Meta Cloud API.
webhookUrl + webhookHeadersstring / objectPOST structured JSON anywhere.
notificationLimitintegerJobs listed per message (1–20, default 5).
notifyOnlyChangesbooleanWith incremental mode, alert only on changes. Default true.
requestDelayMsintegerDelay between requests — this is what sets the request rate. Default 600 ms; raise it if you ever see blocks, lower it to trade safety margin for speed.
pageConcurrencyintegerSearch pages fetched at once (1–20, default 4). Overlaps the waiting between pages; requestDelayMs still caps the rate.
proxyConfigurationobjectLeave as-is unless you have a specific reason to change it.

Example input

{
"roles": ["software-engineer"],
"location": ["san-francisco", "new-york"],
"maxResults": 200,
"salaryMin": 150000,
"equityMin": 0.1,
"excludeKeywords": ["intern"],
"yCombinatorOnly": true
}

📤 Output

Each job is pushed to the run's default dataset. Example record (abridged):

{
"id": "3317746",
"title": "Software Engineer",
"url": "https://wellfound.com/jobs/3317746-software-engineer",
"compensation": "$135k – $175k • 0.05% – 0.25%",
"salaryMin": 135000,
"salaryMax": 175000,
"salaryCurrency": "USD",
"salaryHidden": false,
"equityMin": 0.05,
"equityMax": 0.25,
"jobType": "full-time",
"postedAt": "2026-07-26T09:38:57Z",
"locationNames": ["San Francisco"],
"acceptedRemoteLocationNames": ["United States"],
"remote": true,
"remoteKind": "ONSITE_OR_REMOTE",
"wfhFlexible": false,
"yearsExperienceMin": 3,
"primaryRoleTitle": "Software Engineer",
"atsSource": "AtsIntegration::Greenhouse::Listing",
"autoPosted": false,
"description": "Mission\n\nKeeper is an AI-powered human-in-the-loop service…",
"descriptionMarkdown": "### Mission\n\nKeeper is an AI-powered…",
"descriptionHtml": "<h3>Mission</h3><p>Keeper is an AI-powered…</p>",
"companyId": "6809417",
"companyName": "Keeper",
"companySlug": "keeper-tax",
"companyUrl": "https://wellfound.com/company/keeper-tax",
"companyLogo": "https://photos.wellfound.com/startups/i/6809417-….jpg",
"companyTagline": "File your complex taxes confidently",
"companySize": "SIZE_11_50",
"companySizeLabel": "11-50",
"companyStage": "early_stage",
"companyValuation": null,
"companyBadges": ["Actively Hiring", "B2C", "Early Stage", "Top Investors", "Y Combinator"],
"isYCombinator": true,
"hasTopInvestors": true,
"isGrowingFast": false,
"isActivelyHiring": true,
"matchedSearch": "role=software-engineer",
"source": "wellfound",
"scrapedAt": "2026-07-29T09:15:22Z"
}

With enrichDetail on, each record also gains companyWebsite, companyIndustry, employmentType, experienceRequirements, directApply, latitude, longitude and the postal address fields.

With incrementalMode on, each record gains changeType, trackedHash, stateKey, firstSeenAt, lastSeenAt, isRepost and repostOfId.

🔄 Switching from another Wellfound scraper?

Records also carry portalUrl, detailUrl and salaryEquityMin — aliases of url, url and equityMin — and the input accepts startUrls and includeDetails. Point your existing pipeline at this actor and it should run unchanged, with the descriptions and company fields filled in rather than null.

♻️ How to monitor Wellfound with incremental mode

Wellfound expires inactive postings aggressively, so most listings are days old at most — which makes it a good target for scheduled runs.

Turn on incrementalMode, give it a stateKey, and schedule the actor. The first run stores a baseline; every run after that emits only jobs that are new, updated or reappeared.

Measured back-to-back on a 117-job search: the first run billed 117 results, the second billed 0 — and cost 43 % less to run, because unchanged jobs are recognised before any enrichment. Over a day, what you pay for is the genuine churn (typically 5–15 % of listings) instead of the whole result set again.

⚠️ Set maxResults high enough to cover your entire search. Wellfound reshuffles its listing pages between requests, so a run that stops at 300 of 5,000 jobs sees a different slice every time and everything looks new. Incremental mode only pays off when each run covers the same, complete result set.

Pair it with maxAgeMinutes: 60 on an hourly schedule for a near-real-time feed, and with notifications to get the jobs pushed straight to Slack or Telegram.

🔔 How to set up Wellfound alerts

Get pinged the moment a matching record appears. Fill in only the channels you want:

ChannelWhat to configure
✈️ TelegramtelegramToken (from @BotFather) + telegramChatId
💬 SlackslackWebhookUrl (Incoming Webhook URL)
🎮 DiscorddiscordWebhookUrl (channel webhook URL)
🪝 WebhookwebhookUrl receives structured JSON — ideal for n8n / Make / Zapier

Credentials are secret inputs — encrypted at rest, masked in the UI and never written to the run log. Every channel fires independently, so a broken channel can't stop the scrape or the others. Pair incremental mode with notify only about changes to hear only about genuinely new records, with no duplicates across runs.

💡 What can you do with Wellfound data?

  • 🔎 Job hunting — track new startup roles matching your stack, salary floor and equity expectations, delivered to Telegram the moment they appear.
  • 🏢 Lead generationcompanyOnlyMode turns a search into a list of startups that are actively hiring, with size, stage and investor quality attached.
  • 💰 Compensation research — parsed salary and equity bands across roles, locations and funding stages.
  • 🧠 Recruiting intelligence — see which companies are hiring, how fast they're growing, and which ATS they use (atsSource).
  • 📊 Market analysis — role demand, remote share and pay trends over time.
  • 🤖 AI agents & MCPcompact output with truncated descriptions keeps LLM context small and cheap.

💰 How much does it cost to scrape Wellfound?

This Actor uses Apify's pay-per-event model: a small fee when a run starts, plus a per-record fee. See the Actor's Pricing tab for the current numbers — they're rendered live, so this page never goes stale.

Two things cut your bill further:

  • Site-side filters — records you filtered out are never fetched and never billed.
  • Incremental mode — after the baseline run you pay only for what actually changed.
Daily churnof 1,000 trackedbillable recordsyou save
5 %1,0005095 %
15 %1,00015085 %
30 %1,00030070 %

Pay-per-event — two events, nothing else. A small fee when the run starts, then a fee per job record you actually receive.

There is no separate compute or proxy bill — platform usage is on us, so the numbers above are the whole cost of a run.

One per-record fee buys the whole job — description in text, markdown and HTML, salary and equity bands, and the company panel. There is no enrichment surcharge and no per-description fee. You only pay for jobs you receive: every filter (keywords, salary, equity, experience, location, customFilters) discards non-matching jobs before they are billed, and Apify's per-run cost limit is honoured — the run stops cleanly at your ceiling rather than overshooting it.

🔌 Integrations & export

Export to JSON, CSV, Excel or an HTML table, or pull from the REST API and the JavaScript / Python clients. Runs on a schedule, connects to Google Sheets, Slack, Make, Zapier and n8n, and works as an MCP tool for AI agents — compact mode keeps token usage small.

🔗 Using the API

Run this Actor from your own code. Example with the Apify Python client:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("corvuslab/wellfound-scraper").call(run_input={
"query": "example",
"maxResults": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

It also works with the JavaScript/TypeScript client, the Apify CLI and the REST API.

❓ FAQ

Do I need a Wellfound account? No. Everything scraped is publicly visible job data.

Are job descriptions really included by default? Yes — and this is the main difference from the alternatives. Every job comes back with its complete description at no extra request and no extra fee. You do not need enrichDetail to get it, and it is never truncated unless you ask for that with descriptionMaxLength.

Why do some jobs have no salary? Because Wellfound has none to show. Those records carry salaryHidden: true and null salary bounds. Setting salaryMin drops them, since they cannot be shown to clear it.

How many results can I get? Up to 5,000 per run. Individual searches vary — a broad role page can hold thousands of jobs, a narrow role × city pair a few hundred. The log prints each search's true total before it starts walking.

Can I search for any keyword? Yes, via query. Note that Wellfound exposes no public keyword search, so the keyword selects the closest role pages and is then enforced against every title and description. For an exact taxonomy match prefer roles; to reach an unusual page, paste its URL into searchUrls.

Can I run this on a schedule? Yes. Combine Apify's scheduler with incrementalMode so each run costs only the changes.

Can I use this scraper through an MCP server? Yes. Apify's Actors MCP Server exposes this actor as a tool that Claude, ChatGPT, Cursor, VS Code and any other MCP client can call directly — no wrapper code to write.

This actor is built for that pipeline: turn on compact, set a descriptionMaxLength, pick a single descriptionFormat and add excludeEmptyFields, and each job comes back as a lean record that will not blow up a context window.

Does it work with the Apify API and integrations? Yes — REST API, JavaScript and Python clients, plus Zapier, Make, Google Sheets, Slack and the Apify MCP server for AI assistants.

Is scraping Wellfound legal? This actor collects only publicly available data. Scraping public information is generally lawful, but you remain responsible for how you use it — review Wellfound's terms and any applicable law (GDPR and similar) before you do.


Keywords: wellfound scraper · wellfound.com scraper · angellist jobs scraper · startup jobs scraper · wellfound jobs api · tech startup hiring data · equity salary data · y combinator jobs · venture-backed startup jobs · recruitment sourcing · lead generation · job market research · job monitoring · export to CSV/Excel/JSON · MCP tool for AI agents