Skip to main content
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.created with 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 trialing to active
  • After payment method is charged successfully
Track mrr to measure trial-to-paid conversion value and calculate average revenue per converted trial.

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
Track mrrDelta alongside subscription_downgraded to calculate net revenue retention.

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.
Fires when a subscription successfully renews for another billing period.

JavaScript

Properties

When to Fire

  • When recurring payment succeeds
  • When billing period advances
  • When Stripe invoice.paid fires 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.deleted fires
Use this event to calculate churn rate and analyze churn reasons. Track ltv to understand which customer segments have the highest lifetime value.

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.paid fires for an existing subscription
  • Monthly/annual renewal charge succeeds
Use subscription_initial_purchase for acquisition metrics and subscription_recurring_purchase for retention/LTV analysis. Together they give a complete picture of subscription revenue.

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/create webhook fires
Klaviyo integration: order_shipped is commonly used to trigger post-purchase flows like “Your order is on the way” emails with tracking information.

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.
Fires when a user’s role is changed within an account.

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.paid webhook 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_failed webhook fires
Track payment failures to identify at-risk customers and trigger dunning workflows.

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.paid webhook 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.
Webhook handlers run server-side where window._upstack() is not available. Server-side event tracking requires the Upstack Server API. Contact support for early access, or use the patterns below to queue events for client-side tracking.

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.