Connect Stripe to Usermaven
What you'll build: every Stripe payment (or subscription, trial, or refund) recorded in Usermaven as a verified event with real revenue , attributed to the marketing that earned it. Time: about 5 minutes. You'll need: access to your Stripe Dashboard and permission to create integrations in Usermaven.
Your website can see a customer reach checkout, but the payment itself happens on Stripe's servers. Connecting Stripe closes that gap: Usermaven records the money as it actually moves, straight from the source of truth.
Choose what to track
Each source tracks one Stripe event. These are the available triggers:
Trigger | Stripe event | Good for |
|---|---|---|
New payment (recommended) |
| Your main purchase conversion |
Recurring payment |
| Renewals and subscription revenue |
New subscription |
| Subscription starts |
New trial |
| Trial starts |
Canceled subscription |
| Churn tracking |
New refund |
| Refund tracking |
New customer |
| New Stripe customers |
Start with New payment. If you also want renewals, come back and create a second source for Recurring payment, don't try to catch both with one source.
Step 1: Create the source
In Usermaven, go to Events → Event sources and click New event source.
Pick Stripe from the catalog.
Choose the event you want to track, New payment is marked as recommended.
Name the source (for example, Stripe payments) and click Create webhook URL.
Keep this page open, Usermaven is now listening for a test event.
Treat the webhook URL like a password. Anyone who has it can send events to your workspace. If it's ever exposed, you can rotate it later from the source's settings.
Step 2: Add the endpoint in Stripe
In your Stripe Dashboard, go to Developers → Webhooks and add a new endpoint.
Paste your Usermaven webhook URL as the destination.
Select only the event that matches your trigger, for New payment, that's
checkout.session.completed. One Stripe event per endpoint keeps your mapping clean.Save the endpoint, then reveal and copy its signing secret (it starts with
whsec_). You'll need it in the last step.
Step 3: Send a test event
Trigger a test from Stripe, use the endpoint's Send test event option, or complete a checkout in test mode. Back in Usermaven, you'll see "Test event received, review it below" with the raw payload Stripe sent.
In a hurry, or can't trigger a test right now? Click "Don't want to wait for a test event?" and use the bundled Stripe sample instead.
Test events are captured for mapping and never added to analytics.
Step 4: Map the fields
Usermaven pre-fills the standard Stripe mapping; review it and adjust if needed:
Usermaven field | Stripe field | Note |
|---|---|---|
Event name |
| Or any name that fits your reporting |
| How the payment gets matched to a person | |
Revenue |
| Minor units transform — Stripe sends cents, so |
Currency |
| Uppercased to ISO format |
External ID |
| Protects you from duplicates if Stripe retries |
Event time |
| Unix timestamp |
Also keep the filter type equals checkout.session.completed , it makes sure this source only ever records the event it's meant to.
Click Preview event to see exactly what will be recorded.
Step 5: Review and activate
The review screen shows how your sample payload becomes a Usermaven event. One important warning appears here:
Use one source of truth for purchases. If Stripe reports your sales, don't also track purchases with an on-site pixel event, the same sale counted twice means revenue counted twice.
Because payment data must be trustworthy, Stripe sources require signature verification before they can go live. Paste the signing secret you copied in Step 2, then click Activate and open source. From now on, Usermaven checks Stripe's signature on every delivery and rejects anything that wasn't genuinely sent by Stripe.
Verify it's working
Make a test purchase (or wait for a real one), then open the source's Event log. You should see the delivery marked Accepted, with the person, revenue, and event name recorded. The event also appears in Events activity, filtered by this source.
Tracking recurring payments too
Create a second Stripe source with the Recurring payment trigger (invoice.paid) and map:
Email →
data.object.customer_emailRevenue →
data.object.amount_paid(minor units)External ID →
data.object.id
Give it a distinct event name like recurring_payment so one-off purchases and renewals stay separate in your reports.
If something goes wrong
Signature verification failed, re-copy the signing secret from the exact Stripe endpoint you created; each endpoint has its own secret.
Delivery marked Duplicate, that's the External ID doing its job: Stripe retried, Usermaven counted it once.
Identity unresolved, the email matched more than one person in Usermaven. See Event Sources Troubleshooting for the fix.
More outcomes and fixes: Event Sources Troubleshooting.
Related guides
Was this article helpful?