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

Scrape Wellfound (AngelList Talent) startup job listings by role/keyword and location. Get company funding stage, compensation, remote flag, and tags for every listing — a buying-signal dataset for recruiters and SDRs targeting funded startups.

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

## Pricing

Pay per event

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?

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

<div align="center">
  <img src=".actor/icon.svg" width="160" alt="Devil Scrapes mark" />

## Wellfound Startup Jobs Scraper

**💰 $1.70 / 1 000 results**  ·  pay only for results  ·  no credit card to try

*The devil's in the data.* 😈

Scrape startup job listings from Wellfound (formerly AngelList Talent) by role and location — job title, company, funding stage, compensation, remote flag, tags, and posted date, one clean row per listing.

</div>

***

### 🎯 What this scrapes

Wellfound is where funded startups post roles, badge their funding stage, and list real compensation bands right on the job card. This Actor searches Wellfound's own role-and-location search pages — give it a role (e.g. "software engineer") and a location (or "remote"), or hand it direct Wellfound search URLs, and it returns the listings on the first page of that search: job title, company, funding-stage badge, location, remote flag, salary/equity range, tags, and posted date. Funding-stage-plus-role data on a startup job posting is a strong buying signal for anyone selling into growing teams.

### 🔥 Features

- 🎯 **Role + location search** — search by role/keyword and location (or "remote"), or pass direct Wellfound search URLs to bypass query construction entirely.
- 💵 **Funding stage on every row** — the company's funding-stage badge (e.g. "Early Stage", "Series B") comes back alongside every listing, not just the job details.
- 🌍 **Remote flag + compensation** — a clean boolean remote flag and the posted salary/equity range, when Wellfound publishes one.
- 🏷️ **Tags included** — company badges (industry, investor signals) plus the role title, so you can filter and segment without another lookup.
- 🛡️ **We rotate browser fingerprints** — curl-cffi impersonation (Firefox/Chrome/Safari) so Wellfound sees a real browser, not a script.
- 🔁 **We retry with exponential backoff and fresh sessions** on blocks, up to 5 attempts per search, so a temporary anti-bot wall doesn't sink the whole run.
- 🧊 **Clean, typed rows** — Pydantic-validated, ISO-8601 timestamps. Export JSON / CSV / Excel straight from the Apify Console.

### 💡 Use cases

- **SDR / recruiter prospecting** — find startups actively hiring for a specific role at a specific funding stage.
- **Talent market research** — sample how many startups are hiring for a role, and at what compensation, across a location.
- **Competitive hiring intel** — watch which funding-stage companies are scaling a given function.
- **Lead scoring inputs** — feed funding stage + hiring signal into a CRM or lead-scoring pipeline.
- **ATS / job-board aggregation** — add Wellfound startup coverage next to your other job-board Actors in one pipeline.

### ⚙️ How to use it

1. Click **Try for free** at the top of the Store listing.
2. Enter a **Role / keyword** (e.g. "product manager") and, optionally, a **Location** (defaults to "remote").
3. Or paste one or more **Direct search URLs** from wellfound.com to bypass role/location entirely.
4. Set **Max results** to cap how many rows you're billed for.
5. Click **Start**. Rows stream into the dataset as the search resolves.
6. Export from **Storage → Dataset** as JSON, CSV, or Excel — or pull via the Apify API.

### 📥 Input

| Field | Type | Required | Default | Notes |
|---|---|:--:|---|---|
| `role` | `string` | no\* | `null` | Role/keyword to search, e.g. "software engineer". Slugified automatically. |
| `location` | `string` | no | `"remote"` | Location filter, e.g. "remote" or "san-francisco". |
| `searchUrls` | `array` | no\* | `[]` | Direct `wellfound.com` search URLs; bypasses role/location construction. |
| `maxItems` | `integer` | no | `50` | Cap on job listing rows emitted. |
| `proxyConfiguration` | `object` | no | `{"useApifyProxy": true}` | Apify Proxy configuration. |

\* At least one of `role` or `searchUrls` must be provided.

#### Example input

```json
{
  "role": "software engineer",
  "location": "remote",
  "maxItems": 50,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### 📤 Output

One dataset item per job listing.

| Field | Type | Notes |
|---|---|---|
| `job_title` | `string` | Job title. |
| `company` | `string` | Company name. |
| `company_stage` | `string \| null` | Funding-stage badge label (e.g. "Early Stage"), when Wellfound publishes one. |
| `location` | `string \| null` | Listing location(s), joined. |
| `remote` | `boolean` | Whether the listing is flagged remote. |
| `salary_range` | `string \| null` | Posted compensation range, when available. |
| `tags` | `array` | Company badges plus the role title. |
| `job_url` | `string` | Canonical wellfound.com job URL. |
| `posted_at` | `string \| null` | ISO-8601 posting timestamp, when available. |

#### Example output

```json
{
  "job_title": "Software Engineer",
  "company": "Keeper",
  "company_stage": "Early Stage",
  "location": "San Francisco",
  "remote": true,
  "salary_range": "$135k – $175k • 0.05% – 0.25%",
  "tags": ["B2C", "Top Investors", "Software Engineer"],
  "job_url": "https://wellfound.com/jobs/3317746-software-engineer",
  "posted_at": "2026-07-27T02:38:57+00:00"
}
```

### 💰 Pricing

Pay-Per-Event — you're charged only when these fire:

| Event | USD | What it covers |
|---|---:|---|
| `actor-start` | $0.20 | One-off warm-up per run |
| `result` | $0.0015 | Per job listing written to the dataset |

**Example**: at that rate 1 000 listings ≈ **$1.70**, accumulated across runs — see Limitations for how many one search returns. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

### 🚧 Limitations

- **One page per search** — v1 fetches the first page of results per role/location combination; pagination is a planned addition.
- **Public listings only** — the openly published search results, not authenticated saved-search or apply flows.
- **City-specific searches can take longer** — location-specific search routes clear Wellfound's anti-bot wall less often than remote-only searches within the shared retry budget; default to "remote" for the fastest, most reliable pull.
- **Point-in-time snapshot** — returns listings as they stand now; schedule recurring runs to track changes.

### ❓ FAQ

**Do I need a Wellfound account?**

No — every field comes from Wellfound's own public search results pages.

**What's `company_stage`?**

The startup's funding-stage badge as published on Wellfound (e.g. "Early Stage", "Series B"). It's `null` when a company hasn't set one.

**Can I search a specific city instead of remote?**

Yes — set `location` to a city name. Remote searches clear Wellfound's anti-bot wall more reliably than city-specific ones, so a city search may return fewer results per run.

**Is this legal?**

We fetch public, unauthenticated job-listing data that Wellfound publishes for job seekers. No login, no private endpoints.

### 💬 Your feedback

Spotted a bug, hit a role that behaves differently, or need an extra field? Open an issue on the Actor's **Issues** tab in Apify Console — we ship fixes weekly and read every report.

***

<div align="center">

Built by **[Devil Scrapes](https://apify.com/DevilScrapes)** 😈 — a small fleet of
opinionated public-data Actors. Honest pricing, real engineering, zero fine print.

</div>

# Actor input Schema

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

Role or keyword to search, e.g. "software engineer". Slugified automatically before use. At least one of `role` or `searchUrls` is required.

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

Optional location filter, e.g. "remote" or "san-francisco". "remote" routes to the all-locations search; anything else routes to a city-specific search.

## `searchUrls` (type: `array`):

Direct wellfound.com search URLs. When provided, bypasses role/location construction entirely.

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

Maximum number of job listing rows to emit across all requested targets. v1 fetches ONE page per target (see the README's Limitations), so a single role/location search cannot exceed that page's listing count no matter how high this is set — raise it by adding more targets via searchUrls, not by raising this alone.

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

Apify Proxy configuration. Defaults to RESIDENTIAL/US — the tier+country the 2026-08-26 shelf probe confirmed clears the target's anti-bot wall cleanly (20/20 pages, 705 rows, no degradation at depth).

## Actor input object example

```json
{
  "role": "software engineer",
  "location": "remote",
  "searchUrls": [],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

All dataset items as JSON.

## `datasetItemsCsv` (type: `string`):

Same data exported to CSV.

## `datasetView` (type: `string`):

Open the run dataset in the Console.

# 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 = {
    "role": "software engineer",
    "location": "remote",
    "searchUrls": [],
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("devilscrapes/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 = {
    "role": "software engineer",
    "location": "remote",
    "searchUrls": [],
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("devilscrapes/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 '{
  "role": "software engineer",
  "location": "remote",
  "searchUrls": [],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call devilscrapes/wellfound-jobs-scraper --silent --output-dataset

```

## MCP server setup

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