# Company (https://webmetic.de/docs/en/api/datenmodell/company)

A Company object describes a company that visited your website at least once in the requested period. For example, Bergquell Mineralbrunnen GmbH reads your pricing page several times, and `GET /company` returns its address, its size, its NACE codes, and its activity.

The object holds data about the company, not visits and not people. Visits are in the [Session](https://webmetic.de/docs/en/api/datenmodell/session) object, contacts in the [Contact](https://webmetic.de/docs/en/api/datenmodell/contact) object. The [data model](https://webmetic.de/docs/en/api/datenmodell) shows how the objects fit together.

## Rules [#rules]

- **One entry per company**: `GET /company` returns every company that had at least one visit on the requested website between `from_date` and `to_date`. The order of the entries is not fixed.
- **Missing values**: When Webmetic doesn't know a value, the field is missing. It isn't sent as `null`. The exception is `fit_score`, which is `null` without an ideal customer profile. The feeds, by contrast, return unknown values as `null`, as described under [Missing fields and null](#missing-fields-and-null).
- **ID**: `company_id` stays the same for a company. If you keep companies in your CRM for the long term, store `company_url` as a second key.
- **Scores ignore the period**: The requested period doesn't change the scores. Activity counts all of the company's visits on this website.
- **Freshness**: Webmetic refreshes name, address, and industry codes on later visits. It recalculates the scores on every visit and also at regular intervals.
- **Several websites**: `GET /company` accepts `domain` more than once, for example `?domain=a.de&domain=b.de`. Each company then appears only once, with the scores of the first listed website it visited.
- **Exclusions**: Webmetic records no new visits for companies whose domain is on the [domain blacklist](https://webmetic.de/docs/en/konto/domain-blacklist) and for organization types you switch off under [**Menu** > **Organization types**](https://app.webmetic.de/?menu=session_organization_type). Earlier visits stay in the API. Your own company is missing from the data of your own website.
- **Cost**: Reading company data costs no credits and works on every plan, including Free.

## Fields [#fields]

The table lists the fields of the object.

| Field | Type | Example | Description |
| --- | --- | --- | --- |
| `company_id` | `string` | `"41ea486a9c95"` | The company's ID. Links Company to Session and Contact. Always present. |
| `company_name` | `string` | `"Bergquell Mineralbrunnen GmbH"` | The company's name. Always present. Without a known name, it holds the domain. |
| `company_url` | `string` | `"www.bergquell.example"` | The company's website as a host, without `https://` and without a path. A `www.` stays. Always present. |
| `company_logo_url` | `string` | `"https://logos.docs.example/bergquell.png"` | Address of the logo Webmetic stores, as WebP, JPG, PNG, or ICO. |
| `primary_color`, `secondary_color` | `string` | `"#1f6feb"` | Main and second brand color as a hex value. Missing when Webmetic knows no logo. |
| `organization_type` | `string` | `"business"` | Kind of organization: `business` (company), `academic` (educational institution), or `government` (public sector). A category, not a legal form. |
| `address` | `string` | `"Brunnenweg 4"` | Street and house number. |
| `postal_code` | `string` | `"85354"` | Postal code. |
| `city` | `string` | `"Freising"` | City. |
| `country` | `string` | `"Deutschland"` | Country as its German name. When Webmetic doesn't recognize the country, this holds the value as the company states it, and `country_code` is missing. |
| `country_code` | `string` | `"DE"` | Country code under ISO 3166-1 alpha-2, in capitals. |
| `directors` | `array` | `["Florian Obermaier"]` | Names of the managing directors, one string per name. |
| `phone_number`, `fax_number` | `string` | `"+49 89 99998214"` | Phone and fax number as they appear on the company's website. Webmetic doesn't normalize the format. |
| `email_address` | `string` | `"info@bergquell.example"` | The company's general email address from its website. |
| `vat_id` | `string` | `"DE000000000"` | VAT ID as the company states it. |
| `tax_number` | `string` | `"115/000/00000"` | Tax number as the company states it. |
| `registration_number` | `string` | `"HRB 000000"` | Number of the register entry. |
| `registration_court` | `string` | `"Amtsgericht München"` | Register court. |
| `employee_count` | `array` | `[201, 500]` | Employee range: two numbers `[min, max]`, `max` is `null` when there's no upper limit. See [Ranges](#ranges). |
| `revenue` | `array` | `[50000000, 100000000]` | Annual revenue range in euros: two numbers `[min, max]`, `max` is `null` when there's no upper limit. See [Ranges](#ranges). |
| `lead_score` | `number` | `88.0` | Activity from 0 to 100, see [Scores](#scores). Always present. |
| `fit_score` | `integer` or `null` | `92` | Match with the ideal customer profile from 0 to 100, `null` without an ideal customer profile. |
| `relevance_score` | `number` | `80.96` | Relevance from 0 to 100. Always present. |
| `linkedin`, `facebook`, `instagram`, `youtube`, `twitter` | `string` | `"https://www.linkedin.com/company/bergquell-mineralbrunnen-example"` | Full profile address that Webmetic finds on the company's website. One per network. |
| `short_description_de`, `short_description_en` | `string` | `"Mineral spring with its own bottling."` | Short description of the company in German and English. |
| `full_description_de`, `full_description_en` | `string` | `"Bergquell Mineralbrunnen GmbH bottles mineral water."` | Detailed description in German and English. |
| `what_they_do_de`, `what_they_do_en` | `string` | `"Bottling of mineral water"` | What the company does. |
| `how_they_make_money_de`, `how_they_make_money_en` | `string` | `"Sales to retail and restaurants"` | How the company earns its money. |
| `target_audience_de`, `target_audience_en` | `string` | `"Beverage retailers and restaurants"` | Who the company works for. |
| `nace_codes` | `array` | see [NACE codes](#nace-codes) | One to three NACE classes as objects, the first is the main activity. |
| `wz2025_codes` | `array` | see [NACE codes](#nace-codes) | Subclasses of the German WZ 2025 for these NACE classes, as objects. |
| `industry_categories` | `array` | `["industrie_fertigung"]` | IDs of the industry categories, as strings, that the dashboard shows as **Industry**, main industry first. Only in `/company-sessions`. |
| `blurred` | `boolean` | `true` | Only on companies hidden on the Free plan, see [Edge cases](#edge-cases). |

Webmetic writes the texts in `short_description_*`, `full_description_*`, `what_they_do_*`, `how_they_make_money_*`, and `target_audience_*` from the company's website.

New fields can appear at any time. Your code should therefore ignore unknown fields.

### Ranges [#ranges]

`employee_count` and `revenue` are ranges of two numbers `[min, max]`, not exact numbers. When Webmetic doesn't know the size, the field is missing.

- **Employees**: `[1, 10]`, `[11, 50]`, `[51, 200]`, `[201, 500]`, `[501, 1000]`, `[1001, 5000]`, `[5001, 10000]`, and `[10001, null]` with no upper limit.
- **Revenue**: ranges in euros from `[0, 100000]` to `[100000000, 500000000]`, and `[500000000, null]` with no upper limit.

## Scores [#scores]

The three scores run from 0 to 100. The dashboard shows them under other names:

| Field | In the dashboard | Meaning |
| --- | --- | --- |
| `lead_score` | **Activity**, in exports **Lead Score** | How actively the company looks around your website. Rounded to two decimals. |
| `fit_score` | **Fit**, also in exports | How well the company matches the website's ideal customer profile. Whole number. |
| `relevance_score` | **Relevance** | Fit times activity. Rounded to two decimals. |

When the last visit lies further back, activity falls even without a new visit.

`fit_score` is `null` as long as the website has no [ideal customer profile](https://webmetic.de/docs/en/visitor-intelligence/zielkundenprofil). Then `relevance_score` equals `lead_score`.

In the example below, a `fit_score` of 92 and a `lead_score` of 88 give a relevance of 80.96. For how Webmetic calculates the values, see [Relevance, activity, and fit](https://webmetic.de/docs/en/visitor-intelligence/relevanz-aktivitaet-und-fit).

## NACE codes [#nace-codes]

`nace_codes` holds one to three classes of the European industry classification NACE Rev. 2.1 (2025 edition). Webmetic assigns the codes from the company's website.

The first class is the main activity. There's no separate field for this, because the order carries it. When a company has no code, `nace_codes` is missing.

Each entry has ten fields:

| Field | Type | Example | Description |
| --- | --- | --- | --- |
| `code` | `string` | `"11.07"` | Code of the class in the format `NN.NN`. |
| `full_code` | `string` | `"C 11.07"` | Section letter, a space, the code. |
| `section_code` | `string` | `"C"` | Section letter. |
| `section_description_de` | `string` | `"Verarbeitendes Gewerbe/Herstellung von Waren"` | Section name in German. |
| `section_description_en` | `string` | `"Manufacturing"` | Section name in English. |
| `division_code` | `string` | `"C11"` | Section letter and two-digit division. |
| `division_description_de` | `string` | `"Getränkeherstellung"` | Division name in German. |
| `division_description_en` | `string` | `"Manufacture of beverages"` | Division name in English. |
| `description_de` | `string` | `"Herstellung von Erfrischungsgetränken und Mineralwässern"` | Class name in German. |
| `description_en` | `string` | `"Manufacture of soft drinks and bottled waters"` | Class name in English. |

`wz2025_codes` has the same structure for the German classification WZ 2025, with codes like `"11.07.0"`. Webmetic adds all WZ subclasses of the chosen NACE classes, so a company can have many.

The order of the WZ entries doesn't mark a main activity. In WZ entries, `section_description_de` is in capitals, for example `"VERARBEITENDES GEWERBE"`.

[`GET /company_nace`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/company-nace) returns the NACE codes as a flat table: one row per code with `company_id` and the ten fields. Because the rows have no `company_name`, you get the name from `/company` through `company_id`.

Companies without a NACE code have no row. The endpoint takes a single `domain`, and [pagination](https://webmetic.de/docs/en/api/paginierung) counts NACE rows there, not companies.

## Fields per endpoint [#fields-per-endpoint]

| Endpoint | What comes from the object | Unknown values |
| --- | --- | --- |
| [`/company`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/company) | All fields except `industry_categories`, no visits | Field missing |
| [`/company-sessions`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/company-sessions) | All fields including `industry_categories`, plus `sessions[]` | Field missing |
| [`/intensive-visits`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/intensive-visits), [`/returning-visits`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/returning-visits), [`/new-visits`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/new-visits) | A fixed set without `organization_type`, `primary_color`, `secondary_color`, `wz2025_codes`, `what_they_do_*`, `how_they_make_money_*`, and `target_audience_*`, plus `sessions[]` | `null`, `[]` for `directors` and `nace_codes` |
| Webhooks, field `data.company` | Fields as in `/company` | Field missing, `null` after truncation |
| [`/company_nace`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/company-nace) | `company_id` and the NACE fields, one row per code | No row |
| [`/session`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/session) | `company_id` and `company_name` per session | |

`/company-sessions` returns the Company object with visits embedded: `sessions[]` holds your account's sessions in the period, described under [Session](https://webmetic.de/docs/en/api/datenmodell/session). Each session holds its page views in `user_data[]`, described under [Page View](https://webmetic.de/docs/en/api/datenmodell/page-view).

The three feeds `/intensive-visits`, `/returning-visits`, and `/new-visits` also put fields of the earliest session, `sessions_total`, and `pages_total` at the top level. [Visit types](https://webmetic.de/docs/en/api/datenmodell/besuchsarten) describes which companies the feeds return.

## Example [#example]

The example shows one entry from `result` of `GET /company`, with shortened texts:

```json title="GET /company"
{
  "company_id": "41ea486a9c95",
  "company_name": "Bergquell Mineralbrunnen GmbH",
  "company_url": "www.bergquell.example",
  "company_logo_url": "https://logos.docs.example/bergquell.png",
  "organization_type": "business",
  "address": "Brunnenweg 4",
  "postal_code": "85354",
  "city": "Freising",
  "country": "Deutschland",
  "country_code": "DE",
  "directors": ["Florian Obermaier"],
  "phone_number": "+49 89 99998214",
  "email_address": "info@bergquell.example",
  "employee_count": [201, 500],
  "revenue": [50000000, 100000000],
  "vat_id": "DE000000000",
  "registration_number": "HRB 000000",
  "registration_court": "Amtsgericht München",
  "primary_color": "#1f6feb",
  "lead_score": 88.0,
  "fit_score": 92,
  "relevance_score": 80.96,
  "linkedin": "https://www.linkedin.com/company/bergquell-mineralbrunnen-example",
  "short_description_de": "Mineralbrunnen mit eigener Abfüllung für Mineralwasser und Erfrischungsgetränke.",
  "short_description_en": "Mineral spring with its own bottling of mineral water and soft drinks.",
  "nace_codes": [
    {
      "code": "11.07",
      "full_code": "C 11.07",
      "section_code": "C",
      "section_description_de": "Verarbeitendes Gewerbe/Herstellung von Waren",
      "section_description_en": "Manufacturing",
      "division_code": "C11",
      "division_description_de": "Getränkeherstellung",
      "division_description_en": "Manufacture of beverages",
      "description_de": "Herstellung von Erfrischungsgetränken und Mineralwässern",
      "description_en": "Manufacture of soft drinks and bottled waters"
    }
  ]
}
```

The example has no `fax_number`, `tax_number`, or `secondary_color`, because Webmetic doesn't know these values for Bergquell. The example also leaves out the long texts and `wz2025_codes`.

## Edge cases [#edge-cases]

### Missing fields and null [#missing-fields-and-null]

The three feeds return every one of their fields, with `null` for unknown values and `[]` for empty lists.

In webhooks, a field can also be `null` when Webmetic truncated the delivery. Then `data.truncated` is `true`, as described under [Webhooks](https://webmetic.de/docs/en/api/webhooks). So always handle both cases in your code: the field is missing, and the field is `null`.

### Hidden companies on the Free plan [#hidden-companies-on-the-free-plan]

On the Free plan, you see only some of the companies. The API returns the others as hidden entries with `company_id`, a placeholder name in `company_name` ("Verborgenes Unternehmen", German for "hidden company"), and `"blurred": true`.

- **`/company`**: All other fields are missing.
- **`/company-sessions`**: The sessions of a hidden company hold only `session_id` and `timestamp`.
- **Feeds**: Every field except `company_id`, `company_name`, and `blurred` is `null`. `sessions` stays a list, and each session keeps all its fields. Only `session_id` and `timestamp` have a value, the other fields are `null`, and `user_data` is empty.
- **`/company_nace` and webhooks**: Hidden companies are left out entirely.
- **Contacts**: `/contacts/search`, `/contacts/lookup`, and `/contacts/find` answer 403 with `PLAN_REQUIRED` for hidden companies.

Visible companies have no `blurred` field. Filter out hidden entries by `blurred` before you process the data. Which companies you see is described under [Plans](https://webmetic.de/docs/en/konto/plaene).

### Domain not in your account [#domain-not-in-your-account]

When the requested `domain` doesn't belong to your account, the API answers 403 with `API_KEY_NOT_AUTHORIZED`. This also applies to a variant with `www.`. Enter the domain exactly as the dashboard shows it. For details, see [Errors](https://webmetic.de/docs/en/api/fehler).

### No lookup of a single company [#no-lookup-of-a-single-company]

There's no endpoint that returns a single company by `company_id`. The API also doesn't filter by industry, size, or score. Fetch the period and filter in your own system.

## Used by [#used-by]

- **Endpoints**: [`GET /company`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/company) returns one Company object per company, [`GET /company-sessions`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/company-sessions) the object with sessions and page views, and [`GET /company_nace`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/company-nace) the NACE codes as one row per code.
- **Feeds**: [`GET /intensive-visits`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/intensive-visits), [`GET /returning-visits`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/returning-visits), and [`GET /new-visits`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/new-visits) return a fixed set of fields with sessions.
- **Sessions**: [`GET /session`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/session) names `company_id` and `company_name` per session.
- **Contacts**: [`POST /contacts/search`](https://webmetic.de/docs/en/api/referenz/contacts/search), [`POST /contacts/find`](https://webmetic.de/docs/en/api/referenz/contacts/find), and [`GET /contacts/lookup`](https://webmetic.de/docs/en/api/referenz/contacts/lookup) take `company_id`. For a company without a visit on your websites, they answer 403 with `COMPANY_NOT_IDENTIFIED`, as described under [Contact](https://webmetic.de/docs/en/api/datenmodell/contact).
- **Webhooks**: `company.identified`, `company.returned`, `company.intensive_visit`, and `segment.entered` carry the company in `data.company`, as the [sample event](https://webmetic.de/docs/en/api/referenz/webhooks/sample) shows. For details, see [Webhooks](https://webmetic.de/docs/en/api/webhooks).
- **AI assistant**: The [AI assistant](https://webmetic.de/docs/en/ki-assistent/tools-und-prompts) also retrieves companies, with the tools `list_visiting_companies` and `get_company_profile`.
