Lemon Squeezy is a merchant of record aimed at software and digital products, which means two things for an analysis: revenue arrives net of their fee and of remitted tax, and the store frequently sells one-off products alongside subscriptions in the same order history.
TL;DR: Lemon Squeezy is a merchant of record with a cancelled-but-still-active status. Here is the status model, the fee and tax treatment, and how one-off products get mixed into subscription revenue.
Every churn calculation needs the same seven things: a stable customer identifier, subscription status, recurring amount and currency, billing interval and term, start date, cancellation or end date, and ideally the date of the last successful payment. (Why each one, and what breaks without it →) What changes between platforms is where those fields live and which status values mislead you.
The objects are stores, products, variants, orders, subscriptions and subscription invoices. A subscription references a variant and carries a status plus a renewal date. Because the same store can sell one-time licences and recurring plans through the same checkout, the order history is a mixture and the subscription objects are the only reliable way to isolate recurring revenue.
| Needed | Where it lives in Lemon Squeezy | Watch out for |
|---|---|---|
| Account identifier | Customer ID on the subscription | Email is also present, but the customer ID is stable. |
| Subscription status | on_trial, active, paused, past_due, unpaid, cancelled, expired | cancelled runs until ends_at. expired is gone. |
| Amount and currency | Subscription or variant price, plus store currency | Displayed amounts may include tax depending on configuration. |
| Billing interval and term | Variant interval and interval count | Monthly and annual are both common; check both fields. |
| Start date | Subscription created-at | Trials mean paying tenure starts later. |
| Cancellation or end date | ends_at for the service stop, plus the status change date for the decision | As with Recurly, two dates with two meanings. |
| Last successful payment date | Most recent paid subscription invoice | Subscription invoices are separate from orders. Request both. |
These are the errors we see repeatedly on this platform. Each one is silent: the analysis completes and returns a number that is wrong.
cancelled still serves until ends_atA cancelled Lemon Squeezy subscription remains active until the end of the paid period, at which point it becomes expired. Use the status change for the churn decision date and ends_at for the revenue stop date. Counting only expired lags reality by up to a full billing period.
Lifetime licences, one-time purchases and add-on downloads appear alongside subscription renewals. Any revenue figure built from orders rather than from subscriptions blends recurring and non-recurring revenue, and the two carry very different multiples. Isolate subscriptions explicitly.
As with any merchant of record, the amount a customer pays, the amount recognised as revenue and the amount that reaches the bank are three different figures. Establish which one you are working in and keep it consistent.
A pause defers billing without ending the subscription. Count paused revenue separately and ask how many historically resume, because a pause offered as an alternative to cancelling is part of the churn story rather than an aside to it.
Vague requests produce filtered exports. This wording asks for the complete set in the platform's own vocabulary, which is what gets you a usable file first time:
Please export all Lemon Squeezy subscriptions in every status including cancelled, expired, paused and past-due, for the full history, with customer ID, status, variant, price, currency, interval and interval count, created-at, renews-at and ends-at. Please also export subscription invoices separately from orders, and flag which products are one-time purchases rather than recurring plans.
One check first, and it is the same on every platform: count the rows that carry a cancellation or end date. If none do across a multi-year Lemon Squeezy export, the file was filtered to active subscriptions and every churn figure you compute from it will come out at zero. That single defect causes more wrong churn numbers than every definitional argument put together, and it is fixed with one email rather than with analysis. The three further checks — row count, MRR reconciliation and history length — take another five minutes.
Once you have a clean export, the analysis is the same regardless of where it came from: recompute churn in both logo and revenue terms, build the renewal calendar, check concentration on parent entities rather than accounts, and test whatever the seller has claimed. The seller-claims pages cover the twelve claims worth testing and the arithmetic for each, and the 23-point checklist is the short version.
Official Lemon Squeezy documentation: https://docs.lemonsqueezy.com/. Export layouts change; the data model and the traps above do not.
All billing platforms → · Already integrated: Stripe, ChartMogul, ProfitWell, QuickBooks.
Every check on this page can be run by hand in a spreadsheet, and if you have the time you should. If you would rather not: send us the target's subscription export and we run the full human-reviewed analysis — logo churn, revenue churn, customer concentration, annual-plan decay, zombie MRR and an A–F revenue-quality grade. The free Starter tier covers one CSV per month, which is enough to check a single deal.
See a sample report → · Get the free 23-point checklist →
A cancelled subscription is still active and still serving until its ends-at date, when it becomes expired. For a churn cohort, use the date the status changed to cancelled, since that is when the customer decided. For MRR, use ends-at, since revenue continues until then.
Work from subscription objects rather than orders. A Lemon Squeezy store can sell lifetime licences and one-time products through the same checkout, so the order history is a mixture. Ask the seller to flag which products are recurring, and treat one-time revenue at a different multiple.
It depends which figure you are looking at. As a merchant of record, Lemon Squeezy collects a gross amount from the customer, remits tax, deducts its fee, and pays out a net amount. Those are three different numbers and any analysis needs to state which basis it uses.