Paddle
A revenue dashboard for Paddle
Paddle is the only provider here where read-only is something we can actually prove, rather than something we infer from the shape of a key.
What connecting a Paddle account gives you
Paylytics pulls transactions, subscriptions, customers and products out of Paddle and keeps its own copy. Every figure the dashboard draws is then a query against that copy rather than a request to Paddle, which is what makes reading six accounts at once instant instead of six times slower than reading one.
It is a mirror, so it is only ever as current as the last refresh — and refreshing is a button, not a background job you have to trust. Nothing is written back to Paddle at any point.
The one key here that can genuinely prove it cannot write
Paddle's permissions are granted per entity, and read and write are separate grants. A key holding only transaction.read, subscription.read, customer.read and product.read is not a key we are trusting to behave — it is a key that has not been given the ability to do anything else.
That makes Paddle the exception to the rule stated on every other page here. Where Stripe's guarantee comes from the key type and Dodo's cannot be verified at all, Paddle's comes from the permission list itself, which is why the connect form can name the exact four strings to grant.
This is Paddle Billing — the current v2 API — and not the legacy Classic vendor API, which is a different product with a different credential.
- Credential
- API key, beginning pdl_live_apikey_ or pdl_sdbx_apikey_
- Where
- Developer tools, Authentication
- Permissions to grant
- transaction.read, subscription.read, customer.read, product.read
- Not supported
- The legacy Paddle Classic vendor API
Which figure is the revenue figure
Paddle reports three plausible totals on a transaction and only one of them is comparable with what the other providers report. Paylytics reads the total after discount and tax — not earnings, which is already net of Paddle's own fee and which no other provider deducts, and not the grand total, which Paddle defines as the amount due after credits but before any payments.
Get that wrong and a merged figure quietly compares Paddle revenue after fees against everybody else's revenue before them, which is the kind of error that looks like a working dashboard right up until you act on it.
What Paddle reports, and how it is read
Paddle sends amounts as integer minor units inside a string. This is the only adapter here that parses anything, and it degrades an unreadable value to zero rather than to a NaN that would poison every sum it reached.
A refund on Paddle is not a status, it is an adjustment, so refunded figures come from the adjustment totals — reading the refund and chargeback lines rather than the headline total, because that total also covers credits, and a credit is store credit applied to an invoice rather than money handed back.
One status is deliberately not counted as money taken: billed means an invoice was issued on manual collection and is still waiting to be paid. Only completed and paid are revenue.
Paddle has no seller endpoint, so like a restricted Stripe key it arrives with no name filled in and you name it yourself.
Paddle plus everything else you sell through
A Paddle dashboard tells you about Paddle. If you also take money somewhere else — a second Paddle account, or an account at another provider entirely — nothing at Paddle adds the two together, and nothing at the other provider does either.
Paylytics normalises every provider onto one shape at the point it reads them: amounts in minor units, one shared vocabulary for paid, refunded and partially refunded, one customer identified across accounts by a keyed fingerprint of their email rather than by the address itself. After that, merging is not a special case — a total across all 4 providers is the same query as a total across one.
Paddle in more detail
The other providers
Connect any mix of them. A total across all 4 providers is the same query as a total across one.
Read-only, and nothing written back
Keys are encrypted before they touch the database and decrypted only to read. What that guarantee rests on differs per provider, and each page here says which.