Wellfound Jobs Search Scraper
Pricing
from $2.99 / 1,000 wellfound job records
Wellfound Jobs Search Scraper
Scrape startup job listings from Wellfound (formerly AngelList Talent). Extract job titles, companies, locations, equity and salary ranges, funding stages, and remote options for startup recruitment and market analysis.
Pricing
from $2.99 / 1,000 wellfound job records
Rating
0.0
(0)
Developer
Jobs API
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
3
Monthly active users
11 days ago
Last modified
Categories
Share
Wellfound public jobs search scraper
This Actor searches Wellfound's public role and location pages or reads one or more public job detail pages. It saves business facts published on each detail page as Dataset rows. The public listing is used for discovery; the Actor follows only a real next-page link and then reads the job detail page before emitting a record.
Each result contains the facts available on that job's public page. Optional fields are omitted when the employer does not publish them. You can choose a proxy in the input settings. If Wellfound requires sign-in, blocks access, or disallows the page in its robots rules, the Actor stops; it keeps any jobs already saved.
Modes
searchuses a Wellfound role/location route.roleandlocationaccept a slug or a human-readable English name and are converted into safe route segments. Search follows up tomaxPagespages, using only actual next links.singlereads exactly one URL fromjobUrls.multiplereads between one and 20 URLs fromjobUrls.
Direct modes accept only the unchanged default role and location values and require maxPages to remain 1. A direct URL must be an HTTPS wellfound.com URL with the native /jobs/<numeric-id>-<lowercase-slug> path. Credentials, explicit ports, query strings, fragments, encoded path tricks, and alternate hosts are rejected. A trailing slash is accepted and removed in the canonical output URL.
Input fields
All top-level fields are typed and closed: unknown names and legacy aliases are rejected. “Required” below describes when a caller must supply a value; defaults are used when a field is omitted.
| Field | Type | Required | Default | Bounds or accepted values | Meaning |
|---|---|---|---|---|---|
mode | string | No | search | search, single, multiple | Chooses listing search or direct job-page input. |
role | string | No | software-engineer | 1–100 characters; must form a nonempty safe route slug | Role to search. Human names such as Software Engineer become software-engineer. Direct modes accept only the default unchanged. |
location | string | No | san-francisco | 1–100 characters; must form a nonempty safe route slug | Search location. Human names such as San Francisco become san-francisco. Direct modes accept only the default unchanged. |
jobUrls | array of strings | Yes in single and multiple | None | Single: exactly 1; multiple: 1–20; each URL 1–256 characters and in the native Wellfound form | Exact job detail pages to read. Not accepted in search. |
maxItems | integer | No | 3 | 1–100 | Upper bound on matching detail records to store, including in direct modes. |
maxPages | integer | No | 1 | 1–20 in search; must be 1 in direct modes | Listing-page cap. Only source-provided next links are followed. |
maxRequests | integer | No | 20 | 1–200 | Hard cap across robots checks, listing pages, detail pages, and redirects. |
experienceLevel | string | No | None | 1–100 characters; nonblank | Case-insensitive phrase filter applied to published role, experience, and description facts after detail extraction. |
salaryMin | number | No | None | 0 or greater; must not exceed salaryMax when both are supplied | Minimum annual salary in USD. Only an explicitly published annual USD salary can match. |
salaryMax | number | No | None | 0 or greater; must be at least salaryMin when both are supplied | Maximum annual salary in USD. Only an explicitly published annual USD salary can match. |
remoteFilter | string | No | None | remote, hybrid, onsite | Filters using published workplace and location facts after detail extraction. |
educationLevel | string | No | None | 1–100 characters; nonblank | Case-insensitive phrase that must appear in a published education requirement or job description. |
proxyConfiguration | object | No | {} | Standard supported Apify SDK fields listed below | Proxy options passed to the SDK. An empty object leaves routing to the SDK/runtime default. |
A supplied filter is applied to both search-discovered jobs and direct URLs. A job is excluded when its published detail facts do not match. Salary thresholds do not convert currencies or pay periods: hourly, unknown-period, non-USD, or unpublished salary facts do not match a salary filter. Filters are applied after details are read; they do not add parameters to the Wellfound search URL.
proxyConfiguration
The empty object is valid. Only the standard fields below are accepted; empty apifyProxyGroups and proxyUrls arrays are valid. Proxy URL credentials are retained as supplied.
| Nested field | Type | Required | Default | Bounds or accepted values | Meaning |
|---|---|---|---|---|---|
useApifyProxy | boolean | No | SDK/runtime default | true or false | Selects the Apify proxy route according to SDK behavior. |
apifyProxyGroups | array of strings | No | SDK/runtime default | Up to 20 names; each is 1–64 ASCII letters, digits, _, or - | Apify proxy groups to request. An empty array is allowed. |
apifyProxyCountry | string | No | None | Exactly two ASCII letters | Country code passed to the SDK; normalized to uppercase. |
proxyUrls | array of strings | No | SDK/runtime default | Up to 20 URLs; each is 1–2048 characters and a valid HTTP(S) URL with a hostname | Custom proxy endpoints. Fragments, whitespace/control characters, backslashes, and invalid percent escapes are rejected. An empty array is allowed. |
maxRequests is the overall public-request budget; it includes robots checks and redirects as well as listing and detail pages. Requests are sequential, paced by one second, and capped at 30 seconds each. Redirects are limited to three same-route, same-query hops. Listing/detail bodies are capped at 2 MiB and robots responses at 128 KiB. The Actor does not retry or switch to a direct connection after a proxy failure.
Input examples
The root INPUT.json, INPUT-single.json, and INPUT-multiple.json files are ready-to-use examples. The examples below show their complete shapes.
Search at the default role/location with a small result cap:
{"mode": "search","role": "software-engineer","location": "san-francisco","maxItems": 2,"maxPages": 1,"maxRequests": 20}
Read one exact public job page:
{"mode": "single","jobUrls": ["https://wellfound.com/jobs/4639821-software-engineer"]}
Read a list of exact public job pages:
{"mode": "multiple","jobUrls": ["https://wellfound.com/jobs/1503336-senior-full-stack-software-engineer","https://wellfound.com/jobs/4639821-software-engineer","https://wellfound.com/jobs/2715295-lead-product-focused-fullstack-web-engineer-performance-medicine"]}
Dataset fields
Each Dataset row is a business record with exactly the declared fields. jobId, title, and jobUrl are required; other fields are optional and appear only when the public detail page publishes them clearly. Absent facts stay absent. Descriptions preserve source whitespace; dates retain their published precision; a salary symbol alone does not create a currency code.
| Field | Meaning |
|---|---|
jobId | Native numeric Wellfound job ID. |
title | Source job title, checked against the page heading when present. |
jobUrl | Canonical public detail URL for the same job ID. |
jobReference | A separate published posting code, only when distinct from the native numeric ID; has name and value. |
description | Complete published description text, retaining paragraph, list, and preformatted whitespace. |
descriptionHtml | Complete description markup after one structural entity decode. |
descriptionSections | Description sections in source order; each may include heading, full text, and ordered bulletPoints. |
jobImmediateStart | Published JobPosting immediate-start boolean; not inferred. |
employmentType | Published employment-type values, such as FULL_TIME. |
workplace | Published locations and work arrangement; nested fields are detailed below. |
compensation | Published minimum/maximum amount, period/unit, and visible salary label. |
salaryCurrency | Currency code explicitly published by the source; never inferred from a symbol. |
experience | Published experience wording and available month/year amounts. |
educationRequirements | Published education or credential requirements. |
skills | Skills explicitly listed in JobPosting structured data. |
industry | Industry values explicitly published for the job. |
occupationalCategory | Published occupational category values. |
datePosted, validThrough | Published posting or expiration date at its available precision. |
datePostedPrecision, validThroughPrecision | year, month, day, or second; partial dates are not expanded into invented time. |
postingAgeText | Visible posted-age label preserved as text, without calendar-date conversion. |
eligibilityToWorkRequirement | Published work-eligibility statements; missing data does not imply a policy. |
employerOverview | Employer overview from structured data or the exact company header. |
company | Employer profile and paired company-section facts; nested fields are detailed below. |
applyUrl | URL from an explicit published Apply/Apply Now action. The job URL is never substituted. |
directApply | Published JobPosting direct-apply boolean; it does not prove an application action is available. |
employmentBenefits | Benefits stated on the job posting, separate from company perks. |
imageUrls | Image URLs published in JobPosting structured data. |
workplace may contain locations (each with label, streetAddress, locality, region, postalCode, country, latitude, and longitude when published), locationSummary, source locationType values, derived isRemote only when clear, remoteWorkPolicy, visaSponsorship, relocation, and applicantLocationRequirements.
compensation may contain minAmount, maxAmount, unit, and displayText. experience may contain text, months, and years. Values are separate facts: amounts do not imply currency or a pay period, and the source label is kept independently.
company may contain name, logoUrl, website, profileUrl, locations, tagline, size, type, industries, categories, responseTime, scaleStage, ratingHighlights, badges, funding, perks, founders, previousEmployers, and business contacts. Company locations use the same address fields as job locations. A rating highlight may contain score and label. Funding may contain amountRaised, amountRaisedText, roundsCount, and ordered rounds; each round may have amount, amountText, series, date, datePrecision, and label. Perks pair name with full description; founders may have name, role, location, and overview; prior employers may have name and url; contacts may have type, name, email, telephone, url, and availableLanguage.
Example business record
This complete record is synthetic and illustrates the closed Dataset shape. Its .example.test domains and fictional employer/contact details are not real job leads.
{"jobId": "9001001","title": "Data Engineer","jobUrl": "https://wellfound.com/jobs/9001001-data-engineer","jobReference": {"name": "Posting code","value": "DATA-9001001"},"description": "Build reliable data products for a fictional company.\n\nWhat you will do\n\n• Design maintainable data pipelines.\n• Partner with product and engineering teams.\n\nExample configuration:\nSELECT '<example>';","descriptionHtml": "<p>Build reliable data products for a fictional company.</p><h2>What you will do</h2><ul><li>Design maintainable data pipelines.</li><li>Partner with product and engineering teams.</li></ul><pre><code>SELECT '<example>';</code></pre>","descriptionSections": [{"heading": "What you will do","text": "Design maintainable data pipelines.\nPartner with product and engineering teams.","bulletPoints": ["Design maintainable data pipelines.","Partner with product and engineering teams."]},{"text": "Build reliable data products for a fictional company.\n\nExample configuration:\nSELECT '<example>';"}],"jobImmediateStart": false,"employmentType": ["FULL_TIME"],"workplace": {"locations": [{"label": "Denver","locality": "Denver","region": "Colorado","country": "United States"},{"label": "Remote within Colorado","country": "United States"}],"locationSummary": "Denver, Colorado • Remote within Colorado","locationType": ["HYBRID"],"remoteWorkPolicy": "Hybrid schedule published by the employer","visaSponsorship": "Not available","relocation": "Not offered","applicantLocationRequirements": ["Colorado, United States"]},"compensation": {"minAmount": 130000,"maxAmount": 155000,"unit": "YEAR","displayText": "$130,000–$155,000 per year"},"salaryCurrency": "USD","experience": {"text": "3+ years of data engineering experience","months": 36,"years": 3},"educationRequirements": ["Bachelor's degree in computer science or equivalent experience"],"skills": ["SQL","Python","Data modeling"],"industry": ["Data infrastructure"],"occupationalCategory": ["Data Engineer"],"datePosted": "2026-08","datePostedPrecision": "month","validThrough": "2026-10-31","validThroughPrecision": "day","postingAgeText": "Posted: 3 weeks ago","eligibilityToWorkRequirement": ["Must be authorized to work in the United States"],"employerOverview": "Fable Harbor builds fictional tools that help small teams understand their data.","company": {"name": "Fable Harbor","logoUrl": "https://assets.example.test/fable-harbor/logo.png","website": "https://fable-harbor.example.test","profileUrl": "https://wellfound.com/company/fable-harbor","locations": [{"label": "Denver office","streetAddress": "100 Example Avenue","locality": "Denver","region": "Colorado","postalCode": "80202","country": "United States"}],"tagline": "Analytics tools for independent teams","size": "11–50 employees","type": "Private company","industries": ["Data infrastructure","Software"],"categories": ["B2B","SaaS"],"responseTime": "Responds within two weeks","scaleStage": "Seed","ratingHighlights": [{"score": 4.8,"label": "Strong leadership"}],"badges": ["Strong leadership","B2B"],"funding": {"amountRaised": 12000000,"amountRaisedText": "$12M","roundsCount": 2,"rounds": [{"amount": 8000000,"amountText": "$8M","series": "Series A","date": "2025-04","datePrecision": "month","label": "Series A – Apr 2025"},{"amount": 4000000,"amountText": "$4M","series": "Seed","date": "2023","datePrecision": "year","label": "Seed – 2023"}]},"perks": [{"name": "Learning budget","description": "An annual allowance for courses and technical books."},{"name": "Flexible time","description": "Plan your working hours with your team."}],"founders": [{"name": "Avery Sample","role": "Co-founder and CEO","location": "Denver, Colorado"}],"previousEmployers": [{"name": "Maple Systems","url": "https://maple-systems.example.test"}],"contacts": [{"type": "employer","email": "careers@fable-harbor.example.test","telephone": "+1-555-0107"},{"type": "Hiring","name": "Fable Harbor recruiting team","email": "recruiting@fable-harbor.example.test","url": "https://fable-harbor.example.test/jobs"}]},"applyUrl": "https://wellfound.com/jobs/9001001-data-engineer?autoOpenApplication=true","directApply": false,"employmentBenefits": ["Health coverage","Paid leave"],"imageUrls": ["https://assets.example.test/fable-harbor/jobs/data-engineer.png"]}
Run summary
The only key-value record written is OUTPUT_SUMMARY. It has exactly these three fields:
{"status": "SUCCEEDED","itemsStored": 2,"isPartial": false}
status is SUCCEEDED when at least one Dataset write is acknowledged and FAILED when none is. itemsStored counts only acknowledged Dataset writes. isPartial is true when a limit leaves jobs unprocessed, an unavailable or invalid job is skipped, or a later extraction, storage, or cleanup error occurs.