Lemon Squeezy integration
Lemon Squeezy analytics: MRR, churn and refunds per app
BugOtter reads your Lemon Squeezy store and shows what each app earns: MRR and how it moved, orders and renewals after refunds, trials, cancellations and failed payments. All of it sits next to the same app's traffic, uptime and errors, so a bad day has an explanation.
- 1 API keyabout a minute
- 90 daysfirst sync
- Every 15 minsync
Three things to know
Orders and renewals
Both count: the first payment is an order, every renewal a subscription invoice.Failed payments alert you
Failed orders and renewals open an issue on the app.No revenue by source yet
Lemon Squeezy only returns checkout data in webhooks. Track purchases as a goal instead.
Connect Lemon Squeezy
One API key. It takes about a minute.
Paste it on Revenue
BugOtter lists your stores to check the key and shows their names on the connection.Let the first sync run
Every product, 90 days of orders and renewals, and every current subscription with its price.Match products to apps
BugOtter suggests a match from each product's name. Confirm it once.
- Keys are long tokens that start with
eyJ. Keys made with test mode on only see test data. - The key is stored encrypted. Only its last 4 characters are ever shown.
- Once matched, the product's revenue, MRR and failed payments show on that app.
Every 15 min
After the first sync, it repeats every 15 minutes.
Key location checked Nov 4, 2026 in the Lemon Squeezy API docs.
What you'll see
One app's revenue in the live demo. Lemon Squeezy apps get the same view, without revenue by source.

- MRR per app, from your store's subscriptions.
- How it moved: new, upgrades, downgrades and cancellations.
- A 30-day forecast if the last 30 days repeat.
- Trials, and what they're worth if they pay.
- Orders and renewals after refunds. Lemon Squeezy reports refunds on the order, with its date, so a refund shows on the day it happened.
- Leaving soon: subscriptions you or the customer cancelled, with the day they end.
- Failed payments. Failed orders and renewals open an issue on the app and alert you.
- Customers, anonymous: paying, cancelling or at risk, and lifetime paid. No names or emails.

- Revenue by product for the last 30 days, with payment counts and share.
Revenue by traffic source: not yet for Lemon Squeezy
Here's why, and what to do in the meantime.
To link a payment to the visit that brought it, BugOtter needs the visit id on something it can read later.
Lemon Squeezy lets you pass custom data to a checkout, but it only comes back in webhooks, not on the orders and subscriptions BugOtter reads through the API. So there's no checkout snippet to add today, and no traffic source column for Lemon Squeezy revenue.
What you can do now: track the purchase as a goal
Filter Analytics by any source, page or country and the goals list shows how many purchases it led to. You'll see which posts bring buyers, just not the amount.
// On your thank-you page (or after Lemon.js reports a successful checkout)
window.bo?.track("purchase", { plan: "pro" });If revenue per source matters most to you, Stripe, Polar and Creem all support it today. Stripe needs no code at all for Payment Links.
How MRR is counted for Lemon Squeezy
Yearly ÷ 12
Price times quantity, turned into a month using the price's renewal interval.
- What counts: active, past-due and unpaid subscriptions, plus cancelled ones until their end date. Trials count once they pay. Paused and expired don't count.
- Discounts: not subtracted from MRR. Revenue does subtract them: each payment counts its subtotal minus discounts.
- Tax: left out. Lemon Squeezy is the merchant of record and keeps the tax; BugOtter counts the subtotal.
- Refunds from the last 90 days of orders are subtracted. A refund on an older order isn't picked up yet.
Check a month by hand with the MRR calculator.
Read-only toward Lemon Squeezy
BugOtter never creates checkouts, refunds, cancels or emails anyone. Its Lemon Squeezy code only reads, and connecting or disconnecting is only in the app, never through the MCP server.
Because Lemon Squeezy keys can't be limited, delete the key in Lemon Squeezy if you stop using BugOtter. Disconnecting in BugOtter deletes the Lemon Squeezy data it copied.
Lemon Squeezy next to the other payment providers
BugOtter reads four providers. Here's what each one gives you.
| Feature | Stripe | Polar | Lemon Squeezy | Creem |
|---|---|---|---|---|
| Access | ||||
| The key you give BugOtter | YesRestricted key, Read only | YesOrganization token, read scopes | PartlyAPI key (can't be limited) | PartlyAPI key (can't be limited) |
| Revenue | ||||
| Revenue after refunds | Yes | Yes | Yes | Yes |
| MRR and how it moved | Yes | Yes | Yes | Yes |
| Trials and when they end | Yes | Yes | Yes | Yes |
| Cancellations scheduled (leaving soon) | Yes | Yes | Yes | Yes |
| Why customers cancelled | Yes | Yes | No | No |
| Refunds on the day they happened | Yes | PartlyWith refunds:read | PartlyOrders from the last 90 days | PartlyDated by the payment |
| Failed payment alerts | Yes | No | Yes | Yes |
| Linking and testing | ||||
| Revenue by traffic source | YesPayment Links: automatic. Your checkout: metadata | YesCheckout metadata | NoNot yet | PartlySubscriptions, via checkout metadata |
| Test mode | Yesrk_test_ keys, marked Test mode | NoNot yet (the sandbox is a separate API) | YesTest-mode API keys | Yescreem_test_ keys, marked Test mode |
Questions
Does BugOtter show revenue by traffic source for Lemon Squeezy?
Not yet. Lemon Squeezy only returns checkout custom data in webhooks, and BugOtter reads Lemon Squeezy through its API, so it can't link a payment to the visit that started it. You still get revenue and MRR per app, and you can track purchases as a goal to see which sources convert.
Can I limit the Lemon Squeezy API key to reading?
Lemon Squeezy's docs don't offer read-only keys, so the key you paste could make changes. BugOtter's Lemon Squeezy code only sends read requests: it never creates checkouts, refunds or cancels anything, and coding agents can't reach the connection over MCP. You can delete the key in Lemon Squeezy at any time.
Why is MRR different from what Lemon Squeezy shows?
BugOtter counts each subscription at its price times quantity, turned into a month, and doesn't subtract discounts. A subscription you cancelled keeps counting until it actually ends, because it's still paid for until then.
Are renewals counted, or only first orders?
Both. The first payment of a subscription is an order; every renewal after it is a subscription invoice, and BugOtter reads those too.
Does it work in test mode?
Yes. Create the API key with test mode on in Lemon Squeezy and BugOtter reads your test orders and subscriptions. BugOtter doesn't label a Lemon Squeezy connection as test mode, so swap to a live key before you trust the numbers.
How often does it sync?
Every 15 minutes, or right away when you press Sync now. The first sync reads the last 90 days of orders and renewals and every current subscription.
Your store's numbers, next to everything else your app does.
14 days of everything, no card needed. Plans from $10 a month, billed yearly.