# Company ID Crosswalk — LEI, ISIN, CIK & VAT Lookup (`foxlabs/company-id-crosswalk-wikidata`) Actor

Resolve a company name to every public identifier it has: LEI, ISIN, ticker, SEC CIK, VAT number, national registry number, ROR, OpenCorporates, Crunchbase and LinkedIn — plus industry, employees, revenue, founding date, headquarters, parent and subsidiaries.

- **URL**: https://apify.com/foxlabs/company-id-crosswalk-wikidata.md
- **Developed by:** [Berkan Kaplan](https://apify.com/foxlabs) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 company records

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 ID Crosswalk — LEI, ISIN, CIK & VAT Lookup

Company data lives in a dozen systems that do not share a key. This actor solves that: give it a company name and it returns the LEI, the ISIN and ticker, the SEC CIK, the VAT number, the national registry number and the OpenCorporates, Crunchbase and LinkedIn handles — the join keys that let the rest of your stack talk to each other.

**No API key · Official source · Pay only for delivered rows · Same schema across the series**

### What data do you get?

| Field | Description |
|---|---|
| `companyName` | English label from Wikidata |
| `registrationNumber` | Wikidata Q-ID |
| `description` | Wikidata's one-line description |
| `lei` | Legal Entity Identifier |
| `isin` | ISIN codes |
| `ticker` | Stock ticker symbols |
| `stockExchanges` | Exchanges the company is listed on |
| `secCik` | SEC Central Index Key |
| `taxNumber` | VAT number |
| `nationalRegistryIds` | National company register identifiers, by scheme |
| `openCorporatesId` | OpenCorporates identifier |
| `crunchbaseId` | Crunchbase slug |
| `linkedinId` | LinkedIn company slug |
| `rorId` | ROR identifier where the company does research |
| `website` | Official website |
| `industry` | Industry |
| `legalForm` | Legal form |
| `employees` | Employee count as recorded |
| `revenue` | Revenue, with currency |
| `totalAssets` | Total assets, with currency |
| `incorporatedOn` | Inception date |
| `city` | Headquarters location |
| `countryName` | Country |
| `parentCompany` | Parent organization |
| `subsidiaries` | Subsidiaries recorded on Wikidata |
| `chiefExecutive` | Chief executive officer |
| `sourceUrl` | Wikidata entity page |

Every row also carries `query` (what you asked for), `scrapedAt` (ISO timestamp) and, when a
lookup fails, `error` explaining why.

### Example output

```json
{
  "country": "GLOBAL",
  "registry": "Wikidata",
  "companyName": "Siemens",
  "registrationNumber": "Q81230",
  "description": "German multinational conglomerate company",
  "lei": "W38RGI023J3WT1HWRP32",
  "isin": [
    "DE0007236101"
  ],
  "taxNumber": "DE129274202",
  "rorId": "059mq0909",
  "openCorporatesId": "de/F1103R_HRB12300",
  "crunchbaseId": "siemens",
  "linkedinId": "siemens",
  "website": "https://www.siemens.com/",
  "industry": "electrical engineering",
  "employees": 370000,
  "revenue": "75636000000 EUR",
  "incorporatedOn": "1847-10-01",
  "city": "Munich",
  "countryName": "Germany",
  "sourceUrl": "https://www.wikidata.org/wiki/Q81230"
}
```

### Input

```json
{
  "queries": ["Siemens","Novo Nordisk","Q81230","Shopify"],
  "maxResultsPerQuery": 5,
  "maxConcurrency": 4,
  "includeRaw": false
}
```

| Input | What it does |
|---|---|
| `queries` | Company names (`Siemens`, `Novo Nordisk`) or Wikidata Q-IDs (`Q81230`). |
| `maxResultsPerQuery` | Caps how many rows one query may produce. |
| `maxConcurrency` | How many queries run at once. Lower it if the source starts throttling. |
| `includeRaw` | Attaches the source's untouched record under `raw`, for fields this actor does not map. |
| `requestDelayMs` | Politeness delay between requests. |
| `proxyConfiguration` | Optional. The Wikidata API is open and rarely needs a proxy. |

### What people use it for

- **Entity resolution** — the join key problem, solved — map a name to LEI, ISIN, CIK and VAT so your systems can agree who a company is.
- **Enrichment fan-out** — get the CIK, then pull SEC financials; get the LEI, then pull ownership; get the VAT, then validate in VIES.
- **Ownership mapping** — parent and subsidiary links give you a first-pass corporate tree, for free.

### Notes and limits

- Coverage is best for listed and well-known companies. A small private firm may have no Wikidata item at all — you get an explanatory row, not a wrong match.
- Wikidata is community-edited. Identifiers (LEI, ISIN, CIK) are reliable because they are externally validated; financial figures are as good as the last editor and carry the year they refer to.
- Entity-valued fields (industry, headquarters, parent) are resolved to English labels in one batched extra request rather than left as Q-IDs.

### Where the data comes from

Wikidata publishes its structured data through a documented open API with no key, under a CC0 dedication. Source: [Wikidata](https://www.wikidata.org/)

### FAQ

#### Is this company identifier crosswalk scraper free?

The data source is free and needs no API key — you pay only for the rows the run delivers ($0.004 each). Failed or empty lookups are never charged.

#### Do I need an API key or a login?

No. Wikidata publishes its structured data through a documented open API with no key, under a CC0 dedication.

#### What can I search by?

By company name (`Siemens`, `Novo Nordisk`) or by Wikidata Q-ID (`Q81230`). Names are matched against Wikidata's own search and filtered to organizations.

#### How current is the data?

Every run queries the source live, so results are as fresh as the source itself. Wikidata is edited continuously; financial figures carry the year they were reported.

#### How fast is it, and how many queries can I run?

Queries run concurrently (4 at a time by default, tunable in the input). A prefilled run finishes in seconds; large lists scale roughly linearly and stay well inside a normal run timeout.

#### Can I export the results to CSV, Excel or JSON?

Yes. Apify datasets export to CSV, Excel, JSON, XML and HTML, and can be pulled through the API or pushed to your own storage.

#### What happens when a query returns nothing?

You still get a row, carrying your original `query` and an `error` field explaining why. Nothing is silently dropped, and you are not charged for it.

#### Is scraping this data legal?

Yes. Wikidata releases all of its structured data into the public domain under CC0, explicitly for reuse.

### Related actors

- [Research Organization Data — ROR](https://apify.com/foxlabs/ror-research-organization-data)

***

Built by [Fox Labs](https://apify.com/foxlabs) — B2B company intelligence from public sources, as clean JSON.

# Changelog

This Actor's version history is a separate document: https://apify.com/foxlabs/company-id-crosswalk-wikidata/changelog.md

# Actor input Schema

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

Company names (`Siemens`, `Novo Nordisk`) or Wikidata Q-IDs (`Q81230`).

## `maxResultsPerQuery` (type: `integer`):

How many rows a single query may produce.

## `maxConcurrency` (type: `integer`):

How many queries to run at the same time. Lower it if the source throttles you.

## `includeRaw` (type: `boolean`):

Attach the source's untouched response under `raw`. Useful when you need a field this actor does not map.

## `requestDelayMs` (type: `integer`):

Politeness delay against a public source. Raise it for large runs.

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

Optional. The Wikidata API is open and rarely needs a proxy.

## Actor input object example

```json
{
  "queries": [
    "Siemens",
    "Novo Nordisk",
    "Q81230",
    "Shopify"
  ],
  "maxResultsPerQuery": 5,
  "maxConcurrency": 4,
  "includeRaw": false,
  "requestDelayMs": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "queries": [
        "Siemens",
        "Novo Nordisk",
        "Q81230",
        "Shopify"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/company-id-crosswalk-wikidata").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": [
        "Siemens",
        "Novo Nordisk",
        "Q81230",
        "Shopify",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("foxlabs/company-id-crosswalk-wikidata").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": [
    "Siemens",
    "Novo Nordisk",
    "Q81230",
    "Shopify"
  ]
}' |
apify call foxlabs/company-id-crosswalk-wikidata --silent --output-dataset

```

## MCP server setup

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

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/TcBkmnqEbBr4yzeAT/builds/eSH34zVFNWlDE8sah/openapi.json
