Skip to content
Home » Reference » SaaS Event Schema: The Complete Reference

SaaS Event Schema: The Complete Reference

A complete reference for SaaS product analytics. All lifecycle events — from signup to churn — with parameters, data types, and data layer examples you can copy-paste into your tracking plan.

Most SaaS teams track too little or too much. They either rely on page views alone, missing critical product interactions, or fire hundreds of events with no naming standard, making analysis impossible. This reference gives you the middle ground: a structured schema covering the events that actually drive SaaS metrics.

SaaS Funnel Overview

SaaS analytics tracks users through five lifecycle stages. Each stage has distinct events that map to specific business metrics.

SaaS analytics funnel: Signup, Onboarding, Engagement, Monetization, Retention stages with key events
Stage Key Events Business Metric
Signup sign_up, login, sso_connect Registration rate
Onboarding onboarding_start, onboarding_step_complete, onboarding_complete Activation rate
Engagement feature_used, content_created, invite_sent DAU/MAU, feature adoption
Monetization trial_started, plan_upgraded, payment_completed Conversion rate, MRR
Retention session_start, plan_renewed, churn_initiated Retention rate, churn rate

Signup & Authentication Events

These events track how users create accounts and authenticate. They’re the entry point of every SaaS funnel and directly impact your registration-to-activation conversion rate.

Event Parameters Type When It Fires
sign_up method string Account creation completed
plan_type string
referral_source string
login method string Successful authentication
sso_connect provider string SSO provider linked
is_first_connection boolean
email_verified time_to_verify number Email confirmation clicked
password_reset method string Password reset completed

The method parameter is reusable across signup, login, and password reset. Values like email, google, github, or saml let you compare authentication paths without creating separate events for each.

SaaS signup and authentication events: sign_up, login, sso_connect, email_verified, password_reset

Onboarding Events

Onboarding is where most SaaS products lose users. When I audited a project management tool’s analytics, we discovered 68% of users dropped off before completing step 3 of a 5-step onboarding — but nobody knew because they only tracked onboarding_complete. Track each step individually.

Event Parameters Type When It Fires
onboarding_start flow_name string Onboarding flow initiated
onboarding_step_complete flow_name string Individual step finished
step_number number
step_name string
onboarding_complete flow_name string All steps finished
total_time number
onboarding_skip flow_name string User skips onboarding
skipped_at_step number
tooltip_shown tooltip_id string In-app tooltip displayed
tooltip_action string

Use flow_name consistently across all onboarding events — it lets you compare multiple flows (e.g., setup_wizard, quick_start, team_invite) and run A/B tests between them.

Onboarding event flow: start, step_complete loop, complete, with skip path and 68% drop-off insight

Feature Usage Events

Feature events are the core of SaaS analytics. They tell you what users actually do with your product. The key is using a single feature_used event with descriptive parameters instead of creating a separate event for every feature.

Event Parameters Type When It Fires
feature_used feature_name string Any feature interaction
feature_category string
action string
content_created content_type string User creates an object
is_first_creation boolean
content_deleted content_type string User deletes an object
search_performed query string In-app search used
results_count number
invite_sent invite_method string Team invite sent
role string
invite_accepted time_to_accept number Invitee joins workspace
export_completed format string Data exported (CSV, PDF)
integration_connected integration_name string Third-party integration linked

Why One Generic Event Works Better

GA4 limits you to 500 unique event names per property. A SaaS product with 50 features would burn through 150+ names using separate events (dashboard_viewed, report_created, filter_applied…). Instead, use feature_used with feature_name and action parameters. This conserves event slots and simplifies reporting.

Comparison: many separate events burning 150+ slots versus one generic feature_used event using 1 slot

Subscription & Billing Events

Billing events connect product usage to revenue. They’re essential for calculating MRR, LTV, and conversion rates. Always track these server-side for accuracy — client-side billing events can be lost to ad blockers or page refreshes.

Event Parameters Type When It Fires
trial_started plan_name string Free trial begins
trial_duration_days number
trial_ended plan_name string Trial expires
converted boolean
plan_upgraded previous_plan string Plan tier increased
new_plan string
value number
currency string
plan_downgraded previous_plan string Plan tier decreased
new_plan string
reason string
payment_completed value number Successful payment
currency string
payment_method string
payment_failed error_code string Payment attempt fails
retry_count number
seats_changed previous_count number Seat count adjusted
new_count number

Include value and currency on all monetization events. GA4 uses these for revenue reporting. Use ISO 4217 currency codes (EUR, USD) and pass values as numbers, not strings.

Server-side vs client-side billing event tracking comparison for SaaS analytics

Retention & Churn Events

Retention events help you spot at-risk users before they cancel. In my experience, tracking churn_survey_submitted with a reason parameter provides more actionable data than any cohort analysis — you hear directly why people leave.

Event Parameters Type When It Fires
churn_initiated plan_name string Cancellation flow started
tenure_days number
churn_survey_submitted reason string Exit survey completed
feedback string
churn_completed plan_name string Subscription cancelled
mrr_lost number
churn_prevented offer_type string User retained by offer
reactivation previous_plan string Churned user returns
days_inactive number
nps_submitted score number NPS survey response
comment string

Naming Convention Reference

All events in this schema follow these rules. Consistent naming prevents the user_signup vs UserSignup vs sign-up chaos that plagues most SaaS analytics setups.

Rule Standard Example
Case snake_case, all lowercase plan_upgraded not PlanUpgraded
Structure object_action invite_sent, trial_started
Tense Past tense for completed actions payment_completed not payment_complete
Length Under 40 characters (GA4 limit) onboarding_step_complete (26 chars) ✓
Prefixes No ga_, firebase_, google_ Reserved by GA4
Parameters Reuse generic names across events content_type on create, delete, export

For a deeper dive into GA4 naming rules, event limits, and GTM organization, see GA4 Event Naming Conventions: A Practical Guide.

SaaS event naming convention: snake_case format with correct and incorrect examples

Data Layer Examples

Push events to the data layer using standard dataLayer.push() calls. GTM, Matomo Tag Manager, or any tag management system can then pick them up.

Signup Event

dataLayer.push({
  event: 'sign_up',
  method: 'google',
  plan_type: 'free_trial',
  referral_source: 'product_hunt'
});

Feature Usage Event

dataLayer.push({
  event: 'feature_used',
  feature_name: 'dashboard',
  feature_category: 'reporting',
  action: 'created'
});

Plan Upgrade Event

dataLayer.push({
  event: 'plan_upgraded',
  previous_plan: 'starter',
  new_plan: 'professional',
  value: 49.00,
  currency: 'EUR'
});

Churn Event

// Server-side recommended for billing events
dataLayer.push({
  event: 'churn_completed',
  plan_name: 'professional',
  mrr_lost: 49.00,
  tenure_days: 186
});

Validation Checklist

Run through this checklist before launching your SaaS tracking implementation.

Pre-Launch QA

  • Naming: All events use snake_case, lowercase only
  • Parameters: Consistent names across similar events (plan_name, not sometimes plan, sometimes plan_name)
  • Data types: Numbers are numbers (not strings), booleans are booleans
  • Currency: ISO 4217 codes (EUR, USD) on all monetary events
  • Signup flow: sign_up fires once on completion (not on form load)
  • Onboarding: Each step fires individually with correct step_number
  • Feature events: feature_used fires on meaningful actions (not on page load)
  • Billing events: Server-side for payment_completed, plan_upgraded
  • Churn flow: churn_initiated fires when cancellation starts (not when completed)
  • DebugView: All events visible in GA4 DebugView with correct parameters
  • No duplicates: Events fire exactly once per user action
  • No PII: No email addresses, names, or IPs in event parameters
SaaS event tracking pre-launch validation checklist with quality and coverage checks

FAQ

How many events should a SaaS product track?

Start with 10–15 core events covering signup, onboarding, feature usage, and billing. Expand to 25–40 events as your analytics matures. Tracking more than 50 custom events usually means your schema needs consolidation — use generic events like feature_used with descriptive parameters instead.

Should SaaS billing events be tracked client-side or server-side?

Always server-side. Client-side billing events can be blocked by ad blockers, lost to page refreshes during payment processing, or duplicated by retry logic. Use your payment provider’s webhooks (Stripe, Paddle) to fire billing events reliably from your backend.

What is the difference between feature_used and individual feature events?

A single feature_used event with feature_name and action parameters scales better than separate events per feature. GA4 limits you to 500 unique event names. A 50-feature product using individual events would consume 150+ names. The generic approach conserves event slots and simplifies analysis through parameter-based filtering.

How do I track onboarding drop-off points?

Fire onboarding_step_complete with step_number and step_name for each step. Also track onboarding_skip with skipped_at_step. In GA4, create a funnel exploration with each step as a stage — this shows exactly where users abandon the flow and what percentage skip versus complete.

Do I need to track every feature interaction?

No. Track meaningful actions — creating, configuring, or completing something — not every button click or hover. A good test: “Would a product manager make a decision based on this event?” If the answer is no, don’t track it. You can always add events later, but removing noisy data from reports is much harder.

Further Reading


Lukas Meier
Lukas Meier

Product Analytics Specialist based in Munich. Helping teams implement clean, actionable analytics since 2015.

Leave a Reply

Your email address will not be published. Required fields are marked *