Revenue attribution
Chartsy credits each payment to the signup it belongs to, and so to the channel that brought that visitor. Pick your payment provider.
Payment providers
How each payment provider ties a payment to the signup behind it, even when the billing email differs.
How a payment is matched#
| Match by | Setup | Works when |
|---|---|---|
| None - automatic once signups are tracked | The customer pays with the same email they signed up with, and GDPR mode is off | |
chartsy_visitor_id | Add the visitor id to the customer record - the provider guides above | Always, including a different billing email and with GDPR mode on |
| Success page | Point the checkout’s success URL at your site with the checkout id - Stripe Payment Links, Polar checkout links, Creem and Lemon Squeezy | The purchase finishes in the same browser - even when the buyer never signed up |
Matching by email needs no payment code at all. The visitor id is optional, but it is the only way to keep the match when someone signs up as jo@gmail.com and pays as billing@company.com. Checkouts that can't carry it - Stripe Payment Links, Polar checkout links - can use a success page instead.
Success page: Stripe, Polar, Creem and Lemon Squeezy#
No code needed. Send buyers back to a page on your site that has the Chartsy tag, with the checkout id in the URL. When they land, Chartsy looks the purchase up with your connected account and credits it to the visit that brought them - even if they never signed up.
| Provider | Where to set it | Redirect URL |
|---|---|---|
| Stripe | Payment Links → each link → After payment → redirect to your website (or a Checkout Session’s success_url) | https://yoursite.com/thank-you?session_id={CHECKOUT_SESSION_ID} |
| Polar.sh | Products → Checkout Links → each link → Success URL | https://yoursite.com/thank-you?checkout_id={CHECKOUT_ID} |
| Creem.io | Each product’s Success URL (or a checkout’s success_url) | https://yoursite.com/thank-you |
| Lemon Squeezy | Each product → Confirmation Modal and Email Receipt → Button Link | https://yoursite.com/thank-you?order_id=[order_id]&order_identifier=[order_identifier] |
Stripe, Polar and Lemon Squeezy fill in the ids themselves - type the placeholders exactly as shown. Creem needs no placeholder: it adds ?checkout_id=… to every success URL. It works with the access you already gave Chartsy; nothing new to grant. A few things to know:
- It works best when the purchase finishes in the same browser the visitor arrived in.
- Reloading the page is fine - the same purchase is never credited twice.
- Only purchases from the last 24 hours are credited, so an old link can't claim them later.
- Payments that haven't completed yet, such as bank debits still clearing, aren't credited.
- A buyer credited this way counts as a signup in your Growth numbers, as Freemius buyers do.
- It works with GDPR mode on, because it matches by visitor id rather than email. On Stripe the payment has to create a customer: a guest one-off Payment Link that doesn't create one can't be matched while GDPR mode is on.
- The site's Revenue account must be the Stripe, Polar, Creem or Lemon Squeezy account the link sells from - set it under Settings → domains.
No success-page option exists for Paddle - its checkout opens on your own page, so pass the visitor id in customData as the Paddle guide shows.
Freemius#
Freemius Checkout can't carry the visitor id, so Freemius payments are matched by email only - and can't be matched with GDPR mode on. Lock checkout to the signup email and record every buyer, as the Freemius guide shows.
Polar#
Checkout links use the success page; checkouts you create from your server put the visitor id in checkout metadata. Both work with GDPR mode on - see the Polar guide.
Creem#
Any Creem checkout can use the success page; checkouts you create from your server can also put the visitor id in checkout metadata. Both work with GDPR mode on - see the Creem guide.
Lemon Squeezy#
Checkout links use the success page, through the receipt's button link; checkouts you create from your server put the visitor id in checkout custom data. Both work with GDPR mode on - see the Lemon Squeezy guide.
Returning from a payment page#
When a buyer comes back from a payment page, that return doesn't count as a new referral visit and doesn't replace their real last-touch source. These hosts are treated as payment pages:
- Polar:
*.polar.sh - Creem:
*.creem.io - Lemon Squeezy:
*.lemonsqueezy.com - Stripe:
checkout.stripe.com,buy.stripe.com,billing.stripe.com,invoice.stripe.com,pay.stripe.com,hooks.stripe.com - Paddle:
checkout.paddle.com,buy.paddle.com,pay.paddle.com,pay.paddle.io, and the same hosts with asandbox-prefix
Links from stripe.com itself, the Stripe dashboard orwww.paddle.com still count as normal referrals.
Before you start#
Revenue is attributed through signups (or a success page), so you need all three in place:
- The script on every page - installation guides.
- Signups identified - signup tracking guides.
- Your payment provider connected to Chartsy, and set as the site's Revenue account under Settings → domains - Stripe, Paddle, Freemius, Polar.sh, Creem.io or Lemon Squeezy.
Revenue still not matched? See Troubleshooting.


