Sessions
Sessions
A session at Chord is a continuous window of activity by a single visitor on your storefront. Sessions are the atomic unit we use for analytics like traffic, attribution, conversion rate, and bounce rate. One row per session is exposed through the analytics layer, ready to be joined to orders, users, landing pages, and marketing channels.
This page describes how Chord defines, builds, and enriches sessions.
What a session represents
A session captures everything one visitor did in one sitting on a single storefront. It begins with their first event, continues as long as they stay active, and closes after they go quiet. Every page view, product view, add-to-cart, checkout step, and order placed during that window is rolled up under a single Session ID.
A session is always scoped to a single OMS and store, a visitor browsing two of your storefronts at the same time produces two distinct sessions, one per store.
How a session begins and ends
Chord uses a 30-minute inactivity timeout.
- A new session starts on a visitor's very first event.
- The session continues as long as the gap between two consecutive events is 30 minutes or less.
- A new session begins the moment a gap exceeds 30 minutes.
There is no fixed maximum session length. A visitor who keeps interacting can stay in the same session for hours. There is also no calendar-day cutoff: a session that begins at 11:50 PM and continues at 12:05 AM is one session, not two.
Example: A visitor lands on your homepage at 10:00, views a product at 10:08, adds to cart at 10:15, walks away, and returns to view another product at 10:40. The 10:40 view is 25 minutes after the previous event, so it stays in the same session. If they had instead returned at 10:46 (31 minutes later) that view would start a brand-new session.
The session's Start Time is the timestamp of its first event; the End Time is the timestamp of its last event; the Duration is the difference. A session with only one event has a duration of zero.
How visitors are stitched across sessions
Every event arriving from your storefront carries an anonymous ID (a browser/device cookie) and, once the visitor logs in or places an order, a user ID from your OMS.
Chord builds a single, stable identity per visitor (internally called the blended user ID) using the following rule:
- If we have ever seen a user ID associated with this anonymous ID, that user ID becomes the visitor's identity for every session, including sessions that happened before they logged in.
- If we have never seen a user ID, the anonymous ID itself is the identity.
The practical effect: when someone browses anonymously for a week, then signs up, all of their earlier sessions are retroactively re-attributed to the same person. They show up as a single user in the user dimension, with their full session history attached.
Cross-subdomain stitching is automatic. The Chord CDP SDK persists the anonymous ID across subdomains, so a visitor who browses on shop.example.com and checks out on checkout.example.com is treated as a single visitor across both. No special reconciliation is required.
What is attached at the session level
Every session row carries:
Identity & scope
- Session ID: a unique identifier for this session
- Blended User ID: the stitched visitor identity (see How visitors are stitched above)
- Anonymous ID: the visitor's browser/device cookie
- OMS, Store: the storefront the session belongs to
- Session Number: the visitor's 1st, 2nd, 3rd… session
- Visitor Type: New Visitor if it is the visitor's first session, otherwise Returning Visitor
Timing
- Start Time, End Time, Duration in Seconds
- Duration Tier: a bucketed view of the session length: 0–9s, 10–29s, 30–59s, or 60s+
- Activity Count: the number of page views plus tracked events in the session
- Days Since Last Session: how long it has been since this visitor's previous session ended
Landing & device
- Landing Page: the first page view of the session (or, if the session has only non-page events, the first event)
- Last Seen Page: the most recent page view in the session
- Device and Device Category (desktop / mobile / tablet), inferred from the user agent
Marketing attribution: derived from the landing page of the session
- UTM source, medium, campaign, term, content
- Google / Meta / Microsoft click IDs
- Page referrer
- Channel and sub-channel mapped from the UTM/referrer combination through Chord's marketing channel mapping (e.g., Paid Search, Paid Social, Email, SMS, Affiliate, Direct, Other). See more on channel definition.
- A paid-vs-organic flag derived from the channel
- (Optional) a Post-purchase survey override: when the UTM-derived channel is Direct or Unknown and the visitor answered a post-purchase survey on the resulting order, Chord uses the survey answer as the channel.
Conversion milestones
For each session, Chord exposes a flag for whether the visitor reached each step of the funnel:
- Has Product Viewed: the visitor opened at least one product detail page
- Has Product Added: at least one product was added to the cart
- Has Cart Viewed: the visitor opened the cart
- Has Checkout Started: the visitor entered the checkout flow
- Has Checkout Completed: the visitor finished the checkout flow
- Has Order Completion: at least one order was placed during the session
Alongside these flags, the session also carries:
- Completed Order IDs / Numbers: the orders that were placed during the session
- Order Revenue Totals: gross, net, tax, fulfillment, and refunds, summed across all orders completed in the session
Customer state at the time of the session
- Customer Type: Prospective customer (no prior orders), New customer (first order is in or before this session), or Repeat customer (had a prior order before this session)
- Is Bounced Session: see Bounce definition below
How orders attach to sessions
An order is attached to a session when a corresponding Order Completed or Checkout Completed event lands inside that session's window. The order then contributes its revenue, basket, discount codes, and tags to the session's totals.
A session can contain more than one order; revenue fields are summed across them. Conversely, an order can only attach to one session (the one in which the completion event fired).
For multi-touch attribution, Chord computes four standard models per session toward the visitor's next conversion:
- First touch: full credit to the visitor's first session
- Last touch: full credit to the converting session
- Linear: equal credit across all sessions up to and including the conversion
- 40 / 20 / 40: 40% first session, 40% converting session, the remaining 20% spread evenly across the middle
These points are exposed at the session grain and are also rolled up to orders.
What is excluded from sessions
Bot and synthetic traffic. Sessions are built only from real visitor activity. Before any session is constructed, Chord filters out events that look automated — that is, events whose browser user agent matches a known bot or automation tool. The filter is grouped into four categories:
- Search-engine and social crawlers: e.g. Googlebot variants, Baidu, ByteDance, Yahoo Slurp, Facebook's link-preview crawler, Meta's external agent.
- SEO and analytics crawlers: e.g. Screaming Frog, HubSpot Crawler, SEOMonitor.
- Uptime and synthetic-monitoring tools: e.g. Datadog Synthetics, Shopify's checkout-observation probes.
- Generic automation patterns and headless browsers: any user agent containing bot, crawler, or spider, plus headless tools like Headless Chrome, PhantomJS, Selenium, Puppeteer, and Playwright.
In addition, one known synthetic ad-feed combination of UTM parameters (utm_campaign=sag_organic + utm_source=google + utm_medium=product_sync) is stripped, since it is generated by automated product syncing rather than by a real shopper.
Filtered events never produce sessions and never inflate visit, conversion, or attribution counts.
This filter relies on the browser's self-reported user agent. Sophisticated automation that deliberately impersonates a real browser will not be caught at this layer.
Server-side events. Sessionization runs on client-side events only, events that actually represent something a real visitor did in a browser. Server-side events are kept elsewhere in the warehouse but are not eligible to start, extend, or end a session.
Bounce definition
A session is marked bounced when all of the following hold:
- The session has only one page view
- Only one distinct page (URL + query) was visited
- The visitor did not start checkout and did not place an order
- The duration was under 2 seconds
If any one of those conditions fails, the session is non-bounced.
Edge cases and caveats
- Late-arriving events. When a delayed event lands for a visitor, Chord re-evaluates that visitor's full activity history so the session boundaries remain correct. This means historical session counts can shift slightly between runs as late events arrive.
- Identity discovered later. As described above, a visitor's earlier anonymous sessions are retroactively re-attributed to their user ID once they identify. Counts of "anonymous sessions" can therefore decrease over time as visitors sign in or check out.
- Multi-storefront visitors. A visitor browsing two of your stores simultaneously produces two distinct sessions — one per store — even if they share an anonymous ID.
- Cross-device. Not modeled. Sessions on different devices are independent unless the same identifier is asserted on both.
- Bot filtering is user-agent based. Sophisticated automation that spoofs a real user agent will not be caught by these filters.
- Empty sessions. A session must have at least one client-side event by construction. There is no concept of a "page view that didn't fire."
if you have any questions or need help, please reach out to us at [email protected]