Skip to main content
FloKit uses lifecycle events to join acquisition spend to subscription outcomes. You can send events via the Events API, your subscription platform’s webhooks, or your data warehouse. The more complete your event coverage, the richer FloKit’s payback analysis.

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 of subscription_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.