Wellfound Jobs Scraper — Startup Roles, Pay & Companies avatar

Wellfound Jobs Scraper — Startup Roles, Pay & Companies

Pricing

from $1.28 / 1,000 jobs

Go to Apify Store
Wellfound Jobs Scraper — Startup Roles, Pay & Companies

Wellfound Jobs Scraper — Startup Roles, Pay & Companies

Search startup jobs by role and location and get one row per posting: the full description, the pay Wellfound shows, the experience asked for, the remote policy, and the hiring company with its size, website tags and hiring badges. Several roles and cities in one run.

Pricing

from $1.28 / 1,000 jobs

Rating

0.0

(0)

Developer

The Netaji

The Netaji

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Wellfound Jobs Scraper

Export startup jobs from Wellfound by role and city. Each posting becomes one row carrying the complete job description, the pay Wellfound displays, the experience the company asks for, the remote policy and the hiring company — its name, slug, pitch, headcount band and hiring badges — so a row is readable and sortable without a second lookup anywhere.

Several roles and several cities go into one run. Three roles against two cities is six searches and one dataset, and a posting that turns up in more than one of them is saved once.

What a row looks like

{
"job_id": "4592877",
"title": "AI Engineer",
"slug": "ai-engineer",
"url": "https://wellfound.com/jobs/4592877-ai-engineer",
"company_name": "Mosaic",
"company_slug": "mosaicapp",
"company_url": "https://wellfound.com/company/mosaicapp",
"company_pitch": "AI-Powered Workforce Management Software",
"company_size": "SIZE_51_200",
"company_badges": ["Actively Hiring", "Top 10% of responders", "B2B", "Growth Stage"],
"compensation": "$220k – $300k • 0.01% – 0.02%",
"job_type": "full-time",
"remote": false,
"remote_policy": "ONSITE",
"locations": ["San Francisco"],
"remote_locations": [],
"primary_role": "Software Engineer",
"years_experience_min": 5,
"years_experience_max": null,
"posted_at": "2026-08-15T03:08:03.000Z",
"ats_source": "AtsIntegration::Greenhouse::Listing",
"description": "## The role\n\nMosaic is the first AI resource manager…",
"search_role": "software-engineer",
"search_location": null
}

description is the whole posting, not a snippet — that is the unusual part of this source and the reason a search row here is worth more than a search row on most job boards. compensation is the string Wellfound renders, en-dash and equity clause included; the numeric version is described under Pay as numbers below.

ats_source names the applicant-tracking system the company runs. Across 80 postings under software-engineer on 16 August 2026, 65 stated one and the rest were null, which means the company posted directly rather than syncing from a system. It is carried under Wellfound's own field name and value so it can be matched against their data without translating anything.

Accepted input

{
"roles": ["software-engineer", "designer"],
"locations": ["san-francisco", "new-york"],
"maxItems": 100
}

roles and locations take the slugs that appear in a wellfound.com URL — software-engineer, san-francisco — and a pasted role or location URL is reduced to its slug. At least one of the two is required; Wellfound publishes no unfiltered job-search page, so there is nothing to read without one. Given both, every role is searched in every location.

remote restricts a run to remote postings and works on a role-only search. maxItems applies per search, so two roles at 100 is up to 200 rows.

Pay as numbers

enrichJobDetails reads each job's own posting page and adds salary_min, salary_max, salary_currency and salary_period — the range as numbers with the period they are quoted over — plus employment_type, direct_apply, job_location_type, applicant_locations, the company's own website, its industries, the benefits it states and the posting body as published HTML. It is one extra request per job and is billed per job enriched, so it is off by default.

Questions

Why did a run return fewer rows than maxItems? Because Wellfound's own result set ran out first. A search walks pages until the site stops producing new postings, and past the end of a result set it answers by serving the first page again rather than an empty one. That is detected and the walk stops, so a short result means the site has nothing further for that query — retrying returns the same rows. The ceiling on any one search is 500. Reaching further means another role or another city, not a larger number.

A role came back with nothing at all. Is it broken? Almost always the slug. Wellfound serves pages only for the roles and locations in its own vocabulary, and a slug outside it has no page, which from outside looks the same as a page that refused to load. The run reports the search that found nothing and carries on with the rest, so one typo in a list of twelve does not cost the other eleven. Check the slug by opening wellfound.com/role/<slug> in a browser.

Why is remote rejected together with a location? Wellfound publishes a remote variant of its role pages and none of its location pages. Sending both would return the location's ordinary results — a different question, answered as though it were the one asked — so the run stops and says so instead. When a place matters, search the remote-us location slug.

Why is compensation text rather than a number? Because the same field carries salary ranges, equity ranges and free text:

$220k – $300k • 0.01%0.02%
is one value. Parsing it into a number would be wrong more often than useful. The posting page states the pay as structured values, which is what enrichJobDetails adds, and it is null on a posting that states no range rather than zero.

Do the same postings appear twice when several searches overlap? No. A role search and the role-in-a-city search under it genuinely overlap, and rows are matched on the job id across the whole run, so a posting reached twice is saved and charged once. search_role and search_location record which search each row came from, which is how a mixed dataset is split back apart.

Can the companies be exported instead of the jobs? Each row already carries the hiring company, so grouping the dataset by company_slug gives the companies behind a role. The company columns on a job row are the summary Wellfound attaches to a posting — for websites, industry tags, office locations and open-role counts, the directory is the better source. See below.

Is years_experience_max usually missing? Yes, and that is the posting rather than the export: most companies state a floor and no ceiling, so years_experience_min is set and years_experience_max is null. Filtering on the maximum therefore drops most postings; filter on the minimum.

Wellfound Job Posting Scraper reads job links directly, and is the one to use when the links already exist somewhere else.

Wellfound Startups Scraper works the other way round — companies first, with websites, industries, offices and open-role counts — and Wellfound Company Scraper takes a company_slug from any row here and returns that company's funding, team and perks.