Connect Paddle
Send your Paddle sales, renewals and refunds to Clakta over a webhook, and credit each sale to the visitor who made it.
Connecting Paddle sends every sale, renewal and refund to Clakta as it happens. That is the first half of measuring Paddle performance; the second is carrying the visitor's session into the checkout, so each sale is credited to the traffic that produced it.
Both halves are covered below, and the second one is automatic if you already install the tracking script.
Connect
- Go to Project settings → Sales platforms.
- Choose Paddle, name the connection, and click Create connection. Clakta generates a webhook URL — copy it.
- In Paddle, go to Developer tools → Notifications and click New destination.
- Paste the URL, select the events in the table below, and save.
- Open the destination you just created and copy its secret key — it starts
with
pdl_ntfset_. - Back in Clakta, paste the secret key and click Finish.
The card reads Added once the secret is saved.
Paddle's sandbox is a different account with its own notification destinations, and one never receives the other's events. Set the connection up in the account whose sales you want in Clakta — and if you test in sandbox first, create a second connection when you go live.
Leaving before you paste the secret is safe. The connection stays Setup incomplete, and any delivery that arrives meanwhile is held and retried rather than dropped — so a real sale during setup is not lost.
Events to select
| Event | What it does in Clakta |
|---|---|
transaction.completed | Records every sale, including subscription renewals. |
adjustment.created | Marks refunds and chargebacks. |
adjustment.updated | Confirms a refund once Paddle approves it. |
customer.created | Puts the buyer's name and email on their sales. |
customer.updated | Keeps that name and email current. |
customer.imported | The same, for customers you migrated into Paddle. |
Selecting extra events is harmless: anything Clakta does not handle is acknowledged and ignored.
Paddle has no separate renewal event. Each renewal is another
transaction.completed with its own id, so subscribing to that one event covers
recurring revenue as well as first purchases.
A Paddle transaction carries only a customer id — no name, no email. The three
customer.* events are the only place Paddle sends them, so leaving them out
records every sale as anonymous.
Attribute sales to visitors
A Paddle checkout opens in an overlay or an inline frame, so the visitor's
session travels with it in the checkout's customData. Paddle stores that
against the transaction — and copies it onto the subscription and every renewal
that follows, so one setup credits a customer's whole lifetime.
If your checkout runs on a page with the Clakta script, this is automatic.
Both ways of opening a Paddle checkout are covered: buttons using Paddle's
paddle_button class, and Paddle.Checkout.open() calls.
If you create transactions from your server, pass it yourself. This is the
most reliable option, because it never depends on the browser. Send
clakta.getSessionId() from the page along with your checkout request, then:
If you build the checkout options yourself, decorate them first:
clakta_session_id is the same key Clakta uses for Stripe and Lemon Squeezy, so
if you sell through more than one you only have one name to remember. A key you
already set yourself is never overwritten.
Privacy-friendly projects
Projects in privacy-friendly mode have no client-side session id to send, so Paddle sales are recorded but not linked to a visitor, and no buyer name or email is stored.
What gets recorded
- Revenue, in the transaction's own currency, and only what the customer actually paid — an invoice covered by account credit is not counted twice. If Clakta does not support that currency, the amount is kept and your project currency applies.
- Customer name and email, once a
customer.*event has arrived for them. - Products — every line of the order, with its Paddle product name.
- Payment method — card, PayPal, Apple Pay, Google Pay or Pix. Bank transfers and local methods read Other.
- Status, and the date the payment settled.
- Attribution — the session, plus the click token and UTMs when the checkout carried them.
Refunds and chargebacks
A refund marks the order refunded once Paddle approves it. A refund still awaiting approval leaves the order paid, because no money has moved yet.
A partial refund also leaves the order paid: Clakta records a sale as one amount, and flipping the whole order would erase revenue you actually kept.
A chargeback marks the order refunded as soon as it is raised, since the money is pulled at that point. Win the dispute later and the order goes back to paid.
Disconnect
Remove the connection from Project settings → Sales platforms. Deliveries stop being accepted immediately. Orders already recorded stay where they are — disconnecting never deletes history.
Delete the destination in Paddle too, so it stops retrying against an endpoint that no longer exists.
Troubleshooting
Related articles
Connect Shopify
Install the Clakta app on your Shopify store. It sets up checkout tracking, imports your recent orders and matches each sale to the ad that produced it.
Connect Stripe
Link your Stripe account in one click so every payment, refund and dispute reaches Clakta — and each sale is matched to the visitor who made it.
Connect Lemon Squeezy
Send your Lemon Squeezy orders, renewals and refunds to Clakta over a webhook, and credit each sale to the visitor who made it.