Skip to content
SourceLoop
How attribution works

How SourceLoop defines a session

When SourceLoop starts a new session, when it ends one, and how that affects every per-visit metric on every dashboard. Plus the differences from Google Analytics 4.

On this page
  1. What starts a new session
  2. What does NOT start a new session
  3. How attribution attaches to a session
  4. Sessions roll up into the visitor and the contact
  5. Session-level vs visitor-level metrics
  6. How session resets affect attribution
  7. What’s next

A session in SourceLoop is one continuous visit, a single bounded period during which a visitor interacts with your site. Every metric on the Traffic dashboard expressed “per session” (session count, pages per session, session duration, bounce rate) depends on this definition. Per-channel and per-campaign attribution at the session level is what powers the marketing-source story.

This article covers exactly when SourceLoop starts a new session, when it ends one, and how those decisions feed into your dashboards.

What starts a new session

Four triggers can start a new session for an existing visitor:

TriggerExample
First page view everA new visitor lands on your site for the first time.
30+ minutes of inactivityThe visitor was browsing, walked away from their computer, came back 45 minutes later. New session.
Attribution changeThe visitor arrives with a new utm_source / utm_medium / utm_campaign, a new paid click ID, or a referring domain that maps to a different channel. New session.
Midnight (workspace timezone)A visitor browsing at 11:50 PM keeps browsing until 12:10 AM. Two sessions, one ending at midnight, one starting.

These triggers are checked on every page view and every custom event.

What does NOT start a new session

Non-triggerWhy it doesn’t fire a new session
Tab switchThe 30-minute timer tracks tracker activity (page views, custom events, scroll pings), not tab visibility. A visitor with your tab open in the background isn’t “active” but isn’t “inactive” either; the timer doesn’t tick unless they switch back and resume.
Browser refreshSame anonymous ID, same session, same attribution. The refresh just emits another page-view event in the same session.
Internal navigationClicking from /pricing to /docs to /contact is one session, regardless of how many page views.
Cross-subdomain navigationyoursite.comapp.yoursite.com is the same session (cookies are shared on the same eTLD+1).
Cross-domain navigation with the linkeryoursite.comyoursite-checkout.com with the cross-domain linker configured is the same session (the anonymous ID is passed via URL).

How attribution attaches to a session

Each session has exactly one set of attribution fields:

FieldSet from
ChannelThe classification rules (see Channel definitions)
Sourceutm_source parameter, or platform inferred from click ID, or referring domain
Mediumutm_medium parameter, or cpc/cpm/organic inferred from click ID, or organic/referral inferred from referrer
Campaignutm_campaign parameter
Contentutm_content parameter
Termutm_term parameter
Landing pageThe URL of the first page view in this session
Referrerdocument.referrer at session start
Click IDsgclid, fbclid, msclkid, etc., from the URL on session start

Once a session starts, these values stay frozen for its duration. The visitor navigating internally on your site doesn’t change them. This is why the attribution-change trigger above is so important, it ensures each session has exactly one truthful set of attribution.

Sessions roll up into the visitor and the contact

1 contact (1 real person)
  → N anonymous IDs (1 per device/browser they've used)
    → N sessions per anonymous ID (1 per visit)
      → N page views per session (1 per page they viewed)
      → N events per session (custom events, scroll pings, conversion events)

The Traffic dashboard’s “Sessions” metric counts the sessions inside the date range. The “Visitors” metric counts unique anonymous IDs. The “Contacts” metric counts identified contacts (with an email or phone).

A single high-engagement contact who browsed your site five separate times across two weeks contributes:

  • 1 contact
  • 1 anonymous ID (assuming same browser each time)
  • 5 sessions
  • 25-or-so page views (assuming 5 pages per session)

Session-level vs visitor-level metrics

Most dashboards offer both:

MetricSession-levelVisitor-level
CountNumber of sessionsNumber of unique anonymous IDs
Conversion rateConversions ÷ sessionsConversions ÷ visitors
Bounce rateSessions with 1 page view ÷ all sessionsVisitors who only bounced ÷ all visitors
Pages per sessionTotal page views ÷ session countTotal page views ÷ visitor count
DurationTime from first to last event in a sessionSum of all sessions per visitor

For attribution work, session-level metrics are usually more meaningful. Visitor-level metrics make sense for “how engaged is my audience over time?” but session-level metrics answer “did this specific campaign produce engaged visits?”.

How session resets affect attribution

The attribution-change trigger is the one with the biggest implication. Consider:

  1. 9:00 AM — Jane arrives via a Google Ads click. Session 1 begins with first-touch channel = Paid Search.
  2. 10:00 AM — Jane leaves your site without converting.
  3. 10:25 AM — Jane sees a LinkedIn ad in her feed and clicks it. She returns to your site. 30 minutes haven’t elapsed, but the click ID and referrer have changed, so SourceLoop starts a new session. Session 2 begins with channel = Paid Social.
  4. 10:45 AM — Jane submits the demo form during Session 2.

The conversion is attributed:

  • First-touch = Paid Search (Session 1’s channel — the earliest session in Jane’s identity graph)
  • Last-touch = Paid Social (Session 2’s channel — the converting session)

Both touches are visible on the lead, and you can group revenue / leads by either model on the Attribution dashboard.

If SourceLoop hadn’t reset the session on the attribution change, Session 1 would still be active when the form fired, and the conversion would attribute entirely to Paid Search, hiding the role LinkedIn played in closing the deal.

What’s next

Frequently asked questions

  1. When does SourceLoop start a new session?

    Four triggers. (1) The visitor's first page view, ever. (2) The visitor returns after more than 30 minutes of inactivity. (3) The visitor arrives with a different attribution signal than their last session, a fresh utm_source / utm_medium / click ID, or a new referring domain that resolves to a different channel. (4) Midnight in the workspace's timezone (sessions don't span calendar days for cleaner daily reporting).

  2. Why don't sessions span midnight?

    Daily reports get muddled when one session straddles two days. By starting a new session at midnight, the visitor's sessions-per-day count stays accurate and the Traffic dashboard's day-over-day comparisons are clean. The trade-off is a visitor browsing from 11:50 PM to 12:10 AM appears as two sessions, but the impact is small (most visitors don't browse over midnight).

  3. How is this different from Google Analytics 4?

    GA4 also uses a 30-minute idle timeout but doesn't reset on attribution change or midnight by default. So a GA4 session can span a UTM change and span midnight, which makes campaign-level attribution and day-over-day reports harder to read. SourceLoop's stricter session boundaries mean per-session metrics are more meaningful for attribution work.

  4. Does a session reset if the visitor clicks a different ad?

    Yes. If a visitor arrives via Paid Search, leaves, comes back via Paid Social later that hour, SourceLoop starts a new session for the Paid Social arrival. This is so each session has exactly one channel / source / campaign attribution, which makes the Traffic dashboard's per-session counts directly meaningful.

  5. How long is the typical session?

    Most B2B sites see median session durations of 1 to 3 minutes and median pageviews per session of 2 to 4. Highly engaged visitors (research-mode prospects browsing pricing + docs + case studies) routinely produce sessions of 10 to 20 minutes. The Traffic dashboard's session-duration metric tracks the median across all sessions in the date range.

  6. Does a tab switch end a session?

    No. The 30-minute idle timer is based on tracker activity (pageviews, custom events, scroll-depth pings), not tab visibility. A visitor with your site open in a tab who switches to email and comes back 20 minutes later is still in the same session. The timer only resets to zero when the tracker sees activity.

Track every conversion to its true source

Capture and send full attribution data from every signup, lead, booking, and sale to your CRM and ad platforms, so you know exactly what's driving revenue.

Without SourceLoop

Untagged

Kayden Floyd

kayden@abc.com

  • SourceUnknown
  • MediumUnknown
  • CampaignUnknown
  • Landing pageUnknown
Journey
No touchpoints captured

With SourceLoop

Auto-tagged

Kayden Floyd

kayden@abc.com · Acme Co.

  • Channel Paid Social
  • CampaignFree_demo
  • Landing page/pricing
Journey
Synced to HubSpot Google Ads Meta