# Wellfound Jobs Scraper — Startup Roles, Salary & Equity (`insight.solutions/wellfound-jobs-api`) Actor

Startup jobs from Wellfound's public role listings, by role and city or remote: title, salary and equity as shown, location, remote policy, experience, posting date, ATS, and each startup's size, stage, badges and pitch. No browser, no key, no recruiter contacts.

- **URL**: https://apify.com/insight.solutions/wellfound-jobs-api.md
- **Developed by:** [Insight Solutions](https://apify.com/insight.solutions) (community)
- **Categories:** Jobs, Business, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 job postings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Wellfound Jobs Scraper — Startup Roles, Salary & Equity

**Role and city in, startup jobs out.** Give this Actor a few roles — `software-engineer`, `product-manager`, `data-scientist` — and where: `remote`, `new-york`, `san-francisco`, `Austin, TX`. It reads Wellfound's public role listings and returns one row per job: title, **salary and equity as Wellfound shows them** (and as numbers), locations, remote policy and the countries a remote hire may live in, job type, years of experience, seniority, posting date, the ATS the job is synced from, and the full description as plain text.

Every job carries its **startup's facts** from the same page: size band, stage (Early, Growth, Scale, Public), Wellfound's badges (`YC`, `TOP_INVESTORS`, `GROWING_FAST`, `ACTIVELY_HIRING`, `B2B`…), the one-line pitch and the logo — and each startup also comes back once as a free company row. HTTP only: no browser, no login, no cookies, no API key.

**No recruiter contacts, by design**: e-mail addresses, phone numbers, profile links and every sentence that names a recruiter, founder or other person are removed from descriptions. **$1.00 per 1,000 jobs** on the FREE tier; company rows and diagnostics are free.

Hiring on company career sites rather than on Wellfound? [Career Site Jobs API](https://apify.com/insight.solutions/ats-jobs-api) reads Greenhouse, Lever, Ashby and 10+ more ATS boards, [Careers Page Jobs API](https://apify.com/insight.solutions/careers-page-jobs-api) starts from a company domain, and [Remote Jobs API](https://apify.com/insight.solutions/remote-jobs-api) merges the remote-only job boards. This one is for startup jobs, with the salary, equity and company stage startups publish on Wellfound.

### Try it in 30 seconds

This is the Store prefill; paste it and run:

```json
{ "roles": ["software-engineer", "product-manager"], "locations": ["remote", "new-york"], "maxJobsPerSearch": 80 }
```

Four searches — each role remote and in New York — of up to 80 jobs each: about ten listing pages, each request at least half a second after the last, so the run finishes in well under a minute and returns up to 320 jobs (a job listed under two searches is returned once). Our offline test suite runs it against the captured pages and gets 101 distinct jobs from 59 startups; a live run reads live pages.

Remote engineering roles that went live this week, with a salary of at least $150k shown:

```json
{ "roles": ["software-engineer", "frontend-engineer", "backend-developer", "data-engineer"], "locations": ["remote"], "postedWithinDays": 7, "minSalary": 150000 }
```

Titles work too, and cities as you would write them:

```json
{ "roles": ["Product Designer", "ML engineer"], "locations": ["San Francisco", "Austin, TX", "NYC"], "includeDetails": true, "maxJobsPerSearch": 40 }
```

**From code** — `client.actor("insight.solutions/wellfound-jobs-api").call(run_input={"roles": ["software-engineer"], "locations": ["remote"]})` with `apify-client`, or `POST https://api.apify.com/v2/acts/insight.solutions~wellfound-jobs-api/run-sync-get-dataset-items`.

### What comes back

A **job** row (from the captured Austin listing of 2026-11-04; the description shortened):

```json
{
  "rowType": "job",
  "role": "software-engineer",
  "location": "austin",
  "searchUrl": "https://wellfound.com/role/l/software-engineer/austin",
  "jobId": "4716782",
  "title": "Software Engineer",
  "url": "https://wellfound.com/jobs/4716782-software-engineer",
  "company": "Boom",
  "companySlug": "boom-app",
  "companyUrl": "https://wellfound.com/company/boom-app",
  "companySize": "11-50",
  "companyStage": "Early Stage",
  "companyHighConcept": "Modern rental financial services for property managers and renters",
  "companyBadges": ["ACTIVELY_HIRING", "B2C", "GROWING_FAST"],
  "locations": ["Austin"],
  "remote": false,
  "jobType": "full-time",
  "compensation": "$120k – $200k • 0.01% – 0.15%",
  "salaryMin": 120000,
  "salaryMax": 200000,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "equityMin": 0.01,
  "equityMax": 0.15,
  "postedAt": "2026-09-15T00:00:52.000Z",
  "atsSource": "ashby",
  "description": "Software Engineer\n\nWe hire software engineers across levels under a single posting. Title, compensation, and scope are set during the process based on demonstrated competency, so apply once and we will place you at the right level. …",
  "scrapedAt": "2026-11-04T12:00:00.000Z"
}
```

That posting's company paragraph names its founder and its angel investors; those two sentences are gone from `description` ("Now serving thousands of renters, Boom is led by …"), and the rest of the paragraph is kept.

A **company** row, one per startup seen, free:

```json
{
  "rowType": "company",
  "companySlug": "methodfi",
  "name": "Method Financial",
  "size": "51-200",
  "stage": "Growth Stage",
  "badges": ["ACTIVELY_HIRING", "B2B", "TOP_INVESTORS", "YC", "GROWING_FAST"],
  "highConcept": "The future of financial account connectivity",
  "jobCount": 2,
  "jobsListed": 2,
  "companyUrl": "https://wellfound.com/company/methodfi"
}
```

A search that returned nothing comes back as a free **diagnostic** row saying why — `unresolved`, `blocked`, `no-jobs`, `parse-failed`, `timeout` or `invalid-input` — and the last row of every run is a free **summary** with what each search read and why it stopped.

### Use cases

- **Startup job boards and newsletters** — schedule it daily over the roles your readers want and publish what is new, with salary and equity ranges already split into numbers.
- **Compensation research** — salary and equity bands per role, city, company stage and size, from what startups publish themselves.
- **Recruiting and talent sourcing** — which startups are hiring for a role right now, how big they are, what stage, whether they are YC or backed by top investors.
- **Sales and partnerships** — hiring is a buying signal: startups opening engineering or sales roles, with their stage, size and pitch, as one free company row each.
- **Market maps** — which kinds of startups hire where: the company rows give stage, size and badges per startup across your searches.

### How it compares

- **Wellfound's own listing data, not scraped text.** The jobs, their startups and the badges are read from the structured data Wellfound embeds in its own listing pages, so every field is the value Wellfound shows — nothing is guessed from layout.
- **Salary and equity as numbers, next to the text.** `$120k – $200k • 0.01% – 0.15%` becomes `salaryMin`, `salaryMax`, `salaryCurrency`, `equityMin` and `equityMax`, and the original string is kept in `compensation`.
- **Company facts on every job.** Size, stage, badges and pitch ride along on each job row, and each startup is also one free company row — no second lookup.
- **No browser, no session, no workaround.** Plain HTTP through Apify's datacenter proxy. If Wellfound answers with its security check, the run stops after that one request and says so in a free row; it is never worked around.
- **No recruiters.** Contact details and people's names are removed from descriptions before a row is written.

### Where the data comes from

Three kinds of public wellfound.com pages, and nothing else:

- **Role listings by city** — `https://wellfound.com/role/l/<role>/<city>`, then `?page=2`, `?page=3`… Each page lists 20 startups with their highlighted jobs (30–40 jobs a page in our captures) and states how many pages and jobs the listing has.
- **Remote role listings** — `https://wellfound.com/role/r/<role>`, paged the same way.
- **Job pages** — `https://wellfound.com/jobs/<id>-<slug>`, only with `includeDetails`: their schema.org `JobPosting` adds the company website, industry, employment type, structured locations and benefits.

Role slugs are Wellfound's own: this Actor knows 67 seen on Wellfound's listing pages (plus a few common ones), maps titles and abbreviations to them, and passes any other slug through as written. City slugs likewise (`new-york`, `san-francisco`, `los-angeles`, `austin`, `seattle`, `boston`, `chicago`, `denver`, `district-of-columbia`…). A slug Wellfound does not have answers 404 and comes back as a free `unresolved` row.

Company profile pages are behind Wellfound's security check and are **never requested**; company facts come from the listing pages. Search forms and query URLs that Wellfound's robots.txt disallows (`?jobId=`, `?role=`, `/_jobs/`, `/search`) are never built: the only query string ever sent is `?page=N`.

### Input reference

| Field | Type | Default | What it does |
|---|---|---|---|
| `roles` | string\[] | prefill: `software-engineer`, `product-manager` | Wellfound role slugs, or titles matched to the nearest slug. A title that matches nothing is a free `unresolved` row and costs no request. |
| `locations` | string\[] | `[]` = `remote` | `remote`, a city slug, or a city as you would write it (`Austin, TX`, `NYC`, `Washington, DC`). Every role is searched in every location; at most 100 searches per run. |
| `keywords` | string | `""` | Keep a job only when every word appears in its title or description. |
| `remoteOnly` | boolean | `false` | Only jobs Wellfound marks remote. |
| `minSalary` | integer | `0` | Keep a job when the top of its displayed salary reaches this (listing currency, a year); jobs that show no salary are dropped while it is set. |
| `postedWithinDays` | integer | `0` | 0–3,650. Only jobs that went live on Wellfound within this many days. |
| `maxJobsPerSearch` | integer | 200 (prefill 80) | 1–2,000 jobs per role × location. A search also stops at Wellfound's last page, and reads at most one page per 20 jobs asked for — three per 20 while a filter is on. |
| `includeDetails` | boolean | `false` | Also read each returned job's page for its JSON-LD posting. One extra request per job. |
| `maxConcurrency` | integer | 4 | 1–8 searches at once. Requests to wellfound.com always start at least half a second apart. |
| `maxRunSecs` | integer | 240 | 30–3,600. Rows already returned are kept — and billed — when it runs out; each search never started gets a free `timeout` row. |
| `proxyConfiguration` | object | `{ "useApifyProxy": true }` | Apify datacenter proxy by default. |

A run with nothing usable — no role, no role or no location that resolves, or more than 100 searches — finishes **FAILED** before a single request, with a free `invalid-input` row saying why. Anything else finishes **SUCCEEDED**, including a run that returned no job (it says why, in free rows, and bills nothing).

### Output reference

Every row has the same columns, `null` where a column does not apply, so the dataset exports as one table. `rowType` is `job`, `company`, `diagnostic` or `summary`; `ok` is false only on diagnostic rows; `scrapedAt` is on every row.

**Job rows** (paid, the primary event): `role` and `location` (the search, as slugs), `searchUrl`, `jobId`, `title`, `url`, `company`, `companySlug`, `companyUrl` (a link; never read), `companySize`, `companyStage`, `companyHighConcept`, `companyBadges[]`, `companyLogo`, `locations[]`, `remote`, `remoteConfig` (`{ kind: REMOTE | ONSITE_OR_REMOTE | ONSITE, wfhFlexible }`), `acceptedRemoteLocations[]`, `jobType` (`full-time`, `contract`, `internship`, `cofounder`…), `compensation` (as displayed), `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod`, `equityMin`, `equityMax` (percent; 0 – 0 when Wellfound shows "No equity"), `yearsExperienceMin`, `yearsExperienceMax`, `seniority` (from the title: `intern`, `entry`, `senior`, `lead`, `staff`, `principal`, `manager`, `director`, `vp`, `executive`), `postedAt` (when the job went live), `atsSource` (`greenhouse`, `ashby`, `workable`…; null when posted on Wellfound directly), `description` (plain text, at most 20,000 characters, redacted).

**With `includeDetails`**, from the job's own page: `detailsRead` (false when the page could not be read — the row is still returned), `companyWebsite`, `industry`, `employmentType` (`FULL_TIME`…), `validThrough`, `benefits` (plain, at most 5,000 characters, redacted), `jobLocations[]` (`{ city, region, country }`). Where the listing showed no salary, the posting's fills it.

**Company rows** (free, one per startup seen, after the jobs): `name`, `size`, `stage`, `badges[]`, `highConcept`, `jobCount` (its jobs returned by this run), `jobsListed` (its highlighted jobs on the pages read), plus `company`, `companySlug`, `companyUrl`, `companyLogo`.

**Diagnostic rows** (free): `errorType`, `error`, `role`, `location`, `searchUrl`, `requests`.

**Summary row** (free, last): `note` (the status message), `jobsReturned`, `requests`, `stats` (per search: pages read, Wellfound's page and job totals, jobs read and returned, requests, why it stopped; jobs filtered and de-duplicated, companies, job pages read, diagnostics by type, what was charged).

| `errorType` | Meaning |
|---|---|
| `unresolved` | A role or location that matches nothing (no request made), or a listing Wellfound does not have (HTTP 404 or a redirect away; one request). |
| `blocked` | Wellfound answered with its security check (HTTP 403 or 429, or the check page itself). The run stops there: one request, never retried. Pages read before it are kept. |
| `no-jobs` | The listing was read and returned no job: none listed, none matching your filters, or every one already returned by an earlier search in the run. |
| `parse-failed` | The page answered but was not a listing this Actor can read. |
| `timeout` | `maxRunSecs` ran out before the search was started. |
| `invalid-input` | Nothing usable in the input; the run is FAILED. |

### Pricing

| Event | What it is | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|---|
| `actor-start` | Once per run, only after the run has returned a job | $0.001 | $0.001 | $0.001 | $0.001 |
| **`job`** | One job returned | **$0.001** | **$0.001** | **$0.0008** | **$0.0006** |

**$1.00 per 1,000 jobs** on FREE and BRONZE, $0.80 on SILVER, $0.60 on GOLD. Company rows, diagnostics and the summary are free.

| Run | Cost |
|---|---|
| The prefill as the offline test suite runs it — 101 jobs | **$0.102** |
| The prefill live, at most 320 jobs | **at most $0.321** |
| 10 roles × 5 locations at 200 jobs each, if every search fills | **≈ $10.00** |
| 1,000 jobs at GOLD | **$0.601** |
| Every search blocked, unresolved or empty | **$0.00**, SUCCEEDED |

Charging is charge-after-push: rows are in your dataset before the event is recorded. Each listing page's jobs are checked against `ACTOR_MAX_TOTAL_CHARGE_USD` before they are pushed; when the budget cannot cover them all, the jobs it can cover are returned and the run stops cleanly — never a row past the ceiling, and no job page is read for a job the budget cannot pay for. Never charged: company rows, diagnostics, the summary, jobs your filters dropped, a job listed under two searches the second time, and a run that returns no job (start fee included).

### Limits

- **Company profile pages are not read.** They sit behind Wellfound's security check. Company facts (size, stage, badges, pitch, logo) come from the listing pages; `companyUrl` is a link for you to open.
- **Highlighted jobs only.** A listing page shows 20 startups and each startup's 1–3 highlighted jobs for that role. A startup's other openings are not on the page and are not returned, so a listing's own job total (`totalJobCount` in the summary — 133 for software engineers in Austin) is more than its pages carry (70 on the first two of its three pages).
- **Salary and equity only when Wellfound shows them.** About one in five captured jobs shows no salary, and equity appears only where the startup lists it. Nothing is inferred from the description.
- **Listings are not ordered by date.** A page mixes jobs that went live this week with jobs that have been live for years; `postedWithinDays` filters them, at the cost of reading more pages.
- **The security check ends the run.** If Wellfound answers with it (as it does for company pages from datacenter IPs), the run stops after that one request with a free `blocked` row. No proxy rotation, no browser, no retry.
- **Paced**: every request to wellfound.com starts at least half a second after the one before, whatever `maxConcurrency` is. A listing page is about 0.5–0.6 MB.
- **`includeDetails` is slow on purpose**: one more paced request per job — 200 jobs is at least 100 seconds of job pages. The listing already carries the full description, salary and equity.
- **At most 100 searches** (roles × locations) per run, and at most 100 pages per search.
- **Role and city slugs are Wellfound's.** The bundled table is a sample of the slugs seen on Wellfound; any other slug is tried as written and a 404 comes back as a free `unresolved` row.
- **Descriptions are cut at 20,000 characters**, at a word boundary.
- Not affiliated with, endorsed by or sponsored by Wellfound or any startup whose jobs you retrieve. Names are used descriptively, to say which public pages are read.

### Use it from an AI agent, or from code

One JSON object in, one flat array out — the shape agent runtimes want. The Actor runs with **limited permissions** and **pay-per-event** pricing, so it works over the Apify MCP server (`mcp.apify.com`) and with agentic (x402) payments. The **Integrations** tab pushes results to Slack, a webhook, Zapier, Make, Google Sheets, Snowflake or BigQuery, and Apify Schedules run it unattended — daily with `postedWithinDays: 1` is a "new startup jobs" feed.

```bash
curl -X POST "https://api.apify.com/v2/acts/insight.solutions~wellfound-jobs-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"roles":["software-engineer"],"locations":["remote"],"minSalary":150000,"maxJobsPerSearch":100}'
```

```python
## pip install apify-client
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("insight.solutions/wellfound-jobs-api").call(run_input={
    "roles": ["software-engineer", "product-manager"],
    "locations": ["remote", "san-francisco"],
    "maxJobsPerSearch": 100,
})

for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row["rowType"] == "job":
        print(row["company"], row["companyStage"], row["title"], row["compensation"], row["url"], sep=" | ")
    elif row["rowType"] == "company":
        print(f'{row["name"]}: {row["size"]} people, {row["stage"]}, badges {row["badges"]}')
```

**Building an app with Lovable?** Apify's Lovable connector runs any Actor from inside a Lovable project with your Apify token. Connect Apify in Lovable once, then ask it: *"Use Apify to run insight.solutions/wellfound-jobs-api every morning and build a startup-jobs board around the results."* At the default settings a run of a few searches finishes well inside Lovable's 300-second synchronous limit, and every result is one JSON object per row, so the generated app needs no extra parsing. Usage bills to the Apify account whose token is connected.

### FAQ

**Which role slugs can I use?**
Any role page Wellfound has: the slug is the last part of `wellfound.com/role/r/<slug>`. Titles work too — "Software Engineer", "Product Designer", "ML engineer", "PM" — and are matched to the nearest slug this Actor knows. The summary row's `stats.searches[]` shows the slug each search used.

**Why does a listing say 133 jobs when fewer came back?**
Wellfound's listing pages show each startup's highlighted jobs for the role, not every opening; the listing's own total counts them all. See *Limits*.

**What are `equityMin` and `equityMax`?**
The equity range Wellfound displays, in percent: `0.01% – 0.15%` is `0.01` and `0.15`. "No equity" is `0` and `0`; a job that says nothing about equity has `null`.

**Is `salaryMin` always a yearly USD salary?**
Wellfound shows salaries as `$…k` ranges, which are yearly, and `salaryPeriod` says `year`. A salary in another currency keeps that currency in `salaryCurrency` (`€` → `EUR`, `£` → `GBP`); `minSalary` compares numbers in the listing's own currency.

**Why are some job rows' company stage or size empty?**
Not every startup shows a stage badge or a size band on Wellfound; the columns are `null` when it does not.

**Do I need `includeDetails`?**
Usually not: the listing carries the full description, salary, equity, locations and remote policy. Turn it on for the company website, industry, schema.org employment type, structured locations and benefits text.

**What happens when Wellfound shows its security check?**
The run stops after that request, returns what it already read (billed) and one free `blocked` row, and finishes SUCCEEDED. Try again later; nothing is retried automatically.

### Legal and data-protection notes

- **Public pages only.** Every page read is a Wellfound role listing or job page that any anonymous visitor's browser loads. The Actor never logs in, never sends or keeps cookies, never accepts credentials and needs no API key.
- **No recruiter contacts by design.** E-mail addresses (plain, obfuscated and `mailto:` links), phone numbers, LinkedIn profile and post links (with their link text, which is a name), `Recruiter: …` lines, and every sentence that points the reader at a named person or names a founder or executive ("send your resume to …", "founded by …", "our CEO, …") are removed from descriptions and benefits before a row is written. Company facts are company-level: Wellfound's startup records carry no people fields. Salary and equity ranges are kept: they are attributes of the job.
- **robots.txt is respected.** Every URL this Actor builds — the role listings with `?page=N` and the job pages — is allowed by wellfound.com's robots.txt (the test suite checks each shape against it); the query forms it disallows and its `/_jobs/` and `/search` paths are never requested, and company pages are not read at all. Requests are at least half a second apart.
- **No bot walls are bypassed.** The security check is one request and a free `blocked` row.
- **You are the controller of what you do next.** If you combine this data with personal data or contact people based on it, GDPR, CCPA and similar obligations are yours.
- **Not affiliated with, endorsed by or sponsored by** Wellfound or any startup named. Names and trademarks are used descriptively.

### Our other Actors

Every Insight Solutions Actor is pay-per-result with no browser, no login and no API key, and every one of them returns free diagnostic rows instead of billing for failures. Prices are per 1,000 results.

**Video, audio & social**

- [YouTube Transcript Scraper & API — Captions to Text, SRT & VTT](https://apify.com/insight.solutions/youtube-transcript-api) — captions as timed segments, text, SRT or VTT, with language fallback and translation.
- [YouTube Comments Scraper — Comments & Replies with Likes](https://apify.com/insight.solutions/youtube-comments-api) — comments and replies with likes, pinned and hearted flags, newest or top sort.
- [YouTube Channel Scraper — Videos, Shorts & Search](https://apify.com/insight.solutions/youtube-channel-api) — a channel's videos, Shorts and live streams, plus YouTube search.
- [Podcast Search, Episodes & Charts API](https://apify.com/insight.solutions/podcast-api) — Apple Podcasts search, charts and full episode feeds.
- [Bluesky Scraper](https://apify.com/insight.solutions/bluesky-scraper) — profiles, posts, followers and follows from the public AT Protocol API.
- [Telegram Channel Scraper — Posts, Views & Stats](https://apify.com/insight.solutions/telegram-channel-scraper) — posts, views and channel stats from public Telegram channels.
- [Substack Scraper](https://apify.com/insight.solutions/substack-scraper) — posts with full free text, comments and publication profiles.
- [Sponsor & Advertiser Finder — YouTube, Podcasts & Newsletters](https://apify.com/insight.solutions/sponsorship-intelligence-api) — which brands sponsor which YouTube channels, podcasts and Substack newsletters, with promo codes, offers and sponsor links, company-level only.
- [Google Ads Transparency Center API — Advertisers & Ads](https://apify.com/insight.solutions/google-ads-transparency-api) — every ad a verified advertiser runs on Google, from the Ads Transparency Center, by brand name, AR id or domain: format, first and last shown, days shown and preview links, individuals excluded.
- [Hacker News API](https://apify.com/insight.solutions/hacker-news-api) — stories, comments, users, front page and a structured "Who is hiring?" parser from the official HN APIs.
- [GitHub Trending & Repo Scraper — Stars, Releases & Search](https://apify.com/insight.solutions/github-repos-api) — repository facts, trending lists, releases and search, no token needed for small runs.
- [Discourse Forum Scraper — Topics, Posts & Categories](https://apify.com/insight.solutions/discourse-forum-api) — topics, posts and categories from any Discourse community via its own JSON endpoints, usernames only.

**News, documents & the web**

- [Google News Scraper — Search, Topics & Real Article URLs](https://apify.com/insight.solutions/google-news-api) — news search and topic feeds with the publisher's real URL decoded.
- [Website to Markdown Converter & API — for LLMs & RAG](https://apify.com/insight.solutions/website-content-extractor) — any site as clean Markdown, text and heading-aware chunks.
- [WordPress Scraper — Posts & Pages from Any WP Site, No Login](https://apify.com/insight.solutions/wordpress-posts-api) — posts and pages from any WordPress site as clean text or Markdown, with categories, tags and images.
- [Website Metadata Extractor — Schema.org, Open Graph & JSON-LD](https://apify.com/insight.solutions/website-metadata-api) — any URL's meta tags, Open Graph, Twitter cards, hreflang, feeds, JSON-LD and microdata, with normalised Product, Article, Event and FAQ entities.
- [Subdomain Finder — Certificate Logs & DNS, No API Key](https://apify.com/insight.solutions/subdomain-finder-api) — every subdomain of a domain from certificate-transparency logs, resolved over DNS, with an optional live HTTP check.
- [Internet Archive Scraper & API — Search, Metadata & Files](https://apify.com/insight.solutions/internet-archive-api) — archive.org search, item metadata, files and reviews.
- [Wayback Machine Scraper — Archived URLs, Snapshots & Diffs](https://apify.com/insight.solutions/wayback-toolkit) — archived URL inventories, snapshots and text diffs between dates.
- [Website Technology Detector — Tech Stack Checker & Lookup](https://apify.com/insight.solutions/website-tech-detector) — the tech stack behind any site, with the evidence for each detection.
- [Domain Lookup API — DNS, WHOIS/RDAP, SSL & Providers](https://apify.com/insight.solutions/domain-intelligence-api) — DNS, RDAP registration, TLS certificate and HTTP facts in one row per domain.
- [SEO Audit Tool — Sitemap Crawl & On-Page Checker](https://apify.com/insight.solutions/seo-page-audit) — sitemap crawl with on-page checks, structured data and broken-link reports.
- [Keyword Suggestions Tool & API — Google, Bing & Amazon](https://apify.com/insight.solutions/keyword-suggestions-api) — Google, YouTube, Bing, Amazon and eBay autocomplete with alphabet and question expansions.
- [Website Contact Scraper — Email, Phone & Socials Extractor](https://apify.com/insight.solutions/website-contact-extractor) — emails, phone numbers and social profiles from any list of websites.
- [Company Email Finder — Published Emails & Phones by Name](https://apify.com/insight.solutions/company-contact-finder) — company names in, each one's verified website with its business emails, phone numbers and social profiles out.
- [Web Search Results API](https://apify.com/insight.solutions/web-search-api) — Bing and DuckDuckGo organic results with snippets, no key, no browser.
- [Company Enrichment API](https://apify.com/insight.solutions/company-enrichment-api) — a domain in, a company profile out: firmographics, contacts, tech stack, DNS and hiring signal.
- [Company Dossier API](https://apify.com/insight.solutions/company-dossier-api) — one company in, twelve sections out: profile, tech, contacts, DNS, open roles, news, SEC filings, federal awards, recalls, YC batch and apps.
- [Press Release Scraper — GlobeNewswire, PR Newswire & More](https://apify.com/insight.solutions/press-releases-api) — GlobeNewswire and PR Newswire releases plus any newsroom feed, by keyword, company, ticker or subject.
- [Federal Register API](https://apify.com/insight.solutions/federal-register-api) — rules, proposed rules, notices and the Public Inspection desk with dockets, comment deadlines and CFR references.
- [Academic Papers Search API](https://apify.com/insight.solutions/academic-papers-api) — OpenAlex, Crossref, arXiv and PubMed in one row per paper: abstract, citations, open-access PDF, authors and venue.
- [RSS & Atom Feed Monitor](https://apify.com/insight.solutions/rss-feed-monitor) — any RSS, Atom or JSON feed (or an OPML file) in, only the new items out, with keyword filters and a webhook.
- [Website Change Monitor](https://apify.com/insight.solutions/website-change-monitor) — watch any pages, diff the text between runs, get change rows with added/removed lines, keyword alerts and a webhook.
- [Wikipedia & Wikidata API](https://apify.com/insight.solutions/wikipedia-api) — article text, search, daily pageviews and Wikidata entity facts, any language edition.

**Business, finance & jobs**

- [Congress Trades Tracker API — STOCK Act PTRs + SEC Form 4](https://apify.com/insight.solutions/congress-insider-trades-api) — STOCK Act periodic transaction reports and SEC Form 4 insider trades in one schema.
- [Federal Contracts, Grants & Lobbying API](https://apify.com/insight.solutions/federal-contracts-grants-api) — SAM.gov opportunities, USAspending awards, Grants.gov notices and Senate lobbying filings in one schema.
- [SEC EDGAR API](https://apify.com/insight.solutions/sec-edgar-api) — filings, XBRL financials and full-text search by ticker or CIK.
- [Litigation Signals API — Lawsuits, Settlements & Investigations](https://apify.com/insight.solutions/litigation-signals-api) — lawsuits, settlements and investigations per public company from SEC 10-K, 10-Q and 8-K disclosures, press wires and SEC, FTC and DOJ notices, company-level only.
- [Startup Funding Rounds API — SEC Form D, Wires & News](https://apify.com/insight.solutions/funding-signals-api) — who just raised money: one row per funding round from SEC Form D filings, press wires and Google News, with amount, round, investors, industry and state, company-level only.
- [Clinical Trials & FDA API](https://apify.com/insight.solutions/clinical-trials-fda-api) — ClinicalTrials.gov studies plus openFDA recalls, labels, approvals, 510(k)s and adverse-event reports.
- [Product & Vehicle Recalls API](https://apify.com/insight.solutions/product-recalls-api) — CPSC, NHTSA, FDA and USDA recalls, vehicle complaints and ratings, plus a VIN decoder.
- [YC Companies List & Directory Scraper — Batches & Founders](https://apify.com/insight.solutions/yc-companies-directory) — the YC directory with founders and social links, filterable by batch, industry and hiring status.
- [Job Scraper for Greenhouse, Lever, Ashby & 10+ ATS Career Sites](https://apify.com/insight.solutions/ats-jobs-api) — jobs straight from Greenhouse, Lever, Ashby, Workable and 10+ other ATS career sites.
- [Workday Jobs Scraper — All Postings from Any Workday Site](https://apify.com/insight.solutions/workday-jobs-api) — every posting on any Workday career site, with facets, search, posted dates and full descriptions.
- [Job Postings Monitor — New & Closed Roles, Hiring Alerts](https://apify.com/insight.solutions/job-postings-monitor) — new, closed and changed postings on the career sites you watch.
- [Hiring Signals API — Open Roles & Hiring Surge by Company](https://apify.com/insight.solutions/hiring-signals-api) — one row per company per run: open roles, what opened and closed, department and seniority breakdowns, and a hiring-surge flag.
- [Careers Page Scraper — Open Roles from Any Company's Site](https://apify.com/insight.solutions/careers-page-jobs-api) — open roles from any company's own careers site: domain in, the platform recognised (Eightfold, Phenom, Jibe, iCIMS, Google, Amazon, 14 ATSs) or the site's structured data read, one row per job.
- [Remote Jobs API](https://apify.com/insight.solutions/remote-jobs-api) — RemoteOK, Remotive, We Work Remotely, Himalayas, Jobicy and more in one schema, deduplicated.
- [Shopify Products Scraper — Catalogue, Prices & Stock](https://apify.com/insight.solutions/shopify-products-api) — any Shopify store's catalogue, variants, prices and stock signals.
- [WooCommerce Products Scraper — Prices, Variants & Stock](https://apify.com/insight.solutions/woocommerce-products-api) — any WooCommerce store's catalogue, prices, variants and stock through its public Store API.
- [Price Tracker & Monitor — Any Retailer's Prices & Stock](https://apify.com/insight.solutions/price-tracker-api) — price, stock, list price and discount from any product URL, read from the page's structured data, with price-drop and restock rows between runs.
- [Rightmove Scraper — UK Listings for Sale & Rent by Area](https://apify.com/insight.solutions/rightmove-property-api) — UK property for sale and to rent by area from Rightmove's own search API: price, bedrooms, type, tenure, size, coordinates, photos, status and the agent branch, one row per listing.
- [Shopify App Store Scraper — Apps, Pricing, Ratings & Reviews](https://apify.com/insight.solutions/shopify-app-store-api) — Shopify App Store listings by category, collection or developer: pricing plans, ratings and merchant reviews.
- [Luma Events Scraper — Events by City, Category & Calendar](https://apify.com/insight.solutions/luma-events-api) — upcoming Luma events by city, category or calendar: dates, venue, price, capacity and organiser calendar, no host names.
- [Eventbrite Scraper — Events by City, Category & Organizers](https://apify.com/insight.solutions/eventbrite-events-api) — upcoming Eventbrite events by city, category, online or organiser, with the organising companies behind them: dates, venue, price, ticket status, followers and website, no browser, individuals never named.
- [Meetup Scraper — Upcoming Events & Group Stats](https://apify.com/insight.solutions/meetup-events-api) — upcoming events of the Meetup groups you name, and the groups themselves: dates, venue, RSVPs, fee, member count, topics and ratings, no member data.
- [Shopify Store Monitor](https://apify.com/insight.solutions/shopify-store-monitor) — price drops, sales, restocks, sell-outs and new products on any Shopify store, one row per change.
- [Shopify Store Finder — Discover & Verify Stores by Niche](https://apify.com/insight.solutions/shopify-store-finder) — Shopify stores by niche and country, each verified on its own storefront, with product count, currency, country, price range and sample products.
- [Public Tenders API](https://apify.com/insight.solutions/public-tenders-api) — EU TED, UK Find a Tender and Contracts Finder notices by keyword, CPV code, country, stage and deadline.
- [Nonprofit Lookup & IRS 990 API — EIN, Financials, NTEE](https://apify.com/insight.solutions/nonprofit-990-api) — search US nonprofits and get EIN, NTEE code and multi-year Form 990 financials.
- [OpenStreetMap Places API](https://apify.com/insight.solutions/osm-places-api) — businesses and points of interest by category and area from OpenStreetMap: name, address, coordinates, website, phone, opening hours.

**Apps & games**

- [App Store & Google Play Reviews Scraper — Ratings & Replies](https://apify.com/insight.solutions/app-reviews-api) — reviews from both stores with ratings, versions and developer replies.
- [App Store Top Charts & App Search API](https://apify.com/insight.solutions/app-charts-api) — Apple top charts by country and genre, plus app search and details.
- [App Store Keyword Rank Tracker](https://apify.com/insight.solutions/app-store-keyword-rank-tracker) — where any app ranks for any keyword on the App Store and Google Play, with rank changes and ASO suggestions.
- [Steam Reviews Scraper — Reviews & Game Details](https://apify.com/insight.solutions/steam-reviews-api) — Steam reviews with playtime, helpfulness and game details.
- [Steam Game Data API](https://apify.com/insight.solutions/steam-store-stats-api) — prices, tags, review scores, live player counts and top charts.
- [Sports Scores & Schedules API](https://apify.com/insight.solutions/sports-scores-api) — scores, schedules, standings, teams and headlines for the NFL, NBA, MLB, NHL, soccer and more, no key.
- [App Store Monitor](https://apify.com/insight.solutions/app-store-monitor) — App Store and Google Play listings watched between runs: new versions with release notes, price, rating and listing changes, one row per change.

# Actor input Schema

## `roles` (type: `array`):

One per line. A Wellfound role slug as it appears in its URLs (`software-engineer`, `product-manager`, `data-scientist`, `frontend-engineer`, `account-executive`…) or a common title (`Software Engineer`, `ML engineer`, `PM`), which is matched to the nearest slug. A title that matches no role is reported in a free `unresolved` row and costs no request. Each role is searched in each location.

## `locations` (type: `array`):

One per line. `remote` reads Wellfound's remote listing for each role; a city slug (`new-york`, `san-francisco`, `austin`, `los-angeles`, `seattle`, `boston`, `chicago`, `denver`, `district-of-columbia`…) or a city as you would write it (`Austin, TX`, `NYC`, `Washington, DC`) reads that city's listing. Empty: `remote` only. At most 100 searches (roles × locations) per run.

## `keywords` (type: `string`):

Optional. Keep a job only when every word appears in its title or description (case-insensitive). Applied to the listings this Actor reads, not sent to Wellfound. Empty: every job.

## `remoteOnly` (type: `boolean`):

Keep only jobs Wellfound marks remote. Every job on a `remote` listing is; on a city listing, some are.

## `minSalary` (type: `integer`):

Optional. Keep a job only when the top of its displayed salary range reaches this number (in the listing's own currency, usually USD a year). Jobs that show no salary are dropped when this is set. 0: no salary filter.

## `postedWithinDays` (type: `integer`):

Optional. Keep only jobs that went live on Wellfound within this many days. Wellfound's listings are not ordered by date (a page mixes jobs from this week with jobs years old), so with this set a search reads up to three times as many pages to fill `maxJobsPerSearch`. 0: no date filter.

## `maxJobsPerSearch` (type: `integer`):

Jobs returned per role × location, at most. Wellfound shows 20 startups a page with their 1–3 highlighted jobs (30–40 jobs a page), so 80 is two or three pages. Each search also stops at Wellfound's last page.

## `includeDetails` (type: `boolean`):

Also read each returned job's page (`/jobs/<id>-<slug>`) for its JSON-LD posting: the company website, industry, employment type, structured locations, benefits and pay period. One extra request per job, so runs take longer; the listing already carries the full description, salary and equity. Off: listing pages only.

## `maxConcurrency` (type: `integer`):

How many searches are read at once. Every request to wellfound.com starts at least half a second after the one before, whatever this is set to.

## `maxRunSecs` (type: `integer`):

Wall-clock budget for the whole run. When it is reached the Actor stops reading, keeps — and bills — every row it already wrote, and files a free `timeout` row for each search it never started.

## `proxyConfiguration` (type: `object`):

Requests go out through this proxy; Apify's datacenter proxy by default, which is what the listing pages were tested through. If Wellfound answers with its security check, the run stops after that one request with a free `blocked` row; it is never retried through another exit.

## Actor input object example

```json
{
  "roles": [
    "software-engineer",
    "Product Manager",
    "data-scientist"
  ],
  "locations": [
    "remote",
    "san-francisco",
    "Austin, TX"
  ],
  "keywords": "",
  "remoteOnly": false,
  "minSalary": 0,
  "postedWithinDays": 0,
  "maxJobsPerSearch": 80,
  "includeDetails": false,
  "maxConcurrency": 4,
  "maxRunSecs": 240,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Wellfound startup jobs in one schema, plus company, diagnostic and summary rows. Delivered as JSON items in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "roles": [
        "software-engineer",
        "product-manager"
    ],
    "locations": [
        "remote",
        "new-york"
    ],
    "keywords": "",
    "remoteOnly": false,
    "minSalary": 0,
    "postedWithinDays": 0,
    "maxJobsPerSearch": 80,
    "includeDetails": false,
    "maxConcurrency": 4,
    "maxRunSecs": 240,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("insight.solutions/wellfound-jobs-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "roles": [
        "software-engineer",
        "product-manager",
    ],
    "locations": [
        "remote",
        "new-york",
    ],
    "keywords": "",
    "remoteOnly": False,
    "minSalary": 0,
    "postedWithinDays": 0,
    "maxJobsPerSearch": 80,
    "includeDetails": False,
    "maxConcurrency": 4,
    "maxRunSecs": 240,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("insight.solutions/wellfound-jobs-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "roles": [
    "software-engineer",
    "product-manager"
  ],
  "locations": [
    "remote",
    "new-york"
  ],
  "keywords": "",
  "remoteOnly": false,
  "minSalary": 0,
  "postedWithinDays": 0,
  "maxJobsPerSearch": 80,
  "includeDetails": false,
  "maxConcurrency": 4,
  "maxRunSecs": 240,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call insight.solutions/wellfound-jobs-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,insight.solutions/wellfound-jobs-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WMyFLPAZs5CuhceaA/builds/vNIIzgxn0splmSWUV/openapi.json
