GA4 Configuration Guide (Phase 2)

Owner: Engineering + Analytics · Schema version 1

The event instrumentation lives in js/app.js (bridge) and docs/analytics/event-contract.md (taxonomy). This document is the GA4-side setup: which custom dimensions to register, which events to mark as key events, and the three explorations to build. Do the UI work in the GA4 console — these are one-time property-configuration steps, not code.

Step 1 — Register event-scoped custom dimensions

Create these event-scoped custom dimensions (not user-scoped). Only these eleven — every value is a low-cardinality enum, so they stay reportable.

GA4 dimension Event parameter Values
Entry point entry_point direct, landing_cta, template, recent_project, shared_link
Start path start_path template, ai, import, blank
Creation path creation_path template, ai, import, blank
Milestone milestone first_content, first_customization, first_outcome
Last milestone last_milestone none, first_content, first_customization
Template category template_category social_post, presentation, logo, motion_text, blank, …
Export format format mp4, webm, gif, png, svg, pdf, lottie
Error category error_category unsupported_capability, encoding_rendering, memory_size, permission_download, unknown
UI location ui_location toolbar, gallery, empty_state, panel
App version app_version release version string
Platform form factor platform_form_factor desktop, tablet, mobile

Do not register event_schema_version, surface, or session_stage as custom dimensions — they are carried on every event but are only used for debugging and segmentation-by-default, not decisions.

Wait 24–48 hours after the first events land before validating a dimension — GA4 surfaces new dimensions asynchronously.

Step 2 — Mark key events

Mark exactly these as key events (keep well under the 30-key-event limit):

  1. creation_milestone_reached (with milestone=first_outcome) — the activation outcome
  2. export_completed
  3. share_completed

Optionally project_saved as a fourth. Do NOT mark item_selected, undo, canvas_size_changed, or any interaction event — they are noise for this goal.

Step 3 — Build three Explorations

Exploration 1: Activation funnel

Standard funnel exploration, steps in order:

  1. editor_opened
  2. start_path_selected
  3. creation_milestone_reached (filter milestone = first_content)
  4. creation_milestone_reached (filter milestone = first_customization)
  5. creation_milestone_reached (filter milestone = first_outcome)

Breakdown dimensions: acquisition source, device, browser, locale, start_path.

Exploration 2: Creation-to-outcome path

Free-form exploration segmented by creation_path (template vs blank vs import):

  • Export completion rate = export_completed ÷ export_started
  • Save completion, time-to-first-outcome (median), abandonments
  • Use this to pick the default onboarding route (UX-01).

Exploration 3: Retention cohort

Cohort exploration:

  • Cohort dimension: first activation week (derived from first_outcome)
  • Metric: returning users at 1-day and 7-day
  • Segment: returners who fired continue_project_opened vs those who did not

DebugView checklist (before trusting the data)

  • [ ] editor_opened fires once per tab session
  • [ ] pwa_installed fires once (not twice) on install
  • [ ] export_completed and export_failed are mutually exclusive per export
  • [ ] Consent-denied / DNT / ?notrack=1 produce zero events
  • [ ] Every event carries event_schema_version=1 + the 5 common-context fields
  • [ ] No event carries error, prompt, filename, or any banned key
  • [ ] creation_milestone_reached fires at most once per milestone per session