After a user completes a purchase on your Uscreen storefront, they're directed to a confirmation page that appears for 10 seconds before automatically redirecting them. This brief delay serves two important purposes:
It allows any tracking code or conversion pixels to run
It gives users a moment to see the purchase confirmation
ℹ️ INFO: This article covers both Legacy Checkout and Unified Checkout. Where they differ, each section notes it. If you're not sure which one your store uses, contact our support team.
Default Redirect Behavior
After the 10-second delay, users are redirected based on where they started the checkout process.
From the Join Us page: Users are redirected to the Catalog (
/catalog)From a specific video, collection, or live event: Users are redirected back to that specific content page (
/programs/seoURL)From a bundle link: Users are redirected to the Library page if My Library (
.../library) is enabled or the Catalog, if disabled
To determine where to redirect users, Uscreen uses cookies to track the last viewed content. This ensures a seamless user experience by returning customers to the content they were interested in.
📝 NOTE: If you're testing the checkout flow and clicking around multiple pages before completing a purchase, you might get redirected to an unexpected location. Use an incognito browser or clear the cookies for more predictable testing.
Custom Conversion Tracking
If you need to track conversions for web purchases in platforms outside of Uscreen (like ad platforms or analytics tools), you can use the purchase payload available on the confirmation page. The payload is a JavaScript object named purchasePayload. Uscreen adds it to the page just before your Purchase Code Snippet runs, so your snippet can read it right away.
Confirmation Page URL Structure
The confirmation page URL depends on which checkout your store uses and how the payment was processed. We recommend reading purchase details from the purchase payload rather than from URL parameters, because URL formats differ between checkouts (see Recommended Setup for Per-Payment Tracking below).
Legacy Checkout: Uscreen Billing
Example: https://yourdomain.com/checkout/success?i=12345678&o=543210&p=543210
i = the invoice ID
o = the order ID (offer ID of subscriptions/bundles)
p = the product ID (for individual one-time purchase content)
ℹ️ INFO: For subscription or bundle purchases, you'll notice that the offer ID and the product ID are identical.
Legacy Checkout: Stripe Billing (Paid Purchase)
Example: https://yourdomain.com/checkout/success?o=543210&payment_intent=pi_abc123
Used when a payment was taken at checkout. This includes subscriptions without a free trial, as well as one-time purchases.
payment_intent= the Stripe payment intent IDo= the order ID (offer ID)
Legacy Checkout: Stripe Billing (No Payment Taken)
Example: https://yourdomain.com/checkout/success?o=543210&subscription=sub_abc123
Used when a subscription starts without a payment at checkout, such as a free trial or a fully discounted first period.
subscription= the Stripe subscription IDo= the order ID (offer ID)
📝 NOTE: A Stripe subscription ID stays the same across every renewal, so it doesn't identify a single payment.
Legacy Checkout: Stripe Billing (Free or Added via Signup)
o= the order ID (offer ID)added_with_signup=true(indicates a free product added via signup and no invoice created)
ℹ️ INFO: For free products added via signup, the confirmation URL uses ?o=...&added_with_signup=true and does not include an invoice ID, as no paid invoice is created.
Unified Checkout
Example: https://yourdomain.com/buy/3f2a9c1e-1b2c-4d5e-8f90-123456789abc/success
The value in the path is the checkout session ID. It's created once for each checkout visit and identifies that checkout attempt, not an individual payment.
The URL doesn't include
payment_intent,subscription, or invoice parameters. Use the purchase payload to read transaction details.
🔗 Learn more about Stripe Billing
Purchase Payload
When a purchase is completed, Uscreen adds a JavaScript object named purchasePayload to the confirmation page.
It's available as soon as the page loads, before your Purchase Code Snippet runs, so your code can read it directly (for example, purchasePayload.transaction_id).
amount: "7.99"
country_code: "US"
coupon: null
customer_email: "user@email.com"
customer_name: "name"
discount: "0.00"
id: "12345678"
ip_address: "192.168.0.0"
offer_id: 543210
origin: "purchased_by_user"
title: "Monthly Subscription"
total: "7.99"
transaction_id: "ch_abc123"
ℹ️ INFO: On both Legacy and Unified Checkout, the purchase payload and your Purchase Code Snippet are added to the confirmation page for every successful checkout, including free trials and $0 checkouts. For those, transaction_id is empty because no payment was taken.
Field | What it contains |
| The unique ID of the payment. For Stripe payments, this is the Stripe charge ID ( |
| The Uscreen invoice ID. It can be empty on the confirmation page because the invoice may be created a few seconds after the page loads. Use |
| The offer ID of the purchased subscription, bundle, or content. |
| The offer's name. |
| The offer's price before discounts. |
| The discount amount applied. |
| The final amount Uscreen recorded for the order. It may differ from the amount charged to the customer. |
| The coupon code used, if any. |
| The billing country, when available. |
| How the purchase was made (for example, |
| Customer details. |
⚠️ WARNING: customer_email, customer_name, and ip_address are personal information. Don't send them to analytics or ad platforms unless your privacy policy and the platform's terms allow it.
Working with the Payload Values
Keep these in mind when you send payload values to analytics or ad platforms:
Currency: The payload doesn't include a currency field. Amounts are in the currency the customer paid in.
If your store sells in a single currency, that's your store's currency, so you can set it directly in your tracking code.
If you sell in additional currencies, the payment may be in the customer's local currency, and the confirmation page doesn't expose which one. For those sales, use the Order Paid webhook: its
localized_amounts.currencyfield gives the currency the customer paid in. Itstransaction_idmatches the payload's, so you can match the two.
Number format: Amounts (
total,amount,discount) are text values, for example"7.99". Convert them to numbers if your platform requires it, for example withparseFloat(purchasePayload.amount).
Empty values: When a field has no value, it may be empty text (
"") ornull, depending on your checkout. Check whether a field has a value (for example,if (purchasePayload.transaction_id)) rather than comparing it to"".ID format:
transaction_idis a different value from thepayment_intentURL parameter. A Stripe charge ID starts withch_, while a payment intent ID starts withpi_. If you switch your tracking from the URL parameter totransaction_id, new conversions will use a different ID than your historical data.
Pair this data with any cookies or URL parameters you might have stored to pass conversion data to another platform.
⚠️ WARNING: Our support team cannot provide in-depth assistance with setting up the custom tracking code. For specialized help, we recommend consulting with a web developer or analytics professional.
Recommended Setup for Per-Payment Tracking
To track each payment once, and to keep your tracking working on both Legacy and Unified Checkout:
In your Purchase Code Snippet, read
purchasePayload.transaction_idinstead of URL parameters.Push it to your data layer along with the fields you need
In Google Tag Manager, create a Data Layer Variable for
transaction_idand use it in your purchase tag.
📝 NOTE: The confirmation page only appears for the first payment. Subscription renewals never reach it. To track every payment, including renewals, use the Order Paid webhook.
For example:
<script>
if (window.purchasePayload && purchasePayload.transaction_id) {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'uscreen_purchase',
transaction_id: purchasePayload.transaction_id,
value: parseFloat(purchasePayload.amount),
currency: 'USD', // replace with your store's currency
offer_id: purchasePayload.offer_id
});
}
</script>
ℹ️ INFO: The check on purchasePayload.transaction_id skips checkouts where no payment was taken. Remove it if you also want to track free trials.
Test the Checkout
You can easily test the checkout and create a mock purchase by using a coupon code. This is a good and simple way to ensure your tracking code is working correctly.
Also, check your third-party application to confirm that the conversion data is being received.
Even with a coupon applied, the successful purchase will generate an invoice, fire the Order Paid webhook and Paid Order trigger, and add the purchase payload to the confirmation page.
Custom Redirect after Successful Purchase
If you want to change the default redirect behavior, you can add custom JavaScript to the Purchase Code Snippet.
📝 NOTE: Uscreen redirects from the confirmation page after ~10 seconds by default. Setting a shorter timeout in your Purchase Code Snippet overrides this. Make sure your tracking code has enough time to run before the redirect happens.
<script>
// Replace with your desired URL
let redirectURL = "https://example.com/thank-you";
// Set a shorter timeout than Uscreen's default (10 seconds)
setTimeout(function() {
window.location.assign(redirectURL);
}, 4000);
</script>
⚠️ WARNING: If you are unfamiliar or uncomfortable working with JavaScript, please consider consulting a developer for proper implementation.
FAQs
Can I track conversions from mobile app purchases?
Can I track conversions from mobile app purchases?
The purchase payload is only available for web purchases. Mobile app purchases are processed through the app stores and require different tracking methods.
Why is my tracking code not firing?
Why is my tracking code not firing?
The success page only appears for 10 seconds, so your code needs to execute within that time frame. Make sure your code is properly placed in the Purchase Code Snippet section and doesn't have any errors.
Can I completely remove the 10-second delay?
Can I completely remove the 10-second delay?
We don't recommend removing the delay entirely, as it ensures tracking pixels have time to fire. However, you can reduce it using the custom redirect code above.
How can I track which marketing campaign led to a conversion?
How can I track which marketing campaign led to a conversion?
You can use UTM parameters in your marketing links and store them in cookies or local storage. Then, in your tracking code, retrieve these parameters and include them with your conversion data.
Does custom conversion tracking work with Unified Checkout?
Does custom conversion tracking work with Unified Checkout?
Yes. The purchase payload and Purchase Code Snippet work on both checkouts, for every successful purchase. On Unified Checkout, the confirmation URL is different (/buy/<checkout-session-id>/success) and doesn't include payment or invoice parameters. If your tracking reads values from the URL, switch to reading purchasePayload.transaction_id, as shown in Recommended Setup for Per-Payment Tracking.
Can I track subscription renewals on the confirmation page?
Can I track subscription renewals on the confirmation page?
No. Renewals are charged automatically and never reach the confirmation page. Use the Order Paid webhook to track renewal payments.

