Customer LTV Analysis in Snowflake by Acquisition Channel
Summary
A customer LTV analysis in Snowflake sums each customer's gross profit over a fixed window, such as 12 or 24 months from their first order, and compares the averages by acquisition channel, first product or region. Fixed windows keep cohorts comparable; gross margin keeps LTV comparable with acquisition cost.
On this page
Who this report is for
Growth, finance and marketing analysts deciding where to spend acquisition budget, with order history and customer attributes in Snowflake.
What the report includes
| Metric | Source field | Why it matters |
|---|---|---|
| Customer | FACT_ORDERS.CUSTOMER_ID (example schema) | The unit LTV is calculated for. |
| First order date | Calculated: MIN(FACT_ORDERS.ORDER_DATE) per customer | Starts each customer's LTV window. |
| Gross profit | FACT_ORDERS.NET_REVENUE − FACT_ORDERS.COGS (example schema) | LTV on gross profit is what you can compare with CAC. |
| Acquisition channel | DIM_CUSTOMER.ACQUISITION_CHANNEL (example schema) | The main lens for budget decisions. |
| 12-month LTV | Calculated: SUM(gross profit) within 365 days of first order ÷ customers | A fixed window that every cohort old enough can be measured on. |
| Repeat rate | Calculated: customers with 2+ orders in window ÷ customers | Explains whether LTV differences come from repeat buying or order size. |
How to build it in Better Analyst from Snowflake
- Create a dedicated Snowflake role and user with SELECT on the schemas you want to analyse (the Snowflake connector docs include the SQL).
- In Better Analyst, open Connectors, choose Add Connector, then Snowflake, and enter the account identifier, username, password, warehouse and database, plus an optional schema and role.
- Click Test Connection (the warehouse must be running) and save.
- Ask for 12-month gross-profit LTV by acquisition channel for customers whose first order was at least 12 months ago, with customer counts and repeat rate.
Questions to ask
- “Calculate 12-month gross-profit LTV by acquisition channel for customers acquired in 2025.”
- “Which first-purchased product leads to the highest 24-month LTV?”
- “Compare LTV for customers acquired with and without a discount.”
- “Show cumulative gross profit per customer by month since first order, by channel.”
Sample output
Sample data for illustration, not real account data.
| Channel | Customers | Repeat rate | 12-month gross profit | 12-month LTV |
|---|---|---|---|---|
| Organic search | 6,420 | 34.1% | $1,123,500 | $175.00 |
| Paid social | 9,880 | 21.6% | $1,195,480 | $121.00 |
| Referral | 2,150 | 41.8% | $451,500 | $210.00 |
| Marketplace | 4,310 | 15.2% | $353,420 | $82.00 |
Charts to use
- 12-month LTV by channel (Bar chart): Average gross-profit LTV per channel, sorted.
- Cumulative gross profit curves (Line chart): How quickly each channel's customers accumulate value month by month.
Keep it up to date
Rerun the LTV table quarterly as a scheduled task; a Data Flow can write it to a Snowflake table so marketing dashboards and spreadsheets read the same numbers.
Further reading
Frequently asked questions
Why use a fixed 12-month window instead of lifetime?
Should LTV use revenue or gross profit?
What if acquisition channel isn't in Snowflake?
Related reports
Snowflake Dashboard for Revenue: Month, Region and Channel
Build a revenue dashboard on Snowflake: monthly revenue, growth, region and channel breakdowns and top customers, without a BI tool. Fields, sample and setup.
Cohort Retention Analysis in BigQuery: Monthly Table
Build a monthly cohort retention table in BigQuery from an orders or events table: cohort by first month, retention by months since, and how to read it.