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

Scrape startup job listings, salary ranges, equity, company details, tech stacks, and remote roles from Wellfound (formerly AngelList Talent).

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

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🚀 Wellfound Jobs Scraper (formerly AngelList Talent)

A powerful, high-performance scraper built to extract startup job listings, company profiles, salaries, equity offerings, technology stacks, and hiring details directly from **Wellfound** ([wellfound.com](https://wellfound.com)).

***

### 🌟 Features

- **💼 Richest Startup Job Data**: Extracts job title, company name, company website, logo, tagline, company size, funding stage, location, remote status, employment type, salary range (with parsed min/max numbers), equity range, required skills/tags, job description, posted date, direct job link, and apply link.
- **🔍 Granular Search & Filtering**: Filter by keywords, job role category, location, remote-only, employment type, or supply custom search URLs.
- **⚡ Fast & Headless**: Powered by Playwright and Crawlee with dynamic fingerprint injection for high stealth and reliability.
- **🛡️ Anti-Bot Protection Handling**: Robust challenge detection with residential proxy support and automated fallback recovery.
- **📊 Standard Apify Dataset & Output Schemas**: Ready for immediate integration, exports to JSON, CSV, Excel, XML, or webhooks.

***

### 📥 Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | `string` | No | `""` | Search keywords or technologies (e.g., `"React developer"`, `"Python AI"`, `"Product Designer"`). |
| `role` | `string` | No | `""` | Job category/role (e.g., `"engineer"`, `"designer"`, `"product"`, `"sales"`, `"marketing"`). |
| `location` | `string` | No | `""` | Location filter (e.g., `"San Francisco, CA"`, `"New York, NY"`, `"London, UK"`). |
| `remote` | `boolean` | No | `false` | When `true`, filters only remote-friendly job opportunities. |
| `jobType` | `string` | No | `""` | Employment type: `"full-time"`, `"contract"`, `"internship"`, or `"part-time"`. |
| `maxJobs` | `integer` | No | `30` | Maximum number of job postings to scrape. |
| `startUrls` | `array` | No | `[]` | Optional direct Wellfound search or listing URLs. |
| `proxyConfiguration` | `object` | No | `{ "useApifyProxy": true }` | Proxy settings. **Residential proxies recommended** for live scraping. |

#### Sample Input JSON

```json
{
    "keywords": "React developer",
    "role": "engineer",
    "location": "San Francisco, CA",
    "remote": true,
    "jobType": "full-time",
    "maxJobs": 30,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

***

### 📤 Output Data Format

The scraper saves all records to the default dataset. Below is an example of the output structure:

```json
{
    "id": "1028391",
    "title": "Senior Full Stack Engineer",
    "company": "NexusAI Technologies",
    "companySlug": "nexusai-technologies",
    "companyUrl": "https://wellfound.com/company/nexusai-technologies",
    "companyWebsite": "https://nexusai.tech",
    "companyLogo": "https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?w=128",
    "companyTagline": "Autonomous AI agents for enterprise workflow optimization",
    "companySize": "51-200 employees",
    "companyStage": "Series B",
    "companyLocation": "San Francisco, CA",
    "location": "San Francisco, CA (Hybrid / Remote)",
    "remote": true,
    "jobType": "Full-time",
    "experienceLevel": "Mid-Senior (3-6 yrs)",
    "salaryRange": "$140k – $195k",
    "salaryMin": 140000,
    "salaryMax": 195000,
    "salaryCurrency": "USD",
    "equityRange": "0.05% – 0.25%",
    "skills": ["React", "TypeScript", "Node.js", "PostgreSQL", "GraphQL", "AWS", "Docker"],
    "description": "Join our core platform engineering team to build high-scale web applications, microservices architectures, and intuitive user interfaces.",
    "postedAt": "2 days ago (2026-08-19)",
    "jobUrl": "https://wellfound.com/jobs/1028391-senior-full-stack-engineer",
    "applyUrl": "https://wellfound.com/jobs/1028391-senior-full-stack-engineer/apply",
    "scrapedAt": "2026-08-21T07:35:00.000Z"
}
```

***

### 🎯 Use Cases

1. **Recruiting & Talent Sourcing**: Find which startups are hiring for specific skillsets (e.g. AI engineers, Rust developers, Next.js experts).
2. **Compensation & Equity Benchmarking**: Analyze market salary and equity offerings across startup stages (Seed to Series C).
3. **Competitive Intelligence & Market Tracking**: Track competitors' hiring momentum, expansion areas, and technology stacks.
4. **B2B Lead Generation**: Connect with high-growth startups currently expanding their engineering and go-to-market teams.

***

### 💡 Tips & Best Practices

- **Residential Proxies**: Wellfound implements anti-bot protection (DataDome / Cloudflare). Always enable **Apify Residential Proxies** (`RESIDENTIAL` proxy group) for smooth scraping.
- **Granular Filters**: Use specific keywords and role combinations to target exact vacancies and minimize run duration.
- **Export Formats**: You can download your datasets in JSON, CSV, Excel, or consume them directly via the Apify API.

***

### 📄 License

Apache-2.0

# Actor input Schema

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

Search keywords or technologies (e.g. 'React developer', 'Python LLM', 'Product Manager')

## `role` (type: `string`):

Job role category (e.g. 'engineer', 'designer', 'product', 'sales', 'marketing')

## `location` (type: `string`):

City, state, or country (e.g. 'San Francisco, CA', 'New York, NY', 'London, UK')

## `jobType` (type: `string`):

Employment type filter

## `remote` (type: `boolean`):

Filter for remote-friendly job opportunities

## `maxJobs` (type: `integer`):

Maximum number of jobs to extract

## `startUrls` (type: `array`):

Direct Wellfound search or job URLs to scrape. Overrides search filters if provided.

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

Residential proxies are strongly recommended to bypass anti-bot challenges.

## Actor input object example

```json
{
  "keywords": "React developer",
  "role": "engineer",
  "location": "San Francisco, CA",
  "jobType": "",
  "remote": false,
  "maxJobs": 30,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing all extracted Wellfound job listings and startup profiles

# 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 = {
    "keywords": "React developer",
    "role": "engineer",
    "location": "San Francisco, CA",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeai/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 = {
    "keywords": "React developer",
    "role": "engineer",
    "location": "San Francisco, CA",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapeai/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 '{
  "keywords": "React developer",
  "role": "engineer",
  "location": "San Francisco, CA",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapeai/wellfound-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapeai/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/hTTV944bK0O7NjA4N/builds/6aKMqcgbm6OhsXdTO/openapi.json
