Adapty subscriptions next to your web revenue and app users

Adapty tells Sumly each purchase, renewal and refund by webhook, with the price, tax and the store's cut, and Sumly ties it to the app user who bought, the same way it does for RevenueCat.

Drawn with example numbers.

Connected in three steps

A read-only key, pasted once. Sumly does the rest.

  1. 1

    In Adapty: App settings → General → API keys, copy the Secret key. Sumly only uses it to check the connection: Adapty's API has no list of purchases to read.

  2. 2

    After connecting, add the webhook Sumly shows under Integrations → Webhook: the production URL and the Authorization header value. Purchases count from then on; earlier ones are not in Adapty's API.

  3. 3

    Purchases meet what each person did in your app by the user id you pass to Adapty.identify, the same id your backend sends to Sumly. To trace one to a site visit, set the custom attribute sumly_visitor_id.

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 Adapty 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/adapty; read it if anything below is unclear.

Steps:
1. In Adapty: App settings → General → API keys, copy the Secret key. Sumly only uses it to check the connection: Adapty's API has no list of purchases to read.
2. After connecting, add the webhook Sumly shows under Integrations → Webhook: the production URL and the Authorization header value. Purchases count from then on; earlier ones are not in Adapty's API.
3. Purchases meet what each person did in your app by the user id you pass to `Adapty.identify`, the same id your backend sends to Sumly. To trace one to a site visit, set the custom attribute `sumly_visitor_id`.

So each payment shows which visit it came from: Purchases meet what the person did in your app through the user id you pass to Adapty.identify, as "appuser-" and that id, the same as your backend sends to Sumly's events API. When a buyer came through your site first, set the custom attribute sumly_visitor_id to the site's visitor id, and the purchase counts for that visit.

Keep in mind: Built from Adapty's webhook and API documentation and tested against payloads shaped like it; it has not yet been tried on a live app. Tell us if a number looks off. Adapty's API reads one profile at a time and has no list of purchases, so nothing from before the webhook was added is read. For history, add it by CSV or through the payments API. Adapty may let you rename events; Sumly knows the names in Adapty's documentation. Only production events count, never sandbox ones.

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 Adapty's own) are mine: tell me exactly what to click, then wait for me.
- The Adapty key goes into Sumly (Projects and payments), not into this project: Sumly reads Adapty 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

Adapty next to every other project and provider, on the same pages.

Overview

MRR, ARR, revenue per customer, paying customers and trials for your apps, next to the web revenue of the same project.

Payments marked by store, with the country of each, without tax and less the store's commission.

Metrics over time, plans by product id, customers, the outlook and a CSV export.

Purchases tied to the app user who made them, and to a site visit where you set sumly_visitor_id.

Which visit paid

Purchases meet what the person did in your app through the user id you pass to Adapty.identify, as "appuser-" and that id, the same as your backend sends to Sumly's events API. When a buyer came through your site first, set the custom attribute sumly_visitor_id to the site's visitor id, and the purchase counts for that visit.

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
  • Each purchase, renewal, trial conversion and refund as Adapty sends it, without tax and less the store's commission
  • Each subscription's state: trials, cancelled renewals, billing problems, pauses and expiry
  • The app user id (customer_user_id) behind each purchase
When Sumly reads Adapty
  • By webhook only: each event is counted the moment Adapty sends it.
  • The key is used once, to check the connection.
  • Sandbox events and the empty call Adapty makes when you save the webhook are answered and not counted.
How Adapty money is counted
Monthly value
A subscription is its latest payment without tax, spread over the period it bought. A yearly payment counts a twelfth each month.
Trials
A trial counts no MRR. It starts counting when it converts.
Cancellations
When renewal is turned off, the subscription leaves MRR that day. Expired means ended.
Billing problems
Grace period and billing issues count as past due, still in MRR while the store retries.
Tax and commission
From Adapty's own figures on each event: the price, the tax and the net revenue after the store's cut, in the buyer's currency.
Refunds
Come off revenue on the day Adapty reports them, with their share of tax and commission.
Good to know
  • Built from Adapty's webhook and API documentation and tested against payloads shaped like it; it has not yet been tried on a live app. Tell us if a number looks off.
  • Adapty's API reads one profile at a time and has no list of purchases, so nothing from before the webhook was added is read. For history, add it by CSV or through the payments API.
  • Adapty may let you rename events; Sumly knows the names in Adapty's documentation.
  • Only production events count, never sandbox ones.

Adapty questions

Why does Sumly need the webhook?

Adapty's API reads one profile at a time and has no list of purchases. The webhook is how each purchase reaches Sumly.

Can it read purchases from before I connected?

No. Adapty keeps no list Sumly could read; add older revenue by CSV or through the payments API if you want it.

How is the webhook protected?

Adapty sends the Authorization value you set on the webhook, and Sumly turns away any call without it.

Can one project have Adapty and Stripe?

Yes. A project can take money in several places, and Sumly adds them up.

Is this tested on a real app?

Not yet. It follows Adapty's documentation and is tested against payloads shaped like it. If a number does not match, tell us.

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 free

Or look around first: open the live demo.