# Wellfound Companies Scraper - $1.40 / 1000 Companies (`scrapeunblocker/wellfound-companies-scraper`) Actor

Scrape Wellfound (AngelList) startup profiles: description, size, stage, markets, locations, website and social links, total raised and funding rounds, founders, perks, open jobs and similar companies. Or list the startup directory by location or industry. $1.40 / 1000 companies.

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

## Pricing

from $1.40 / 1,000 companies

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 Companies Scraper

Scrape **Wellfound (formerly AngelList) startup profiles** as clean structured JSON: name, tagline, full description, logo, website, Twitter / LinkedIn / Facebook / blog / Product Hunt links, company size, stage, badges ("YC Funded", "Top Investors", "Valuation $1B+"...), markets, locations, company types, hiring status, open jobs with a per-role breakdown, total raised, funding rounds with dates, founders and past founders (name, profile, role, bio, location), perks, media, the first open jobs and similar companies.

Or **list Wellfound's startup directory** by location or industry - optionally with every company's full profile.

### Features

- **Company profiles** - from a Wellfound company URL or its slug (`stripe`, `chalk-ai`).
- **Startup directory by location** - `new york`, `san-francisco`, `london`, `berlin`...
- **Startup directory by industry** - `saas`, `artificial-intelligence`, `e-commerce`, `fintech-2`...
- **Directory + full profiles** - turn on `fetchProfiles` to get the full profile of every directory company in one run.
- **Deep paging** - up to 1000 companies per directory search; the `SEARCHES` record tells the total on Wellfound and the page to continue from.
- **Deduplicated** - a company given twice, or found in several directories, is returned and billed once (it still counts toward each directory's limit).

### Use cases

- **Lead generation** - startups by city or industry with website, size, stage, markets and social links.
- **Investor and market research** - total raised, funding rounds, founders and similar companies.
- **Recruiting intelligence** - who is hiring, how many open jobs per role, and the perks they offer.
- **CRM enrichment** - add Wellfound data to a list of startups.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `companies` | array | - | Wellfound company URLs or slugs. |
| `locations` | array | - | Directory locations as text or slug. |
| `industries` | array | - | Directory industry slugs. |
| `maxResultsPerSearch` | integer | `10` | Companies per location / industry (1-1000). |
| `fetchProfiles` | boolean | `false` | Fetch the full profile of every directory company. |
| `proxyCountry` | string | - | ISO-2 country to send requests from. |

All three lists can be combined. A run with none of them uses two example companies.

#### Example input

```json
{
  "companies": ["https://wellfound.com/company/stripe", "gustohq"],
  "locations": ["new york"],
  "industries": ["artificial-intelligence"],
  "maxResultsPerSearch": 20,
  "fetchProfiles": false
}
```

### Output

One dataset item per company. A full profile (`source: "profile"`, shortened):

```json
{
  "id": "37232",
  "name": "Stripe",
  "slug": "stripe",
  "url": "https://wellfound.com/company/stripe",
  "tagline": "A new, comprehensive and clean standard for online payment processing",
  "companySize": "5000+",
  "stage": "Scale Stage",
  "badges": ["Actively Hiring", "B2B", "Scale Stage", "Top Investors", "YC Funded", "Valuation $1B+"],
  "website": "https://stripe.com",
  "linkedInUrl": "http://www.linkedin.com/company/stripe",
  "markets": ["Internet", "SaaS", "Payments", "Developer APIs"],
  "locations": ["San Francisco", "New York City", "London", "Dublin"],
  "hiring": true,
  "openJobs": 133,
  "openJobsByRole": [{"role": "Engineering", "count": 67}, {"role": "Designer", "count": 7}],
  "totalRaised": 8138000000,
  "fundingRoundsCount": 15,
  "fundingRounds": [{"type": "Series I", "date": "2023-03-16", "valuation": null}],
  "founders": [{"name": "John Collison", "url": "https://wellfound.com/p/collision", "role": "Founder"}],
  "perks": [{"category": "healthcare", "title": "Inclusive coverage", "description": "..."}],
  "jobs": [{"title": "Engineering Manager, Mobile Development Productivity", "url": "https://wellfound.com/jobs/4811558-..."}],
  "jobsTotal": 133,
  "similarCompanies": [{"name": "AngelList", "slug": "angellist", "url": "https://wellfound.com/company/angellist"}],
  "source": "profile",
  "input": "stripe"
}
```

A directory record (`source: "directory"`, without `fetchProfiles`):

```json
{
  "name": "Gusto",
  "slug": "gustohq",
  "url": "https://wellfound.com/company/gustohq",
  "tagline": "Integrated Payroll, Benefits, HR, Tax Credits, and more",
  "companySize": "501-1000",
  "stage": "Scale Stage",
  "badges": ["Actively Hiring", "B2B", "YC Funded", "Valuation $1B+"],
  "website": "https://www.gusto.com/",
  "description": "Gusto is a modern, online people platform that helps small businesses take care of their teams...",
  "markets": ["SaaS", "Financial Services", "Human Resources"],
  "locations": ["Denver", "New York City", "San Francisco"],
  "openJobs": 12,
  "openJobsByRole": [{"role": "Engineering", "count": 5}],
  "source": "directory",
  "search": {"location": "new york"},
  "position": 1
}
```

The key-value store also holds:

- `SEARCHES` - per location / industry: total companies on Wellfound, page count, companies listed and delivered, pages fetched and `nextPage` to continue from.
- `ERRORS` - companies, locations or industries that returned nothing (unknown slug, no directory, blocked) with the reason. These are **not billed**.

### Pricing

**$1.40 per 1000 companies** - a full profile and a directory record cost the same. You pay only for companies delivered; failed inputs are not charged.

### Notes

- Company profiles sit behind a bot challenge on Wellfound, so a profile can take up to about a minute; directory pages are fast.
- Industry directories use Wellfound's own slugs, and some carry a suffix (`fintech-2`). An unknown slug ends in `ERRORS` - copy the slug from a wellfound.com/startups/industry/... page.

# Actor input Schema

## `companies` (type: `array`):

Wellfound company pages (https://wellfound.com/company/stripe) or their slugs (stripe, chalk-ai). One full profile per company. Empty runs use the examples only when Locations and Industries are empty too.

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

List the startups Wellfound has in a location, as text or slug: 'new york', 'san-francisco', 'london', 'berlin'. Each location is its own directory search.

## `industries` (type: `array`):

List the startups of an industry, as Wellfound's industry slug: 'saas', 'artificial-intelligence', 'e-commerce', 'fintech-2'. Use the last part of a wellfound.com/startups/industry/<slug> page: some industries carry a suffix ('fintech-2', not 'fintech').

## `maxResultsPerSearch` (type: `integer`):

How many companies to list for each location or industry (1-1000). The directory shows 10 companies per page. A company another input already returned counts here but is returned (and billed) once.

## `fetchProfiles` (type: `boolean`):

Off: each directory company is a directory record (name, tagline, website, description, size, stage, badges, markets, locations, open jobs by role). On: each one is fetched as a full profile (funding rounds, founders, perks, social links, open jobs, similar companies). Either way you pay per company returned; a company found twice is returned once.

## `proxyCountry` (type: `string`):

Country the requests are sent from (ISO-2, e.g. 'US', 'DE'). Leave blank for the best default.

## Actor input object example

```json
{
  "companies": [
    "stripe",
    "https://wellfound.com/company/chalk-ai"
  ],
  "maxResultsPerSearch": 10,
  "fetchProfiles": false
}
```

# Actor output Schema

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

One item per company, with `source` = profile (full profile) or directory (directory record)

## `searches` (type: `string`):

Per location or industry: total companies on Wellfound, companies collected, pages fetched and the page to continue from

## `errors` (type: `string`):

Companies, locations or industries that returned nothing (unknown slug, no directory, or blocked), with the reason (not billed)

# 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 = {
    "companies": [
        "stripe",
        "https://wellfound.com/company/chalk-ai"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeunblocker/wellfound-companies-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 = { "companies": [
        "stripe",
        "https://wellfound.com/company/chalk-ai",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("scrapeunblocker/wellfound-companies-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 '{
  "companies": [
    "stripe",
    "https://wellfound.com/company/chalk-ai"
  ]
}' |
apify call scrapeunblocker/wellfound-companies-scraper --silent --output-dataset

```

## MCP server setup

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