# Startup Investors Scraper — OpenVC VCs, Angels & Check Size (`khadinakbar/startup-investors-scraper`) Actor

Scrape public OpenVC investor lists for startup fundraising: VC firms, angels, family offices, and accelerators with check size, stages, thesis, geographies, and profile links. Cookieless. MCP-ready.

- **URL**: https://apify.com/khadinakbar/startup-investors-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, Automation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $25.00 / 1,000 investor founds

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/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

## Startup Investors Scraper — OpenVC VCs, Angels & Check Size

Founders, fundraising ops, and AI agents extract one structured OpenVC investor **dataset row** per fund — name, type, check size with USD bounds, stages, thesis, geographies, lead flag, and profile URL — from a sector keyword, list slug, or OpenVC list URL. Built for fundraising shortlists on Apify with API, schedules, and MCP. Cookieless public lists; OpenVC login is out of scope.

OpenVC is a trademark of its owner. This independent Actor is not affiliated with, associated with, or endorsed by OpenVC.

### Best fit for this Actor

- Build a fundraising shortlist from public OpenVC sector lists such as `ai-investors` or `fintech-investors`.
- Filter for lead-capable funds, stage coverage, geography, or check-size text before outreach.
- Feed MCP or CRM workflows with one clean row per investor and honest empty outcomes.

When you need company-website → LinkedIn company matching instead of investor directories, continue with [LinkedIn Company Finder from Website](https://apify.com/khadinakbar/linkedin-company-finder-from-website). For public LinkedIn company search by keyword, continue with [LinkedIn Company Search Scraper](https://apify.com/khadinakbar/linkedin-company-search-scraper).

### Practical scenario

A seed-stage founder pastes `["ai-investors"]`, sets `leadOnly` to true, and caps `maxInvestors` at 25. The dataset returns VC firms and angels with `checkSizeMinUsd` / `checkSizeMaxUsd`, stages, thesis, and `profileUrl`. They export CSV, keep funds that lead rounds, and draft a target list. Unknown or empty lists finish `SUCCEEDED` with `VALID_EMPTY` and no `investor-found` charge. When every upstream route returns zero investors, the Actor completes with outcome UPSTREAM\_FAILED so charges stay tied to real rows.

### Quick start input

```json
{
  "lists": ["ai-investors"],
  "maxInvestors": 25,
  "leadOnly": true
}
```

### Input reference

| Field | Type | What it controls |
|---|---|---|
| `lists` | array | Required. OpenVC keywords (`ai` → `ai-investors`), slugs (`fintech-investors`, `angel-groups`), or full OpenVC investor-list URLs. |
| `investorTypes` | array | Optional contains-match on type (e.g. `VC firm`, `Angel`). |
| `stages` | array | Optional contains-match on stage text (e.g. `Early Revenue`, `Scaling`). |
| `geographies` | array | Optional contains-match on geography (e.g. `USA`, `France`). |
| `checkSizeContains` | array | Optional contains-match on check-size text (e.g. `$1M`). |
| `leadOnly` | boolean | When true, keep Lead = Always / Yes / Sometimes (not Never). |
| `maxInvestors` | integer | Cap 1–5000. Default 100. |
| `proxyConfiguration` | object | Optional Apify proxy override. Residential is used for browser fallback. |

### What data you receive

One dataset item is one public OpenVC investor row.

```json
{
  "investorId": "bonfire-ventures",
  "name": "Bonfire Ventures",
  "investorType": "VC firm",
  "profileUrl": "https://www.openvc.app/investor-lists/fund/Bonfire%20Ventures",
  "geographies": ["USA"],
  "checkSizeText": "$2M to $6M",
  "checkSizeMinUsd": 2000000,
  "checkSizeMaxUsd": 6000000,
  "stages": ["Early Revenue", "Scaling"],
  "lead": "Always",
  "thesis": "We invest in exclusively AI-native B2B software...",
  "listSlug": "ai-investors",
  "source": "OpenVC",
  "scrapedAt": "<iso8601>"
}
```

| Field | Meaning |
|---|---|
| `name` / `investorType` | Display name and type label from the list table |
| `checkSizeText` / `checkSizeMinUsd` / `checkSizeMaxUsd` | Displayed range plus parsed USD bounds when parseable |
| `stages` / `geographies` | Arrays of stage and geo labels |
| `lead` | Lead behavior when the list exposes it |
| `thesis` / `profileUrl` | Thesis text and OpenVC profile link |
| `listSlug` / `source` | Provenance for the row |

`OUTPUT` and `RUN_SUMMARY` in the default key-value store hold `outcome`, `itemsPushed`, and `chargedEventCounts`. Download the dataset as JSON, CSV, Excel, or HTML.

### Use through the API

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~startup-investors-scraper/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"lists":["ai-investors"],"maxInvestors":10,"leadOnly":true}'
```

### Use with AI agents through Apify MCP

> Scrape OpenVC list ai-investors for up to 15 lead investors. Return name, investorType, checkSizeText, checkSizeMinUsd, checkSizeMaxUsd, stages, geographies, thesis, profileUrl, and listSlug. Read OUTPUT.outcome and itemsPushed. Treat VALID\_EMPTY as a real empty directory, not a hollow success.

Connect via <https://mcp.apify.com>. Cost signal: about `$0.025` per saved investor plus platform usage.

### Connect the workflow

- For website → LinkedIn company page matching, continue with [LinkedIn Company Finder from Website](https://apify.com/khadinakbar/linkedin-company-finder-from-website).
- For LinkedIn company search by keyword, continue with [LinkedIn Company Search Scraper](https://apify.com/khadinakbar/linkedin-company-search-scraper).
- For public LinkedIn profile detail enrichment after you shortlist partners, continue with [LinkedIn Profile Details Scraper](https://apify.com/khadinakbar/linkedin-profile-details-scraper).

### Pricing

This Actor uses Pay per event plus Apify platform usage. The live Pricing tab is the current source of truth for billing details.

| Event | Price |
|---|---:|
| Actor start (`apify-actor-start`) | $0.00005 |
| Investor found (`investor-found`) | $0.025 |

Invalid input and valid-empty runs skip the investor-found event. Platform usage (compute, Unblocker, Residential) is passed through to the caller.

### Best results

- Prefer concrete list slugs (`ai-investors`, `climate-tech-investors`, `angel-groups`) over vague keywords when you already know the OpenVC list.
- Keep `maxInvestors` tight for agent cost control.
- Use filters after you confirm the list returns rows; over-filtering a small page can finish `VALID_EMPTY` honestly.

### Builder's note

I built the fetch path after I found that OpenVC list pages sit behind Cloudflare and render investors in a DataTables `#results_tb` grid. In my testing, Apify Unblocker usually returns the first HTML page for cheerio parsing; when the page is challenged or you need more than the first table page, Camoufox on Residential expands or paginates the grid. I learned that exact OpenVC slugs such as `angel-groups` must stay as-is — rewriting them to `angel-groups-investors` yields an empty directory page.

### FAQ and responsible use

**Crunchbase or PitchBook parity?** This Actor covers public OpenVC list fields only. Private emails and proprietary contact graphs stay outside the contract.

**Cloudflare challenges?** OpenVC is protected. The Actor retries Unblocker, then Camoufox. When every route returns zero investors, the Actor completes with outcome UPSTREAM\_FAILED so billing stays coupled to real rows.

**Legal / responsible use:** Comply with OpenVC terms, applicable laws, and outreach rules. Not investment, legal, or fundraising advice. OpenVC is a trademark of its owner. This independent Actor is not affiliated with, associated with, or endorsed by OpenVC.

Support: use the Issues tab on the Actor page.

# Actor input Schema

## `lists` (type: `array`):

OpenVC lists to scrape. Pass a sector keyword (ai → ai-investors), a full slug (fintech-investors), or a full https://www.openvc.app/investor-lists/... URL. Each list yields public investor rows with check size and thesis.

## `investorTypes` (type: `array`):

Optional. Keep investors whose type contains one of these strings (e.g. VC firm, Angel, Family office, Accelerator).

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

Optional. Keep investors covering a stage that contains one of these (e.g. Prototype, Early Revenue, Scaling, Seed, Series A).

## `geographies` (type: `array`):

Optional. Keep investors targeting a country/region that contains one of these (e.g. USA, France, Europe).

## `checkSizeContains` (type: `array`):

Optional. Keep investors whose check-size text contains one of these (e.g. $500k, $1M).

## `leadOnly` (type: `boolean`):

If true, keep only investors that lead rounds (Lead = Yes/Always/Sometimes — excludes Never/No).

## `maxInvestors` (type: `integer`):

Maximum investor rows to return across all lists. Each persisted row charges $0.025. Prefill 10 keeps quality tests cheap.

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

Optional Apify Proxy override. Default uses Unblocker then Residential Camoufox for Cloudflare.

## Actor input object example

```json
{
  "lists": [
    "ai-investors"
  ],
  "leadOnly": false,
  "maxInvestors": 10
}
```

# Actor output Schema

## `investors` (type: `string`):

One row per OpenVC investor that matched filters.

## `output` (type: `string`):

Final outcome, itemsPushed, and chargedEventCounts.

## `runSummary` (type: `string`):

Routes, blocked lists, billing counters, and diagnostics.

# 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 = {
    "lists": [
        "ai-investors"
    ],
    "maxInvestors": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/startup-investors-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 = {
    "lists": ["ai-investors"],
    "maxInvestors": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/startup-investors-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 '{
  "lists": [
    "ai-investors"
  ],
  "maxInvestors": 10
}' |
apify call khadinakbar/startup-investors-scraper --silent --output-dataset

```

## MCP server setup

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