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

0.0

(0)

Developer

Corvuslab

Corvuslab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Wellfound Startup Job Scraper 🚀

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.

✨ 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.

📥 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.

♻️ Recurring monitoring

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.

💡 Use cases

  • 🔎 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?

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

EventPrice
Actor start$0.005 per run
Job record$2.99 per 1,000 results ($0.00299 each)
RunCost
10 results$0.035
25 results$0.080
100 results$0.304
200 results$0.603
500 results$1.500
1,000 results$2.995

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

$0.00299 buys the complete record, including the full job description in text, markdown and HTML. There is no enrichment surcharge and no per-description fee: enrichDetail adds company website, industry and coordinates at the same per-result price. 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.

📉 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:

30 × ($0.005 + 250 × $0.00299) = $22.58 / month

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 churnRecords billed per runCost per runMonth (1 baseline + 29 runs)Saving
No incremental mode250$0.75$22.58
5% — stable niche~13$0.04$1.9891%
15% — moderate~38$0.12$4.1582%
30% — fast-moving~75$0.23$7.4067%

Most role × location searches sit in the 5–15% band, so a daily watch on a 250-job search typically lands between $2 and $4 a month instead of $22.58.

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 costs the $0.005 start fee and nothing else.

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

❓ 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.