# Company Firmographics Scraper - Revenue, Headcount & Funding (`logiover/company-firmographics-scraper`) Actor

Export company revenue, employee count, growth trend, total funding and round history, named competitors, leadership, phone and address in bulk. One company name expands through the competitor graph into a whole market segment. 48 fields per row, no API key, straight to CSV, Excel or Google Sheets.

- **URL**: https://apify.com/logiover/company-firmographics-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Lead generation
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 results

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Company Firmographics Scraper — Revenue, Headcount, Funding & Competitors

Export **company revenue, employee count, total funding, funding rounds, competitors, leadership, phone and address** in bulk — to CSV, Excel, JSON or Google Sheets. The data ZoomInfo and Crunchbase charge four figures a seat for, pulled on demand with no API key and no contract.

Give it one company name and turn on competitor expansion: **a single fintech seed produced 23 named rivals and 106 companies at the second hop.** One input becomes a market segment.

### What you get per company

| Field | Example |
|---|---|
| `companyName`, `shortName`, `domain`, `website` | Stripe, Inc. — stripe.com |
| `revenue`, `revenueRange` | 5100000000 — "$5B - 10B" |
| `employeeCount`, `employeeRange` | 8200 — "5,000 - 10,000" |
| `revenueTrendPercent`, `employeeTrendPercent` | +0.4, +16.7 — growth direction, signed |
| `totalFunding`, `fundingRounds` | 9787455541 across 23 rounds |
| `lastFundingRound`, `lastFundingDate`, `lastFundingAmount` | Venture Round, Mar 2026, 14577645 |
| `acquisitionCount`, `investmentCount` | 23 acquired, 59 invested in |
| `competitorCount`, `topCompetitors` | 23 — Rapyd, Square, PayPal, Clover… |
| `ceoName`, `ceoTitle`, `ceoRating`, `executiveCount` | John Collison, President, 64 |
| `phone`, `streetAddress`, `city`, `state`, `country`, `postalCode` | 1-415-298-5539, 185 Berry Street, San Francisco |
| `industries`, `industrySectors`, `sicCodes` | Fintech Software — SIC 7373 |
| `founded`, `ownership`, `companyStatus`, `exchange`, `ticker` | 2009, Private, Independent Company |
| `linkedinUrl`, `twitterUrl`, `facebookUrl`, `followers` | social profiles, 319,000 followers |
| `profileCompleteness`, `logoUrl`, `profileUrl`, `companyId` | 100, direct links, stable id |
| `graphDepth`, `foundVia`, `scrapedAt` | which seed it came from and how far out |

**48 fields per company**, including the two that most lists do not carry: **signed revenue and headcount trend**, so you can tell a company that grew 17% from one that shrank.

### Depth: the competitor graph, not a page counter

There is no list to paginate here — and that is the point. Every profile names its own competitors, so the crawl walks outward breadth-first:

| Hop | Companies reached from one seed |
|---|---|
| seed | 1 |
| hop 1 | 23 named competitors |
| hop 2 | 106 |
| hop 3 | thousands |

Breadth-first order matters: every seed is finished before the crawl moves a hop outward, so a capped run returns the companies closest to what you asked for rather than a random slice of the graph.

Filtering by `minRevenue` skips *saving* small companies but still expands through them, so a revenue floor never cuts the graph short.

### Use cases

- **TAM and market sizing** — seed three competitors, expand two hops, and you have the addressable set with revenue and headcount on every row.
- **Account scoring for sales** — revenue band, employee band and growth trend are exactly the fields most ICP models need.
- **Competitive landscape maps** — `topCompetitors` on every row builds the adjacency list for you.
- **Investor and M\&A screening** — total funding, round history, acquisition and investment counts in one file.
- **CRM enrichment** — feed your account domains in and get firmographics back; `domain` joins straight to your records.
- **Recruiting and territory planning** — headcount, growth direction, HQ city and phone per company.

### Input

```json
{
  "companies": ["stripe", "shopify.com", "hubspot"],
  "expandCompetitors": true,
  "maxDepth": 3,
  "maxResults": 1000,
  "minRevenue": 0
}
```

- **`companies`** — names, domains or profile URLs. `stripe`, `stripe.com` and the full link all resolve to the same company.
- **`expandCompetitors`** — follow each profile's named rivals.
- **`maxDepth`** — hops to follow. Growth is steep; 3 is usually plenty.
- **`maxResults`** — hard stop.
- **`minRevenue`** — revenue floor for saving, not for expanding.

### Output

```json
{
  "companyName": "Stripe, Inc.",
  "domain": "stripe.com",
  "revenue": 5100000000,
  "revenueRange": "$5B - 10B",
  "employeeCount": 8200,
  "employeeTrendPercent": 16.7,
  "totalFunding": 9787455541,
  "fundingRounds": 23,
  "lastFundingRound": "Venture Round",
  "lastFundingDate": "Mar 2026",
  "competitorCount": 23,
  "topCompetitors": ["Rapyd", "Square", "PayPal", "Clover"],
  "ceoName": "John Collison",
  "ceoTitle": "President",
  "phone": "1-415-298-5539",
  "city": "San Francisco",
  "country": "USA",
  "industries": ["Banking, Financial Services and Insurance"],
  "sicCodes": ["7373"],
  "linkedinUrl": "https://www.linkedin.com/company/stripe/",
  "graphDepth": 0,
  "foundVia": "seed"
}
```

### No API key needed

Profiles are rendered into the page payload, so revenue arrives as `5100000000` rather than as the string `"5.1B"`, and headcount as `8200` rather than `"8,200"`. Both the raw number and the human band are exported, so you can sort on one and display the other.

### Exporting

Results land in a dataset you can download as **CSV, Excel (XLSX), JSON, JSONL, XML or RSS**, read through the Apify API, or push into **Google Sheets**, Airtable, HubSpot, Salesforce, Clay, Make or Zapier. The `domain` column is the natural join key for enriching an existing account list.

### Proxy and reliability

This site returned no profile at all from datacenter or plain residential addresses in testing — only the **UNBLOCKER** group answered, which is why it is the default. Switching to datacenter will return nothing.

A refused exit address is replaced within 250 ms rather than waited out; a rate-limit response is the opposite case and backs off instead. A company name that does not resolve is reported and skipped, not treated as a failure of the run. Every run prints a summary naming the outcome — `COMPLETED`, `NO_MATCHES` or `FETCH_FAILED` — plus how many names failed to resolve, so a short result is never ambiguous.

### Keywords

company firmographics scraper, company revenue data, employee count scraper, company funding data, b2b company database, owler scraper, zoominfo alternative, crunchbase alternative, company competitors list, competitive intelligence data, tam market sizing data, account scoring data, icp firmographics, company phone number data, company hq address data, sic code lookup, company growth trend data, funding rounds export, m\&a screening data, investor research dataset, crm enrichment company data, sales prospecting firmographics, company profile api alternative, private company revenue estimates, headcount data by company, b2b lead enrichment csv

### Legal

This Actor reads only publicly visible company profile pages — no login, no paywalled sections, no personal data beyond the publicly listed executive names and titles that companies publish about themselves. Revenue and headcount figures are third-party estimates, not audited accounts; treat them as directional. You are responsible for how exported data is used, including GDPR and CCPA obligations where executive names are involved.

Not affiliated with, endorsed by, or connected to Owler or Meltwater. All trademarks belong to their owners and are referenced only to describe which public pages this tool reads.

### Related Actors

- US Business Directory Scraper — local businesses with ratings and phones
- Work Email Finder — turn company domains into verified work addresses
- GLEIF Legal Entity Scraper — official registry identifiers and ownership
- UK Companies House Bulk Scraper — statutory filings and officers
- Bulk DNS Records Lookup — enrich company domains with infrastructure data

# Changelog

This Actor's version history is a separate document: https://apify.com/logiover/company-firmographics-scraper/changelog.md

# Actor input Schema

## `companies` (type: `array`):

Company names, domains or profile URLs — 'stripe', 'stripe.com' and the full profile link all resolve to the same company. Each seed can open its whole competitive set below.

## `expandCompetitors` (type: `boolean`):

Every profile names its own rivals. Turn this on and one seed becomes a market segment: a single fintech company led to 23 named competitors and 106 companies at the second hop.

## `maxDepth` (type: `integer`):

How far to follow the competitor graph. 1 is the direct rivals of your seeds, 2 is their rivals too. Growth is steep — 3 is usually more than enough.

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

Stop after this many profiles.

## `minRevenue` (type: `integer`):

Skip saving companies below this annual revenue. They are still expanded, so filtering does not cut the graph short. Leave at 0 for everything.

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

This site returned no profile at all from datacenter or plain residential addresses in testing. The UNBLOCKER group answered every request and is the default.

## Actor input object example

```json
{
  "companies": [
    "stripe"
  ],
  "expandCompetitors": true,
  "maxDepth": 1,
  "maxResults": 12,
  "minRevenue": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All company rows from this run.

# 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 = {
    "companies": [
        "stripe"
    ],
    "expandCompetitors": true,
    "maxDepth": 1,
    "maxResults": 12,
    "minRevenue": 0,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/company-firmographics-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 = {
    "companies": ["stripe"],
    "expandCompetitors": True,
    "maxDepth": 1,
    "maxResults": 12,
    "minRevenue": 0,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/company-firmographics-scraper").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 '{
  "companies": [
    "stripe"
  ],
  "expandCompetitors": true,
  "maxDepth": 1,
  "maxResults": 12,
  "minRevenue": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}' |
apify call logiover/company-firmographics-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/company-firmographics-scraper"
        }
    }
}
```

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/GOhcc5i4vL31aV9rY/builds/lTTgkM26ERPkcbA9V/openapi.json
