Connect Paddle to Usermaven
What you'll build: every Paddle transaction or subscription change recorded in Usermaven as a verified event with real revenue. Time: about 5 minutes. You'll need: access to your Paddle dashboard and permission to create integrations in Usermaven.
Usermaven supports both generations of Paddle, Paddle Billing (the current platform) and Paddle Classic (legacy). The setup flow is the same; the triggers and verification method differ, so check which one you're on before you start.
Choose what to track
Each source tracks one Paddle event:
Paddle Billing
Trigger | Paddle event | Good for |
|---|---|---|
New payment |
| Your main purchase conversion |
New subscription |
| Subscription starts |
Subscription canceled |
| Churn tracking |
Paddle Classic (legacy)
Trigger | Paddle alert | Good for |
|---|---|---|
New payment |
| Purchases |
Subscription canceled |
| Churn tracking |
Before you start (Paddle Billing only)
Paddle Billing transaction events don't include the customer's email by default. Pass it in the transaction's custom_data when you create the transaction, or better, pass your own stable user ID there. Without one of these, Usermaven has nothing to match the payment to a person with, and events will be rejected for missing an identifier.
Step 1: Create the source
In Usermaven, go to Events → Event sources and click New event source.
Pick Paddle from the catalog and choose your trigger.
Name the source (for example, Paddle transactions) and click Create webhook URL.
Leave this page open, Usermaven is listening for a test event.
Step 2: Add the webhook in Paddle
In Paddle, open your notification / webhook settings and add a new destination.
Paste your Usermaven webhook URL.
Subscribe it to only the event that matches your trigger, for example
transaction.completed.Copy the webhook's secret key (Billing) or your public key (Classic), you'll need it to activate.
Step 3: Send a test event
Use Paddle's webhook simulator (or complete a sandbox transaction). Usermaven shows "Test event received, review it below" with the raw payload. No test handy? Click "Don't want to wait for a test event?" and map from the bundled Paddle sample instead.
Step 4: Map the fields
Paddle Billing, the standard mapping for transaction.completed:
Usermaven field | Paddle field | Note |
|---|---|---|
Event name |
| Or any name that fits your reporting |
| From the custom data you attach to transactions | |
Revenue |
| Minor units transform — |
Currency |
| Uppercased to ISO format |
External ID |
| Protects against duplicate deliveries |
Event time |
| Detected automatically |
Paddle Classic — map email, sale_gross with the Strip symbols transform (Classic sends formatted amounts), currency, order_id as External ID, and event_time (Classic uses the YYYY-MM-DD HH:mm:ss format; the mapper handles it). Add a filter: alert_name equals payment_succeeded.
Click Preview event to see exactly what will be recorded.
Step 5: Review and activate
Like all billing sources, Paddle requires signature verification before it can go live; payment data has to be spoof-proof:
Paddle Billing (Paddle Billing HMAC): paste the webhook secret key. Usermaven verifies the Paddle-Signature header on every delivery.
Paddle Classic (Paddle Classic RSA): paste your Classic public key. Usermaven verifies the RSA p_signature on every delivery.
Heed the review-screen warning: use one source of truth for purchases. If Paddle reports your sales, don't also track them with an on-site pixel event, or revenue gets counted twice.
Click Activate and open source, and you're live.
Verify it's working
Run one sandbox or real transaction, then check the source's Event log for an Accepted delivery showing the right person, revenue, and currency. The event also appears in Events activity, filtered by this source.
If something goes wrong
Signature verification failed — make sure you pasted the secret for this exact webhook destination (Billing) or the correct public key (Classic).
No usable identity found (Billing) — the transaction had no
custom_data.emailor user ID. Fix the data you attach when creating transactions.Revenue is not numeric (Classic) — make sure the Strip symbols transform is selected for
sale_gross.
More outcomes and fixes: Event Sources Troubleshooting.
Related guides
Was this article helpful?