# Company Search API - Firmographics, Funding, Tech Stack (`nabeelbaghoor/company-search-firmographics-api`) Actor

Search a B2B company database by employee count, revenue, location, keywords, technologies, funding and hiring activity. Returns firmographics, funding, socials and contact details. Pay per result. Bring your own API key.

- **URL**: https://apify.com/nabeelbaghoor/company-search-firmographics-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

$12.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

## Company Search API - Firmographics, Funding, Tech Stack

Search a large B2B company database and export the matches as clean rows. Filter by employee count, annual revenue, headquarters location, business keywords, the technologies a company runs, how much funding it has raised, and what roles it is hiring for right now. Each result carries firmographics, funding history, social profiles and a company phone number. You pay only for the companies you actually receive.

This actor is built for putting together a target account list, sizing a market, finding companies that just raised, and spotting accounts that are hiring for the roles that signal they need what you sell.

### What you can do with it

- Build an ideal customer profile list by headcount, revenue, industry keywords and country.
- Find every company in a market that uses a specific technology, then export the list.
- Track companies that closed a funding round in a date window and target them while the budget is fresh.
- Use hiring activity as a buying signal: find accounts posting for a given job title in a given city.
- Enrich a list of domains you already have into full company records in one pass.
- Export everything as JSON, CSV or Excel, or push it into your CRM or warehouse.

### Features

- Every documented filter is a real input field, including bracketed range filters, so you do not have to hand-build a query string.
- Combine filters freely: size and revenue and location and technology and funding and hiring, all in one search.
- Automatic pagination through the result set up to the maximum you set.
- Results from the wider database and from your own saved accounts are merged and deduplicated, so no company appears twice.
- A `rawParams` passthrough sends any additional query parameter the API supports, so a new filter never needs a code change.
- Locations can be included and excluded in the same run.
- The complete raw provider payload is kept on every record, so nothing is lost.
- 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 |
| --- | --- | --- |
| `companyName` | string | Match companies whose name contains this text. |
| `domains` | array | Match these company domains exactly, up to 1,000. |
| `organizationIds` | array | Match these provider company ids. |
| `employeeRanges` | array | Headcount bands written as `min,max`, for example `250,500`. |
| `revenueMin` / `revenueMax` | integer | Annual revenue range in USD, plain numbers. |
| `locations` / `excludeLocations` | array | Headquarters locations to include or exclude. |
| `keywords` | array | Business keyword tags to match. |
| `technologyUids` | array | Technologies the company currently uses. |
| `totalFundingMin` / `totalFundingMax` | integer | All-time funding raised, in USD. |
| `latestFundingAmountMin` / `latestFundingAmountMax` | integer | Size of the most recent round, in USD. |
| `latestFundingDateMin` / `latestFundingDateMax` | string | Date window for the most recent round, `YYYY-MM-DD`. |
| `jobTitles` | array | Only companies hiring for these titles. |
| `jobLocations` | array | Only count open roles in these locations. |
| `jobPostingsMin` / `jobPostingsMax` | integer | Range for the number of open roles. |
| `jobPostedAfter` / `jobPostedBefore` | string | Date window for when roles were posted. |
| `rawParams` | object | Any extra query parameter, merged last. |
| `maxResults` | integer | Stop after this many companies (1 to 50,000). |
| `pageSize` | integer | Companies per API call (1 to 100). |
| `apiKey` | string | Your API key. 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 complete provider payload is kept under `raw`:

```json
{
  "id": "5e66b6381e05b4008c8331b8",
  "name": "Example Logistics",
  "domain": "example.com",
  "website": "http://www.example.com",
  "description": "Example Logistics builds route optimisation software for regional freight carriers.",
  "industry": "information technology & services",
  "keywords": ["logistics", "route optimisation", "fleet management"],
  "employees": 420,
  "annualRevenue": 68000000,
  "annualRevenuePrinted": "68M",
  "foundedYear": 2011,
  "totalFunding": 45000000,
  "latestFundingStage": "Series B",
  "latestFundingRoundDate": "2025-11-04",
  "publiclyTradedSymbol": null,
  "publiclyTradedExchange": null,
  "phone": "+1 415-555-0134",
  "city": "San Francisco",
  "state": "California",
  "postalCode": "94107",
  "country": "United States",
  "address": "535 Mission Street",
  "linkedin": "http://www.linkedin.com/company/example-logistics",
  "linkedinUid": "18234901",
  "twitter": "https://twitter.com/examplelogistics",
  "facebook": null,
  "logo": "https://zenprospect-production.s3.amazonaws.com/uploads/logo.png",
  "alexaRanking": 184203,
  "languages": ["English"],
  "technologyNames": ["Salesforce", "AWS", "Segment"],
  "intentStrength": null,
  "raw": { "id": "5e66b6381e05b4008c8331b8", "name": "Example Logistics" }
}
```

### 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 provider charges per page of results rather than per company, so a larger `pageSize` uses fewer of your provider credits.

### Bring your own API key

This actor connects to a third-party B2B company data provider (Apollo.io) on your behalf and requires your own provider API key. Generate a key in the provider's platform and paste it into the `apiKey` input. It is stored securely and never logged, and the actor never ships with or shares credentials.

### Frequently asked questions

#### What data does this actor return?

Company name, domain and website, a short description, industry and keyword tags, employee count, annual revenue, founded year, total funding with the stage and date of the latest round, public trading symbol and exchange, a company phone number, the headquarters address broken into street, city, state, postal code and country, LinkedIn, Twitter and Facebook profiles, a logo URL, an Alexa ranking, languages and the technologies in use. Every record also carries the untouched provider payload.

#### How many companies can one search return?

The provider caps any single search at 50,000 records, delivered as up to 500 pages of 100. To reach companies beyond that ceiling, split the search into narrower filters, for example one country or one revenue band at a time, and run it again.

#### How do I filter by company size?

Use `employeeRanges` and write each band as `min,max`, for example `1,10` or `250,500`. Several bands can be listed and are combined with OR, so `11,50` and `51,200` together return every company from 11 to 200 employees.

#### Can I find companies that use a specific technology?

Yes. Put technology identifiers into `technologyUids`, for example `salesforce` or `shopify`. The provider tracks over a thousand technologies and the list is matched with OR, so any company using at least one of them is returned.

#### Can I search by hiring activity?

Yes. `jobTitles`, `jobLocations`, `jobPostingsMin`, `jobPostingsMax`, `jobPostedAfter` and `jobPostedBefore` filter on a company's currently open roles. Hiring for a role that maps to your product is one of the strongest buying signals available.

#### What is `rawParams` for?

It sends any query parameter the data API accepts that does not yet have its own input field. Values may be a string or an array of strings, and `rawParams` is merged last so it also overrides a modelled field if you need it to.

#### How do I get an API key?

Sign in to the provider's platform, open the developer or integrations section, and create an API key. Search endpoints require a paid plan. Paste the key into `apiKey`; the actor sends it in the request header, which is the only method the provider still supports.

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

It throttles requests, honours the retry-after signal on a rate-limited response, and backs off exponentially. If the limit is still in force it stops early and keeps everything already collected rather than failing the whole run.

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

company search api, b2b company database, firmographic data api, company data api, find companies by technology, technographic search, company funding data, companies that just raised funding, employee count filter, revenue range search, target account list builder, ideal customer profile search, account based marketing data, hiring signal data, companies hiring api, company linkedin url data, sales prospecting api, lead list building, company enrichment by domain, b2b data export.

# Actor input Schema

## `companyName` (type: `string`):

Find companies whose name matches this text. Partial matches are accepted, so `acme` also matches `Acme Corporation`.

## `domains` (type: `array`):

Match these company domains exactly, one per line, for example `example.com`. Up to 1,000 domains per run.

## `organizationIds` (type: `array`):

Match these company ids from the data provider, one per line. Use this when you already stored ids from a previous run.

## `employeeRanges` (type: `array`):

Employee count bands, one per line, written as `min,max`, for example `1,10` or `250,500`. Several bands are combined with OR.

## `revenueMin` (type: `integer`):

Only return companies with at least this much annual revenue. Enter a plain number, for example `1000000`.

## `revenueMax` (type: `integer`):

Only return companies with at most this much annual revenue. Enter a plain number, for example `50000000`.

## `locations` (type: `array`):

Headquarters locations to include, one per line. Cities, states and countries all work, for example `California, US` or `Germany`.

## `excludeLocations` (type: `array`):

Headquarters locations to leave out, one per line. Applied after the include list.

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

Business keyword tags to match, one per line, for example `cloud security` or `logistics`.

## `technologyUids` (type: `array`):

Technology identifiers the company currently uses, one per line, for example `salesforce` or `shopify`. Matching is OR across the list.

## `totalFundingMin` (type: `integer`):

Only return companies whose all-time funding is at least this amount. Plain number, no currency symbol.

## `totalFundingMax` (type: `integer`):

Only return companies whose all-time funding is at most this amount.

## `latestFundingAmountMin` (type: `integer`):

Only return companies whose most recent round was at least this size.

## `latestFundingAmountMax` (type: `integer`):

Only return companies whose most recent round was at most this size.

## `latestFundingDateMin` (type: `string`):

Earliest date of the most recent funding round, written as `YYYY-MM-DD`.

## `latestFundingDateMax` (type: `string`):

Latest date of the most recent funding round, written as `YYYY-MM-DD`.

## `jobTitles` (type: `array`):

Only return companies with open roles matching these job titles, one per line, for example `account executive`.

## `jobLocations` (type: `array`):

Only count open roles posted in these locations, one per line.

## `jobPostingsMin` (type: `integer`):

Only return companies with at least this many open roles.

## `jobPostingsMax` (type: `integer`):

Only return companies with at most this many open roles.

## `jobPostedAfter` (type: `string`):

Only count open roles posted on or after this date, written as `YYYY-MM-DD`.

## `jobPostedBefore` (type: `string`):

Only count open roles posted on or before this date, written as `YYYY-MM-DD`.

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

Advanced. Any extra query parameter the data API supports, as a JSON object, for example `{"organization_trading_status": "public"}`. Values may be strings or arrays of strings. These are merged last and win over the fields above.

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

Stop after this many companies (1-50,000). The provider caps any single search at 50,000 records, so narrow the filters to reach beyond that.

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

How many companies to fetch per API call (1-100). Larger pages are faster and cost fewer provider credits.

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

Your own API key for the data provider. Required. It is generated in the provider's platform and shown only once, so store it somewhere safe. Stored securely here and never logged.

## Actor input object example

```json
{
  "domains": [],
  "organizationIds": [],
  "employeeRanges": [],
  "locations": [],
  "excludeLocations": [],
  "keywords": [],
  "technologyUids": [],
  "jobTitles": [],
  "jobLocations": [],
  "rawParams": {},
  "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 = {
    "domains": [],
    "organizationIds": [],
    "employeeRanges": [],
    "locations": [],
    "excludeLocations": [],
    "keywords": [],
    "technologyUids": [],
    "jobTitles": [],
    "jobLocations": [],
    "rawParams": {},
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/company-search-firmographics-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 = {
    "domains": [],
    "organizationIds": [],
    "employeeRanges": [],
    "locations": [],
    "excludeLocations": [],
    "keywords": [],
    "technologyUids": [],
    "jobTitles": [],
    "jobLocations": [],
    "rawParams": {},
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/company-search-firmographics-api").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 '{
  "domains": [],
  "organizationIds": [],
  "employeeRanges": [],
  "locations": [],
  "excludeLocations": [],
  "keywords": [],
  "technologyUids": [],
  "jobTitles": [],
  "jobLocations": [],
  "rawParams": {},
  "maxResults": 100
}' |
apify call nabeelbaghoor/company-search-firmographics-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nabeelbaghoor/company-search-firmographics-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/rpjKDsKkhHGe0Li9F/builds/4lVYbe68i8BLxgmDw/openapi.json
