Analytics
PostHog integration, event tracking, and consent management
PostHog
Self-hosted on Azure Container Instances
Azure AD
Identity resolution via /.auth/me endpoint
Consent
PECR/UK GDPR compliant, deny-by-default
UTM Tracking
7 parameters captured (5 standard + 2 custom)
Event Tracking Schema
19 events defined in lib/analytics/posthog.ts
Tool Lifecycle
tool_view | TOOL_VIEW | Fired when an adviser navigates to a tool page |
tool_start | TOOL_START | Fired on first input interaction (adviser begins using calculator) |
tool_complete | TOOL_COMPLETE | Fired when a calculation is run or result is generated |
tool_error | TOOL_ERROR | Fired on invalid input or calculation failure (includes error_type, error_message) |
tool_abandon | TOOL_ABANDON | Fired when adviser leaves a tool page without completing (unload event) |
Result Actions
result_print | RESULT_PRINT | Adviser prints calculation results |
result_copy | RESULT_COPY | Adviser copies results to clipboard |
result_download | RESULT_DOWNLOAD | Adviser downloads results as PDF or CSV |
result_share | RESULT_SHARE | Adviser shares results via a share action |
Navigation
tool_navigate | TOOL_NAVIGATE | Inter-tool navigation tracked for journey analysis |
external_link | EXTERNAL_LINK | Click on link to external resource or Guardian main site |
Consent
consent_granted | CONSENT_GRANTED | User grants analytics consent via banner |
consent_denied | CONSENT_DENIED | User denies analytics consent via banner |
CPD / Webinar
webinar_start | WEBINAR_START | Adviser starts watching a CPD webinar |
webinar_complete | WEBINAR_COMPLETE | Adviser completes a CPD webinar (reaches end) |
quiz_start | QUIZ_START | Adviser begins a CPD assessment quiz |
quiz_complete | QUIZ_COMPLETE | Adviser completes CPD quiz (includes pass/fail) |
certificate_download | CERTIFICATE_DOWNLOAD | Adviser downloads CPD certificate after passing quiz |
Persistence
calculator_state_saved | N/A (inline) | Calculator inputs/results saved to localStorage for return visits |
Consent Categories
Three-tier consent model, all optional
analytics
Page views, tool usage, event tracking
sessionReplay
Session recording for UX analysis (inputs masked)
featureFlags
Feature flags and A/B test bucketing
Default state: deny all (PECR compliant). Analytics only fire after explicit consent.
UTM Parameters
Campaign attribution via URL parameters
| Parameter | Example | Purpose |
|---|---|---|
utm_source | guardian_email | Traffic source |
utm_medium | Marketing medium | |
utm_campaign | spring_2026 | Campaign name |
utm_content | cta_button | Content variant |
utm_term | income_protection | Search term |
firm | acme_ifa | Custom: referring firm |
region | south_east | Custom: adviser region |
Identity Resolution
Anonymous Phase
All users start anonymous. PostHog assigns a distinct_id via localStorage. No cookies required for basic tracking.
Azure AD Login
On authentication via Azure SWA, the user ID is SHA-256 hashed and passed to PostHog identify(). All prior anonymous events are stitched to the identified user.
Firm Grouping
Identified advisers are grouped by firm using PostHog groups. Enables firm-level analytics dashboards and cohort analysis.
Privacy note: Raw PII is never sent to PostHog. User IDs are SHA-256 hashed client-side before identification. Input values in session replays are masked by default.