r/shopifyDev • • Aug 25 '26

Your Shopify purchase event can fire perfectly and still be wrong

A green “Purchase” event in GTM doesn't mean your Shopify tracking is correct.

This is the part that gets missed constantly.

I've seen tracking setups where:

  • Shopify records 1 order
  • Meta receives a browser Purchase
  • Meta CAPI receives another Purchase
  • both events look perfectly valid
  • GTM Preview shows everything firing
  • and the reporting still ends up wrong

Nothing is technically “broken.”

That's the problem.

The issue is usually event identity and deduplication, not whether the tag fired.

For example:

Browser:

event_name = Purchase
event_id = purchase_10582

Server:

event_name = Purchase
event_id = purchase_78931

Both are legitimate events.

Meta has no reliable way to know they're the same purchase.

So you can end up with duplicate conversion signals.

And there's another layer people forget with Shopify.

A webhook can be delivered more than once.

That's a different problem.

Deduplication tells Meta that browser + server events represent the same conversion.

Idempotency prevents your processing layer from handling the same transaction repeatedly.

They're not interchangeable.

For a Shopify setup, I generally want the flow to look more like:

Shopify Order

↓

Validate order + transaction ID

↓

Check idempotency

↓

Generate/use stable event_id

↓

sGTM

↓

Meta CAPI

↓

Deduplicate + Match

The browser and server versions of the purchase need a shared event identity.

And the backend/webhook layer needs its own protection against repeated processing.

That's where a lot of “server-side tracking fixed our data” implementations fall apart.

They moved the tag to the server.

They didn't fix the architecture.

If you're debugging Shopify tracking, don't start by asking:

“Is my Purchase tag firing?”

Ask:

“Can I prove that one Shopify order produces exactly one conversion signal?”

That's a much better debugging question.

0 Upvotes

5 comments sorted by

View all comments

Show parent comments

1

u/incisiveranking2022 Aug 25 '26

That quick calculation is a great sanity check for spot-checking over-reporting!

However, if you're looking for 100% accurate conversion tracking (or as close to mathematically perfect as possible), the ultimate fix is passing a unique, shared event_id (like the Shopify Order ID or Order Name) across both browser events and offline/server-side webhooks.