I've spent the better part of a decade looking at SaaS event data — at Fivetran, at Atlan, and on calls with the customers I've worked with since. The pattern is consistent: the teams who can answer hard product questions quickly all do roughly the same handful of things with their events. The ones who can't, don't.
This is a practical guide to the principles I keep coming back to. Nothing here is theoretical — it's what I'd do (and have done) on day one of a new SaaS analytics setup.
Start with your business model, not your UI
The most common mistake I see in SaaS event tracking is starting with the interface. Teams walk through every screen and ask "what should we track here?" The result is hundreds of events with no analytical structure and a data team that can't get a straight answer to any business question.
Start with the metrics that matter to the business instead:
- Activation — what does a user do in their first session that predicts retention?
- Adoption — which features do retained users actually engage with?
- Monetisation — what triggers upgrades and expansions?
- Retention — what distinguishes users who stay from those who churn?
Map your events to these stages. Every event should connect to a business question you need to answer.
Pick a naming convention and don't break it
Naming is the highest-leverage decision you'll make, because once events are in production, renaming them is expensive.
A few rules I'd commit to on day one:
object_actionformat. Events describe something happening to something —checkout_started,feature_activated,subscription_upgraded. Readable, sortable, consistent.snake_caseeverywhere. MixingcheckoutStarted,checkout-startedandCheckout Startedacross platforms makes analysis painful. Pick one convention and enforce it.- Specific over vague.
button_clickedtells you nothing.upgrade_cta_clickedtells you everything. Events should be specific enough to answer a question without additional filtering. - Past tense for completed actions.
signup_completed, notsignup. It keeps intent separate from completion.
Design properties with analysis in mind
Properties are where most tracking implementations quietly break. A well-designed property set makes analysis effortless. A poor one makes every query a custom SQL exercise.
Every event needs these
- A timestamp — when it happened (your SDK usually handles this).
- A user identifier — who did it (
user_id,anonymous_id). - Context — where it happened (
page_url,platform,app_version).
Design for segmentation
Think about how you'll slice this event in analysis:
subscription_upgraded:
from_plan: "free" # Segment by upgrade path
to_plan: "pro" # Which plan is growing?
mrr_delta: 49 # Revenue impact
upgrade_trigger: "paywall" # What drove the upgrade?
trial_days_remaining: 3 # Urgency analysis
Each property enables a specific analytical question. upgrade_trigger lets you measure which paywalls convert best. trial_days_remaining reveals whether users upgrade early or at the last moment.
Use typed properties
Every property should have a defined type — string, number, boolean, array. When a property that should be a number arrives as a string ("49" instead of 49), aggregation queries break silently. Data contracts enforce types at ingestion.
Cover the full user lifecycle
SaaS event tracking should cover five stages.
Acquisition
How users arrive and convert to signups:
signup_started— the user began the signup flow.signup_completed— the user finished signup (withsignup_method,referral_source).
Activation
The moments that predict retention:
onboarding_step_completed— progress through onboarding (step_name,step_number).feature_activated— first use of a key feature (feature_name,is_first_use).aha_moment_reached— the user hit whatever activation milestone you've defined.
Engagement
Ongoing product usage:
feature_used— repeated feature engagement (feature_name,session_count).workspace_member_invited— expansion signal (invited_count,workspace_size).export_completed— value extraction (export_type,row_count).
Monetisation
The revenue lifecycle:
trial_started/trial_ended— trial lifecycle.subscription_upgraded/subscription_downgraded— plan changes.payment_completed/payment_failed— transaction events.
Retention and churn
Signals that predict churn:
session_started— basic engagement (track frequency, not just occurrence).support_ticket_created— friction signal.churn_risk_triggered— when your scoring model flags a user.
Common mistakes I see
Tracking too much. More events isn't better. Every event you add is a maintenance burden. If nobody will query it in the next quarter, don't track it. You can always add events later — removing them is harder.
Tracking too little. The opposite extreme is tracking only page views. Product analytics needs behavioural events. If you can't answer "what did the user do between signup and first purchase?", you're tracking too little.
Inconsistent cross-platform tracking. Web, iOS and Android should fire the same events with the same properties. When checkout_started has cart_id on web but cartId on iOS, your cross-platform funnels break. Contracts enforce consistency across platforms.
No event ownership. Every event needs an owner — a team or individual responsible for its accuracy. Without ownership, nobody investigates when feature_activated stops firing after a deploy.
No validation in CI. Tracking code should be validated before it ships. Type-safe SDK wrappers (generated from your event schema) catch errors at compile time. Schema validation in CI catches errors before merge.
Implementation workflow
A production-grade workflow, in order:
- Define the event schema based on your business metrics and user lifecycle.
- Review with product, engineering and data stakeholders.
- Generate tracking code from the schema (type-safe SDKs or auto-generated PRs).
- Validate the implementation in CI and staging before shipping to production.
- Enforce at the CDP layer (Segment Protocols, RudderStack Tracking Plans).
- Monitor volume, property types and SLA compliance in production.
- Iterate by adding events as your product grows, using the same workflow.
The teams I've seen get this right are the ones that treat event tracking as infrastructure, not an afterthought. Decisions get made off these numbers — pricing, hiring, roadmap, where the next dollar of marketing spend goes. If the events are wrong, the decisions are wrong, and nobody finds out for weeks.
If you want help turning any of this into actual contracts against your own data, come take suky for a spin.
— Kevin