Gumroad's export is a sales file rather than a subscription file, and its central difficulty is that one-off product sales and recurring memberships arrive in the same rows. Separating them is most of the work, and getting it wrong produces an MRR figure that is largely one-time revenue.
TL;DR: Gumroad sales exports mix one-off purchases with memberships in one file, and that mixture is the main analytical problem. Here is how to isolate recurring revenue and read the membership fields.
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.
Gumroad is built around products and sales, with memberships layered on as products that recur. A sale row carries the product, the buyer, the amount and a recurrence indicator where applicable. There is no rich subscription state machine of the kind Chargebee or Recurly provides, so subscription status has to be derived from whether membership charges are still arriving.
| Needed | Where it lives in Gumroad | Watch out for |
|---|---|---|
| Account identifier | Buyer email, and the subscription ID where a membership exists | Email is usually the only stable identifier. Note the limitation. |
| Subscription status | Derive from whether recent recurring charges exist | There is no full status vocabulary. Cancellation is often visible only as charges stopping. |
| Amount and currency | Sale price, net or gross of Gumroad's fee depending on the report | Confirm which basis the export uses. It matters and it is not obvious. |
| Billing interval and term | Recurrence field on membership products: monthly, yearly and others | One-off sales have no recurrence value. That is your filter. |
| Start date | First membership charge date for that buyer and product | Reliable, and easy to compute. |
| Cancellation or end date | Usually inferred from charges ceasing; sometimes an explicit cancellation date | Ask for the membership-level report, which carries more than the sales report. |
| Last successful payment date | Most recent sale row for that membership | This is the backbone of the whole reconstruction. |
These are the errors we see repeatedly on this platform. Each one is silent: the analysis completes and returns a number that is wrong.
This is the defining problem. Filter on the recurrence field to isolate memberships, then verify by checking that each retained buyer has multiple charges at a consistent interval. A Gumroad business is very often mostly one-time revenue with a membership tail, and that mix determines the multiple more than the churn rate does.
Gumroad supports pay-what-you-want pricing and discount codes freely, so two buyers on the same membership can pay different amounts indefinitely. Use the actual charge amounts rather than a list price, and expect genuine dispersion rather than a clean price ladder.
Without an explicit cancellation field you are inferring churn from charges stopping. Ask for the membership or subscriber report rather than only the sales report, since it carries more status information. Where you still have to infer, state the convention: a gap beyond about 1.5 intervals counts as churned.
Different Gumroad reports present amounts gross and net of fees. Establish which you have before summing anything, and do not mix reports within one analysis.
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 the full Gumroad sales history and, separately, the membership or subscriber report, for all time. Include buyer email, product, subscription or membership ID, recurrence, amount, currency, date, and any cancellation date available. Please confirm whether the amounts in each report are gross or net of Gumroad's fees, and flag which products are memberships rather than one-time purchases.
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 Gumroad 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 Gumroad documentation: https://gumroad.com/help. 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 →
Yes, once memberships are isolated from one-off sales using the recurrence field. The bigger question is usually what share of revenue is recurring at all, because many Gumroad businesses are predominantly one-time sales with a membership tail, and that mix affects valuation more than the churn rate does.
Usually by charges ceasing, since the sales export has no cancellation status. Ask for the membership or subscriber report, which carries more. Where inference is unavoidable, adopt an explicit convention such as a gap of more than 1.5 billing intervals and state it in the analysis.
Because Gumroad supports pay-what-you-want pricing and freely applied discount codes, so paid amounts genuinely disperse for the same product. Build revenue from actual charge amounts rather than a list price, and do not treat the dispersion as a data error.