# Wellfound Jobs Scraper (`piotrv1001/wellfound-jobs-scraper`) Actor

Scrape Wellfound (AngelList) startup jobs by role and city, remote, or any role page URL: title, company, salary range, equity, locations, remote policy, posted date and full description.

- **URL**: https://apify.com/piotrv1001/wellfound-jobs-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Jobs, Salaries and Equity

Export **Wellfound startup jobs** (formerly AngelList Talent) as clean JSON, CSV or Excel. The **Wellfound Jobs Scraper** searches by role and city, remote, or any Wellfound role page, and returns each job's title, company, salary range, equity, locations, remote policy, posted date and the full job description. Use it as a Wellfound API alternative for startup job boards, salary research and finding companies hiring.

### 🎯 Use Cases

- **Remote software engineer jobs at startups**: pull every remote engineering opening with salary and equity into one sheet.
- **Startup job board feeds**: power your own "jobs at startups" board or newsletter with fresh Wellfound listings by role and city.
- **Find companies hiring**: build lead lists of startups that are hiring right now in New York, San Francisco, London or Berlin, with company size and stage.
- **Startup salary and equity research**: compare salary ranges and equity percentages by role, city and company size.
- **AngelList jobs export**: the jobs AngelList Talent used to list, now on Wellfound, as structured data for your ATS or CRM.
- **Job market monitoring**: track how many startups hire for a role over time.

### ✨ Features

- **Salary as numbers**: `salaryMin`, `salaryMax` and `salaryCurrency` parsed from text like "$150k – $200k" or "₹15L – ₹30L", plus the original `compensation` string.
- **Equity**: `equityMinPercent` and `equityMaxPercent`, or `noEquity` when the company says so.
- **Full job description**: the whole description in Markdown, with no extra charge and no extra step.
- **Company data on every row**: name, Wellfound URL, size, tagline, logo and badges such as "Actively Hiring", "Top Investors", "Early Stage" or "Valuation $500M+".
- **Remote details**: remote flag, remote policy (remote, onsite, onsite or remote) and the countries a remote job accepts.
- **Simple searches**: type "Software Engineer in New York", "Designer in Remote", "in London", or paste a Wellfound role URL.
- **Only the role you searched**: Wellfound shows each hiring company's top openings of any role; the scraper keeps only jobs for the role you asked for (location-only searches keep everything).
- **No duplicates**: a job found on two pages or by two searches is saved and billed once.
- **Reads every page**: walks the search to its last page and stops there, so the end of a search never repeats page 1.

### 🛠️ How It Works

1. **Enter searches**, one per line: a role and a city, a role with "Remote", a city alone, or a pasted wellfound.com/role/... URL.
2. **Set Max jobs per search**: the default is 50.
3. **Run the scraper** and download the jobs as JSON, CSV or Excel, or pull them through the API.

### ⚙️ Input

| Field                   | What it does                                                                                                                                                                                                                                                                                                                                                      |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Searches**            | One per line. `Software Engineer in New York` or `Product Manager, London` (role and city), `Data Scientist` (role, any location), `Designer in Remote` (remote jobs for a role), `Remote` (all remote jobs), `in Berlin` (a city, all roles), or a pasted `https://wellfound.com/role/...` or `/location/...` URL. A pasted URL with `?page=3` starts at page 3. |
| **Max jobs per search** | How many jobs to save for each search. Default 50.                                                                                                                                                                                                                                                                                                                |

```json
{
    "searches": ["Software Engineer in New York", "Product Designer in Remote", "in London"],
    "maxItems": 200
}
```

Roles and cities are the names Wellfound uses on its role pages ("Software Engineer", "Product Manager", "Data Scientist", "Designer", "Marketing"; "New York", "San Francisco", "London", "Bangalore"). If Wellfound doesn't know a role or city, the run says so in its status instead of returning a broader search.

### 💰 Pricing

Pay only for the jobs you get. No monthly rental.

| Event           | Price                            | What you get                                                           |
| --------------- | -------------------------------- | ---------------------------------------------------------------------- |
| **Job**         | $0.002 per job ($2.00 per 1,000) | One job with company, compensation, locations and the full description |
| **Actor start** | $0.00005 per run                 | Charged once when the run starts.                                      |

Examples: 50 jobs = $0.10 · 500 jobs = $1.00 · 5,000 jobs = $10.00 (plus $0.00005 per run).

Set a maximum charge per run in the Apify Console and the scraper stops right at it.

### 📊 Sample Output Data

```json
{
    "id": "4824327",
    "url": "https://wellfound.com/jobs/4824327-founding-senior-software-engineer-sf-latam-uk-europe",
    "title": "Founding Senior Software Engineer (SF, LATAM, UK & Europe)",
    "roleTitle": "Software Engineer",
    "companyId": "9051983",
    "companyName": "Clipbook",
    "companyUrl": "https://wellfound.com/company/clipbook-1",
    "companySize": "11-50",
    "companyTagline": "Democratizing media monitoring and aggregation through a robust & easy-to-use platform",
    "companyLogoUrl": "https://photos.wellfound.com/startups/i/9051983-87ca591a9851920520583428c0699219-medium_jpg.jpg?buster=1682372867",
    "companyBadges": ["Actively Hiring", "B2B", "Early Stage", "Growing fast"],
    "locations": [
        "London",
        "Vancouver",
        "Toronto",
        "Amsterdam",
        "Rio de Janeiro",
        "Medellín",
        "San Francisco Bay Area"
    ],
    "remote": true,
    "remotePolicy": "ONSITE_OR_REMOTE",
    "remoteLocations": ["Mexico", "Colombia", "United States", "Argentina", "Brazil"],
    "jobType": "full-time",
    "compensation": "0.1% – 1.0%",
    "salaryMin": null,
    "salaryMax": null,
    "salaryCurrency": null,
    "equityMinPercent": 0.1,
    "equityMaxPercent": 1,
    "noEquity": false,
    "yearsExperienceMin": 4,
    "postedAt": "2026-10-10T04:30:11.000Z",
    "description": "## **About Clipbook**\n\nClipbook’s mission: reinvent how leaders listen to and engage with the world of information that comes out every day...",
    "atsSource": "Ashby",
    "search": "in London"
}
```

`roleTitle` is Wellfound's role category for the job; `title` is the company's own job title. `atsSource` names the applicant tracking system the job comes from (Ashby, Greenhouse, Lever, Workable...), or is `null` for jobs posted directly on Wellfound. `salaryCurrency` is an ISO code when the symbol is unambiguous ("$" is shown by Wellfound for US dollars). `search` echoes the input line that found the job.

### 🔁 Schedule and Integrate

For a startup job board or a hiring-signal feed, run it **once a day** with the same searches: new postings show up with a fresh `postedAt`, and `id` lets you keep only jobs you haven't seen. Set it up in Apify **Schedules**. Send the results to **Google Sheets**, **Zapier**, **Make**, **n8n** or a webhook with Apify **integrations**.

### 🤖 Use with AI Agents (MCP)

This Actor works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server (`https://mcp.apify.com`). An agent can call it with:

```json
{ "searches": ["Software Engineer in Remote"], "maxItems": 20 }
```

### ❓ FAQ

**Does Wellfound have an official API?** Wellfound offers no public API for its job listings. This Actor needs no key, approval or account and returns the public job data shown on Wellfound's role pages, with salary and equity already split into numbers.

**Do I need a Wellfound account?** No. The scraper reads public job search pages only and never logs in.

**How many jobs can I get per search?** Each search goes to its last result page. Wellfound shows up to 3 openings per company in search results, so a search returns fewer jobs than the total Wellfound counts for it (for example about 560 of 795 for Software Engineer in New York). Use several role and city searches to cover more; duplicates across them are removed.

**Why is a salary or equity field empty?** Not every company posts a salary range or equity. `compensation` keeps Wellfound's original text; the parsed fields are `null` when that part is missing.

**What are the best places to find remote startup jobs?** Wellfound is the largest startup job board. With this scraper, `Remote` or `<role> in Remote` gives every remote opening with salary and equity, ready to filter in a spreadsheet.

**Can I search by company?** Not directly. Search by role and city, then filter on `companyName` or `companyUrl`.

### 🔗 Related Scrapers

- [LinkedIn Jobs Search Scraper](https://apify.com/piotrv1001/linkedin-jobs-search-scraper): the same roles on LinkedIn, for a fuller view of who is hiring.
- [LinkedIn Company Jobs Scraper](https://apify.com/piotrv1001/linkedin-company-jobs-scraper): every open job of the startups you find here.
- [ATS Jobs Monitor](https://apify.com/piotrv1001/ats-jobs-monitor): watch the company job boards that `atsSource` points to and get only new and closed roles.
- [RemoteOK Jobs Scraper](https://apify.com/piotrv1001/remoteok-jobs-scraper): more remote tech jobs with salaries.
- [Google Jobs Scraper](https://apify.com/piotrv1001/google-jobs-scraper): jobs from every board Google indexes, for one search across sites.

# Actor input Schema

## `searches` (type: `array`):

One search per line: a role and a location ("Software Engineer in New York", "Product Manager, London"), a role only ("Data Scientist", any location), remote jobs ("Designer in Remote", or just "Remote"), a location only ("in Berlin"), or a pasted wellfound.com/role/... or /location/... URL (its page number is kept).

## `maxItems` (type: `integer`):

Stop each search after this many jobs. Your maximum charge per run also caps the run.

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

The default works best; change it only if runs fail.

## Actor input object example

```json
{
  "searches": [
    "Software Engineer in New York"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `salaries` (type: `string`):

No description

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

No description

# 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 = {
    "searches": [
        "Software Engineer in New York"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/wellfound-jobs-scraper").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 = {
    "searches": ["Software Engineer in New York"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/wellfound-jobs-scraper").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 '{
  "searches": [
    "Software Engineer in New York"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call piotrv1001/wellfound-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

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/s1G5BpcqXupwq8ep6/builds/ks6DznWzNVjOBBOZs/openapi.json
