# B2B Account Search API - Company Firmographics and Tech (`nabeelbaghoor/b2b-account-search-api`) Actor

Search B2B company accounts by name, domain, industry, size, revenue, location and technologies, and export firmographic and technographic data. Pay per result. Bring your own API key.

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

## B2B Account Search API - company firmographics and technographics

**B2B Account Search API** turns a live B2B company database into a clean, structured export. Search company accounts by name, domain, industry, size, revenue, location and the technologies they use, then export firmographic and technographic records as JSON, CSV or Excel.

Bring your own API key and pay only for the records you keep.

### Why use this actor?

- **Firmographics and technographics together** - company name, domain, website, industry, revenue, headcount, founding year, NAICS and SIC codes, type, location and the technology stack in one row.
- **Rich, structured filters** - names, domains, keywords, description, company type, revenue band, founding-year range, technologies, industry codes and full location filters, all as proper fields.
- **Search then redeem** - a fast search returns matching accounts as previews; matched accounts are redeemed to return full firmographic values. Turn redeem off for lighter, cheaper preview rows.
- **Pay per result** - you are charged only for the records actually returned, up to 5,000 per run.
- **No proxies, no blocks** - data comes through a stable API, so runs are fast and reliable.

### Use cases

- **Account-based marketing** - build target account lists filtered by industry, size, revenue and tech stack.
- **Sales prospecting** - find companies that match your ideal customer profile and export them to your CRM.
- **Market research** - size a market by revenue band, founding year, geography or technology adoption.
- **Data enrichment** - append firmographic and technographic attributes to your existing account records.
- **Competitive intelligence** - list companies using a specific technology or in a specific segment.

### Input

Configure everything from the visual editor - every filter is a proper field, no code needed. Example JSON input:

```json
{
  "keywords": "cloud security",
  "countries": "United States, United Kingdom",
  "revenueMin": 1000000,
  "revenueMax": 50000000,
  "technologies": "AWS, Salesforce",
  "types": "Privately Held",
  "redeem": true,
  "maxResults": 100,
  "apiKey": "YOUR_API_KEY"
}
```

Search specific companies by name or domain:

```json
{
  "names": "Acme, Globex",
  "domains": "initech.com",
  "matchExactDomain": true,
  "maxResults": 50,
  "apiKey": "YOUR_API_KEY"
}
```

#### Key inputs

- **Company names / Company domains** - comma-separated lists to target specific accounts.
- **Keywords / Description** - free-text matching against company profiles.
- **Company types** - comma-separated from the allowed values `Public Company`, `Privately Held`, `Government Agency`, `non profit`.
- **Technologies / NAICS / SIC** - technographic and industry-code filters, comma-separated.
- **Revenue from / to** and **Founded from / to** - numeric range filters.
- **Countries / Exclude countries / States / Cities** - location filters.
- **Redeem full records** - on by default; turn off for cheaper preview-only rows.
- **Raw filters (advanced)** - a JSON object merged over the generated search body for fields not exposed as friendly inputs.
- **Maximum results** - hard cap on records (and therefore spend) per run.
- **API key** - your own provider key (Bearer token). Required.

### Output

One clean, flat JSON object per company account:

```json
{
  "company_name": "Acme Corporation",
  "domain": "acme.com",
  "website": "https://www.acme.com",
  "industry": "Computer Software",
  "revenue": "10M-50M",
  "founded": 2008,
  "headcount": "201-500",
  "naics": "541511",
  "sic": "7372",
  "technologies": ["AWS", "Salesforce", "HubSpot"],
  "description": "Acme builds cloud security tooling for mid-market teams.",
  "type": "Privately Held",
  "location": "San Francisco, California, United States",
  "redeemed": true,
  "raw": { }
}
```

The `redeemed` flag tells you whether the row holds full redeemed values (`true`) or a lighter preview (`false`). The original provider object is preserved under `raw`.

### FAQ

#### What is the B2B Account Search API?

It is a company-account data API that returns firmographic attributes (name, domain, industry, revenue, headcount, founding year, industry codes, location) and technographic attributes (the technologies a company uses). This actor runs that search with your filters and exports the matching company accounts as JSON, CSV or Excel.

#### Do I need my own API key?

Yes. This actor calls the underlying B2B data provider on your behalf using a Bearer token, so you bring your own key. The provider key is enterprise-provisioned, and your account must carry the search and redeem entitlements (and credits) for the data you request. Paste the key into the **API key** input, or set the `DATA_API_KEY` secret. Your key is stored securely and never logged.

#### How does the search-then-redeem credit model work?

The provider uses two steps. First, a **search** returns matching accounts as previews - each carries an id and presence flags (for example, whether a domain or revenue value exists) but not the full values. Then a **redeem** call exchanges those ids for the full firmographic record. This actor does both automatically: it searches, collects the ids on each page, redeems them, and pushes the full records. You are charged per record returned to the dataset.

#### Can I get cheaper results with less data?

Yes. Turn **Redeem full records** off. The actor then pushes the preview records only, which are lighter and cheaper because they skip the redeem step. Preview rows carry presence flags and identifiers rather than every full value; the `redeemed` field on each row will be `false`.

#### What filters can I use?

Company names, domains, keywords, a description phrase, company type, technologies, NAICS and SIC codes, a revenue range, a founding-year range, and location filters for countries (include and exclude), states and cities. Use **Raw filters** to set any additional field the provider supports, such as websites or regions.

#### How many results can I get per run?

Up to 5,000 records per run, paged automatically. For larger sets, split the search by industry, revenue band, geography or technology across multiple runs.

#### How much does it cost?

Pricing is pay-per-result: a small fixed amount per record returned, plus standard Apify platform usage, plus your own API usage against your key. A run that returns nothing costs almost nothing. Set **Maximum results** to cap each run's spend exactly.

#### Can I run this on a schedule?

Yes. Use Apify Schedules to run it daily or weekly and connect the dataset to Zapier, Make, n8n, webhooks or the API to push new or updated accounts into your CRM, ABM platform or data warehouse.

### Keyword map

b2b company data api, account search api, firmographic data api, technographic data api, company enrichment api, company database api, abm data api, ideal customer profile api, company revenue data, company headcount data, technology install base api, naics sic company data, company domain lookup api, sales prospecting data api.

### Support and feedback

Found an issue or missing a filter? Open an issue in the **Issues** tab - it is monitored daily.

# Actor input Schema

## `names` (type: `string`):

Comma-separated list of company names to search for, e.g. `Acme, Globex, Initech`. Leave blank to match on other filters.

## `domains` (type: `string`):

Comma-separated list of web domains, e.g. `acme.com, globex.io`. Matches accounts by their primary website domain.

## `keywords` (type: `string`):

Free-text keywords to match against company profiles, e.g. `cloud security`. Comma-separated values are sent as a list.

## `description` (type: `string`):

Match accounts whose company description contains this phrase, e.g. `payment processing`.

## `types` (type: `string`):

Comma-separated company types. Allowed values: `Public Company`, `Privately Held`, `Government Agency`, `non profit`.

## `technologies` (type: `string`):

Comma-separated technographic filters, e.g. `Salesforce, AWS, HubSpot`. Matches accounts using those technologies.

## `naics` (type: `string`):

Comma-separated NAICS industry classification codes, e.g. `541511, 511210`.

## `sic` (type: `string`):

Comma-separated SIC industry classification codes, e.g. `7372, 7389`.

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

Minimum annual revenue in USD, e.g. `1000000`. Maps to the revenue range lower bound.

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

Maximum annual revenue in USD, e.g. `50000000`. Maps to the revenue range upper bound.

## `foundedFrom` (type: `integer`):

Only accounts founded in or after this year, e.g. `2010`.

## `foundedTo` (type: `integer`):

Only accounts founded in or before this year, e.g. `2024`.

## `countries` (type: `string`):

Comma-separated countries to include, e.g. `United States, United Kingdom, Germany`.

## `excludeCountries` (type: `string`):

Comma-separated countries to exclude from results, e.g. `India, China`.

## `states` (type: `string`):

Comma-separated states or regions, e.g. `California, Texas, Bavaria`.

## `cities` (type: `string`):

Comma-separated cities, e.g. `San Francisco, London, Berlin`.

## `matchExactName` (type: `boolean`):

Require an exact match on company name instead of a fuzzy match.

## `matchExactDomain` (type: `boolean`):

Require an exact match on the company domain instead of a partial match.

## `redeem` (type: `boolean`):

When on, each matched account is redeemed to return full firmographic values (domain, revenue, headcount and more). When off, only lighter preview records are returned, which is cheaper but has less data. You are charged per record returned either way.

## `rawFilters` (type: `object`):

Advanced escape hatch. A JSON object merged verbatim over the generated search body, letting you set fields not exposed above (for example `websites`, `regions`). Use only if you know the underlying account search body.

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

Stop after this many records (1-5,000). Paged automatically. You are charged per result returned.

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

Your own B2B data provider API key (Bearer token). Required. Bring your own key: this actor calls the provider on your behalf using your enterprise-provisioned credentials. Stored securely and never logged.

## Actor input object example

```json
{
  "matchExactName": false,
  "matchExactDomain": false,
  "redeem": true,
  "rawFilters": {},
  "maxResults": 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 = {
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/b2b-account-search-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 = { "maxResults": 100 }

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/b2b-account-search-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 '{
  "maxResults": 100
}' |
apify call nabeelbaghoor/b2b-account-search-api --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NfuDkEz3Q5Iy6EVac/builds/3NaeLDwiu9G6Oktvr/openapi.json
