These events are designed for B2B SaaS and subscription-based businesses.
If you’re running an e-commerce store, see Standard Events instead.
When to Use SaaS Events
Use these events when your business model includes:- Subscription billing (monthly/annual plans)
- Free trials with conversion tracking
- Seat-based pricing with expansion revenue
- Multi-user accounts with role-based access
- Product-led growth with feature usage tracking
Account Lifecycle
Track account creation and deletion to measure growth and churn.account_created
Fires when a new account (organization/workspace) is created.JavaScript
Properties
When to Fire
- After account registration completes
- After organization setup wizard finishes
- After SSO provisioning creates a new workspace
account_deleted
Fires when an account is permanently deleted.JavaScript
Properties
When to Fire
- After account deletion confirmation
- After workspace removal completes
- After data retention period expires
Acquisition
Track the lead-to-signup funnel to measure conversion rates.signup_started
Fires when a user begins the signup flow.JavaScript
Properties
When to Fire
- When signup form is opened
- When registration page loads
- When “Start Free Trial” button is clicked
signup_completed
Fires when a user completes signup and creates an account.JavaScript
Properties
When to Fire
- After signup form submission succeeds
- After email verification completes
- After OAuth signup flow finishes
demo_requested
Fires when a user requests a product demo.JavaScript
Properties
When to Fire
- After demo request form submission
- After sales call booking confirmation
- After Calendly/HubSpot meeting scheduled
Trial Events
Track the trial lifecycle from start to conversion or expiry.trial_started
Fires when a user begins a free trial.JavaScript
Properties
When to Fire
- After trial signup confirmation
- After trial activation in billing system
- After Stripe
customer.subscription.createdwith trial
trial_activated
Fires when a trial user reaches a meaningful activation milestone.JavaScript
Properties
When to Fire
- After first key feature is used
- After onboarding checklist is completed
- After first data import succeeds
trial_extended
Fires when a trial period is extended.JavaScript
Properties
When to Fire
- After support manually extends trial
- After promotional extension is applied
- After win-back campaign grants extension
trial_ending_soon
Fires when a trial is about to expire (typically 3 days before).JavaScript
Properties
When to Fire
- 3 days before trial expires (common)
- When Stripe sends
customer.subscription.trial_will_end - When automated warning email triggers
trial_expired
Fires when a trial ends without conversion.JavaScript
Properties
When to Fire
- When trial end date is reached without payment
- When account is downgraded to free tier
- When access is revoked after grace period
trial_converted
Fires when a trial converts to a paid subscription. This is a key conversion event.JavaScript
Properties
When to Fire
- After first successful payment
- When Stripe subscription status changes from
trialingtoactive - After payment method is charged successfully
Subscription Lifecycle
Track the complete subscription journey from creation through churn or reactivation.subscription_created
Fires when a subscription record is created in your billing system.JavaScript
Properties
When to Fire
- When subscription object is created in Stripe
- May precede first payment (for trials)
- After checkout session completes
subscription_started
Fires when a new subscription begins (first billing period starts).JavaScript
Properties
When to Fire
- After first successful charge
- When subscription status becomes
active - After trial converts to paid
subscription_upgraded
Fires when a customer upgrades to a higher-tier plan.JavaScript
Properties
When to Fire
- When plan changes from lower to higher tier
- When Stripe subscription item is updated with higher-priced plan
- After upgrade checkout completes
subscription_downgraded
Fires when a customer downgrades to a lower-tier plan.JavaScript
Properties
When to Fire
- When plan changes from higher to lower tier
- When features are removed from subscription
- When scheduled downgrade takes effect at period end
subscription_renewed
This is a custom event name. For standard renewal tracking, consider using
payment_succeeded or invoice_paid events instead.JavaScript
Properties
When to Fire
- When recurring payment succeeds
- When billing period advances
- When Stripe
invoice.paidfires for subscription
subscription_paused
Fires when a subscription is paused.JavaScript
Properties
When to Fire
- When customer requests pause
- When seasonal pause is activated
- When Stripe subscription pause feature triggers
subscription_resumed
Fires when a paused subscription is resumed.JavaScript
Properties
When to Fire
- When customer manually resumes
- When pause period ends automatically
- When billing restarts
subscription_cancelled
Fires when a cancellation is requested (may still be active until period end).JavaScript
Properties
When to Fire
- When customer clicks cancel button
- When cancellation request is submitted
- When Stripe subscription is set to cancel at period end
subscription_churned
Fires when a subscription ends completely (no longer billing). This is the final churn event.JavaScript
Properties
When to Fire
- When final billing period ends
- When subscription is deactivated
- When Stripe
customer.subscription.deletedfires
subscription_initial_purchase
Fires when a customer’s first subscription payment is processed (distinct from trial conversion).JavaScript
Properties
When to Fire
- First subscription charge succeeds
- After trial converts (first paid billing period)
- When new customer’s initial payment processes
subscription_recurring_purchase
Fires when a recurring subscription payment is processed (not the initial purchase).JavaScript
Properties
When to Fire
- Each recurring billing cycle
- When Stripe
invoice.paidfires for an existing subscription - Monthly/annual renewal charge succeeds
subscription_reactivated
Fires when a previously churned customer resubscribes.JavaScript
Properties
When to Fire
- When former customer signs up again
- When win-back campaign converts
- When churned account starts new subscription
Order Fulfillment Events
Track order fulfillment and shipping for e-commerce subscription boxes, physical product deliveries, and Klaviyo flow triggers.order_fulfilled
Fires when an order has been completely fulfilled (all items prepared for shipment).JavaScript
Properties
When to Fire
- When warehouse marks order as packed/ready
- When Shopify fulfillment is created
- When all items in an order are fulfilled
order_shipped
Fires when an order has been shipped and tracking information is available.JavaScript
Properties
When to Fire
- When shipping label is created with tracking
- When carrier picks up package
- When Shopify
fulfillment_events/createwebhook fires
User Events
Track team growth and user engagement within accounts.user_invited
Fires when a user is invited to join an account.JavaScript
Properties
When to Fire
- When team invite is sent
- When collaboration request is initiated
- After invite email is dispatched
user_joined
Fires when an invited user accepts and joins the account.JavaScript
Properties
When to Fire
- When invite is accepted
- When account access is granted
- After user completes join flow
user_role_changed
This is a custom event name. Track it using the Custom Events pattern if you need role change analytics.
JavaScript
Properties
When to Fire
- When user is promoted to admin
- When permissions are modified
- After role update is saved
Billing Events
Track payment activity for revenue analytics and dunning workflows.payment_succeeded
Fires when a payment is processed successfully.JavaScript
Properties
When to Fire
- When charge succeeds
- When invoice is paid
- When Stripe
invoice.paidwebhook fires
payment_failed
Fires when a payment attempt fails.JavaScript
Properties
When to Fire
- When card is declined
- When insufficient funds error occurs
- When Stripe
invoice.payment_failedwebhook fires
invoice_paid
Fires when an invoice is marked as paid.JavaScript
Properties
When to Fire
- When payment is received
- When manual reconciliation marks invoice paid
- When Stripe
invoice.paidwebhook fires
Expansion Events
Track seat-based and add-on revenue expansion.seat_added
Fires when additional seats are purchased.JavaScript
Properties
When to Fire
- When seats are purchased
- When user is added beyond plan limit
- When Stripe subscription quantity increases
seat_removed
Fires when seats are removed from the plan.JavaScript
Properties
When to Fire
- When seats are removed
- When user is deactivated
- When Stripe subscription quantity decreases
Engagement Events
Track user activity and product milestones.feature_used
Fires when a specific feature is used. Track key features to understand product adoption.JavaScript
Properties
When to Fire
- When key features are used
- When premium features are accessed
- When usage-based actions are performed
milestone_reached
Fires when a key milestone is achieved.JavaScript
Properties
When to Fire
- When usage threshold is crossed
- When achievement is unlocked
- When significant product milestone occurs
Stripe Webhook Integration
If you use Stripe for billing, handle webhooks to track events automatically.Server-Side Helper Pattern
Create a helper to queue events for server-side tracking:Example Webhook Handler
Stripe Webhook Mapping
What’s Next
Standard Events
E-commerce event reference for Shopify stores.
Custom Events
Define your own events beyond the standard taxonomy.
Properties & Context
Complete reference for all event fields.
Event Taxonomy
How events flow through the Upstack pipeline.