This feature is only available on Business plans and above .
Revroute’s best-in-class Stripe integration listens to payment events on Stripe and tracks them as sales on Revroute.

Here are the events that Revroute listens to:
- Recurring subscriptions
- One-time payments
- Free trials
- Refunds (for voiding partner commissions)
- Cancellations/churn
- Usage expansion
In this guide, we’ll learn how to install and set up the Revroute Stripe integration for tracking sale conversion events.
Installing the Revroute Stripe integration
Find Revroute on the Stripe App Marketplace
Navigate to the Revroute Stripe Integration on the Stripe App Marketplace.

Install the Stripe app
On the top right, click on Install app to install the Revroute app on your Stripe account.

Alternatively, you can also install the Stripe app in a Stripe sandbox first to test your end-to-end flow without involving real money.
Once the app is installed, click on Continue to app settings to finish the installation.

Connect Stripe to your Revroute workspace
In the app settings page, click on Connect workspace to connect your Stripe account with your Revroute workspace.

This will redirect you to the Revroute OAuth flow, where you can select the Revroute workspace you want to connect to your Stripe account.

Once you click on Authorize, you will be redirected back to the Revroute app settings page on Stripe, where you should see that the integration is now installed.

Once the integration is installed, Revroute will automatically listen to the following events on Stripe and track them as sales on Revroute:
customer.created: When a new customer is createdcustomer.updated: When a customer is updatedcheckout.session.completed: When a customer completes a checkout sessioninvoice.paid: When an invoice is paid (for tracking recurring subscriptions)charge.refunded: When a charge is refunded (for voiding partner commissions)
Tracking sales with the Revroute Stripe integration
Depending on your setup, there are a few ways you can track sales with the Revroute Stripe integration.
- Option 1: Using Stripe Payment Links
- Option 2: Using Stripe Checkout (recommended)
- Option 3: Using Stripe Customers
Option 1: Using Stripe Payment Links
For this option to work, you need to install the Revroute Stripe integration and enable conversion tracking for your links first.
When using Stripe Payment Links, lead and sale events are tracked but lead webhooks and lead rewards will not be generated.
If you’re using Stripe Payment Links , simply add a ?dub_client_reference_id=1 query parameter to your Stripe Payment Link when shortening it on Revroute.
Then, when a user clicks on the shortened link, Revroute will automatically append the unique click ID as the client_reference_id query parameter to the payment link.

Finally, when the user completes the checkout flow, Revroute will automatically track the sale event and update the customer’s customerExternalId with their Stripe customer ID for future reference.
Alternatively, if you have a marketing site that you’re redirecting your users to first, you can do this instead:
-
Install the Revroute Analytics script, which automatically detects the
dub_idin the URL and stores it as a first-party cookie on your site. -
Then, retrieve and append the
dub_idvalue as theclient_reference_idparameter to the payment links on your pricing page / CTA button (prefixed withdub_id_).https://buy.stripe.com/xxxxxx?client_reference_id=dub_id_xxxxxxxxxxxxxx
Option 2: Using Stripe Checkout (recommended)
If you have a custom checkout flow that uses Stripe’s checkout.sessions.create API, you’d want to associate the Stripe customer object with the user’s unique ID in your database (which we tracked in the lead conversion tracking step).
This will allow Revroute to automatically listen for purchase events from Stripe and associate them with the original click event (and by extension, the link that the user came from).
First, you’ll need to complete the following prerequisites:
- Install the Revroute Stripe integration
- Install the Revroute Analytics script
- Install the Revroute server-side SDK
Then, when you create a checkout session , pass your customer’s unique user ID in your database as the dubCustomerExternalId value in the metadata field.
import { stripe } from "@/lib/stripe";
const user = {
id: "user_123",
email: "user@example.com",
teamId: "team_xxxxxxxxx",
};
const priceId = "price_xxxxxxxxx";
const stripeSession = await stripe.checkout.sessions.create({
customer_email: user.email,
success_url: "https://app.domain.com/success",
line_items: [{ price: priceId, quantity: 1 }],
mode: "subscription",
client_reference_id: user.teamId,
metadata: {
dubCustomerExternalId: user.id, // the unique user ID of the customer in your database
},
});This way, when the customer completes their checkout session, Revroute will automatically associate the checkout session details (invoice amount, currency, etc.) with the customer – and by extension, the original click event.
If you’re using guest checkout (e.g. with mode: "payment"), the customer field in the checkout.session.completed webhook event will be null, and sales won’t be tracked on Revroute.
To fix this, set customer_creation to always when creating your checkout session :
const stripeSession = await stripe.checkout.sessions.create({
// ... other options
customer_creation: "always", // ensures a Stripe customer is created
});Option 3: Using Stripe Customers
Alternatively, if you don’t use Stripe’s checkout session creation flow, you can also pass the user ID and the click event ID (dub_id) in the Stripe customer creation flow .
First, you’ll need to complete the following prerequisites:
- Install the Revroute Stripe integration
- Enable conversion tracking for your links
- Install the Revroute Analytics script
Then, when you create a Stripe customer , pass the user’s unique user ID in your database as the dubCustomerExternalId value in the metadata field.
import { stripe } from "@/lib/stripe";
const user = {
id: "user_123",
email: "user@example.com",
teamId: "team_xxxxxxxxx",
};
const dub_id = req.headers.get("dub_id");
await stripe.customers.create({
email: user.email,
name: user.name,
metadata: {
dubCustomerExternalId: user.id,
dubClickId: dub_id,
},
});Alternatively, you can also pass the dubCustomerExternalId and dubClickId values in the metadata field of the Stripe customer update flow :
import { stripe } from "@/lib/stripe";
const user = {
id: "user_123",
email: "user@example.com",
teamId: "team_xxxxxxxxx",
};
const dub_id = req.headers.get("dub_id");
await stripe.customers.update(user.id, {
metadata: {
dubCustomerExternalId: user.id,
dubClickId: dub_id,
},
});This way, when the customer makes a purchase, Revroute will automatically associate the purchase details (invoice amount, currency, etc.) with the original click event.
When using Stripe Customers, lead and sale events are tracked but lead rewards will not be generated.
Tracking free trials
Revroute supports tracking subscription free trials as lead events on Revroute. This is useful for products with free trials since you might want to track trial activations as part of your attribution flow.
To enable free trial tracking, go to your Stripe integration settings and enable the Track Free Trials option:

Optionally, you can also configure the integration to track the provisioned quantity in the subscription as separate lead events.
This is useful if you have a lead-based reward for your partner program and want to reward partners for each unit of the subscription that their customers purchase (e.g. $50 per lead/provisioned seat).
To differentiate between manually tracked lead events and free trial lead events for lead reward types, use the Customer Source reward condition to filter for free trial lead events:

Currency conversion support
If you’re using Stripe’s Adaptive Pricing feature, Revroute will record the sale amount using the currency of your Stripe account:
// Stripe checkout.session.completed event payload
{
"id": "{{EVENT_ID}}",
"object": "event",
"type": "checkout.session.completed",
"data": {
"object": {
"id": "{{SESSION_ID}}",
"object": "checkout.session",
"currency": "cad",
"amount_subtotal": 2055,
"amount_total": 2055,
"currency_conversion": {
"amount_subtotal": 1500,
"amount_total": 1500, // this is the amount that Revroute will record
"source_currency": "usd", // the currency of your Stripe account
"fx_rate": "1.37"
}
}
}
}If you’re not using Stripe Adaptive Pricing, Revroute will record the sale amount in the default currency of your Revroute workspace. This means that if you pass a different currency, it will be automatically converted to USD for reporting consistency – using the latest foreign exchange rates.
// Stripe checkout.session.completed event payload
{
"id": "{{EVENT_ID}}",
"object": "event",
"type": "checkout.session.completed",
"data": {
"object": {
"id": "{{SESSION_ID}}",
"object": "checkout.session",
"currency": "cad",
"amount_subtotal": 2055,
"amount_total": 2055 // this will be converted from CAD to USD
}
}
}The default currency for all Revroute workspaces is currently set to USD. We will
add the ability to customize that in the future.
Tax handling
When tracking sale conversions from Stripe, Revroute automatically excludes taxes from the final sale amount to ensure accurate revenue reporting.
For checkout sessions, Revroute calculates the sale amount by subtracting the tax amount from the total:
// Sale amount calculation for checkout sessions
saleAmount = amount_total - total_details.amount_tax;For invoices, Revroute uses the total_excluding_tax field when available:
// Sale amount calculation for invoices
saleAmount = total_excluding_tax ?? amount_paid;This ensures that the sale amounts recorded in Revroute reflect the actual revenue before taxes, providing more accurate metrics for:
- Revenue tracking and reporting
- Partner commission calculations
- Analytics and conversion metrics
Tax amounts are automatically excluded from all sale events tracked through the Stripe integration, including one-time purchases, subscriptions, and recurring invoices.
View conversion results
And that’s it – you’re all set! You can now sit back, relax, and watch your conversion revenue grow. We provide 3 different views to help you understand your conversions: