# Company Data Lookup: Wikidata & GLEIF (no LinkedIn) (`ftrytech/open-company-data`) Actor

Company profile from a name, website, Wikidata id or LEI: industry, HQ, founding date, employees, revenue, tickers, LinkedIn and social links, plus the GLEIF legal entity (registered address, registration number). CC0 open data, no login, no personal data.

- **URL**: https://apify.com/ftrytech/open-company-data.md
- **Developed by:** [FtryTech](https://apify.com/ftrytech) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.80 / 1,000 company profiles

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/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 Data Lookup: Wikidata & GLEIF (no LinkedIn)

Give it a list of companies and get one clean profile each: industry, headquarters, country, founding date, employee count, revenue, stock tickers, website, LinkedIn and other social links, and logo. For companies with an LEI, it also adds the **legal entity** from the GLEIF register: the exact legal name, registered address, business-register number, legal form and status.

You can name a company four ways: its name (`Infosys`), its website (`stripe.com`), its Wikidata id (`Q312`) or its LEI (`335800TYLGG93MM7PR89`).

By **FtryTech**.

### Why this one

- **Clean data you may reuse.** Every field comes from Wikidata and the GLEIF Global LEI Repository. Both publish their data under **CC0**, so you can put it in your CRM, product or AI dataset with no licence worry. Each row says `"dataLicense": "CC0-1.0"`.
- **No LinkedIn scraping, no login, no proxies, no browser.** The Actor calls the public APIs that Wikidata and GLEIF publish for reuse. Runs are fast, cheap and do not break when a website changes.
- **Companies only, no personal data.** It never returns CEOs, founders, directors, emails or phone numbers. GLEIF sole proprietors (private people) are refused.
- **Website to company.** Paste a list of domains and get the companies behind them, matched on the official website each company lists.
- **Legal entity matching (KYB).** Registered address, register id and registration number (for example India's CIN, a US state file number or a UK company number).

### Who it is for

- **Sales and marketing teams:** enrich an account list with industry, size, HQ and LinkedIn URL before outreach.
- **Data and product teams:** fill a company table with stable ids (Wikidata, LEI, OpenCorporates, SEC CIK) that join to other datasets.
- **Compliance and procurement:** confirm a supplier's legal name, registered address and registration number from the GLEIF register.
- **AI agents:** one call answers "what is this company, where is it, how big is it". Every input has a default, and an empty answer is an explicit row.

### Input

Only `companies` matters, and even that has a default.

```json
{
  "companies": ["Infosys", "stripe.com", "Q312", "335800TYLGG93MM7PR89"],
  "maxMatchesPerQuery": 1,
  "includeLegalEntity": true,
  "language": "en"
}
```

| Field | Default | Meaning |
|---|---|---|
| `companies` | `["Infosys"]` | Names, websites, Wikidata ids or LEIs, one per line (up to 500 per run). |
| `maxMatchesPerQuery` | `1` | How many matches to return per line (1 to 10). Raise it for an ambiguous name and choose. |
| `includeLegalEntity` | `true` | Add the GLEIF legal entity for companies that have an LEI. Same price either way. LEI lines always read GLEIF. |
| `language` | `en` | Language for names, descriptions, industries and places (`de`, `fr`, `es`, `hi`, `ja` ...). Falls back to English. |

### Output

Each row has a `type`.

**`company`** (shortened):

```json
{
  "type": "company",
  "query": "Infosys",
  "matchedBy": "name",
  "source": "wikidata+gleif",
  "name": "Infosys limited",
  "description": "Indian multinational technology company",
  "website": "https://www.infosys.com/",
  "domain": "infosys.com",
  "industries": ["IT service management"],
  "country": "India",
  "headquarters": "Bengaluru",
  "foundedAt": "1981-07-02",
  "employees": 200364,
  "employeesAsOf": "2017-03",
  "stockExchanges": ["Bombay Stock Exchange", "National Stock Exchange of India", "Nasdaq", "New York Stock Exchange"],
  "tickers": ["500209", "INFY"],
  "linkedinUrl": "https://www.linkedin.com/company/infosys",
  "xUrl": "https://x.com/infosys",
  "crunchbaseUrl": "https://www.crunchbase.com/organization/infosys",
  "logoUrl": "https://commons.wikimedia.org/wiki/Special:FilePath/Infosys_logo.svg",
  "wikidataId": "Q26989",
  "wikipediaUrl": "https://en.wikipedia.org/wiki/Infosys",
  "lei": "335800TYLGG93MM7PR89",
  "openCorporatesId": "in/L85110KA1981PLC013115",
  "legalName": "INFOSYS LIMITED",
  "legalAddress": "ELECTRONICS CITY, HOSUR ROAD, BANGALORE, IN-KA, 560100, IN",
  "registrationAuthorityId": "RA000394",
  "registrationNumber": "L85110KA1981PLC013115",
  "legalFormCode": "DDKQ",
  "jurisdiction": "IN",
  "entityStatus": "ACTIVE",
  "leiStatus": "ISSUED",
  "dataLicense": "CC0-1.0"
}
```

The other fields are `aliases`, `instanceOf`, `dissolvedAt`, `isDefunct`, `legalForm`, `revenue`, `revenueCurrency`, `revenueAsOf`, `parentOrganization`, `parentWikidataId`, `facebookUrl`, `instagramUrl`, `youtubeUrl`, `githubUrl`, `wikidataUrl`, `secCik`, `legalCountryCode`, `headquartersAddress` and `leiLastUpdatedAt`. A field the sources do not know is `null` (or an empty list). `source` says where the row came from: `wikidata`, `gleif` (an LEI that Wikidata lacks) or `wikidata+gleif`.

**`no_results` (free):** written when a line finds nothing. Its `reason` is one of:

| `reason` | When |
|---|---|
| `not_found` | No company matches the name, website, id or LEI. |
| `not_a_company` | The match is a person, or the LEI belongs to a sole proprietor. People are never returned. |
| `invalid_entry` | The line is not a name, website, Wikidata id or LEI. |
| `fetch_failed` | Wikidata or GLEIF did not answer. Run the line again later. |

`message` says what to try next. You are never charged for these rows.

### Pricing (pay per event)

| Event | Price |
|---|---|
| Company profile (one `company` row, with the GLEIF legal entity when there is one) | $0.0008 ($0.80 per 1,000) |
| `no_results` rows | free |

Apify also charges its standard tiny run-start fee. The run stops cleanly at your spending limit.

### Tips

- **Ambiguous names:** "Mercury" can be many companies. Use the website or the Wikidata id, or set `maxMatchesPerQuery` to 3 and choose.
- **Domains are the most exact input** for well-known companies. Names work best as the full or legal name ("Tata Consultancy Services").
- **Coverage:** Wikidata holds well-known companies of every size, worldwide. The GLEIF register holds over 2.7 million legal entities. A small private firm may be in neither.

### For AI agents (MCP)

- Call it with only `companies`. Every other input has a sensible default.
- Read `type` first. A `no_results` row explains an empty answer in `reason` and `message`.
- `matchedBy` says how the line was read (`name`, `domain`, `wikidata_id` or `lei`). For a name, check `name` and `description` before you trust the match.
- Employee counts and revenue carry an "as of" date. Read it before you compare companies.

### Limits

- The data is as current as Wikidata's volunteers and the LEI issuers keep it. Employee and revenue figures can be a few years old; the `...AsOf` fields say how old.
- Name search returns the best-known company with that name.
- GLEIF covers only entities that hold an LEI (common for listed companies, banks, funds and exporters).

Questions or a field you need? Open an issue on the Actor's Issues tab.

# Actor input Schema

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

One per line, up to 500: a company name (Infosys), a website or domain (stripe.com), a Wikidata id (Q26989) or a 20-character LEI (335800TYLGG93MM7PR89).

## `maxMatchesPerQuery` (type: `integer`):

How many matching companies to return (and bill) per line. 1 returns the best match; raise it when a name is ambiguous ("Mercury") and you want to choose.

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

For a company with an LEI, add its legal name, registered address, registration authority and number, legal form and status from the GLEIF register. Same price either way. LEI lines always read GLEIF.

## `language` (type: `string`):

Language code for names, descriptions, industries and places (en, de, fr, es, hi, ja ...). Falls back to English when Wikidata has no text in that language.

## Actor input object example

```json
{
  "companies": [
    "Infosys",
    "stripe.com",
    "Q312",
    "335800TYLGG93MM7PR89"
  ],
  "maxMatchesPerQuery": 1,
  "includeLegalEntity": true,
  "language": "en"
}
```

# Actor output Schema

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

The run's rows in the default dataset, as JSON.

# 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": [
        "Infosys",
        "stripe.com",
        "Q312",
        "335800TYLGG93MM7PR89"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ftrytech/open-company-data").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": [
        "Infosys",
        "stripe.com",
        "Q312",
        "335800TYLGG93MM7PR89",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ftrytech/open-company-data").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": [
    "Infosys",
    "stripe.com",
    "Q312",
    "335800TYLGG93MM7PR89"
  ]
}' |
apify call ftrytech/open-company-data --silent --output-dataset

```

## MCP server setup

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

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/ev4r09w0ZgX0Icg67/builds/4PgtDvJu30mhgSMfH/openapi.json
