In-app events in. Triggered lifecycle actions out.
Growth, marketing, product, and sales each looked at Foxit customers through their own siloed system. No one could answer "who's ready to upgrade?" or "who's about to churn?" — so upsell was manual and reactive. Two parallel builds fixed it: an in-app tracking + cohort segmentation system that routed lifecycle actions by usage pattern, and an automated Python data layer unifying product, billing, support, and marketing into a single reconciled customer dataset. Validated against manual reports for two months before go-live.
In-app events → cohorts → triggers
Raw usage events land, get reconciled into cohorts by frequency + duration + feature-mix, then fire the right lifecycle action per cohort definition.
Python reconciliation layer
- API extract from every system with daily refresh + alerting.
- Four silos (product / billing / support / marketing) reconciled by customer ID.
- Data quality gates and error handling before promotion.
- Two months of validation against existing manual reports before go-live.
Unified customer lifecycle table
- One row per customer, with product + billing + support + marketing rolled in.
- LTV, CAC, and cohort calculated once, referenced everywhere.
- Tableau reporting layer reads directly from this table.
- Refresh window documented with confidence intervals for downstream consumers.
Four silos → one source of truth.
First time product, finance, and marketing leadership saw one set of customer numbers they agreed on.
Product Usage
4 products, event-level telemetry: frequency, duration, feature adoption
Billing
Plan tier, MRR / ARR, overage, expansion, contract renewal dates
Support
Tickets, priority, resolution time, satisfaction, customer health signals
Marketing / CRM
Acquisition channel, campaign source, engagement, nurture history
One reconciled customer dataset. LTV and CAC by channel.
Joined on customer ID, reconciled for identity edge cases, with documented refresh cadence and 95% confidence intervals. This became the canonical table read by every downstream dashboard.
Cohort → action mapping.
Each cohort has a triggered lifecycle action. Every action started as a high-velocity test (copy / channel / timing / cohort definition) before being promoted into always-on production.
What the unified layer + trigger engine delivered.
Eliminated — 18 hrs funnel + 25 hrs billing reconciliation + 29 hrs usage analysis. Freed 2 FTE for strategy.
Scaled highest-LTV channels (API partnership at 3.2× LTV) and highest-converting lifecycle triggers.
40+ growth experiments, 12 high-impact scaled into production programs, aligned exec team on customer metrics.