F
Foxit Marketing Model // steve_hill
[ lifecycle_engine.v1 ]

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.

// 01 — data_flow

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.

[ SOURCES ] [ INGEST ] [ MODEL ] [ SURFACE ] [ DECIDE ] Product A — eSign Product B — Admin Product C — API Product D — SDK billing_db support_tickets marketing_crm PYTHON_RECON_LAYER event_capture() api_extract() reconcile() validate_dq() unify_customer() daily refresh • alerts COHORT_SEGMENTATION Frequency × Duration × Feature-mix LTV_CAC_ATTRIBUTION LTV by acquisition channel 95% CIs included RETENTION_COHORTS 12-mo rolling retention by acquisition month LIFECYCLE_TRIGGER_ENGINE Cohort-to-action rules validated via high-velocity tests API Growth Funnel trial / active / paid LTV:CAC by Channel api_partnership: 3.2× Retention Heatmap 12-mo cohort grid Trigger Response win_rate by cohort 3× PARTNERSHIP SCALE TRIGGERS SUNSET LOSERS CS INTERVENE NEW COHORTS // decisions re-enter source layer: product changes, CS outreach, new tests
// data_layer

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.
// sql_layer

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.
// 02 — unified_data_layer

Four silos → one source of truth.

First time product, finance, and marketing leadership saw one set of customer numbers they agreed on.

PROD
Product Usage

4 products, event-level telemetry: frequency, duration, feature adoption

BILL
Billing

Plan tier, MRR / ARR, overage, expansion, contract renewal dates

SUPP
Support

Tickets, priority, resolution time, satisfaction, customer health signals

MKT
Marketing / CRM

Acquisition channel, campaign source, engagement, nurture history

[ unified_customer_layer ]

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.

// 03 — lifecycle_engine

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.

Cohort
Usage Signal
Triggered Action
Outcome
Feature-shallow, frequent
high_freq + low_feature_depth
IN-APPfeature-education nurture
+22% activation
Plan-limited power user
deep_use + hitting_plan_limit
SALEStriggered upgrade call
+3× expansion rate
At-risk churn signal
declining_duration + ticket_spike
CSretention in-app + CS outreach
−35% churn vs. control
Multi-product candidate
single_product_power_user
EMAILcross-sell nurture + demo CTA
+18% cross-sell
API partnership prospect
api_usage + integration_depth
PARTNERdedicated partner-success track
3.2× LTV vs. self-serve
// 04 — outcomes

What the unified layer + trigger engine delivered.

−72h/wk
[ manual_reporting ]

Eliminated — 18 hrs funnel + 25 hrs billing reconciliation + 29 hrs usage analysis. Freed 2 FTE for strategy.

3× Q1
[ roi ]

Scaled highest-LTV channels (API partnership at 3.2× LTV) and highest-converting lifecycle triggers.

+28%
[ yoy_revenue ]

40+ growth experiments, 12 high-impact scaled into production programs, aligned exec team on customer metrics.