← All posts

LTV (customer lifetime value): definition and calculation from Odoo

30 September 2026

Customer lifetime value, LTV, is what a customer has brought you since their first order. In B2C it is predicted, with models. In B2B distribution it is measured: it is in Odoo, order by order, and it answers the one question that matters when you look at a customer record. How much is this account worth?

The definition, and the two traps

LTV = the sum of a customer's confirmed orders, from the beginning. Two traps in that sentence.

"Confirmed". Not quotes. A customer with 200,000 € of sent quotes and 12,000 € of orders is worth 12,000 €. In Odoo those are orders in the Sales Order or Locked state, not Quotation or Quotation Sent.

"A customer". In Odoo, orders are almost always placed by a contact attached to a company. On the database we use as an example, 9 orders in 10. If you sum by contact, a company is worth 4,000 € and its buyer 251,000 €. You have to roll up to the parent before adding.

What it looks like on a real Odoo

Security equipment distributor, orders from October 2019 to July 2026, 819 companies with at least one order, 21.3 million euros before tax in total.

This shape, a long tail of small accounts and a handful of big ones, shows up at every distributor we have seen. The proportions change, the picture does not.

What it is for, concretely

Deciding who deserves a call. A customer whose revenue halves is serious at 80,000 € of LTV and irrelevant at 800 €. Every alert that matters should be filtered by LTV: churn, dormant account, quote going cold.

Defining what a good customer is. To look for prospects that resemble your best customers, you first have to say who your best customers are. The top 20% by LTV is an honest definition: it is the threshold ERP-BI uses to build the ideal customer profile, then to score each lead against it.

Putting marketing in proportion. A campaign that brings in 40 customers with one 1,500 € order brought in 60,000 €. A follow-up that brings back two 50,000 € accounts is worth almost as much.

Revenue or margin?

The right LTV is in margin, not revenue. A customer buying 100,000 € at 8% margin is worth less than one buying 40,000 at 25%. If your Odoo records the cost on each order line (Margin module, purchase price field), compute both. Otherwise stay on revenue and keep it in mind when comparing two accounts.

How to see it in Odoo

On a customer record, the Sales button shows the order count; in Invoicing, the total invoiced appears on the record. That is an LTV per contact, not per company, and without the filter on order state. For the full list: Sales, Reporting, Sales Analysis, filter on confirmed orders, group by customer, measure Untaxed Total, then export and roll contacts up under their company in a spreadsheet. An hour's work, redone every time.

How ERP-BI does it

ERP-BI recomputes LTV every night, per company, on confirmed orders, and shows it on every record and in every list. It filters all the recommendations on existing customers, and it is the basis of the ideal customer profile. The thresholds (50,000 € for VIP alerts, top 20% for the profile) can be set in the configuration.