Home Docs How It Works How MarginOS calculates LTGP

How MarginOS calculates LTGP

Last updated: August 5, 2026 By Aron Baczoni

Quick Reference

Inputs

A connected Shopify store with enough order history to cover a customer’s first 90 days; cost data for the SKUs you sell, since LTGP is a profit figure; orders with a customer identity attached.

Outputs

Average contribution profit per customer over their first 90 days, reported per acquisition channel in Growth, as a 90-day trailing figure independent of the date range you are viewing.

Outcomes

Compare acquisition cost against what a customer actually earns you rather than what they spend, so you can tell which channels fund the business and which only look like they do.

MarginOS calculates LTGP — Lifetime Gross Profit — as the average contribution profit a customer generates in their first 90 days. It is built by taking every order that customer placed in that window, computing the real Gross Profit on each one, adding them up, and then averaging that total across your customers. The window is measured from each customer’s own first order, not from a date on the calendar, and the profit is after returns. LTGP is what you earn from a customer, which is why it — not revenue — is the honest thing to compare acquisition cost against.

What is LTGP?

LTGP is the average profit, not revenue, that a customer contributes within a fixed window after they first buy from you. MarginOS uses a 90-day window and reports it as contribution profit per customer.

The distinction from LTV is the whole point. Lifetime Value counts what a customer spends; Lifetime Gross Profit counts what you keep. Two brands with identical LTV can have wildly different LTGP if one sells a heavier product, ships further, or takes more returns. Since acquisition cost is paid in real money, comparing it to revenue flatters every channel you run — comparing it to profit tells you which ones actually fund the business. That comparison is the LTGP:CAC ratio, and how to read it, what a healthy ratio looks like, and how it varies by category are covered on the LTGP:CAC ratio benchmarks pillar.

Before you start

  • A connected Shopify store with order history synced — LTGP is built from real orders, so it needs enough history to cover a customer’s first 90 days.
  • Cost data for the SKUs you sell, since LTGP is a profit figure. The better your cost coverage, the more meaningful the number.
  • Customers with identity attached to their orders. Orders that cannot be tied to a customer are excluded, because they cannot belong to anyone’s 90-day window.

Where to see LTGP in MarginOS

  1. Open Growth to see LTGP per customer broken out by the channel that acquired them.
  2. Compare it against that channel’s CAC to see which acquisition sources return more profit than they cost.
  3. Note that LTGP is a 90-day trailing figure — it does not change when you adjust the date range at the top of the page, because the window belongs to each customer, not to your report.
  4. Open Catalog Profit to check the cost coverage underneath it. LTGP inherits the quality of the costs behind each order, so weak cost data makes for a weak LTGP.

How MarginOS calculates LTGP

The calculation has three steps, and each one is deliberately different from the industry shorthand.

1. Find each customer’s own starting line. MarginOS takes the date of every customer’s first order and measures 90 days forward from that specific date. A customer who first bought in January and one who first bought in June are each measured across their own first 90 days. This is what makes LTGP comparable across cohorts — everyone is measured over the same length of relationship, not the same stretch of calendar.

2. Sum the real profit on every order in that window. For each order the customer placed inside their 90 days, MarginOS computes the actual Gross Profit (CM1) on that specific order — its own revenue, its own product costs, its own fulfillment and payment fees — and adds them together. It does not take an average order value and multiply it by an average margin.

3. Average across customers. Those per-customer totals are averaged to give LTGP. Every customer counts once, whether they ordered on day one and never returned or came back six times.

Returns are subtracted, not ignored. Refunded revenue comes back out. Product cost is credited back only when the unit was actually restocked and can be sold again. And the cost of processing a return applies to every returned unit regardless of whether it was restocked, because you pay to handle a return either way. A brand with a high return rate has a genuinely lower LTGP, and MarginOS shows that rather than smoothing it away.

Why real per-order profit beats AOV × margin

The common shorthand for LTGP is average order value multiplied by gross margin multiplied by expected orders. It is a reasonable starting point and it is what most tools report. It is also wrong in a specific, predictable direction.

The shorthand assumes every order carries the same margin. In reality your repeat orders often do not look like your first orders — different basket, different discount, different shipping. It also ignores what the customer paid for shipping, the processing fee on each transaction, and the fees you never get back when an order is refunded. Each of those is small on one order and material across a cohort.

Because MarginOS sums the real profit of each individual order, it captures all of that automatically. The consequence is worth stating plainly: a MarginOS LTGP will rarely match a back-of-envelope calculation, and when they differ the difference is the part the shorthand could not see.

Which orders and customers count

Included Excluded
Orders that were paid, partially paid, partially refunded, or refunded — a refunded order still tells you something, and its reversal is part of the math. Cancelled orders, and test orders. Neither represents real trade.
Orders placed within 90 days of that customer’s first order. Orders after day 90. They are real profit, just outside the window LTGP measures.
Customers with an identity MarginOS can attach orders to. Orders with no customer identity — they cannot belong to anyone’s window, and counting them as a “customer” would inflate your denominator.
Your direct-to-consumer business line. Other business lines, which have different economics and are reported separately rather than blended in.

Example

A customer first orders on 3 March, spending $80 at $34 profit after product cost, fulfillment and fees. On 19 April they order again — $120, $51 profit. On 2 July, four months after that first order, they spend another $95.

Their LTGP contribution is $85: the March and April orders only. The July order falls outside their first 90 days, so it is real profit that simply is not part of this measure.

Now suppose the April order was partly refunded — $40 returned, one unit back on the shelf. The refunded revenue comes out, the product cost of the restocked unit is credited back, and the handling cost of processing that return is subtracted. That customer’s contribution drops accordingly, and the store’s LTGP moves with it.

Across all your customers, MarginOS averages these totals. If most customers order once and a minority order three times, LTGP lands between the two — which is the number you should be comparing your acquisition cost against.

FAQ

Is LTGP the same as LTV?

No. LTV measures what a customer spends; LTGP measures what you keep after the variable costs of serving them. Two stores with the same LTV can have very different LTGP if one has heavier products, higher shipping, or more returns. Acquisition cost is paid in real money, so profit is the honest thing to compare it against.

Why is LTGP a 90-day number rather than a true lifetime?

Because a genuine lifetime figure can only be known in hindsight, which makes it useless for deciding what to spend today. A fixed 90-day window measures every customer over the same length of relationship, so a cohort acquired last month is comparable to one acquired last year.

Why does LTGP not change when I change the date range?

Because the window belongs to the customer, not to your report. LTGP measures each customer’s first 90 days from their own first order, so it is a 90-day trailing figure that is independent of the date range you are viewing.

Does MarginOS subtract advertising from LTGP?

No. LTGP is profit before acquisition cost. Keeping them separate is what makes the comparison between them meaningful — folding ad spend into LTGP would leave nothing to compare CAC against.

How do returns affect LTGP?

Refunded revenue is reversed. Product cost is credited back only when the unit was restocked and can be sold again. The cost of processing the return applies to every returned unit regardless of restocking, because you pay to handle it either way. A high return rate genuinely lowers LTGP, and MarginOS shows that.

Why is my MarginOS LTGP different from my own calculation?

Most hand calculations use average order value times gross margin, which assumes every order carries the same margin and quietly omits shipping, payment fees and the fees you do not get back on refunds. MarginOS sums the real profit of each individual order instead, so the difference between the two figures is the part the shorthand could not see.

Do guest checkouts count toward LTGP?

Orders with no customer identity are excluded, because they cannot be assigned to anyone’s 90-day window. Counting them as customers would inflate the denominator and understate LTGP.

Related

About the author

Aron Baczoni

Aron Baczoni is the founder of MarginOS and a former decade-long veteran of Google's Ads and Global Business Operations units. His work is focused on bridging the gap between AI's promise and its practical implementation for direct-to-consumer (DTC) brands, helping them build a sustainable competitive advantage through strategic, high-ROI AI solutions.

Read Aron's story

Get Your Profit & Inventory Command Center

See your real margins in real time, not in spreadsheets.

Get your Profit & Inventory Command Center

Or email sales@marginos.com to see your real margins on your own data.