PayPal subscriptions and payments, with PayPal's fees
Give Sumly a PayPal app of its own. It reads your subscriptions and, through Transaction Search, every payment, refund and chargeback with PayPal's fee on each.
Connected in three steps
An app of its own, pasted once. PayPal apps cannot be limited to reading; Sumly only reads with it.
-
1
In the PayPal Developer Dashboard: Apps & Credentials → Live → Create App, a Merchant app named Sumly. Use a new app, not the one that takes your payments.
-
2
In the app's features, turn on Transaction search (Subscriptions is on by default). PayPal can take a few hours before a new app may search.
-
3
Paste the app's Client ID and Secret below. PayPal apps cannot be limited to reading; Sumly only reads with it.
-
4
To trace payments to visits, set
custom_idto'sumly-' + sumly.visitorIdon the order's purchase unit, or on the subscription you create.
Or let your coding assistant do it
Paste this into Claude Code, Cursor or Codex in your project. It fits the code to how your project is built, asks you for the dashboard steps and leaves the keys to you.
See what it says
Set up PayPal for Sumly in this project. Sumly (https://sumly.dev) shows revenue next to the visits and app users it came from. The full guide is https://sumly.dev/integrations/paypal; read it if anything below is unclear. Steps: 1. In the PayPal Developer Dashboard: Apps & Credentials → Live → Create App, a Merchant app named Sumly. Use a new app, not the one that takes your payments. 2. In the app's features, turn on Transaction search (Subscriptions is on by default). PayPal can take a few hours before a new app may search. 3. Paste the app's Client ID and Secret into Sumly. PayPal apps cannot be limited to reading; Sumly only reads with it. 4. To trace payments to visits, set `custom_id` to `'sumly-' + sumly.visitorId` on the order's purchase unit, or on the subscription you create. So each payment shows which visit it came from: When you create an order, set custom_id on its purchase unit to "sumly-" and the sumly_vid cookie; for a subscription, set the subscription's custom_id the same way. PayPal keeps it on the payment, and Sumly reads it back. Each payment then counts for the source, campaign and country of the visit that started it. In the EU and UK there is a visitor only after they agree. Keep in mind: Built from PayPal's API schemas and checked against responses shaped like them, not yet against a live PayPal account. Tell us if a number looks off. PayPal apps cannot be limited to reading. Sumly only reads with it; make it an app of its own, so you can delete it without touching your checkout. Transaction Search shows a payment up to three hours after it is made. The webhook brings it at once. PayPal's payment links and buttons take no field Sumly could carry the visitor in, so they are not traced. Orders and subscriptions you create with custom_id are. How to work: - Look at how this project is built first, and fit the code to its framework and its way of doing things; the examples above are a starting point, not something to paste as is. - Steps that happen in a dashboard (Sumly, or PayPal's own) are mine: tell me exactly what to click, then wait for me. - The PayPal key goes into Sumly (Projects and payments), not into this project: Sumly reads PayPal itself. Your part in the code is only carrying the visitor into checkout, as above. - Keys the code needs belong in environment variables, never in the code or the repository. Never ask me to paste a secret key into this chat; tell me which variable to set. - Change only what this needs, show me the changes before you commit, and tell me how to check that it works.
What you see after connecting
PayPal next to every other project and provider, on the same pages.
Overview
MRR, ARR, revenue per customer, paying customers, trials and your PayPal balance.
Payments after PayPal's fee, with the payer's name and country.
Metrics over time, with churn, LTV and quick ratio.
Plans by name, customers, the outlook and a CSV export.
With custom_id set
Revenue by source and campaign, and ROI for each cost.
Which visit paid
When you create an order, set custom_id on its purchase unit to "sumly-" and the sumly_vid cookie; for a subscription, set the subscription's custom_id the same way. PayPal keeps it on the payment, and Sumly reads it back. Each payment then counts for the source, campaign and country of the visit that started it. In the EU and UK there is a visitor only after they agree.
How attribution works →Counts toward your plan
Nothing: payments, customers and refunds never count toward your plan. Only the page views and app screens Sumly keeps do. Plans →
The details
What Sumly reads
- Subscriptions with their plan, trial and status
- Every payment received, one-off or from a subscription, with PayPal's fee and the sales tax PayPal reports
- Refunds, reversals and chargebacks
- The balance available and on hold
When Sumly reads PayPal
- Every 15 minutes, together with the other connections of the project. The first read takes three years of transactions, a month at a time.
- Subscriptions are read whole each time, from PayPal's list and from the payments of the last month, with each plan read once for its price.
- Refunds and chargebacks are transactions of their own, so they arrive like any payment, on their own day.
- With the webhook added to your checkout's app, each payment, refund and subscription change is read again the moment it happens.
How PayPal money is counted
- Monthly value
- The plan's regular price times the quantity, spread over its billing frequency: a twelfth for yearly plans, 52 ÷ 12 of a weekly one.
- Trials
- A plan's trial cycles come first; the subscription counts from the end of the last one.
- Cancellations
- PayPal ends a cancelled subscription at once, so it leaves MRR on that day. A suspended one stops counting from the day it was suspended.
- Tax
- PayPal is not the merchant of record. A payment counts its gross amount less the sales tax PayPal reports on it.
- Fees
- The fee PayPal took on each payment. A fee PayPal gives back with a refund is counted back too.
- Refunds and chargebacks
- Refunds, reversals and chargebacks each come off on their own day. A chargeback that was reversed counts back.
- Currency
- Payments in the currency the buyer paid, turned into euros at the ECB rate of that day. MRR converts at today's rate.
Good to know
- Built from PayPal's API schemas and checked against responses shaped like them, not yet against a live PayPal account. Tell us if a number looks off.
- PayPal apps cannot be limited to reading. Sumly only reads with it; make it an app of its own, so you can delete it without touching your checkout.
- Transaction Search shows a payment up to three hours after it is made. The webhook brings it at once.
- PayPal's payment links and buttons take no field Sumly could carry the visitor in, so they are not traced. Orders and subscriptions you create with custom_id are.
PayPal questions
Can Sumly change anything in PayPal?
PayPal apps cannot be limited to reading, but Sumly only reads with it. Make it an app of its own; deleting that app in the Developer Dashboard cuts Sumly off without touching your checkout.
Why does PayPal say the app may not search transactions?
Transaction search must be turned on in the app's features, and PayPal can take a few hours before a new app may use it. Sumly tries again every 15 minutes.
Do I need the webhook?
No. Without it, payments arrive with Transaction Search, up to three hours late. With it, within seconds.
Why add the webhook to another app?
PayPal sends each app only the events of payments made through it, so the address belongs on the app your checkout uses. Sumly reads what it names with its own app.
Does Sumly read the sandbox?
Yes: pick Sandbox and use a sandbox app's Client ID and Secret.
Other integrations
Try it with your own projects
Sign in with Google or a code by e-mail and connect your first project. Free for one project, and 14 days of a paid plan with no card.
Start freeOr look around first: open the live demo.