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

# Sessions and touchpoints

> How visits group into sessions and which touch gets credit.

A **session** is one visit: a run of events from the same person, close together
in time. A **touchpoint** is how that visit began — the channel, campaign, and
click that brought the person to your site.

## Entry is what counts

Only a session's *entry* identifies the touchpoint, and this matters more than it
sounds.

The referrer recorded on an event describes the page that event happened on, not
how the visit started, and it changes partway through a visit. A hop between your
domains stamps the previous host onto every event after it. A Shopify checkout
stamps nothing at all. Read per event, the "source" of a visit would change
depending on which event you asked.

So Soran resolves each session's entry once and stores it: the entry URL, the UTM
parameters (`source`, `medium`, `campaign`, `term`, `content`), the referring
domain, and the ad click identifier if there was one — Google's `gclid`, Meta's
`fbclid`, Microsoft's `msclkid`, or TikTok's `ttclid`.

## From entry to channel

Soran classifies each entry into a channel by working down a ladder: paid markers
first, then email, then organic (a search or social source, or an explicitly
organic medium), then referral if there was a referring domain, then `other` for a
source it does not recognise, and finally `direct` when there is nothing to go on.

> [!NOTE]
>
> A missing parameter is recorded as empty rather than absent. This is why a
> visit with no campaign is classified rather than skipped.

## Related

> **[Attribution models](/docs/concepts/attribution-models)**
>
> How credit is divided across a path of touchpoints.


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