Core Concepts

The five things Produl tracks — and what's captured for each.

Pageviews

A pageview is recorded every time a user loads a page (initial load or client-side route change). The tracker sends the full URL, path including query string, page title, referrer, screen dimensions, and browser language. On visibility change or navigation, it backfills the time spent on the page and scroll depth.

T=0Page loadpageviewT=2sUser interactsevent firesT=5sT=35s30s heartbeatping firesT=60sPage hiddenduration + scroll= request to /api/*
Tracker request lifecycle on a single page

Each pageview is attributed to a session and a visitor (see below), and fragments are not sent. Query strings remain part of the recorded URL and path, so avoid putting sensitive values in URLs.

Sessions

A session groups related pageviews, events, and pings for a single browsing burst. Sessions include UTM parameters, referrer details, geo, device/browser/OS info, and screen dimensions — all captured on the first pageview so they stay consistent across the session.

SESSIONpagevieweventpageviewpingpageviewtab closedNEW SESSIONpageviewtime →
A session wraps related activity. Closing the tab ends the session.

The session key is stored in sessionStorage— so it's cleared when the tab or browser closes. Reopening your site starts a new session, even for the same visitor. Sessions that only see one pageview are marked as bounces.

Visitors

Produl assigns each browser a random pseudonymous visitor_id. The ID is stored in a first-party _ma_vid cookie on your own domain, with a sessionStorage fallback for browsers that block cookie access.

No cross-site tracking

The visitor ID is first-party to your site and is sent only with your own Produl events. It is not a third-party cookie and cannot be used to identify the same person across different customer websites.

If a visitor clears their storage — or uses private browsing — they'll count as a new visitor on their next visit. This is an intentional privacy trade-off.

Events

Events are arbitrary named actions you track with track(name, properties). Common examples: signup, purchase, cta_click, form_submit. Properties are a free-form JSON object — use them to attach context like { plan: "pro", amount: 4900 }.

Events are attributed to the session that was active when they fired. If no session is open (rare), the event is stored without a session reference but still counts toward totals.

Keep event names stable

Dashboards group events by name — renaming signup to user_signup later will split your historical data into two series. Pick a convention (we recommend snake_case) and stick with it.

Web Vitals

When the tracker detects Core Web Vitalsvalues via the browser's performance API, it submits them to Produl. We collect LCP, FCP, INP, CLS, and TTFB. In the dashboard, values are aggregated as p75 (the 75th-percentile experience) over your selected date range.

LCP≤ 2.5s≤ 4s> 4sFCP≤ 1.8s≤ 3s> 3sINP≤ 200ms≤ 500ms> 500msCLS≤ 0.1≤ 0.25> 0.25TTFB≤ 800ms≤ 1.8s> 1.8sGoodNeeds improvementPoor
Threshold ranges per metric. Your p75 should land in the green zone.

If your p75 lands in the amber or red zone, Produl surfaces a remediation panel on the site card with tips tailored to the specific metric that regressed.