Skip to main content

Customer Value Report

The Customer Value Report breaks revenue down by first charges, upsells, rebills, and lifetime value across any segment of your business — products, prices, currencies, dates, or attribution channels.

Use it to compare cohort performance across products or campaigns, monitor AOV and LTV, or feed the same numbers into your own tools via the API.

Open the report

In the Odus Dashboard, navigate to Insights → Customer value. The page shows a summary chart of headline metrics and a detailed table below.

Date range and timezone

The date range selector controls the cohort window. Switch between UTC and your merchant timezone to align daily boundaries with your business hours. The merchant timezone is configured in Settings → Merchant Configuration; if unset, the report falls back to UTC.

The date filter applies to each customer's first charge, not to every payment. A customer is included if their first charge falls inside the window — all of their later upsells and rebills are then attributed to that cohort, regardless of when those later payments occurred. See How the cohort is defined below.

Grouping

Use the Group by tabs to organize rows by product, price, currency, calendar day, UTM source, or UTM campaign. Switching grouping updates the chart and table immediately.

Filtering

Open the Filters panel from the top-right of the report to narrow the cohort. Filters apply to the chart, the table and the CSV export alike, and they are written into the page URL — so a filtered view can be bookmarked, reloaded, or shared. The filters you apply are also remembered per report in this browser, so returning to it later reopens the slice you left it on — unless you arrive on a link that already carries filters, which always win. Clear all forgets them. Nothing is refetched until you press Apply.

warning

Every filter here selects the cohort by its first charge, exactly as the date range does. Filtering on currency = EUR means "customers whose first charge was in EUR" — their upsell and rebill revenue is still counted in full, including any of it taken in another currency. The same goes for product, price, gateway profile, payment method, and every UTM field: they describe the first charge, not the lifetime.

FilterSelects customers whose first charge…
Product, Price…contained a line item for that product or price. A multi-item first charge counts once, at its full amount, in every matching cohort.
Currency…was taken in that currency.
First charge amount…was for an amount in the given range.
Gateway profile…was processed on that profile.
Payment method type…used that kind of instrument (card, PayPal, Apple Pay).
Status…ended in one of the given display statuses.
Billing country(customer-level) …belongs to a customer whose billing address carries one of the chosen countries, picked by name from the country list. This is the address they gave you, not the country that issued the card.
Shipping country(customer-level) …belongs to a customer with one of the chosen shipping-address countries — where the order goes. A customer with no shipping address on file has no country to match, so they drop out of the cohort whenever this filter is set.
UTM source / medium / campaign / term / content / id…carried that attribution.

The API additionally accepts Payment method (a specific saved instrument, paymentMethod), which the panel does not offer because merchants segment by instrument kind, not by one customer's stored card.

Because the cohort is anchored to the first charge, a filter can only ever remove whole customers. It never removes part of a customer's history, so LTV and the AOV metrics stay comparable across filtered views.

When you filter by product or price and group by product or price, only the filtered row is shown — a first charge that also held other products still counts in full towards it, but those products do not appear as rows of their own.

Metrics

MetricDefinition
FC QuantityNumber of first charges in the cohort.
FC AmountTotal revenue from first charges.
FC AOVFC Amount / FC Quantity.
Upsells QuantityNumber of upsell transactions made by cohort customers.
Upsells AmountTotal upsell revenue.
Upsells AOVUpsells Amount / Upsells Quantity.
Total AOV(FC Amount + Upsells Amount) / FC Quantity.
Rebills QuantityNumber of subscription renewal charges by cohort customers.
Rebills AmountTotal rebill revenue.
LTV(FC Amount + Upsells Amount + Rebills Amount) / FC Quantity.

The Total row aggregates the cohort across all groups. The summary chart shows FC AOV, Upsells AOV, Total AOV, and LTV for the full cohort.

All monetary metrics are converted to your display currency (set in Settings → Merchant Configuration) using the exchange rate effective at the time of each payment, so historical totals remain stable.

How the cohort is defined

The cohort is built by anchoring each customer to their first charge. A customer enters the report when that first charge falls inside the selected window; once in, every later upsell and rebill they make is counted, even past the window's end date.

Consequences:

  • Shrinking the end date does not remove upsell or rebill revenue for customers already in the cohort — only the time available for that revenue to accumulate changes.
  • A customer whose first charge predates the start date is excluded entirely, even if they paid during the window.

This anchoring is what makes LTV comparable across periods.

First-charge eligibility

The first charge is the earliest payment attempt the customer has ever made, across any product. Eligible payment outcomes:

  • Succeeded
  • Reversed (fully refunded)
  • Partially reversed
  • Uncaptured (authorized but not captured)
  • Chargeback
  • Cancelled (voided authorization)

Failed and declined payments are ignored and never anchor a cohort.

Cancelled first charges

A cancelled payment anchors the cohort but is not counted as a real first charge. Anchoring exists only to prevent a later upsell from being misclassified as the customer's first product when their true first attempt was voided.

For a customer whose first charge was cancelled:

  • They do not contribute to FC Quantity, FC Amount, FC AOV, Total AOV, or LTV.
  • Their later upsell and rebill payments are still counted normally.
  • They will not appear under the product or price row of any later upsell, because the cancelled payment correctly anchors them to their original product.

Upsells vs. rebills

After the first charge, every later non-cancelled payment is classified as exactly one of:

  • Rebill — settles a recurring subscription invoice (scheduled renewal).
  • Upsell — any other post-FC payment (one-time purchases, order bumps, manual charges).

Cancelled post-FC payments are excluded from both totals.

Multi-item carts

When grouped by Product or Price, a payment whose cart contains multiple line items is split across rows proportionally to each line item's share of the payment amount. This keeps row totals consistent with the cohort total. The other groupings assign each payment to exactly one row.

Example

Suppose the report's date range is 2026-06-01 → 2026-06-30 and five customers interact with the Pro Plan ($50/mo):

CustomerFirst-ever chargeLater activity (any date)In cohort?
Alice2026-06-03 — $50 (paid)2026-06-10 upsell $20; 2026-07-03 rebill $50Yes — counts as FC
Bob2026-06-15 — $50 (paid)noneYes — counts as FC
Carol2026-06-20 — $50 (paid)2026-06-25 upsell $40; 2026-07-20 rebill $50; 2026-08-20 rebill $50Yes — counts as FC
Dave2026-05-28 — $50 (paid)2026-06-12 rebill $50No — first charge predates the window
Erin2026-06-08 — $50 (cancelled / voided)2026-06-09 upsell $30; 2026-07-05 rebill $50Yes (anchored only) — see below

Erin's first-ever charge was authorized but cancelled before capture. The cancelled payment anchors her cohort (so her later $30 upsell is still classified as an upsell, not as a first charge), but it does not count as a real FC — she contributes $0 to FC metrics. Her later upsell and rebill are counted normally.

Grouped by Product → Pro Plan, the cohort row is:

FC QuantityFC AmountFC AOVUpsells QtyUpsells AmountUpsells AOVTotal AOVRebills QtyRebills AmountLTV
3$150$503$90$30$804$200~$147

How each number is derived:

  • FC Quantity = 3 — Alice, Bob, Carol. Dave is excluded entirely; Erin's cancelled FC does not count.
  • FC AOV = $50$150 / 3.
  • Upsells Quantity = 3 — Alice's $20 + Carol's $40 + Erin's $30. Erin's upsell counts even though her FC didn't.
  • Upsells AOV = $30$90 / 3 upsells.
  • Rebills Quantity = 4 — Alice's July rebill, Carol's July and August rebills, Erin's July rebill. Dave's June rebill is excluded with him.
  • Total AOV = $80($150 FC + $90 upsells) / 3 cohort customers.
  • LTV ≈ $146.67($150 + $90 + $200) / 3.

Export to CSV

Click Export CSV in the top-right of the table to download the current view. The file contains one row per group plus a Total row, with monetary values in your display currency. The selected date range is included in the filename.

API access

The same data is available via GET /reports/customer-value. The endpoint supports all grouping options, metric selection, and every filter listed above — each published as a query parameter in the API reference, and each carrying the same first-charge semantics.

Example

GET /reports/customer-value?groupBy=product.name&createdAt[gte]=2026-01-01T00:00:00Z&createdAt[lte]=2026-01-31T23:59:59Z

The LTV of customers acquired from one campaign whose first charge was in EUR:

GET /reports/customer-value?groupBy=product.name&createdAt[gte]=2026-01-01T00:00:00Z&createdAt[lte]=2026-01-31T23:59:59Z&attribution.utmSource[eq]=fb&currency[eq]=eur

The response contains a data array (one entry per group) and a total object with the cohort aggregate.