# PitchBook Company Profiles Scraper (`automation-lab/pitchbook-companies-scraper`) Actor

Extract public PitchBook company profiles with identity, description, industry, location, status, ownership, financing, and exposed deal facts.

- **URL**: https://apify.com/automation-lab/pitchbook-companies-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 Company Profiles Scraper

Extract structured public facts from **PitchBook companies** pages for private-market research, company screening, CRM enrichment, and recurring profile monitoring.

Provide exact PitchBook company profile URLs or IDs. The Actor opens each public profile through a residential browser session and returns one typed dataset row per successfully extracted company.

### What does this Actor do?

PitchBook Company Profiles Scraper converts public `/profiles/company/` pages into analysis-ready JSON.

It extracts fields that are visibly exposed without a PitchBook login, including:

- company identity and PitchBook ID;
- public profile description;
- founding year, status, and employee count when exposed;
- ownership and financing status;
- primary industry, other industries, and verticals;
- city, state or region, country, and postal address fields;
- website, stock symbol, share price, and investment count when public;
- the latest public investment or acquisition snippet when present;
- canonical profile URL and extraction timestamp.

The Actor does not bypass a paywall or claim premium PitchBook fields that are not visible on the public profile.

### Who is it for?

#### Private-market researchers

Refresh a sourced company list without manually copying profile facts.

#### Investment and corporate development teams

Create a first-pass comparison table for companies already identified in PitchBook.

#### Data and RevOps teams

Enrich internal company records with public source-specific industries, location, and status fields.

#### Analysts building monitors

Schedule the same input and compare dataset exports over time to detect public profile changes.

### Why use this PitchBook scraper?

- **Source-specific output:** every row retains the canonical PitchBook profile and company ID.
- **Public-field discipline:** missing premium fields stay absent rather than being guessed.
- **Typed data:** numeric fields such as employees and founding year are normalized.
- **Reliable session handling:** challenged browser sessions are retired and retried within a bounded limit.
- **Bulk input:** process several exact company URLs or IDs in one run.
- **Automation-ready:** use Apify schedules, webhooks, API clients, integrations, or MCP.

### What company data is extracted?

| Field | Type | Meaning |
| --- | --- | --- |
| `recordType` | string | Always `company` |
| `companyId` | string | PitchBook profile identifier |
| `name` | string | Public company name |
| `profileUrl` | URL | Canonical PitchBook profile |
| `description` | string | Public General Information description |
| `yearFounded` | integer | Public founding year |
| `status` | string | Public/private/acquired status shown in overview |
| `employees` | integer | Public employee estimate, if shown |
| `stockSymbol` | string | Public ticker, if shown |
| `investments` | integer | Public overview investment count |
| `sharePrice` | string | Displayed share-price text for public companies |
| `website` | URL | Company website when exposed |
| `formerlyKnownAs` | string | Previous public company name |
| `ownershipStatus` | string | Public ownership classification |
| `financingStatus` | string | Public financing classification |
| `primaryIndustry` | string | Primary PitchBook industry |
| `otherIndustries` | string\[] | Additional public industries |
| `verticals` | string\[] | Public vertical tags |
| `streetAddress` | string | Public office street address |
| `postalCode` | string | Public postal code |
| `city` | string | Headquarters city |
| `state` | string | State or region |
| `country` | string | Country |
| `latestDealSnippet` | string | Latest visible investment/acquisition sentence |
| `scrapedAt` | date-time | UTC extraction time |

Optional fields are omitted when PitchBook does not expose them publicly.

### How to get started

1. Open a public PitchBook company profile in your browser.
2. Copy its URL, such as `https://pitchbook.com/profiles/company/11787-22`.
3. Add one or more URLs or bare IDs to **Company profile URLs or IDs**.
4. Keep the default residential proxy configuration.
5. Choose a maximum number of companies.
6. Click **Start**.
7. Open the default dataset to review or export JSON, CSV, Excel, XML, or RSS.

### Input parameters

| Input | Type | Default | Description |
| --- | --- | --- | --- |
| `profileUrls` | array | required | Exact PitchBook company profile URLs or bare IDs |
| `maxItems` | integer | `100` | Maximum unique profiles, from 1 to 1,000 |
| `proxyConfiguration` | object | Apify Residential | Sticky proxy source used for browser sessions |
| `maxRetries` | integer | `2` | Fresh sessions after a challenge, from 0 to 5 |
| `requestTimeoutSecs` | integer | `60` | Per-attempt timeout, from 15 to 180 seconds |

Duplicate inputs are processed once. Non-PitchBook hosts, non-company paths, and malformed IDs fail validation before scraping.

#### Example input

```json
{
  "profileUrls": [
    "https://pitchbook.com/profiles/company/11787-22",
    "10235-08"
  ],
  "maxItems": 2,
  "maxRetries": 2
}
```

### Output example

A real public result can look like this:

```json
{
  "recordType": "company",
  "companyId": "11787-22",
  "name": "Fidelity National Information Services",
  "profileUrl": "https://pitchbook.com/profiles/company/11787-22",
  "yearFounded": 1968,
  "status": "Public",
  "employees": 44000,
  "stockSymbol": "FIS",
  "investments": 87,
  "ownershipStatus": "Publicly Held",
  "financingStatus": "Corporation",
  "primaryIndustry": "IT Consulting and Outsourcing",
  "city": "Jacksonville",
  "state": "Florida",
  "country": "United States",
  "scrapedAt": "2026-07-30T06:13:10.315Z"
}
```

Descriptions and other public fields are included when present; this shortened sample keeps the shape readable.

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

This Actor uses pay-per-event pricing:

- a **$0.005 start event** once per run;
- a **company event** only for each successfully extracted company row.

The Bronze company price is **$0.01236 per successful profile**. Higher Apify plans receive lower tier prices. Failed attempts do not create company events, although platform compute and residential proxy usage still count toward your normal Apify usage.

At the Bronze tier, calculate an illustrative Actor charge as one **$0.005 start event** plus the number of successful profiles multiplied by the **$0.01236 company event**. For example, a 10-profile success has one start event and 10 company events; a 100-profile success has one start event and 100 company events.

Final cost can also include normal Apify platform usage.

### Reliability, retries, and limits

PitchBook protects public profiles with Cloudflare. Direct HTTP and datacenter traffic may receive a challenge, so the Actor uses a browser with sticky residential sessions.

Each retry rotates to a fresh session. Images, video, fonts, stylesheets, and scripts are blocked because the useful public profile is server rendered; this reduces proxy transfer and memory use.

If some inputs fail, successful rows remain in the dataset and failures are logged. If every input fails, the run exits with an error instead of returning a misleading successful empty dataset.

Keep concurrency conservative. Version 0.1 processes profiles sequentially to protect session quality and predictable memory use.

### Monitoring and export workflows

#### Scheduled company monitoring

Create an Apify Task with stable `profileUrls`, schedule it daily or weekly, and compare datasets downstream.

#### Spreadsheet refresh

Export the default dataset as CSV or Excel, or connect Apify to Google Sheets.

#### CRM enrichment

Join rows to an internal company table by `companyId`, `profileUrl`, or normalized company name.

#### Research pipelines

Use a webhook after successful runs to send JSON rows into a warehouse, notebook, or review queue.

### Run through the Apify API with cURL

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

To wait for completion and retrieve dataset items, use the synchronous dataset-items endpoint supported by the Apify API.

### 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-companies-scraper').call({
  profileUrls: ['11787-22', '10235-08'],
  maxItems: 2,
});
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-companies-scraper').call(run_input={
    'profileUrls': ['11787-22'],
    'maxItems': 1,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### Use with MCP and AI agents

Add the Actor to Claude Code through Apify MCP:

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

Claude Desktop, Cursor, and VS Code can use this MCP configuration:

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

Example prompts:

- “Extract the public PitchBook profile for company ID 11787-22 and summarize its status, industry, and location.”
- “Run these PitchBook company IDs, save the dataset, and compare founding year and employee count.”
- “Refresh my monitored PitchBook companies and flag changed ownership or financing status.”

### Responsible use and legality

This Actor accesses public profile pages supplied by the user. You are responsible for complying with PitchBook terms, robots guidance, applicable law, and the rights of data subjects.

Do not use it to access a private account, bypass authentication, collect premium-only data, or make automated decisions about people. Minimize collection, retain data only as long as needed, and honor deletion or correction obligations that apply to your use case.

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

### Limitations

- Input must be an exact public company profile URL or ID; broad PitchBook search is not supported.
- Premium fields hidden behind login are not extracted.
- Public field visibility differs by company.
- Profile structure and Cloudflare behavior can change.
- Residential proxy access is required for the current route.
- The Actor does not infer missing values from third-party websites.
- Version 0.1 does not emit profile history or change events; schedule runs and compare datasets externally.

### Troubleshooting

#### Why did my run return no company rows?

Check that every input is a valid `/profiles/company/{id}` URL or bare numeric ID. If all sessions are challenged, increase `maxRetries` within the allowed limit and retry later.

#### Why is a field missing?

PitchBook did not expose that field on the public profile at extraction time. The Actor omits absent values instead of returning placeholders.

#### Can I use datacenter proxies?

The input editor allows proxy customization, but direct and datacenter probes currently receive Cloudflare challenges. The default residential configuration is the supported route.

#### Are failed profiles charged as companies?

No. The company event is emitted only after a validated company record is saved. The one-time start event and normal platform usage still apply.

### Frequently asked questions

#### Does this scrape all PitchBook companies?

No. It processes the exact public company URLs or IDs you provide, up to `maxItems`.

#### Does it require my PitchBook login?

No. Version 0.1 extracts only fields visible on public company profiles.

#### Can I schedule recurring runs?

Yes. Save the input as an Apify Task and attach a schedule. Compare datasets in your preferred storage or workflow tool.

#### What happens to duplicate IDs?

They are normalized and processed once per run.

#### What output formats are available?

The default Apify dataset supports JSON, JSONL, CSV, Excel, XML, and RSS exports.

### Related automation-lab Actors

- [PitchBook Fund Data Scraper](https://apify.com/automation-lab/pitchbook-fund-data-scraper) extracts public fund-profile facts for a distinct fund research workflow.

Use the company Actor for `/profiles/company/` records and the fund Actor for `/profiles/fund/` records.

### Support

If a current public company profile fails consistently, open an Actor issue with the profile URL, run ID, and the approximate failure time. Do not include private account credentials or sensitive internal data.

# Actor input Schema

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

PitchBook /profiles/company/ URLs or bare IDs such as 11787-22. Duplicate profiles are processed once.

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

Maximum number of unique input profiles to process.

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

PitchBook currently requires sticky residential browser sessions.

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

Fresh residential sessions to try after a challenge or transient failure.

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

Maximum navigation and extraction time per attempt.

## Actor input object example

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

# Actor output Schema

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

Typed public company profile records shown in the overview view.

# 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/company/11787-22"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

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

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/pitchbook-companies-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/company/11787-22"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call automation-lab/pitchbook-companies-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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