At a glance
- Product, growth, billing, CRM, and lifecycle data from 13+ systems unified into ClickHouse
- A cross platform engagement model that flags at-risk users before they churn
- Acquisition channels ranked by real activation, not clicks or installs
This AI voice SaaS was growing fast across iOS, Mac, Windows, and Android. Every download looked like a win. But downloads and engagement are not the same thing, and the team had no way to tell which users were actually using the product, and which had gone quiet after day one.
Their individual tools worked well. PostHog captured product events. Stripe and RevenueCat handled billing. Seven ad platforms ran campaigns. But none of it connected, and the question leadership actually needed answered, are users activating, staying, and growing, had no single source to pull from.
The Problem With Engagement Hidden Across Platforms
As the user base grew across four platforms, so did the difficulty of separating real growth from surface metrics. The team needed to know which users were genuinely engaged, which acquisition channels produced people who stayed, and whether ad spend was buying installs or activated users.
These are not exotic questions. They are standard questions for any product led company managing growth at scale, but thirteen disconnected systems could not answer them without someone pulling exports by hand before every meeting.
Every system the business relied on, connected into one warehouse:
| Domain |
Sources |
What we track |
| Product Analytics |
PostHog |
Product events, feature usage, activation, retention |
| Growth and Ads |
Facebook, Google, AppLovin, Apple Ads, AppsFlyer, Vibe, Partnerships |
Ad spend, campaigns, conversions, attribution |
| Revenue |
Stripe, RevenueCat |
Subscriptions, billing, in app purchases |
| CRM and Support |
Pylon, Attio |
Accounts, support issues, customer records |
| Lifecycle |
Customer.io, Dub |
Campaign engagement, link attribution |
The data existed. The problem was connection. Without a warehouse underneath, every growth decision was based on whichever platform's numbers someone happened to pull that week.
Why the Standard Answer Did Not Fit
The instinctive response is to hire a data engineer, connect PostHog and the ad platforms, and build a growth dashboard in house. That works for some teams, but a hire takes months to ramp up and still only covers one layer of a thirteen system stack.
This team did not need a headcount. They needed a foundation, built fast, that could handle real time product events alongside batch ad and billing data, by a team that had built this exact model before.
What Vero Built?
The architecture we deployed runs on one constraint: every source, streaming or batch, lands in one warehouse with one shared user identity.
- ClickPipe streams PostHog, RevenueCat, and Customer.io in real time, so activation and billing signals are never more than seconds old
- dlt handles Pylon, Vibe, and Dub with incremental cursors and state management built in
- Fivetran runs managed connectors for Stripe, Facebook, Google, AppLovin, Apple Ads, AppsFlyer, and Attio
- ClickHouse is the warehouse, built for the high volume event queries product analytics demands
- dbt turns raw events and CRM data into one definition each for activation, retention cohorts, MRR, and ARR
Every metric now rolls up from the same mart that powers every dashboard. No more reconciling numbers before a board meeting.
How the Rollout Happened?
The engagement moved in three stages.
- Discovery: mapped all 13+ systems, defined a shared user identity across product, billing, and ad platforms, and agreed on what activation actually means
- Warehouse setup: ClickPipe, dlt, and Fivetran stood up and validated, with Dagster Cloud orchestrating every schedule and posting failures to Slack
- Dashboards live: dbt models built incrementally, starting with activation and retention, then expanding into CAC, channel quality, and reverse ETL segments pushed back to Customer.io
The full stack was live and in daily use within the week.
What Changed for the Team?
The difference was not subtle.
Before, downloads looked healthy on every platform, but nobody could see whether growth was translating into users who stayed. Spend decisions were based on installs, not retention, because retention data lived nowhere a growth manager could query it.
- At-risk users are flagged automatically once usage drops below a threshold, not discovered at renewal
- Four platforms, iOS, Mac, Windows, and Android, now resolve to one engagement model
- Acquisition channels are ranked by real activation rate, so spend shifts to sources that retain
- Modeled user segments push back into Customer.io, so lifecycle campaigns fire on real behavior
Nobody on the team manages infrastructure. Every pipeline runs on a schedule with monitoring built in, and Slack tells someone the moment something breaks.