Conversion Tracking With a Hosted Checkout: Fixing Lost Purchases in Google Ads and GA4 for Peptide Stores
High-risk processors often send peptide buyers to a hosted payment page on another domain. How that breaks Google Ads and GA4 purchase tracking, and a step-by-step fix: tag placement, cross-domain linking, unwanted referrals, transaction IDs, and a server-side backstop through Data Manager.
Key takeaways
- When checkout moves to a processor’s domain and back, purchases get lost in three ways. The click ID does not survive, the processor shows up as a referral in GA4, or the buyer never returns to your confirmation page.
- Google’s own checklist covers the basics. Turn on auto-tagging, make redirects pass the GCLID, use the gtag.js domain linker if the conversion page is on a different domain, and do not fire tags inside an iframe.
- In GA4, add the processor’s domain to unwanted referrals (up to 50 per data stream). The change is not retroactive, so sessions already credited to the processor stay that way.
- Treat the browser tag as the first layer only. Capture the click ID with the order and confirm the sale from the processor’s payment-succeeded event. Upload or adjust conversions from that record using the order ID as the transaction ID.
- Offline conversion and enhanced-conversions-for-leads uploads moved to Google’s Data Manager API from 15 June 2026. Check that your integration is not on the retired path.
Why does Google Ads miss purchases when a peptide store uses a hosted checkout?
Because the purchase happens on someone else’s domain. The buyer clicks your ad, lands on your store, then gets sent to the processor’s hosted payment page, and sometimes to a 3-D Secure step, before returning, if they return at all. If the purchase tag fires on the processor’s page, the click ID stored on your domain is not available there. If the buyer closes the tab after paying, your confirmation page never loads. In GA4, the return visit is credited to the processor as a referral. The fix is to fire purchases on your own domain, link domains where you must, exclude the processor as a referral, and confirm every sale server-side.
This matters more for peptide stores than for most ecommerce. Many high-risk processors and orchestration platforms use hosted or redirected payment pages. Stores also change processors more often than most, sometimes at short notice, and each switch can move the payment page to a new domain. Our payment underwriting guide explains why.
What “lost” means here
We are describing where data breaks. We do not publish a typical percentage of purchases lost, because it depends on the processor, the flow and the browser mix. The way to know your number is the reconciliation in the last step below.
Where does purchase tracking break in a hosted checkout flow?
| Step in the flow | What can break | Symptom you will see |
|---|---|---|
| Ad click → landing page | Redirects or click trackers strip the GCLID; site rejects unknown query parameters | Low conversions from every campaign, not just some |
| Store → processor payment page | Purchase tag placed on the processor’s page, or inside its iframe; no domain linking | Conversions recorded without click attribution, or not at all |
| 3-D Secure / bank step | Extra redirect; buyer abandons or times out | Paid orders missing from Ads; failed payments counted if the tag fires too early |
| Processor → your confirmation page | Buyer closes the tab after paying; return URL misconfigured | Processor shows more settled orders than Google Ads shows purchases |
| Return visit in GA4 | Processor domain not listed as an unwanted referral | Revenue credited to “processor.com / referral” |
| Refunds and chargebacks | No adjustment sent back to Google Ads | Reported ROAS above what the bank account shows |
How do you map your checkout flow before fixing anything?
Place a real test order and write down every URL in order. Use an incognito window and a real ad click from a test campaign, or a URL with a test gclid parameter. You need:
- The landing page domain, and whether the
gclidis still in the URL on arrival. - The cart and checkout domain. Is it still yours?
- The payment page domain, and whether it is a full redirect, a pop-up, or an iframe embedded in your page.
- Any 3-D Secure or bank verification step.
- The return URL and the confirmation page domain.
- Whether the processor sends a server-side notification (webhook, callback or IPN) when payment succeeds, and what it includes: order ID, amount, currency, status.
That map tells you which fixes below apply. If the payment step is an iframe on your own page and the confirmation page is on your domain, you mainly need the GA4 and server-side steps. If the confirmation page is on the processor’s domain, you need all of them.
How should the Google Ads tag be set up for a hosted checkout?
Google’s help article on how Google Ads tracks website conversions sets out the conditions directly:
- Turn on auto-tagging in every Google Ads account.
- Make sure click trackers and server-side redirects pass on the GCLID to your landing pages.
- If your conversion page is on a different domain from your landing page, use the gtag.js domain linker to pass the GCLID to it.
- Do not fire your tags from within an iframe.
In practice, for a peptide store that means:
- Fire the purchase conversion on your own confirmation page, not on the processor’s page. Most processors let you set a return URL. Point it at a page on your domain and pass the order ID back.
- Fire only on confirmed payment. If the return URL is also used for failed or pending payments, check the status parameter before the tag fires.
- Send the order ID as the transaction ID. Google’s transaction ID guidance says the ID “must be unique for every single transaction” and that Google Ads “may only process the first instance” of a given ID. That is what prevents a page refresh from counting twice, and it lets browser and server records be reconciled.
- Use cross-domain linking only where you control the tag on both sides. If the processor lets you place your Google tag on its hosted page, configure both domains in the linker. If it does not, do not try. Rely on the return page and the server-side record.
- Turn on enhanced conversions so a hashed email from the order can help match the conversion when cookies are missing. Google says enhanced conversions for web and for leads are now a single on/off setting, and that from April 2026 Google Ads accepts user-provided data from tags, Data Manager and API connections at the same time.
Processor-provided pixels
Some checkout platforms offer a built-in field for your Google tag. Before relying on it, check whether it fires client-side on their domain, which conversion it sends, and whether it passes your order ID. Test it with a real order. A vendor’s checkbox is not a tested setup.
How do you stop the processor stealing credit in GA4?
Google Analytics lists third-party payment processors as the textbook case for unwanted referrals. Buyers leave for the processor’s domain and return, and without configuration GA4 treats the return as a new referral. To fix it:
- In GA4 Admin → Data streams → your web stream → Configure tag settings → List unwanted referrals, add each processor and 3-D Secure domain you see in your flow map. Google allows up to 50 per data stream.
- If you control tagging on a second domain in the flow, also add it under Configure your domains for cross-domain measurement. GA4 will then carry the same user and session IDs across the domains through a URL parameter.
- Update the list whenever you add or switch processors. Load-balanced setups across several merchant accounts may use several payment domains.
The fix works going forward only. Google’s help page explains that with last non-direct click attribution, a user first credited to the referring domain can stay credited to it on later direct visits. Expect some historical data to stay wrong, and annotate the change date in your reports.
What is the server-side backstop, and why do peptide stores need it?
Browser tags will always miss some purchases: closed tabs, blocked scripts, declined consent, cookie limits. For a store on a high-risk processor, the server-side record is the one to trust. It is also the record you would show an underwriter or reconcile against settlements.
- Capture click identifiers at landing. Store
gclid(andgbraid/wbraidwhere present) in a first-party cookie or session. Write them into the order record when the order is created, before the redirect to the processor. - Listen for the processor’s payment-succeeded notification. That event, not the return page, is when the sale is confirmed.
- Upload confirmed conversions. Use the order ID, the click ID, value and currency, and consented hashed email where you have it. Google recommends Data Manager for this. Google said that from 15 June 2026, offline conversion import and enhanced-conversions-for-leads uploads would move to the Data Manager API and be blocked in the Google Ads API, except for developer tokens with legacy access. If a developer or plugin built your upload before 2026, check which path it uses.
- Decide which source feeds bidding. Either use the browser tag as primary with the upload as a check, or the upload as primary with the tag as secondary. Do not count both as primary for the same purchase unless deduplication is confirmed.
- Send adjustments. Google Ads supports restating a conversion’s value or retracting it. Use this for refunds and chargebacks, which matter in a category where processors watch dispute ratios.
Our main conversion tracking guide covers the overall architecture and where double counting comes from.
How do consent and validation fit in?
Consent Mode v2 applies across all of this. The Google tag should read the ad_storage, ad_user_data, ad_personalization and analytics_storage signals, and server-side uploads should respect the same consent choice made at checkout. Do not upload hashed customer data for buyers who declined. If your store also runs a telehealth or intake flow, health information must stay out of every one of these payloads. See our HIPAA-conscious tracking guide.
Then validate against money, not against Google:
- Weekly: settled orders in the processor dashboard against purchases in Google Ads, by date, for the same attribution window. Note the gap and whether it is stable.
- After any processor change: repeat the flow map and a live test order the same day.
- In GA4: check that no payment domain appears as a referral source for purchases.
A stable gap you understand is workable. A gap that moves after a processor switch means something in the flow changed. Want a view of your tracking and account readiness? Try the Readiness Score, or book a strategy call.
Sources
- Google Ads Help — How Google Ads tracks website conversions
- Google Ads Help — Use a transaction ID to minimize duplicate conversions and How to adjust your conversions
- Google Ads Help — Updates to your enhanced conversions settings and About enhanced conversions for leads
- Google Analytics Help — Identify unwanted referrals and Set up cross-domain measurement
Checked 2026-09-30. Google’s measurement features change often; the current help article governs.
Founder Question
“Google Ads says we made 40 sales, the processor says 60. Which one is right?”
Our Perspective
For money, the processor. For bidding, you want Google closer to it. A gap like that usually means buyers are not returning from the hosted payment page, or the tag fires on the wrong page. Map the flow with a test order, then add a server-side upload keyed on order ID.
Practical Recommendation
- Fire the purchase conversion on your own confirmation page after confirmed payment, with the order ID as the transaction ID.
- Add every processor and 3-D Secure domain to GA4 unwanted referrals, and update the list whenever you change processor.
- Store the click ID with each order and confirm sales from the processor’s payment-succeeded event through Data Manager. Reconcile weekly against settled orders.
What we learned
Tracking problems on peptide stores often start with a processor change, not a tagging mistake. The store switches payment provider under pressure, the payment page moves to a new domain, and nobody re-tests the flow. The setups that survive treat the processor’s payment-succeeded event as the record of truth and the browser tag as a helpful second signal. They re-run a live test order every time the checkout changes.
Frequently asked
Why does GA4 show my payment processor as a referral?
Buyers leave for the processor’s domain and come back, and GA4 records the return as a referral. Add the processor’s domain under Configure tag settings → List unwanted referrals. It is not retroactive.
Should I put my Google Ads purchase tag on the processor’s payment page?
Usually not. Fire it on a confirmation page on your own domain, after payment is confirmed. Google says not to fire tags inside iframes and to use the domain linker if the conversion page is on a different domain.
How do I stop purchases counting twice?
Send the order ID as the transaction ID on every purchase conversion. Google Ads may only process the first instance of a given transaction ID, which removes duplicates from refreshes and repeated tag fires.
What if customers pay but never return to my site?
Confirm the sale from the processor’s server-side payment-succeeded notification. Upload it to Google Ads with the stored click ID and order ID through Data Manager.
Do I need to change anything because of the 2026 Data Manager changes?
If you upload offline conversions or enhanced conversions for leads through the Google Ads API, check it. Google said those uploads would move to the Data Manager API from 15 June 2026 and be blocked in the Google Ads API for most developer tokens.
Next step
If you want this applied to your account and your site rather than read in the abstract, book a 30-minute strategy session. We will look at the domain before the call.
Book a Strategy CallRelated articles
Conversion Tracking for Peptide Ecommerce (Without Fooling Yourself)
A tracking build for peptide stores: single source of truth, enhanced conversions, consent handling, and the double-counting patterns that quietly bre…
Payment Processing for Peptide Companies: How High-Risk Underwriting Actually Works
How acquirers underwrite peptide merchants: why mainstream processors decline or close accounts, MCC classification, reserves, card-network chargeback…
Stripe Alternatives for Peptide Companies: What Each Option Actually Is, Using Their Own Published Rules
What peptide companies can use instead of Stripe, grounded in each provider's own published rules: why PayPal, Braintree, Square, Adyen, Shopify Payme…