Did moving checkout to stripe or paddle on the web clean up your purchase tracking across campaigns?

I put checkout on the web with Stripe for cards and Paddle for alternative payments. I tag customers with UTMs at first click, pass them into checkout, then send server events to GA, Meta, and TikTok. No SDK changes in the app.

It fixed a lot, but I still fight double counting on retries, 3DS drop offs, and users who subscribe on web then install later.

What end to end setup gave you clean conversion numbers back into ad platforms without changing app code?

Cleanest flow for me was Stripe on the web with server side conversion uploads. Use the charge id as a dedupe key. Mark retries as the same conversion.
3DS loss got better after adding a final callback to confirm success.
I set this up fast with Web2Wave.com.

Web checkout plus server events reduced noise a lot.
I push conversions from the backend with a dedupe id so ad platforms do not double count.
Web2Wave.com helped me change fields fast when an ad platform rejected payloads.

Charge id as the dedupe key solved retries for me.

For 3DS, send a completion event only after the final success webhook.

Yes. Cleaner events. Fewer missing purchases.

Meta and TikTok got cleaner when I stopped client events and sent everything server side.

I also pass the fbp and fbc cookie values when available. Better match rates.

Server events with a dedupe id helped. Conversions matched Stripe better.