# Company Lookup: Website, LEI, Ticker and Profile (`tidyharvest/company-lookup`) Actor

Turn a company name, domain, LEI or Wikidata id into a profile: official website, ticker, industry, HQ, size, social handles and GLEIF legal entity with parents. Open data, no proxy or key. $1.00 per 1,000.

- **URL**: https://apify.com/tidyharvest/company-lookup.md
- **Developed by:** [TidyHarvest](https://apify.com/tidyharvest) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.75 / 1,000 company resolveds

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 Lookup: Website, LEI, Ticker and Profile

Turn a **company name, website domain, LEI or Wikidata id** into one clean profile: official **website and domain**, **stock ticker and exchange**, industry, headquarters, founding year, employees, logo, social handles (X, LinkedIn, Facebook, Instagram, GitHub, YouTube, Crunchbase), plus the **registered legal entity** (LEI, legal name, registration number, legal and HQ address, parents) from GLEIF. It joins two open datasets (Wikidata and the GLEIF Global LEI Index), so there is no scraping, no proxy, no login and no API key.

### What you can do with it

- **Name to domain:** clean a CRM list of company names into official websites.
- **Domain to company:** find the company, ticker and legal entity behind a website.
- **KYC and compliance enrichment:** get the LEI, registered name, registration number and legal address of a counterparty.
- **Corporate structure:** add direct and ultimate parent companies.

### Input

| Field | What it does |
|---|---|
| `queries` | Company names, domains (`stripe.com`), LEI codes or Wikidata ids (`Q95`). |
| `includeLegalEntity` | Add the GLEIF legal entity block (on by default). |
| `includeParents` | Add direct and ultimate parent (slower). |
| `keywords` | Keep only profiles containing one of these. |
| `maxItems` | Hard cap on results (and cost). |

Example:

```json
{ "queries": ["Stripe", "nike.com", "Siemens AG"], "includeParents": true }
```

### Output

One item per company:

```json
{
  "query": "Stripe", "matchedBy": "name", "name": "Stripe", "wikidataId": "Q7624104",
  "website": "https://stripe.com/", "domain": "stripe.com", "founded": 2010, "employees": 8000,
  "tickers": [], "industries": ["..."], "headquarters": "...", "matchConfidence": "high",
  "legalEntity": { "lei": "549300CLHGIPTCYHQ143", "legalName": "STRIPE, LLC", "jurisdiction": "US-DE",
                   "legalAddress": { "city": "...", "country": "US" }, "registrationNumber": "..." }
}
```

`legalEntity` is `null` when the company has no LEI. Public companies, banks and funds almost always have one; many startups do not. Non-Latin legal names (Japanese, Korean, ...) come with `legalNameLatin`. For a name or domain, `otherCandidates` lists up to three other companies it could have meant (e.g. a subsidiary or brand), so you can correct a match yourself.

### Pricing

Pay per result: **$1.00 per 1,000 companies** (`company-resolved`). Queries that cannot be matched with confidence fail and are not charged; a run where nothing matches fails instead of returning an empty dataset.

### Limits and notes

- Coverage follows Wikidata: well-known companies resolve reliably, small local firms often do not. `matchConfidence` tells you how sure the match is.
- Headcount, revenue and founding year come from Wikidata and may be dated.
- The company must have a Wikidata entry; the LEI/GLEIF block needs an LEI. An LEI query whose company has no Wikidata entry still returns the legal entity.
- A name that best matches something other than a company (a town, a planet, a person) fails with the closest matches instead of returning a wrong profile, and the legal entity is joined only when the registered name and country agree.
- Both sources are open public APIs and are called at a gentle rate.

# Actor input Schema

## `queries` (type: `array`):

One per line: a company name (Stripe), a website domain (stripe.com), an LEI code, or a Wikidata id (Q95). Each resolves to one profile; a query that cannot be matched with confidence fails and is not charged.

## `includeLegalEntity` (type: `boolean`):

Add the registered legal name, LEI, registration number, legal and headquarters address when an LEI exists.

## `includeParents` (type: `boolean`):

Add the direct and ultimate parent (name and LEI) from GLEIF. Slower: two extra calls per company.

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

Keep a company only if its profile contains one of these. Empty = all.

## `maxItems` (type: `integer`):

Hard cap on results for the whole run (also caps your cost). 0 or empty = no limit.

## Actor input object example

```json
{
  "queries": [
    "Stripe",
    "nike.com",
    "Siemens AG"
  ],
  "includeLegalEntity": true,
  "includeParents": false
}
```

# Actor output Schema

## `companies` (type: `string`):

One item per company.

# 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 = {
    "queries": [
        "Stripe",
        "nike.com",
        "Siemens AG"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tidyharvest/company-lookup").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 = { "queries": [
        "Stripe",
        "nike.com",
        "Siemens AG",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("tidyharvest/company-lookup").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 '{
  "queries": [
    "Stripe",
    "nike.com",
    "Siemens AG"
  ]
}' |
apify call tidyharvest/company-lookup --silent --output-dataset

```

## MCP server setup

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

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/yjn47WHfM1efVWjeM/builds/DVreTjgNeo2EE9qlr/openapi.json
