# Visit types (https://webmetic.de/docs/en/api/datenmodell/besuchsarten)

A visit type describes how a company visited your website: intensive, returning, or new. For example, someone at a beverage producer reads your pricing page for two minutes, and Webmetic lists the company as intensive.

If it was the company's first visit to your website, it's also new. Webmetic computes the three types for you, and the API delivers them as feeds and as webhook events.

## Rules [#rules]

| Visit type | Feed | Webhook event |
| --- | --- | --- |
| Intensive | `/intensive-visits`: companies with at least one visit of 30 seconds or more in the period | `company.intensive_visit`: every visit of 30 seconds or more, once per visit |
| Returning | `/returning-visits`: companies with two or more visits in the period | `company.returned`: every visit after the first, once per visit |
| New | `/new-visits`: companies whose first visit falls in the period | `company.identified`: the first visit, once per company and website |

A visit is a [Session](https://webmetic.de/docs/en/api/datenmodell/session). Webmetic only evaluates the visits your account recorded on this website.

Visits that Webmetic doesn't match to a company have no visit type.

The three types are independent of each other. One visit can trigger two events, for example `company.identified` and `company.intensive_visit`.

### Intensive [#intensive]

A visit is intensive when it lasts 30 seconds or more in total. Webmetic reads `session_duration` for this, and exactly 30 seconds counts.

The number of pages and the scroll depth don't matter. Neither does `session_time`, which is the average time per page view.

The `company.intensive_visit` event can arrive later than the other events of the same visit. Webmetic keeps checking the visit after it appears in the dashboard and reports it as soon as it reaches 30 seconds.

### Returning [#returning]

Returning companies follow two rules on purpose:

- **Feed**: `/returning-visits` only counts visits in the period and leaves out visits before `from_date`.
- **Webhook**: `company.returned` reports every visit of a company that has visited your website before, no matter when.

For example, a company visited your website ten times last year and once this week. It's missing from `/returning-visits?from_date=-7 days`, but the webhook reports the visit as `company.returned`.

### New [#new]

A company is new on the first visit your account recorded on this website. Visits recorded by other Webmetic accounts don't count.

The `/new-visits` feed returns a company when this first visit falls in the period. If it was before `from_date`, the company is missing, even if it has visited your website often since.

For the same visit, `company.identified` and `company.returned` exclude each other.

A new webhook only reports visits from the moment you create it. It reports companies that visited before as `company.returned`. To get earlier new companies, query `/new-visits`.

## Period and response [#period-and-response]

The three feeds take `domain`, `from_date`, and `to_date`. If you don't pass a period, they cover the last 30 days up to now.

- **Period**: It starts at `from_date` and ends right before `to_date`. A date without a time includes the whole day when used as `to_date`. For details, see [Date ranges and time zones](https://webmetic.de/docs/en/api/zeitraeume-und-zeitzonen).
- **No pages**: The response contains every row at once in `result`. Because the feeds have no `page` or `page_size`, choose a shorter period for large results.
- **Order**: The feeds return the rows in no fixed order.
- **One row per company**: Each company appears at most once per feed, but it can appear in several feeds.
- **All fields**: Every row has the same fields, and only hidden companies also get `blurred`. Anything Webmetic doesn't know is `null`, or an empty list for `directors` and `nace_codes`.
- **Key**: You need the Visitor Intelligence key. If `domain` isn't one of your account's websites, the API answers with `API_KEY_NOT_AUTHORIZED`, as described under [Errors](https://webmetic.de/docs/en/api/fehler).
- **Limits**: The limit is one request per second per endpoint, as described under [Rate limits](https://webmetic.de/docs/en/api/anfragelimits). The feeds and the webhooks don't cost credits.

## Shape of a row [#shape-of-a-row]

Each row is a company with the fields of [Company](https://webmetic.de/docs/en/api/datenmodell/company). The feeds leave out `organization_type`, `primary_color`, `secondary_color`, `wz2025_codes`, and the texts `what_they_do_*`, `how_they_make_money_*`, and `target_audience_*`. These fields are added:

| Field | Type | Example | Description |
| --- | --- | --- | --- |
| `sessions` | `array` | | The visits that match the rule, as [Session](https://webmetic.de/docs/en/api/datenmodell/session) with the [page views](https://webmetic.de/docs/en/api/datenmodell/page-view) in `user_data`, sorted by time, oldest first. |
| `timestamp`, `weburl`, `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`, `utm_campaign_id`, `click_id`, `click_type`, `session_duration`, `session_time`, `visitor_city`, `visitor_country`, `visitor_zip`, `visitor_country_code` | as in the session | `"2026-10-14T08:12:05.214000"` | Copies from the earliest session in `sessions`. |
| `sessions_total` | `integer` | `1` | The number of sessions in `sessions`. |
| `pages_total` | `integer` | `3` | The number of page views in these sessions. |
| `blurred` | `boolean` | `true` | Only for hidden companies on the Free plan, otherwise the field is missing. |

Which visits are in `sessions` and count in `sessions_total` and `pages_total` depends on the feed:

- `/intensive-visits`: only the intensive visits in the period.
- `/returning-visits` and `/new-visits`: all of the company's visits in the period.

## Example [#example]

The example shows a row from `/intensive-visits` in shortened form: most fields with `null` and some session fields are left out.

```json title="GET /intensive-visits"
{
  "result": [
    {
      "company_id": "41ea486a9c95",
      "company_name": "Bergquell Mineralbrunnen GmbH",
      "city": "Freising",
      "country_code": "DE",
      "company_url": "www.bergquell.example",
      "linkedin": null,
      "employee_count": [201, 500],
      "lead_score": 88.0,
      "fit_score": 92,
      "relevance_score": 80.96,
      "sessions": [
        {
          "timestamp": "2026-10-14T08:12:05.214000",
          "session_id": "01M4WQFX6YM2X5V8T4N6R1C0DZ",
          "weburl": "https://your-website.com",
          "utm_source": "linkedin",
          "utm_medium": "social",
          "utm_campaign": "messe-2026",
          "session_duration": 309.0,
          "session_time": 103.0,
          "visitor_city": "Freising",
          "visitor_country_code": "DE",
          "user_data": [
            {
              "timestamp": "2026-10-14T08:12:05.214000",
              "document_location": "https://your-website.com/pricing",
              "time_spent": 95.0
            },
            {
              "timestamp": "2026-10-14T08:13:40.214000",
              "document_location": "https://your-website.com/bottling-lines",
              "time_spent": 150.0
            },
            {
              "timestamp": "2026-10-14T08:16:10.214000",
              "document_location": "https://your-website.com/contact",
              "time_spent": 64.0
            }
          ]
        }
      ],
      "timestamp": "2026-10-14T08:12:05.214000",
      "weburl": "https://your-website.com",
      "utm_source": "linkedin",
      "utm_medium": "social",
      "utm_campaign": "messe-2026",
      "utm_term": null,
      "session_duration": 309.0,
      "session_time": 103.0,
      "visitor_city": "Freising",
      "visitor_country_code": "DE",
      "sessions_total": 1,
      "pages_total": 3
    }
  ]
}
```

## Edge cases [#edge-cases]

- **Free plan**: Companies you can't see on the Free plan still appear in the feeds. Their row keeps `company_id` and has `blurred: true` and a placeholder in `company_name`. Every other field is `null`, including `sessions_total` and `pages_total`. In the sessions, only `session_id` and `timestamp` have a value. Every other session field is `null`, and `user_data` is empty.
- **Webhooks on the Free plan**: Webhooks only report the companies you can see on the Free plan. Hidden companies trigger no event. For details, see [Plans](https://webmetic.de/docs/en/konto/plaene).

## Used by [#used-by]

- **Feeds**: [`/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), and [`/new-visits`](https://webmetic.de/docs/en/api/referenz/visitor-intelligence/new-visits).
- **Webhooks**: The webhook events are `company.intensive_visit`, `company.returned`, and `company.identified`. For details, see [Webhooks](https://webmetic.de/docs/en/api/webhooks). An event carries one company and a single visit, not a row like the feed. Under [**Menu** > **Integrations** > **Webhooks**](https://app.webmetic.de/?menu=webhooks), they're called **Engaged company**, **Returning company**, and **New company**.
- **Dashboard**: The [notifications](https://webmetic.de/docs/en/visitor-intelligence/benachrichtigungen) **Engaged companies**, **Returning companies**, and **New companies** use the feed rules.
- **AI assistant**: The [AI assistant](https://webmetic.de/docs/en/ki-assistent/tools-und-prompts) also retrieves the visit types, with the tool `get_visit_highlights`.
