user_created
When to send: User account is created or on the first app open.
Why FloKit uses it: Anchors the user identity graph and establishes the first touchpoint for the LTV window. All downstream events are measured relative to this timestamp.
install_attributed
When to send: Send from your MMP (AppsFlyer, Adjust) or server-side when attribution resolves — typically within seconds to minutes of install.
Why FloKit uses it: The critical join point between ad spend and downstream subscription outcomes. Without this event, CAC and payback calculations cannot be attributed to a campaign.
onboarding_started
When to send: User enters the onboarding flow.
Why FloKit uses it: Measures the top of the onboarding funnel. Combined with
onboarding_completed, FloKit computes completion rates per cohort and acquisition source.
onboarding_completed
When to send: User finishes the onboarding flow.
Why FloKit uses it: Onboarding completion rate is a leading indicator of trial and subscription intent. FloKit surfaces completion-rate deltas across acquisition channels and creative cohorts.
paywall_viewed
When to send: A paywall screen is displayed to the user.
Why FloKit uses it: Measures paywall impression-to-trial conversion. Essential for offer and pricing analysis — FloKit tracks which paywalls, offers, and contexts drive the highest-quality subscribers.
trial_started
When to send: User starts a free trial.
Why FloKit uses it: Trial start is the primary subscription intent signal. Trial-to-paid conversion rate is FloKit’s core payback metric — the quality of a cohort is largely determined by how its trials convert.
subscription_started
When to send: User completes their first paid purchase.
Why FloKit uses it: First revenue event used for CAC payback calculation. FloKit joins this event to
install_attributed to compute time-to-first-revenue and return on ad spend.
renewal_completed
When to send: A subscription renews at each billing cycle.
Why FloKit uses it: The renewal sequence builds the LTV curve. FloKit uses renewal cadence to project payback windows and flag cohorts with declining retention.
subscription_cancelled
When to send: User cancels their subscription. Note: the user may remain active until the current billing period ends — cancellation does not mean immediate churn.
Why FloKit uses it: Flags cohorts with elevated cancellation intent. Combined with renewal data, FloKit distinguishes between early cancellations (poor quality signal) and cancellations after multiple renewals (healthy LTV).
refund_issued
When to send: A refund is processed.
Why FloKit uses it: Removes revenue from payback calculations. Cohorts with high refund rates are flagged as low-quality acquisition — a signal that creative or targeting is attracting non-intent users.
plan_changed
When to send: User upgrades or downgrades their subscription plan.
Why FloKit uses it: Plan changes affect LTV and payback trajectory. Upgrade rate from a cohort is a positive signal; high downgrade rates suggest pricing misalignment.
offer_viewed
When to send: A promotional offer is displayed to the user.
Why FloKit uses it: Measures offer impression-to-redemption rate. FloKit surfaces which offers drive incremental subscriptions vs. which discount existing intent.
checkout_started
When to send: User begins the checkout process (enters payment details or taps to subscribe).
Why FloKit uses it: Checkout abandonment rate surfaces pricing friction. A high
checkout_started to checkout_completed drop-off signals a problem with the checkout UX, pricing, or payment method coverage.
checkout_completed
When to send: Purchase completes. Use alongside or instead ofsubscription_started for web flows where checkout and subscription creation are distinct steps.
Why FloKit uses it: Confirms the revenue event for web subscription flows. For Stripe-based subscriptions, this is the primary first-revenue signal.
campaign_touch
When to send: User is exposed to a campaign — an ad impression or click.
Why FloKit uses it: Builds multi-touch attribution models and creative fatigue signals. High impression frequency with declining click-through rate flags creative exhaustion.
creative_seen
When to send: A specific creative (video, image, or copy variant) is viewed.
Why FloKit uses it: Creative fatigue and retained-value-per-creative analysis. FloKit correlates creative exposure sequences with downstream subscription quality to surface which creatives attract high-LTV users.