# Private Company Data API - Funding and Valuation (`nabeelbaghoor/private-company-data-api`) Actor

Search a private-market company intelligence database by industry, market, technology, geography, headcount, funding and valuation, and optionally attach every funding round. Pay per result. Bring your own API key.

- **URL**: https://apify.com/nabeelbaghoor/private-company-data-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Business, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$15.00 / 1,000 company results

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

## Private Company Data API - Funding and Valuation

Search a private-market company intelligence database and export the matches as clean rows. Filter by industry, sector, subindustry, market, technology and business model, by country, region, state and city, by current headcount, by total funding, valuation and the date and stage of the most recent round, by investor and investor type, and by the identifiers public markets use: ticker, CIK, CUSIP, ISIN, LEI and FIGI. Turn on funding rounds and every match arrives with its full round history attached. You pay only for the companies you actually receive.

This actor is built for deal sourcing, competitive and market landscaping, investor and portfolio research, and keeping a CRM or data warehouse stocked with current private-company firmographics.

### What you can do with it

- Source deals: every venture-backed company in a market that raised a Series B in the last year.
- Landscape a market by technology or business model and export the full competitive set.
- Track an investor's portfolio by filtering on investor organisation id.
- Build a screening list by headcount band, valuation band and country.
- Look companies up in bulk by ticker, CIK, ISIN, LEI or website.
- Export everything as JSON, CSV or Excel, or push it into a CRM or warehouse.

### Features

- Every documented firmographics filter is a real input field, grouped into search, industry and market, location, size and funding, and security identifiers.
- Taxonomy ids are sent as numbers and free-text filters as strings, because the provider rejects an id sent as a string.
- Optional funding-round pass: rounds are read 100 companies per call and joined back onto their company by organisation id.
- The funding pass is best effort. If it fails, those rows keep their firmographics and the run continues.
- Cursor pagination is walked automatically, with a repeat-cursor guard so a stuck cursor cannot cause an endless loop.
- The reported match count is logged at the start, and the log says whether that count is exact or a lower bound.
- Nested provider objects for summary, headcount, financials, identifiers and taxonomy are flattened into flat sortable columns.
- Duplicate companies are removed across pages before anything is charged.
- The untouched provider payload is kept under `raw`, so nothing is lost.
- Access tokens are fetched, cached for their 24 hour lifetime and refreshed automatically, including one silent retry if a token expires mid-run.
- Rate limits are handled with retry-after aware backoff, and a run that hits a limit keeps everything already collected.
- Pay-per-result pricing with a hard result cap so a run can never surprise you.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `keyword` | string | Free text matched on names, descriptions and aliases. |
| `orgNames` / `urls` / `orgIds` | array | Match specific companies by name, website or provider id. |
| `industryIds` / `sectorIds` / `subindustryIds` | array | Industry taxonomy ids. |
| `marketIds` / `marketNames` | array | Market taxonomy ids or market names. |
| `technologyIds` / `businessModelIds` | array | Technology and business model taxonomy ids. |
| `collectionIds` / `awardsAndSpotlightsIds` | array | Curated collections, awards and spotlights. |
| `countryIds` / `continentIds` / `regionIds` / `stateProvinceIds` / `cityIds` | array | Location taxonomy ids. |
| `minCurrentHeadcount` / `maxCurrentHeadcount` | integer | Employee count range. |
| `minTotalFundingInMillions` / `maxTotalFundingInMillions` | integer | Total funding range, in millions USD. |
| `minValuationInMillions` / `maxValuationInMillions` | integer | Valuation range, in millions USD. |
| `minLastFundingDate` / `maxLastFundingDate` | string | Most recent round date range, as YYYY-MM-DD. |
| `lastFundingRoundIds` / `lastFundingRoundCategoryIds` | array | Stage of the most recent round. |
| `fundingInvestorTypeIds` / `investorOrgIds` / `investorTypeIds` | array | Investor filters. |
| `orgStatusIds` | array | Company status, for example active, acquired or closed. |
| `vcBacked` | boolean | Only venture-backed companies. |
| `tickers` / `ciks` / `cusips` / `isins` / `leis` / `figis` | array | Security and filing identifiers. |
| `sort` | object | Sort instruction passed straight through. |
| `rawParams` | object | Any extra parameter, merged last. |
| `includeFundingRounds` | boolean | Attach each company's funding rounds. |
| `maxResults` | integer | Stop after this many companies (1 to 20,000). |
| `pageSize` | integer | Companies per API call (1 to 100). |
| `apiKey` | string | Your API client id. Required, stored securely. |
| `apiSecret` | string | Your API client secret. Required, stored securely. |

At least one filter is required.

### Example output

Each dataset item is one company. Fields are populated where the provider has data, and the untouched payload is kept under `raw`:

```json
{
  "orgId": 1234567,
  "name": "Example Robotics",
  "url": "https://example.com",
  "description": "Example Robotics builds warehouse picking systems for third-party logistics operators.",
  "status": "Active",
  "yearFounded": 2017,
  "city": "Boston",
  "stateProvince": "Massachusetts",
  "country": "United States",
  "continent": "North America",
  "industries": ["Industrials", "Electronics"],
  "sectors": ["Industrials"],
  "subindustries": ["Warehouse Automation"],
  "markets": ["Warehouse Robotics"],
  "businessModels": ["Hardware as a Service"],
  "currentHeadcount": 240,
  "headcountGrowth": 18.5,
  "totalFundingInMillions": 128.5,
  "valuationInMillions": 640,
  "lastFundingDate": "2026-03-11",
  "lastFundingRound": "Series C",
  "lastFundingAmountInMillions": 75,
  "vcBacked": true,
  "ticker": null,
  "cik": null,
  "lei": null,
  "isin": null,
  "cusip": null,
  "figi": null,
  "competitors": ["Sample Automation", "Demo Logistics Systems"],
  "expertCollections": ["Warehouse Tech"],
  "parentOrgs": null,
  "childOrgs": null,
  "profileUrl": "https://app.cbinsights.com/profiles/c/1234567",
  "fundingRounds": [
    { "orgId": 1234567, "roundName": "Series C", "date": "2026-03-11", "amountInMillions": 75 }
  ],
  "fundingRoundCount": 1,
  "raw": { "orgId": 1234567, "summary": { "name": "Example Robotics" } }
}
```

### Pricing and the credit model

This actor uses pay-per-result pricing. You are charged a fixed price for each company delivered to the dataset, after duplicates are removed. A search that matches nothing costs nothing. Set `maxResults` to cap how many rows a run can collect, and set a run spending limit as a second safety net. Your own provider plan meters its own credits separately, and the funding-round pass consumes more of them, so leave `includeFundingRounds` off for a broad discovery run and turn it on once the filters are right.

### Bring your own API key

This actor connects to a third-party private-market company data provider (CB Insights) on your behalf and requires your own provider credentials. Create a client id and client secret in the provider's platform and paste them into the `apiKey` and `apiSecret` inputs. They are stored securely and never logged, and the actor never ships with or shares credentials.

### Frequently asked questions

#### What data does this actor return?

Organisation id, company name, website and description, status and year founded, the headquarters city, state, country and continent, industry, sector, subindustry and market taxonomy labels, business models, current headcount and headcount growth, total funding and valuation in millions of US dollars, the date, stage and amount of the most recent round, whether the company is venture backed, security identifiers including ticker, CIK, LEI, ISIN, CUSIP and FIGI, named competitors, expert collections, parent and child organisations, and a link to the company profile. With `includeFundingRounds` on, every round the provider holds is attached as well. Each record also carries the untouched provider payload.

#### Where do I find the taxonomy ids?

Industry, sector, market, technology, location and round-stage filters take numeric ids from the provider's own taxonomy reference, which is published in its developer portal. If you prefer names, `keyword`, `orgNames` and `marketNames` accept free text instead, and `rawParams` lets you send any filter the provider supports.

#### What does the funding-round pass add?

The search itself returns the funding summary: total raised, valuation, and the date, stage and size of the latest round. The funding pass adds the full round history, read 100 companies per call from the financial transactions endpoint and joined back onto each company by organisation id. It costs extra provider credits, which is why it is off by default.

#### What happens if the funding pass fails?

Those rows keep their firmographics and the run carries on. Funding rounds are treated as an enhancement, never as a requirement, so a failing or throttled transactions endpoint can never fail a search that already worked. The log reports which batches could not be read.

#### How does pagination work?

The API pages with an opaque `nextPageToken`. The actor carries it forward automatically until it reaches `maxResults`, the provider stops returning a token, or the same token comes back twice, which is treated as the end rather than a loop.

#### Why is the reported match count sometimes approximate?

The provider returns both a total and a relation flag saying whether that total is exact or a lower bound on a large result set. The actor logs which one you got, so a count shown as "at least" is the provider's estimate rather than a miscount.

#### How does authentication work?

The provider issues a 24 hour bearer token from a client id and client secret, with no refresh flow. The actor requests one at the start of the run, caches it, and simply requests a new one when it ages out. If a token is rejected mid-run it is refreshed once and the request is retried.

#### How does the actor handle rate limits?

It throttles requests, honours the retry-after signal on a rate-limited response, and backs off exponentially. A response saying the subscription does not license a dataset stops the run early and keeps everything already collected.

#### How am I charged?

You pay a fixed price per company returned to the dataset. Duplicates are removed before charging and empty runs cost nothing. Use `maxResults` and the run spending limit to control cost.

#### What output formats are available?

The dataset can be exported as JSON, CSV, Excel, HTML or RSS, or read through the API for pushing into a CRM or warehouse.

### Keyword map

private company data api, startup database api, company funding data api, venture capital data api, valuation data api, deal sourcing api, private market intelligence api, startup funding rounds api, investor portfolio data, series a series b data, company headcount data api, market landscape data, competitive intelligence api, firmographic data api, vc backed company list, m and a data api, company taxonomy search, ticker cik lei lookup, private equity screening data, startup discovery api.

# Actor input Schema

## `keyword` (type: `string`):

Free text matched against company names, descriptions and aliases.

## `orgNames` (type: `array`):

Exact company names to match.

## `urls` (type: `array`):

Company website URLs or domains to match.

## `orgIds` (type: `array`):

Look up specific companies by their provider organisation id.

## `industryIds` (type: `array`):

Industry taxonomy ids. Use the provider's industries reference to find them.

## `sectorIds` (type: `array`):

Sector taxonomy ids.

## `subindustryIds` (type: `array`):

Subindustry taxonomy ids.

## `marketIds` (type: `array`):

Market taxonomy ids.

## `marketNames` (type: `array`):

Market names, for an alternative to market ids.

## `technologyIds` (type: `array`):

Technology taxonomy ids the company is associated with.

## `businessModelIds` (type: `array`):

Business model taxonomy ids, for example subscription or marketplace.

## `collectionIds` (type: `array`):

Restrict results to companies inside these curated collections.

## `awardsAndSpotlightsIds` (type: `array`):

Restrict results to companies carrying these awards or spotlights.

## `countryIds` (type: `array`):

Country taxonomy ids for the company headquarters.

## `continentIds` (type: `array`):

Continent taxonomy ids.

## `regionIds` (type: `array`):

Region taxonomy ids.

## `stateProvinceIds` (type: `array`):

State or province taxonomy ids.

## `cityIds` (type: `array`):

City taxonomy ids.

## `minCurrentHeadcount` (type: `integer`):

Only companies with at least this many current employees.

## `maxCurrentHeadcount` (type: `integer`):

Only companies with at most this many current employees.

## `minTotalFundingInMillions` (type: `integer`):

Only companies that have raised at least this much in total.

## `maxTotalFundingInMillions` (type: `integer`):

Only companies that have raised at most this much in total.

## `minValuationInMillions` (type: `integer`):

Only companies valued at or above this amount.

## `maxValuationInMillions` (type: `integer`):

Only companies valued at or below this amount.

## `minLastFundingDate` (type: `string`):

Only companies whose most recent round closed on or after this date, as YYYY-MM-DD.

## `maxLastFundingDate` (type: `string`):

Only companies whose most recent round closed on or before this date, as YYYY-MM-DD.

## `lastFundingRoundIds` (type: `array`):

Restrict to companies whose most recent round is one of these round types.

## `lastFundingRoundCategoryIds` (type: `array`):

Restrict to companies whose most recent round falls in these round categories.

## `fundingInvestorTypeIds` (type: `array`):

Restrict to companies funded by these types of investor.

## `investorOrgIds` (type: `array`):

Restrict to companies backed by these specific investors.

## `investorTypeIds` (type: `array`):

Investor type taxonomy ids.

## `orgStatusIds` (type: `array`):

Restrict to companies in these statuses, for example active, acquired or closed.

## `vcBacked` (type: `boolean`):

Only return companies that have taken venture capital funding.

## `tickers` (type: `array`):

Stock tickers to match.

## `ciks` (type: `array`):

SEC central index key numbers.

## `cusips` (type: `array`):

CUSIP identifiers.

## `isins` (type: `array`):

ISIN identifiers.

## `leis` (type: `array`):

Legal entity identifiers.

## `figis` (type: `array`):

Financial instrument global identifiers.

## `sort` (type: `object`):

Sort instruction passed straight to the provider, for example {"field":"totalFunding","order":"desc"}. Leave empty for the provider's default relevance order.

## `rawParams` (type: `object`):

Any additional request parameter, merged over the ones above. Use this for a filter the provider adds after this actor was published.

## `includeFundingRounds` (type: `boolean`):

Also read each company's funding rounds and attach them to the row. This makes an extra API call per 100 companies and consumes more of your provider credits.

## `maxResults` (type: `integer`):

Stop after this many company records (1 to 20,000). You are charged per result returned.

## `pageSize` (type: `integer`):

How many companies to request per API call (1 to 100). Larger pages mean fewer calls.

## `apiKey` (type: `string`):

Your own client id for the data provider. Required. Used with the client secret below to obtain a 24 hour access token. Stored securely and never logged.

## `apiSecret` (type: `string`):

Your own client secret for the data provider. Required. Stored securely and never logged.

## Actor input object example

```json
{
  "keyword": "battery recycling",
  "vcBacked": false,
  "sort": {},
  "rawParams": {},
  "includeFundingRounds": false,
  "maxResults": 100,
  "pageSize": 100
}
```

# 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 = {
    "keyword": "battery recycling",
    "sort": {},
    "rawParams": {},
    "maxResults": 100,
    "pageSize": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/private-company-data-api").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 = {
    "keyword": "battery recycling",
    "sort": {},
    "rawParams": {},
    "maxResults": 100,
    "pageSize": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/private-company-data-api").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 '{
  "keyword": "battery recycling",
  "sort": {},
  "rawParams": {},
  "maxResults": 100,
  "pageSize": 100
}' |
apify call nabeelbaghoor/private-company-data-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/private-company-data-api"
        }
    }
}

```

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/zizi8Xt30PSqli4ad/builds/j1t7feIwOmPyu1qo2/openapi.json
