# VC Portfolio Companies Scraper (`tidyharvest/vc-portfolio-companies-scraper`) Actor

Portfolio companies of 410+ VC firms and accelerators (a16z, Sequoia, Accel, Index, Techstars...): investors, funding stage, headcount, industries, locations, website, open jobs. Quick run: 278 firms in ~7 min; full: all 415 in ~25. Merge by company for every investor. $2 per 1,000.

- **URL**: https://apify.com/tidyharvest/vc-portfolio-companies-scraper.md
- **Developed by:** [TidyHarvest](https://apify.com/tidyharvest) (community)
- **Categories:** Lead generation, Jobs
- **Stats:** 3 total users, 2 monthly users, 40.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.
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

## VC Portfolio Companies Scraper

Get the **portfolio companies of 410+ venture capital firms and accelerators** worldwide, straight from the portfolio
directories the firms publish: **a16z, Sequoia, Accel, General Catalyst, Lightspeed, GV, NEA, Bessemer, Insight,
Khosla, Kleiner Perkins, Greylock, Index Ventures, Founders Fund, Techstars, Antler, Seedcamp, Balderton, Atomico, Peak XV, Kaszek** and
hundreds more across the US, Europe, the UK, Israel, India, Southeast Asia, LatAm, Africa and Australia.

Each company comes with its **investors, latest funding stage, headcount, industries, office locations, website,
description, logo and number of open jobs**, and optionally the open roles themselves. Type a firm name, pick from the
list, or run every board at once and get one row per company with all its investors.

### What you can do with it

- **Build a startup list or CRM import:** every company backed by a set of firms, with website domains for enrichment.
- **Map who backs whom:** turn on *Merge by company* to get `investors: [...]` per company; see which startups share
  investors, which firms co-invest, and where a firm's portfolio clusters by stage and sector.
- **Find startups by sector and stage:** "Series A AI companies backed by top firms in Europe" is three filters.
- **Sales and recruiting signals:** `jobCount` shows who is hiring now; *Include open jobs* adds the roles.
- **Deal sourcing and market maps:** compare portfolios across firms, regions and accelerators.

### Input

| Field | What it does |
|---|---|
| `firms` | Pick firms and accelerators from the list (410+). |
| `boardUrls` | Type a firm name ("a16z", "Sequoia") or paste any portfolio jobs board URL. Boards not in the list are detected automatically. |
| `allBoards` | Every firm in the list. Narrow with `regions` (US, Europe, UK, Israel, India, SEA, LatAm, ...) and `kinds` (VC, accelerator, angel network). |
| `runMode` | With `allBoards`: **quick** (default) reads 278 firms in about 7 minutes; **full** reads all 415 and takes about 25 minutes (137 smaller directories are read slowly so they keep answering). Firms you pick by name always run. |
| `mergeByCompany` | One row per company (matched by website domain) with every selected firm in `investors`. |
| `keywords` | Keep companies whose name, description or industries mention one of these ("AI", "fintech", "climate"). |
| `stages` | Latest funding stage: Pre-Seed, Seed, Series A ... IPO, Acquired. |
| `countries` | Companies with an office in these countries. |
| `hiringOnly` | Skip companies with no open roles. |
| `includeJobs`, `maxJobsPerCompany`, `jobKeyword`, `remoteJobsOnly` | Attach open roles (title, location, remote, salary, posted date, apply link). |
| `maxItems` | Hard cap on companies (and cost). |

Examples:

```json
{ "firms": ["a16z", "sequoia", "accel"] }
```

```json
{ "allBoards": true, "regions": ["Europe", "UK"], "mergeByCompany": true, "keywords": ["AI"], "stages": ["Seed", "Series A"] }
```

```json
{ "boardUrls": ["https://jobs.example.vc"], "includeJobs": true, "jobKeyword": "engineer", "maxJobsPerCompany": 20 }
```

### Output

One item per company per firm (or per company with *Merge by company*):

```json
{
  "companyName": "Databricks", "companyDomain": "databricks.com", "website": "https://databricks.com",
  "description": "Databricks is the data and AI company...", "logoUrl": "https://...",
  "hqLocation": "San Francisco, United States", "locations": ["San Francisco, United States"],
  "countries": ["United States"], "industries": ["Enterprise", "Infra"], "stage": "Series J",
  "headcount": 14475, "headcountRange": "5K-10K", "jobCount": 898,
  "firm": "Andreessen Horowitz", "firmKey": "a16z", "region": "US",
  "boardUrl": "https://jobs.a16z.com", "companyUrl": "https://jobs.a16z.com/company/databricks"
}
```

With *Merge by company* each row also has `investors` (the selected firms that list the company), `investorCount`,
`boards` (per firm: stage, job count, company page) and `allKnownInvestors` (adds co-investors the boards name).
Fields a board does not publish are `null` or `[]`: exact `headcount` and `hqLocation` are on some boards only,
`headcountRange` is on almost all. `coInvestors` lists every investor a board names for the company, where it does.

### How well it works (October 2026)

Measured on Apify over 392 boards (October 2026):

- **26,583 distinct companies** from one run over every board (39,510 company-firm rows); **7,382 companies are backed
  by two or more of the listed firms**, 616 by five or more.
- Field coverage across those companies: website domain 99%, description 98%, logo 99%, industries 96%,
  headcount band 94%, office locations 92%, countries 89%, funding stage 70%, exact headcount 52%, open-job count 100%.
- About 9,100 of them are AI companies by their own industry labels or description.
- Against the firms' own portfolio pages: the directory has 62% of the 217 current companies on usv.com (plus 25 the
  page doesn't show), 71% of the 317 on seedcamp.com (plus 54 more), and 42% of the 162 on greylock.com (that page
  also counts exits). Directories focus on active companies.
- Run times on Apify (October 2026): quick, 278 firms, 32,436 company rows in 7 minutes; full, all 415 firms,
  41,408 rows (27,440 distinct companies) in 23-24 minutes, two runs in a row with no pauses and no board left out.
- Open jobs: 14,842 roles for the 649 hiring Sequoia and Accel companies in one 3-minute run.

### Quick and full runs

- **Quick** (default): 278 firms, about 7 minutes for the whole list. Every major firm is in it.
- **Full**: all 415 firms, about 25 minutes. The extra 137 are smaller investor directories that only answer at a slow
  pace; the run reads them one at a time and, if asked to slow down, pauses and carries on rather than skipping them.
  If a directory still asks it to slow down, the run pauses (10 to 30 minutes at a time, about 2 hours at most) and
  then continues. Long runs are restart-safe: if the platform moves the run, it continues where it stopped and never returns (or
  charges) a company twice.

### Pricing

Pay per result: **$2.00 per 1,000 companies** (`company-scraped`). Open jobs, when you turn them on, are
**$0.50 per 1,000 jobs** (`job-included`). Filters and caps apply before you are charged, and boards that can't be read
are free. A run that finds nothing fails instead of silently returning an empty dataset.

### Limits and notes

- Covers firms whose portfolio directory is public. Firms that only list companies on their own website (for example
  Benchmark, Tiger Global, Y Combinator) are not in the list; paste a board URL if you know one.
- 137 smaller directories limit how often they answer, so they are read only in a full run (or when you pick them by
  name). A board that can't be read in a run is listed in the run's SUMMARY record and costs nothing.
- A firm's directory lists the companies it chose to show (mostly active ones), so counts can differ from the firm's own
  portfolio page; see "How well it works".
- Stage is the latest funding stage the board shows; headcount is the board's figure, not a live count.
- With open jobs on, companies found only in the 137 smaller directories add a few seconds each to a run.
- Some a16z jobs: at most the 25 newest roles per company are returned (`jobsTruncated: true` when there are more).
- Public data only, no login. Company profiles are business information the firms publish themselves.

# Actor input Schema

## `firms` (type: `array`):

Pick one or more of the 415 venture firms and accelerators in the list. Each returns its whole public portfolio company list.

## `boardUrls` (type: `array`):

Type a firm name ("a16z", "Sequoia", "Index Ventures") or paste the URL of any portfolio jobs board, e.g. https://jobs.example.vc. Boards not in the list are detected automatically.

## `allBoards` (type: `boolean`):

Scrape every firm in the list (optionally only the regions / kinds below). Turn on 'Merge by company' to get one row per company with all its investors.

## `runMode` (type: `string`):

With All boards. Quick: 278 firms, about 7 minutes. Full: all 415 firms, takes about 25 minutes: 137 smaller directories are read slowly so they keep answering, and the run pauses and resumes if one asks it to slow down (up to about 2 hours then). Firms you pick by name always run, in either mode.

## `regions` (type: `array`):

Only firms based in these regions. Empty = all regions.

## `kinds` (type: `array`):

Only these kinds of investor. Empty = all.

## `mergeByCompany` (type: `boolean`):

One row per company (matched by website domain) with `investors` = every selected firm that lists it. Off = one row per company per firm.

## `keywords` (type: `array`):

Keep a company only if its name, description or industry labels contain one of these, e.g. "AI", "fintech", "climate". Empty = all.

## `stages` (type: `array`):

Only companies at these latest funding stages. Empty = all (including companies with no stage listed).

## `countries` (type: `array`):

Only companies with an office in one of these countries (English names, e.g. "United States", "Germany", "India"). Empty = all.

## `hiringOnly` (type: `boolean`):

Skip companies with no open roles on the board.

## `includeJobs` (type: `boolean`):

Attach each company's open roles (title, location, remote, salary, posted date, apply link) as `jobs`. Charged per job attached.

## `maxJobsPerCompany` (type: `integer`):

Cap on jobs attached per company (with Include open jobs). 0 = all.

## `jobKeyword` (type: `string`):

With Include open jobs: only jobs whose title contains this, e.g. "engineer".

## `remoteJobsOnly` (type: `boolean`):

With Include open jobs: only fully remote roles.

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

Hard cap on company rows for the whole run (also caps your cost). 0 or empty = no limit.

## Actor input object example

```json
{
  "firms": [
    "a16z"
  ],
  "allBoards": false,
  "runMode": "quick",
  "mergeByCompany": false,
  "hiringOnly": false,
  "includeJobs": false,
  "maxJobsPerCompany": 50,
  "remoteJobsOnly": false,
  "maxItems": 50
}
```

# Actor output Schema

## `companies` (type: `string`):

Portfolio companies with firm, stage, headcount, industries, locations and (optionally) open jobs.

## `summary` (type: `string`):

Boards read, companies per board, and boards that could not be read.

# 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 = {
    "firms": [
        "a16z"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("tidyharvest/vc-portfolio-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 = {
    "firms": ["a16z"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("tidyharvest/vc-portfolio-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 '{
  "firms": [
    "a16z"
  ],
  "maxItems": 50
}' |
apify call tidyharvest/vc-portfolio-companies-scraper --silent --output-dataset

```

## MCP server setup

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