> ## Documentation Index
> Fetch the complete documentation index at: https://www.datalegion.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Free Company Dataset

> Company Firmographics (Free): domain, LinkedIn URL, industry, size, type and founding year for 27M+ companies worldwide, free to download and use with attribution.

**Company Firmographics (Free)** covers 27M+ companies worldwide. Every record has a primary domain, a LinkedIn URL, an industry and a size range, plus company type and founding year where we have them. It contains no personal data. It is refreshed every quarter.

It is a subset of our company data: the companies and fields below, out of everything the [Company Enrichment](/docs/api-reference/company-enrichment) and [Company Search](/docs/api-reference/company-search) APIs and a bulk data license return.

## Fields

| Field | Description |
| - | - |
| `legion_id` | Data Legion company ID, the same in the API and paid datasets |
| `name` | Company name, normalized |
| `domain` | Primary website domain |
| `linkedin_url` | LinkedIn company page |
| `industry` | Industry |
| `type` | Company type |
| `size` | Employee size range |
| `founded` | Founding year, where known |
| `build_version` | The Data Legion build the record comes from |

Values follow the [field formats](/docs/data-standardization/field-formats): text is lower case, and `industry`, `type` and `size` use the values in [Enums](/docs/enums). Rows come in no particular order.

## Where to get it

The same data is in four places. Each one serves the newest quarterly build.

| Where | What you get | Access |
| - | - | - |
| [datalegion.ai](https://www.datalegion.ai/datasets/free/company) | Gzipped CSV and JSONL files | Enter a work email, pick a use case and accept the license; we email a link that works for 48 hours |
| Dashboard, **Free Datasets** | The same files | Signed in, no form |
| [Snowflake Marketplace](https://app.snowflake.com/marketplace/listing/GZU6Z9Y4PSE) | A shared database: schema `company_free`, table `companies` | Get the listing, no request |
| [Hugging Face](https://huggingface.co/datasets/datalegionai/company-firmographics) | Parquet files | Share your Hugging Face username and email, give your company and use case, and accept the license; access opens right away |

### On Snowflake

```sql theme={null}
SELECT size, COUNT(*) AS companies
FROM company_free.companies
WHERE industry = 'software development'
GROUP BY size
ORDER BY companies DESC;
```

The [Snowflake page](/docs/integrations/snowflake) covers the listing and the paid products it joins to.

### On Hugging Face

Request access on the [dataset page](https://huggingface.co/datasets/datalegionai/company-firmographics), then read the files with a [Hugging Face token](https://huggingface.co/settings/tokens). This looks up a list of domains with DuckDB, reading only the columns the query needs instead of downloading every file:

<CodeGroup>
  ```python Python theme={null}
  import os

  import duckdb

  con = duckdb.connect()
  con.execute("CREATE SECRET hf (TYPE huggingface, TOKEN ?)", [os.environ["HF_TOKEN"]])

  accounts = ["atlassian.com", "expediagroup.com"]
  rows = con.execute(
      """
      SELECT domain, legion_id, name, industry, size
      FROM 'hf://datasets/datalegionai/company-firmographics/data/*.parquet'
      WHERE domain IN (SELECT unnest(?))
      """,
      [accounts],
  ).fetchall()

  for domain, legion_id, name, industry, size in rows:
      print(domain, legion_id, name, industry, size)
  ```

  ```javascript JavaScript theme={null}
  import { DuckDBInstance, LIST, listValue, VARCHAR } from "@duckdb/node-api";

  const db = await DuckDBInstance.create();
  const con = await db.connect();
  await con.run("CREATE SECRET hf (TYPE huggingface, TOKEN $1)", [
    process.env.HF_TOKEN,
  ]);

  const accounts = ["atlassian.com", "expediagroup.com"];
  const reader = await con.runAndReadAll(
    `SELECT domain, legion_id, name, industry, size
     FROM 'hf://datasets/datalegionai/company-firmographics/data/*.parquet'
     WHERE domain IN (SELECT unnest($1))`,
    [listValue(accounts)],
    [LIST(VARCHAR)],
  );

  for (const row of reader.getRowObjects()) {
    console.log(row.domain, row.legion_id, row.name, row.industry, row.size);
  }
  ```
</CodeGroup>

A domain can belong to more than one company record (a brand's locations can share its website), so a lookup returns every record with that domain. To load the whole dataset instead, `load_dataset("datalegionai/company-firmographics", split="train")` from the `datasets` library works once you are signed in (`hf auth login`).

## Joining to the full data

Keep the `legion_id` of a company you find here. It is the same ID in the [Company Enrichment](/docs/api-reference/company-enrichment) API and every paid company dataset, so the company joins straight to its full profile. Nearly every ID carries over from one build to the next: an ID changes only when records are merged, split or removed.

## License

Free for internal and commercial use with attribution to Data Legion; not for resale or redistribution as a dataset. Where you display or publish it, credit Data Legion, for example "Company data from Data Legion (datalegion.ai)". The full license is in the [Terms of Service](https://www.datalegion.ai/legal/terms#free-datasets).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.