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, 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 the path is normalized for dashboards — query strings and fragments are stripped.

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 identifies visitors without cookies. A stable visitor_id is derived from a browser fingerprint (canvas rendering hash combined with language, timezone, screen color depth, and hardware concurrency), then persisted in localStorage.

No cross-site tracking

The visitor ID is generated per-origin and never leaves the visitor's browser except as an opaque string. It cannot be used to identify the same person across different 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.