Product analytics instrumentation and strategy covering event taxonomy design, tracking plans, user behavior analysis, activation/retention metrics, and marketing attribution. PostHog-first with multi-platform support (Pendo, Amplitude, Mixpanel, Heap).
Install
npx skillscat add vasilyu1983/ai-agents-public/marketing-product-analytics Install via the SkillsCat registry.
We need to produce a 2-3 sentence plain-text summary, objective, factual, no marketing language, no superlatives, no calls to action. At most 60 words. Should explain what skill does, what problem it solves, when to use. We need to read the skill description: It's about product analytics instrumentation and strategy covering event taxonomy design, tracking plans, user behavior analysis, activation/retention metrics, marketing attribution. PostHog-first with multi-platform support (Pendo, Amplitude, Mixpanel, Heap). It provides templates, checklists, workflow.
Product Analytics - Instrumentation & Measurement OS
Modern Best Practices (January 2026): PostHog-first, session context registration, strict event naming, North Star activation events, privacy-first attribution.
Primary sources live in data/sources.json. If web search is available, refresh time-sensitive details against official docs before giving definitive advice.
No fluff. Only executable steps, templates, and checklists.
When to Use This Skill
- Event taxonomy design: Naming conventions, event hierarchy, property structure
- Tracking plan creation: What to track, where, and why
- Marketing attribution: UTM capture, campaign tracking, source attribution
- Activation metrics: Defining and measuring user activation
- Retention analysis: Cohort analysis, churn prediction, engagement scoring
- Platform setup: PostHog, Pendo, Amplitude, Mixpanel, Heap configuration
- Data quality: Event validation, debugging, governance
Default Workflow (Use Unless User Overrides)
- Clarify goals and constraints: business questions, lifecycle stages, identity model, privacy/consent requirements, platforms (web/mobile/backend).
- Define the North Star value event: one canonical event that represents value received (plus the smallest set of supporting events).
- Write the tracking plan: use
assets/tracking-plan-saas.mdas the starting template; define required properties and ownership. - Implement instrumentation: pick the platform guide in Quick Reference (PostHog/Pendo/Amplitude/Mixpanel/Heap; server-side if needed).
- QA and harden: use
assets/analytics-qa-checklist.md+references/event-quality-rules.md+references/production-hardening.md.
Core Principles
1. North Star Value Event (VITAL)
Every product must have ONE canonical activation event - the single event that means "user received real value."
| Product Type | North Star Event | When It Fires |
|---|---|---|
| Content/Media | content_consumed |
Content fully loaded and visible |
| SaaS Tool | workflow_completed |
User completes core workflow |
| E-commerce | purchase_completed |
Transaction successful |
| Developer Tool | integration_working |
First successful API call |
Rule: Every feature event should collapse into ONE activation event with properties:
// PASS CORRECT: One event, differentiated by property
posthog.capture('value_delivered', { value_type: 'report', value_id: 'rpt_123' });
posthog.capture('value_delivered', { value_type: 'integration', value_id: 'int_456' });
// FAIL WRONG: Fragmented "value" events (harder to unify in retention/funnels)
posthog.capture('report_generated');
posthog.capture('integration_working');2. Minimum Viable Analytics (MVA)
Start with 5-15 events, not 200. You can always add more.
| Layer | Required Events | Optional |
|---|---|---|
| Acquisition | page_viewed, signup_completed |
campaign_landed |
| Activation | Your activation event (1-2 max) | onboarding_step_completed |
| Engagement | Your engagement signal (1-2 max) | feature_used |
| Conversion | purchase_completed |
checkout_started |
For auth-heavy products, add email reliability instrumentation early:
auth_email_requested(type: signup_confirm, magic_link, reset_password)auth_email_delivered/auth_email_bounced/auth_email_complained(from provider webhooks)auth_email_link_clicked(completion quality signal, not just send volume)
3. Session Context Registration
Register standard context once per session using posthog.register():
posthog.register({
app_env: 'prod',
platform: 'web',
landing_path: window.location.pathname,
traffic_source: deriveTrafficSource(),
utm_source, utm_medium, utm_campaign
});4. Event Naming Convention
| Rule | Correct | Incorrect |
|---|---|---|
| Lowercase only | user_signed_up |
User_Signed_Up |
| Snake_case | button_clicked |
buttonClicked |
| Object_action format | project_created |
createProject |
Quick Reference
| Task | Reference |
|---|---|
| PostHog setup | references/posthog-implementation.md |
| Pendo setup | references/pendo-implementation.md |
| Amplitude setup | references/amplitude-implementation.md |
| Mixpanel setup | references/mixpanel-implementation.md |
| Heap setup | references/heap-implementation.md |
| Server-side tracking | references/server-side-tracking.md |
| Privacy compliance | references/privacy-compliance.md |
| Event quality rules | references/event-quality-rules.md |
| Production patterns | references/production-hardening.md |
| Funnel analysis | references/funnel-analysis.md |
| Cohort retention | references/cohort-retention-analysis.md |
| Experimentation | references/experimentation-framework.md |
| User segmentation | references/user-segmentation.md |
| Data governance | references/data-governance.md |
| Session replay & heatmaps | references/session-replay-heatmaps.md |
| Attribution modeling | references/attribution-modeling.md |
| Tracking plan template | assets/tracking-plan-saas.md |
| UTM standards | assets/utm-naming-standards.md |
Implementation Checklist
### Event Correctness
- [ ] Activation event fires only when value is **visible** (not on mount)
- [ ] Event includes required properties defined in the tracking plan (e.g., `object_type`, `object_id`, `surface`, `flow`)
- [ ] Dedupe guard used where re-renders can double-fire (see `references/production-hardening.md`)
- [ ] Event fires in **exactly one place** per feature
### Session Context
- [ ] `registerSessionContext()` called on app init
- [ ] Includes: `app_env`, `platform`, `landing_path`, `traffic_source`, UTMs
### Type Safety
- [ ] `TrafficSource` uses TypeScript enum, not free string
- [ ] All properties use `snake_case`
### Privacy
- [ ] Person properties contain **no PII** by default
- [ ] Email only stored with explicit consentDecision Tree
### Not seeing expected events?
├─ PostHog default events visible? ($pageview, autocapture)
│ ├─ Yes -> Custom event bug -> Check component, guards, dedupe
│ └─ No -> SDK issue -> Check env vars, consent, ad blockers
├─ Check DevTools Network -> verify /e/ calls
└─ Check PostHog Live Events (not Activity)
### Can't answer business questions?
├─ Missing events -> Add custom events for key moments
├─ Missing properties -> Enrich with context
├─ No user ID -> Implement identify() calls
└─ Attribution gaps -> Capture UTMs, persist through signupAnti-Patterns Summary
| Anti-Pattern | Instead |
|---|---|
| No North Star event | Define ONE canonical activation event |
Excessive *_viewed events |
Collapse into one event with properties |
| PII in identify() | State-based identification only |
| Event spam from re-renders | Use isPostHogReady() guard + dedupe |
Free text source |
Use TypeScript enum for TrafficSource |
| Non-unique IDs | Use stable domain IDs (*_id) or an action_instance_id |
| Tracking everything | Focus on 5-15 key events (MVA) |
| Inconsistent naming | Enforce lowercase snake_case strictly |
See references/event-quality-rules.md for detailed examples.
Metrics and Benchmarks
Default to internal baselines and trendlines; use external benchmarks only when comparing like-for-like segments and definitions.
If you need external references, see data/sources.json -> benchmarks_research.
Templates
| Template | Purpose |
|---|---|
| tracking-plan-saas.md | Complete SaaS tracking plan |
| marketing-event-library.md | Marketing attribution events |
| utm-naming-standards.md | UTM parameter guide |
| activation-metrics-template.md | Activation metric definition |
| analytics-qa-checklist.md | Data quality checklist |
International Markets
This skill uses US/UK market defaults. For international product analytics:
| Need | See Skill |
|---|---|
| Regional compliance (GDPR, PIPL, LGPD) | marketing-geo-localization |
| Regional analytics platforms (Baidu Analytics) | marketing-geo-localization |
| Privacy requirements by region | marketing-geo-localization |
| Cookie consent by jurisdiction | marketing-geo-localization |
If your query is primarily about GDPR/PIPL/LGPD or consent configuration, use marketing-geo-localization alongside this skill.
Related Skills
- marketing-cro - A/B testing, conversion optimization
- marketing-leads-generation - Lead funnel, B2B attribution
- qa-agent-testing - LLM agent testing (complements AI analytics)
- data-sql-optimization - SQL for analytics queries
Data Sources
See data/sources.json for official documentation links.
Ops Runbook: Instrumentation Gate (Pre-PR)
Use this to keep analytics changes production-safe and queryable.
Pre-PR Commands
# 1) Find changed tracking calls
rg -n "capture\(|track\(|analytics\.|posthog\." src app lib
# 2) Enforce event/property naming policy
rg -n "[A-Z]" src | rg "capture\(|track\(" # quick camelCase/PascalCase smell
# 3) Validate tracking plan coverage
# (keep a single source of truth file; fail if event is missing)
rg -n "signup_started|signup_completed|checkout_started|trial_started" docs src
# 4) Run analytics gate test (if project defines one)
npm run test:analytics-gatePost-Deploy Smoke Query Template
-- Replace table names for your warehouse/provider
select event,
count(*) as events,
count(distinct distinct_id) as users
from events
where timestamp >= now() - interval '24 hour'
and event in ('signup_started','signup_completed','checkout_started','trial_started')
group by event
order by events desc;Event Contract Minimum
Each critical event must include:
- stable event name (snake_case)
- actor id (
user_idordistinct_id) - object id (
*_id) - source context (
surface,entry_point,utm_*when relevant) - timestamp from server or trusted client clock
Gate Failure Policy
- Missing critical event or required property: block merge.
- Non-critical property drift: allow merge only with follow-up issue.
- Silent event rename: block merge until dashboard/query migration is prepared.