# Company Research MCP for AI Agents (`digital_influx/company-research-mcp`) Actor

MCP server for Claude, ChatGPT, Gemini and Cursor: company contacts and tech stack, legal entities (LEI with parent companies, EU legal notices with VAT checked), SEC financials, filings and insider trades, funding rounds, new US businesses and jobs.

- **URL**: https://apify.com/digital_influx/company-research-mcp.md
- **Developed by:** [Bruno Petrelli](https://apify.com/digital_influx) (community)
- **Categories:** MCP servers, Lead generation, Business
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 website contacts founds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Research MCP for AI Agents

**An MCP server that gives Claude, ChatGPT, Gemini, Cursor and any other MCP client ten company research tools:**

| Tool | What the agent gets |
|---|---|
| `get_website_contacts` | Emails (with a check that the domain accepts mail), phone numbers, social profiles (LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, GitHub...), named people, address and careers page, read on the company's own website. |
| `identify_company` | The legal company behind a European website, from its legal notice: registered name, legal form, **registration number checked by its control digit** (German Handelsregister, French SIREN, Italian Partita IVA, Spanish CIF, UK company number, Dutch KvK, Belgian KBO/BCE, Danish CVR, Swedish and Norwegian organisation numbers, Finnish Y-tunnus), VAT ID, register, address and managing directors. 13 countries. |
| `find_new_us_businesses` | Businesses newly registered in the US, from official registries: new LLCs, corporations and DBAs in New York, Colorado, Connecticut, Oregon and Pennsylvania, and new businesses in Los Angeles, San Francisco and Chicago, with owners, registered agent, and email and NAICS industry where published. |
| `search_jobs` | Open jobs straight from the career sites of 20,000+ companies (Greenhouse, Lever, Ashby, Workable, Recruitee, Personio, Teamtailor, Gem), indexed every day: title, company, location, remote, seniority, salary when published, posting date and the apply link. |
| `get_tech_stack` | The technologies a website runs (CMS, e-commerce platform, analytics, ads, chat, payments, frameworks, CDN) plus its email provider and the SaaS tools verified in its DNS. |
| `search_insider_trades` | Stock trades that directors, officers and 10% owners reported to the SEC on Form 4: who, buy or sell, shares, price, value, holdings after, planned or not. |
| `search_startup_funding` | Companies that just reported raising money on SEC Form D: amount raised and round size, industry, year of incorporation, address, phone and executives. |
| `lookup_legal_entity` | Any company in the global LEI system (GLEIF): LEI, exact legal name, legal form, company register and number there, addresses, status, and its direct and ultimate parent companies. |
| `get_company_financials` | Annual figures of a US-listed company from its 10-K reports at the SEC: revenue, gross profit, operating income, net income, diluted EPS, operating cash flow, assets, liabilities, equity and cash, year by year. |
| `list_sec_filings` | The latest SEC filings of a company (10-K, 10-Q, 8-K with the items it discloses, proxy statements...), with links to each document. |

Ask your agent things like *"Who is the company behind zalando.de, and what is its VAT ID?"*, *"Find the sales email and LinkedIn of acme.com"*, *"List restaurants that registered in Connecticut this month with their email"* *"Find remote senior data engineer jobs posted this week that publish a salary"*, *"Is allbirds.com on Shopify, and who hosts its email?"*, *"Did Alphabet insiders sell stock this month?"* or *"Which health-care startups in California raised money this week?"*: it picks the tool and gets clean JSON back. **You pay only for results:** a call that finds nothing is free.

### Connect your agent

**Easiest, with your Apify account (sign-in in the browser, no token to copy):** add this remote MCP server URL to your client:

```
https://mcp.apify.com?tools=digital_influx/company-research-mcp
```

- **Claude** (claude.ai, Claude Desktop): add a custom connector with that URL.
- **ChatGPT:** add it as a connector (MCP server URL) in developer mode.
- **Cursor, VS Code, Windsurf, Gemini CLI and other clients:** add a remote MCP server. With a token instead of the browser sign-in:

```json
{
  "mcpServers": {
    "company-research": {
      "url": "https://mcp.apify.com?tools=digital_influx/company-research-mcp",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

(Gemini CLI writes `httpUrl` instead of `url` in `~/.gemini/settings.json`.)

**Directly, without the Apify MCP server:** this Actor runs in Standby mode as a Streamable HTTP MCP server. Take its Standby URL from the Actor's API tab in Apify Console, add `/mcp`, and send your Apify token as `Authorization: Bearer YOUR_APIFY_TOKEN`.

**A record of every call:** each tool call your agent makes is also saved as a row of the Standby run's dataset (tool, arguments, a one-line summary and the result), so you can check later what it asked and got. **Without an agent:** a standard run calls one tool from the input (`tool` and `arguments`) and saves the result to the dataset, so the tools also work from the API, schedules and integrations (Make, n8n, Zapier).

### The tools

#### get_website_contacts

```json
{ "url": "37signals.com", "maxPages": 3 }
```

Reads the homepage and up to `maxPages` contact, about, team and imprint pages (5 by default, at most 10), respecting robots.txt. Returns `emails`, `emailDetails` (where each email was found, whether it is the site's own domain, whether the domain accepts mail), `phones`, `socials`, `people`, `address`, `careersPage`, `jobBoards`, `language` and `pagesVisited`.

#### identify_company

```json
{ "url": "hetzner.com" }
```

Real result (2026-10-04 page): `Hetzner Online GmbH`, `GmbH`, `HRB 6089` (register Ansbach), VAT ID `DE812871812`, `Industriestr. 25, 91710 Gunzenhausen, DE`, managing directors Martin Hetzner, Stephan Konvickova and Günther Müller, and the legal notice page. Some big retailers refuse requests from cloud servers, where Apify runs: the tool then reports the site as blocked instead of working around it. The country comes from the domain; for `.com` and other generic domains the tool reads the legal notice as French, Italian, Spanish or British first, then as a German Impressum, then for Benelux and Nordic numbers, reading each page only once. Add `"country": "nl"` (or `de`, `at`, `ch`, `fr`, `it`, `es`, `uk`, `be`, `dk`, `se`, `no`, `fi`) to choose. Numbers with a control digit are only returned when it checks out.

#### find_new_us_businesses

```json
{ "sources": ["connecticut"], "keywords": ["restaurant"], "onlyWithEmail": true, "registeredWithinDays": 30, "limit": 20 }
```

All arguments are optional: `sources` (`new-york`, `colorado`, `connecticut`, `oregon`, `pennsylvania`, `los-angeles`, `san-francisco`, `chicago`), `registeredWithinDays` (7 by default), `entityKinds` (`llc`, `corporation`, `nonprofit`, `partnership`, `cooperative`, `assumed-name`, `other`), `keywords`, `cities`, `zipCodes`, `naicsPrefixes`, `onlyWithEmail` and `limit` (20 by default, at most 100). Newest first, the registries taking turns within a day. Oregon and Pennsylvania publish monthly: the result says when a registry has nothing that recent.

#### search_jobs

```json
{ "keywords": ["data engineer"], "remoteOnly": true, "postedWithinDays": 7, "onlyWithSalary": true, "limit": 10 }
```

All arguments are optional: `keywords` (words in the title), `locations` (city, country or country code), `remoteOnly`, `seniority` (`intern`, `entry`, `senior`, `lead`, `director`, `executive`, `unspecified`), `postedWithinDays`, `employmentTypes`, `descriptionKeywords` (skills the description must name, e.g. Python; slower, since descriptions are read), `onlyWithSalary`, `onlyVisaSponsorship`, `companies`, `limit` (10 by default, at most 50) and `maxPerCompany` (3 by default, so one big employer does not fill the answer). Newest first, without the long descriptions, so the answer stays short for the model. The tool runs the Job Search Actor of the same author in your account and takes 20 to 60 seconds.

#### get_tech_stack, search_insider_trades, search_startup_funding

```json
{ "url": "allbirds.com" }
```

```json
{ "tickers": ["GOOGL", "NVDA"], "filedWithinDays": 14, "limit": 20 }
```

```json
{ "industries": ["health-care"], "locations": ["CA"], "filedWithinDays": 7, "limit": 20 }
```

`search_insider_trades` also takes `transactionCodes` (P and S, open-market purchases and sales, by default), `roles`, `minValue` and `excludePlannedTrades`; `search_startup_funding` takes `industries`, `locations`, `minAmountSold` and `onlyYoungCompanies`. Like `search_jobs`, these three run another Actor of the same author in your account (Tech Stack Detector, SEC Insider Trading, SEC Form D) and return a compact answer.

#### lookup_legal_entity, get_company_financials, list_sec_filings

```json
{ "name": "Google LLC" }
```

Real result (2026-10-04): `GOOGLE LLC`, LEI `7ZW8QJWVPR4P1J1KQY45`, Limited Liability Company, number `3582691` at the Delaware Division of Corporations, ultimate parent `ALPHABET INC.` Also by `lei`, and with `country` to search one country. LEIs with wrong check digits are refused before any request.

```json
{ "company": "AAPL", "years": 4 }
```

Real result (10-K of 2025-10-31): fiscal year ended 2025-09-27, revenue USD 416,161,000,000, net income USD 112,010,000,000, diluted EPS 7.46, total assets USD 359,241,000,000. `company` takes a ticker, a CIK or the exact name as the SEC lists it. Foreign companies that report IFRS on Form 20-F have no US GAAP figures there, and cost nothing.

```json
{ "company": "TSLA", "forms": ["8-K"], "filedWithinDays": 90 }
```

Each 8-K comes with the items it discloses, named as the SEC names them (2.02 Results of operations, 5.02 Departure or appointment of officers...). Insider forms 3, 4, 5 and 144 are left out unless you name them in `forms`.

### How much it costs

Pay per event, only for results:

| Event | When | Price |
|---|---|---|
| `contacts` | `get_website_contacts` found contact details | USD 0.02 |
| `company` | each company `identify_company` or `lookup_legal_entity` identifies | USD 0.01 |
| `business` | each business `find_new_us_businesses` returns | USD 0.004 |
| `financials` | `get_company_financials` returned a company's annual figures | USD 0.02 |
| `filings` | `list_sec_filings` listed filings | USD 0.01 |

`search_jobs`, `get_tech_stack`, `search_insider_trades` and `search_startup_funding` charge nothing here: the Actor each one runs bills its own events (Job Search: USD 0.01 per search plus USD 0.006 per job; Tech Stack Detector: USD 0.003 per website; SEC Insider Trading: USD 0.002 per transaction; SEC Form D: USD 0.005 per filing). A website without contact details or without a company number, a blocked site, or a search with no results costs nothing. Runs in Standby use 256 MB.

### Good to know

- **Respectful by design:** an honest User-Agent (`company-research-mcp`), robots.txt read for this Actor's own name on every site, one page at a time per site, no proxies, and a site that refuses robots (403) is reported, never worked around.
- **Results are what the sources publish.** Legal notices are mandatory in the EU and the UK, so most company sites have one; sites that build it with JavaScript only, or put it in a PDF, come back as `no_data`.
- **US registries:** official open data of the Secretaries of State and the cities, read through their Socrata APIs one request a second. Emails and phones are the ones the registries publish: follow CAN-SPAM, the GDPR where it applies, and the TCPA and state rules for calls and texts.
- **The same engines as the single-purpose Actors** of this author: Website Contact Scraper, German Impressum Scraper, Legal Notice Extractor, Company ID Finder (Benelux and Nordics) and New Business Leads, if you want to run them on thousands of sites in one batch.
- **Job search for agents:** Job Search MCP by the same author lists every open job of a company live and reads full job descriptions, on top of the job search.

### Sources and attribution

The website tools read the public pages of each site. `get_company_financials` and `list_sec_filings` read the SEC's EDGAR data (data.sec.gov), at the pace the SEC asks for, with a User-Agent that names this Actor. `lookup_legal_entity` reads GLEIF's public API; LEI data is published by GLEIF under CC0. `find_new_us_businesses` uses: New York State Department of State (data.ny.gov, OPEN-NY Terms of Use); Colorado Department of State (data.colorado.gov, public domain); Connecticut Secretary of the State (data.ct.gov, public domain); Oregon Secretary of State Corporation Division (data.oregon.gov, public domain); Pennsylvania Department of State (data.pa.gov, public domain); City of Los Angeles Office of Finance (data.lacity.org, CC0); San Francisco Treasurer & Tax Collector (data.sf.gov, PDDL); and the City of Chicago Department of Business Affairs and Consumer Protection (Chicago Data Portal). The Chicago data has been modified for use from its original source, www.cityofchicago.org; the City of Chicago makes no claims as to its content, accuracy, timeliness or completeness. No state or city endorses this Actor or the uses of its results.

# Actor input Schema

## `tool` (type: `string`):

The tool to call in a standard run. get_website_contacts: emails, phones and social profiles of a website. identify_company: the legal company behind a European website. find_new_us_businesses: newly registered US businesses. search_jobs: open jobs on 20,000+ career sites. get_tech_stack: the technologies of a website. search_insider_trades: SEC Form 4 insider trades. search_startup_funding: SEC Form D funding rounds. lookup_legal_entity: LEI, register number and parents of a company. get_company_financials: annual figures of a US-listed company. list_sec_filings: its latest SEC filings.

## `arguments` (type: `object`):

The tool's arguments as JSON. get_website_contacts: {"url": "stripe.com"}. identify_company: {"url": "zalando.de"}. find_new_us_businesses: {"sources": \["colorado"], "registeredWithinDays": 7, "limit": 20}.

## Actor input object example

```json
{
  "tool": "find_new_us_businesses",
  "arguments": {
    "sources": [
      "colorado"
    ],
    "registeredWithinDays": 7,
    "limit": 5
  }
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

# 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 = {
    "tool": "find_new_us_businesses",
    "arguments": {
        "sources": [
            "colorado"
        ],
        "registeredWithinDays": 7,
        "limit": 5
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("digital_influx/company-research-mcp").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 = {
    "tool": "find_new_us_businesses",
    "arguments": {
        "sources": ["colorado"],
        "registeredWithinDays": 7,
        "limit": 5,
    },
}

# Run the Actor and wait for it to finish
run = client.actor("digital_influx/company-research-mcp").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 '{
  "tool": "find_new_us_businesses",
  "arguments": {
    "sources": [
      "colorado"
    ],
    "registeredWithinDays": 7,
    "limit": 5
  }
}' |
apify call digital_influx/company-research-mcp --silent --output-dataset

```

## MCP server setup

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

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/LxXXNJXlSR7IMjQnR/builds/owT2mZ3oy5LlMRTwW/openapi.json
