# PitchBook Fund Data Scraper (`automation-lab/pitchbook-fund-data-scraper`) Actor

Extract public PitchBook fund profiles into structured strategy, size, vintage, manager, domicile, activity-count, and source data for screening and due diligence.

- **URL**: https://apify.com/automation-lab/pitchbook-fund-data-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Business, Lead generation
- **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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## PitchBook Fund Data Scraper

Extract structured public fund metadata from PitchBook fund profile URLs or IDs. The Actor returns fund identity, strategy, status, size, vintage, manager, category, domicile, public activity counts, manager location, and canonical source links without requiring PitchBook credentials.

Use it to turn a fund watchlist into an integration-ready dataset for screening, due diligence, market mapping, CRM enrichment, or periodic refreshes.

### What does PitchBook Fund Data Scraper do?

The Actor visits the public PitchBook profile for each supplied fund and extracts the useful information visible to an anonymous visitor.

It supports:

- full PitchBook fund profile URLs;
- bare fund IDs such as `11295-73F`;
- mixed URL and ID batches;
- automatic normalization and deduplication;
- bounded retries with fresh proxy sessions;
- structured error rows for inputs that cannot be extracted;
- JSON, CSV, Excel, XML, RSS, and API exports through the Apify dataset.

V1 intentionally focuses on direct fund profiles. It does not claim keyword search or whole-sitemap discovery.

### Who is this PitchBook fund scraper for?

- **Private-equity and venture-capital analysts** screening known funds.
- **Allocators and fund researchers** refreshing manager and fund watchlists.
- **Due-diligence and KYB teams** collecting public identity and location evidence.
- **Data vendors** normalizing fund profiles into repeatable feeds.
- **Business-development teams** enriching private-market account lists.
- **Developers and AI agents** that need typed fund data instead of rendered HTML.

### Why use this Actor?

PitchBook fund pages are protected against basic HTTP clients. This Actor uses a conservative browser workflow with Residential proxy sessions, blocks unnecessary media, retries transient challenges, and normalizes the page into stable field names.

The workflow is designed around practical safeguards:

1. only valid PitchBook fund URLs and IDs are accepted;
2. duplicate profiles are fetched once;
3. each successful profile is charged once;
4. failed profiles produce uncharged error rows;
5. all-failed runs return a failed status instead of silently succeeding with no data;
6. concurrency stays conservative to reduce blocking and wasted proxy traffic.

### What fund data can I extract?

| Field | Meaning |
| --- | --- |
| `recordType` | `fund` for successful profiles or `error` for failed inputs |
| `name` | Public fund name |
| `profileUrl` | Canonical PitchBook fund profile URL |
| `description` | Public fund description |
| `logoUrl` | Public fund or manager logo URL when exposed |
| `fundStrategy` | Strategy such as Buyout or Venture Capital |
| `fundStatus` | Lifecycle status such as Active or Liquidated |
| `fundSize` | Displayed committed capital |
| `vintageYear` | Fund vintage year |
| `fundCategory` | Asset class or category |
| `fundFamily` | Fund family name |
| `fundManager` | Managing firm |
| `fundManagerUrl` | PitchBook manager profile URL |
| `fundManagerWebsite` | Public manager website |
| `fundDomiciles` | Displayed domicile |
| `nativeCurrency` | Reporting currency |
| `totalInvestments` | Public investment count |
| `totalLimitedPartners` | Public limited-partner count |
| `streetAddress` | Manager street address |
| `postalCode` | Manager postal code |
| `city` | Manager city |
| `state` | Manager state or region |
| `country` | Manager or domicile country |
| `scrapedAt` | UTC extraction timestamp |

PitchBook does not expose every field for every profile. Missing public values are omitted rather than invented.

### How much does it cost to extract PitchBook fund profiles?

Pricing has two Actor events:

- **Start:** $0.005 once per run.
- **Fund profile:** $0.024031 per successful profile on the Free plan, with strictly lower per-profile rates on higher Apify plans.

Error rows have no separate profile charge. Apify platform usage and Residential proxy traffic may also apply as shown by the Console before and during a run.

Illustrative Free-plan Actor-event totals:

Free-plan Actor-event examples use the formula `start + successful profiles × fund profile`: one profile is `$0.005 + $0.024031`, ten profiles are `$0.005 + (10 × $0.024031)`, and one hundred profiles are `$0.005 + (100 × $0.024031)`.

Retries and failures can vary platform/proxy usage, so treat these as event formulas rather than a guarantee of the final run total.

### Getting started

1. Open the Actor input page.
2. Add one or more PitchBook fund profile URLs or bare IDs.
3. Keep the default Residential proxy configuration for reliable access.
4. Set `maxItems` to cap how many unique inputs are processed.
5. Run the Actor.
6. Open the **Dataset** tab to inspect or export fund and error rows.

A working input:

```json
{
  "profileUrls": [
    "11295-73F",
    "https://pitchbook.com/profiles/fund/11342-89F"
  ],
  "maxItems": 2
}
```

### Input parameters

#### `profileUrls`

Required list of PitchBook fund profile URLs or bare fund IDs.

Accepted forms:

```text
11295-73F
https://pitchbook.com/profiles/fund/11295-73F
https://www.pitchbook.com/profiles/fund/11295-73F/
```

Company, investor, person, and non-PitchBook URLs are rejected before the browser starts.

#### `maxItems`

Maximum number of unique normalized profiles to process. Default: `100`. Range: `1` to `1000`.

#### `proxyConfiguration`

Apify proxy settings. The prefilled configuration uses the `RESIDENTIAL` group. Direct and basic HTTP requests are commonly challenged by PitchBook, so changing to no proxy or an unsuitable group can reduce reliability.

#### `maxRetries`

Fresh-session retries after a challenge, timeout, or transient navigation failure. Default: `2`. Range: `0` to `5`.

#### `requestTimeoutSecs`

Maximum navigation/extraction wait for each attempt. Default: `60`. Range: `15` to `180` seconds.

### Output example

A real profile currently produces a record shaped like this:

```json
{
  "recordType": "fund",
  "name": "Thomas H. Lee Equity Partners V",
  "profileUrl": "https://pitchbook.com/profiles/fund/11295-73F",
  "description": "Thomas H. Lee Equity Partners V was a 2000 vintage buyout fund managed by Thomas H. Lee Partners.",
  "fundStrategy": "Buyout",
  "fundStatus": "Liquidated",
  "fundSize": "$6.11B",
  "vintageYear": 2000,
  "fundCategory": "Private Equity",
  "fundFamily": "Thomas H. Lee Equity Partners",
  "fundManager": "Thomas H. Lee Partners",
  "fundManagerWebsite": "https://www.thl.com/",
  "fundDomiciles": "United States",
  "nativeCurrency": "USD",
  "totalInvestments": 24,
  "totalLimitedPartners": 134,
  "city": "Boston",
  "state": "Massachusetts",
  "country": "United States",
  "scrapedAt": "2026-01-15T12:00:00.000Z"
}
```

The live source can change after this example is written.

### Error rows and failure behavior

An individual profile that exhausts retries produces:

```json
{
  "recordType": "error",
  "inputUrl": "https://pitchbook.com/profiles/fund/12345-67F",
  "error": "Profile request timed out after all retries",
  "scrapedAt": "2026-01-15T12:00:00.000Z"
}
```

Error rows are not charged as successful fund profiles. If at least one fund succeeds, the run can complete with error rows for the remaining inputs. If every input fails, the Actor exits with a failed status so automations do not mistake an empty result for success.

### Tips for reliable fund extraction

- Keep the default Residential proxy unless you have tested another compatible proxy.
- Batch related profiles instead of launching one run per URL; this spreads the start fee.
- Use canonical fund IDs ending in `F`, not investor IDs.
- Leave retry count at `2` for ordinary work.
- Increase the timeout before increasing retries when the site is responding slowly.
- Inspect `recordType` in downstream workflows.
- Schedule refreshes at a reasonable cadence; public fund data does not require minute-by-minute polling.

### Limits and unavailable data

This Actor extracts only public anonymous profile content.

It does not bypass a login or return subscription-only metrics such as private performance data, complete LP commitments, confidential contacts, fund terms, or non-public returns. It does not accept PitchBook credentials or cookies.

Direct profile input is the supported v1 scope. Keyword search, bulk sitemap crawling, and discovery by strategy or geography are not currently supported.

Source layout and anti-bot behavior can change. Per-record error output makes such changes visible to your pipeline.

### Fund screening workflow

A common screening pipeline is:

1. export known PitchBook fund URLs from your internal watchlist;
2. run this Actor in a bounded batch;
3. filter dataset rows to `recordType = fund`;
4. compare strategy, status, vintage, size, and domicile;
5. join records to your internal manager identifiers using `fundManagerUrl`;
6. route error rows to a retry or review queue;
7. store `scrapedAt` as the freshness marker.

### Due-diligence and KYB workflow

Use the Actor to collect public source evidence before deeper review:

- canonical fund identity;
- manager identity and public website;
- manager address and geography;
- category, strategy, size, status, and vintage;
- direct profile URL for source attribution;
- extraction timestamp for audit trails.

Always corroborate material investment or compliance decisions with authoritative records.

### Export and integration options

Apify datasets support:

- JSON and JSONL for data pipelines;
- CSV and Excel for analyst review;
- XML and RSS for compatible tools;
- REST API retrieval;
- webhooks after successful or failed runs;
- Zapier, Make, Google Sheets, cloud storage, and custom integrations.

Use `profileUrl` as the stable source key and `recordType` to separate usable records from operational errors.

### Run with the Apify API using cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~pitchbook-fund-data-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "profileUrls": ["11295-73F"],
    "maxItems": 1
  }'
```

Wait for the run or use the synchronous dataset endpoint when your client can tolerate the request duration.

### Run with JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/pitchbook-fund-data-scraper').call({
    profileUrls: ['11295-73F'],
    maxItems: 1,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Run with Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/pitchbook-fund-data-scraper').call(run_input={
    'profileUrls': ['11295-73F'],
    'maxItems': 1,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### Use with Apify MCP

#### Claude Code

Add this Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/pitchbook-fund-data-scraper"
```

#### Claude Desktop, Cursor, and VS Code

Use the same HTTP MCP server in Claude Desktop, Cursor, or VS Code:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/pitchbook-fund-data-scraper"
    }
  }
}
```

Example prompts:

- “Extract public fund details for PitchBook fund ID 11295-73F.”
- “Compare these three PitchBook fund URLs by strategy, vintage, size, status, and domicile.”
- “Refresh this fund watchlist and return successful records separately from errors.”

### Responsible and legal use

Use the Actor only for lawful purposes and public data you are entitled to process. Follow applicable privacy, database, intellectual-property, and contract rules. Respect PitchBook's terms and avoid excessive request volumes.

The Actor is an independent automation tool and is not affiliated with, endorsed by, or sponsored by PitchBook. PitchBook is a trademark of its respective owner.

Do not use the output as the sole basis for investment, credit, compliance, or legal decisions.

### FAQ and troubleshooting

#### Why did I receive an error row?

The profile may be invalid, removed, challenged, or temporarily unavailable. Confirm that it is a fund URL under `/profiles/fund/`, keep Residential proxy enabled, and retry later if the error is transient.

#### Why did the whole run fail?

The Actor fails when every requested profile fails. This is intentional: downstream automations should not interpret zero useful records as a successful refresh.

#### Why are some fields missing?

PitchBook exposes different public fields by profile. Missing fields are omitted rather than guessed. Subscription-only content is outside the Actor's scope.

#### Can I pass investor or company profiles?

No. V1 validates and accepts fund profiles only. This keeps the schema and buyer workflow precise.

#### Does `maxItems` override the URL list?

Yes. After URL normalization and deduplication, only the first `maxItems` profiles are processed.

#### Are retries charged as profiles?

No. The `fund` event is emitted only after a valid fund record is extracted. Proxy and platform usage can still accrue during failed attempts.

### Related Actors

- [Company Funding Tracker](https://apify.com/automation-lab/company-funding-tracker) — discover and monitor public SEC Form D fundraising filings before enriching known funds and managers.

### Support

For reproducible problems, open an Actor issue with:

- the affected public fund URL or ID;
- the run link;
- whether the default Residential proxy was enabled;
- the relevant error row;
- the approximate time of the failure.

Do not include private credentials, cookies, or subscription-only data.

# Actor input Schema

## `profileUrls` (type: `array`):

PitchBook fund profile URLs or bare fund IDs such as 11295-73F. Duplicate profiles are processed once.

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

Maximum number of unique input profiles to process in this run.

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

Residential proxy is recommended because PitchBook challenges direct and datacenter traffic.

## `maxRetries` (type: `integer`):

Number of fresh proxy sessions to try after a challenge or transient navigation failure.

## `requestTimeoutSecs` (type: `integer`):

Maximum navigation and extraction wait for each attempt.

## Actor input object example

```json
{
  "profileUrls": [
    "https://pitchbook.com/profiles/fund/11295-73F"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "maxRetries": 2,
  "requestTimeoutSecs": 60
}
```

# Actor output Schema

## `overview` (type: `string`):

Default dataset with the fund overview view applied.

# 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 = {
    "profileUrls": [
        "https://pitchbook.com/profiles/fund/11295-73F"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/pitchbook-fund-data-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 = {
    "profileUrls": ["https://pitchbook.com/profiles/fund/11295-73F"],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/pitchbook-fund-data-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "profileUrls": [
    "https://pitchbook.com/profiles/fund/11295-73F"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call automation-lab/pitchbook-fund-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/pitchbook-fund-data-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/Wg23OJWdteBKEWYzB/builds/fsA11CSds2mhKitVz/openapi.json
