Type something to search...
Case Study · Shopify E-CommerceGoogle Ads Conversion Tracking Uplift with Shopify Webhooks

Filtered vs. Unfiltered Server-Side Tracking Across 1,000+ Monthly Orders

+49.73
More Attributed Orders vs. Web-Only
+$26.6k
Recovered Monthly Conversion Value
1,085.85
Attributed Conversions in October
Client:Shopify E-Commerce
Architecture Stack:ShopifyServer-Side GTMStapeGoogle Data Manager APIGoogle Ads

Google Ads Conversion Tracking Uplift with Shopify Webhooks

IvanPublished: 04 Nov, 2026
  • The Client: Shopify e-commerce brand processing 1,500+ orders per month
  • The Problem: Even with a Server-Side Google Tag Manager (sGTM) browser pixel in place, ad blockers, Safari ITP, and payment gateway redirect drop-offs were still causing 3.4% to 4.8% of conversions to go unattributed.
  • The Stack: Shopify Customer Events + Webhooks → Server-Side GTM → Stape → Google Data Manager API.
  • The Result: Adding Shopify webhooks recovered +35.71 to +49.73 attributed orders (+$16.7k to +$26.6k in monthly revenue) over browser-only sGTM tracking, reaching 1,085.85 attributed conversions ($426.4k value) in October 2026.

The Challenge: Browser Pixels Miss Orders, Webhooks Lack Cookies

Tracking e-commerce purchases reliably has become one of the hardest technical challenges in paid acquisition. Between Safari’s ITP (Intelligent Tracking Prevention), ad blockers, cross-domain payment redirects (Shop Pay, PayPal, Klarna, 3D Secure), and shoppers closing the tab before the confirmation page finishes loading, client-side pixels routinely miss real orders.

Shopify webhooks offer the ultimate source of truth: whenever an order is created or paid, Shopify’s backend servers ping our Server-Side Google Tag Manager (sGTM) container directly. Webhooks never get blocked by browser extensions and never fail because a customer closed their browser tab.

However, pure server-to-server webhooks suffer from one major limitation: Shopify webhooks do not carry browser cookies. There is no Google Ads Click ID (gclid), no _gcl_aw cookie, and no browser state attached to a backend webhook payload.

Recently, Stape presented a clever hybrid architecture (demonstrated primarily with Meta CAPI) where we store browser cookies in Stape Store keyed by the user’s Shopify cart_token, log successful browser purchases by transaction_id, and filter incoming webhooks so the server webhook only fires as a fallback when the browser pixel fails.

While that Stape Store transaction filter makes sense for Meta — where standard browser setups generate a unique event_id per page load rather than deduplicating natively by e-commerce order ID unless custom-mapped — Google Ads works differently. Google Ads natively deduplicates conversions using the e-commerce Transaction ID (Order ID), and even merges browser and server signals when they share the same Transaction ID.

That raised one central question for our Google Ads architecture: Should we filter webhook conversions in sGTM so they only fire when the browser pixel misses an order, or should we send all webhooks unfiltered to Google Ads and let it deduplicate them natively by Transaction ID?

(Want to jump straight to building this pipeline? Read our step-by-step Advanced Stape & Shopify Webhook Google Ads Tutorial.)


The Experiment: 3 Server-Side Setups Head-to-Head

Instead of guessing, we configured our client’s sGTM container to run three distinct server-side conversion tracking setups in parallel across the entire month of October 2026 on the exact same store traffic (all using identical 90-day click and 30-day engaged-view/view-through attribution windows):

  1. Setup #1 — Split Setup: sGTM Web Pixel + Filtered Webhook Backup (Primary): Our baseline hybrid setup inspired by Stape’s filtered pattern tutorial for Meta:
    • Purchase (sGTM via Stape) — Web Only (1a): Standard sGTM Google Ads Conversion Tracking tag firing on browser purchase events (1,036.12 conversions | $399,788.21).
    • Shopify Purchase Webhook via Stape — Filtered (1b): Fires via the Google Data Manager API tag on incoming webhooks, filtered via Stape Store so it only fires if the browser purchase event was not already recorded (+35.71 conversions | +$16,661.23).
  2. Setup #2 — Combined Single Action: sGTM Web Pixel + Unfiltered Webhook (Secondary): Receives both the browser pixel and 100% of Shopify webhooks (configured with eventSource set to WEB) into a single Website conversion action — no Stape Store transaction filtering, relying on Google Ads’ native Transaction ID deduplication.
  3. Setup #3 — Unfiltered Shopify Webhook Only (Secondary Control): A control action receiving 100% of Shopify webhooks on their own (with recovered gclid from Stape Store + customer user_data), to verify how many webhook orders Google Ads attributes without any browser tags.

October 2026 Google Ads Conversion Action Comparison

Full-Month Results (October 2026)

#Conversion Action SetupSource TypeAll Conv.All Conv. ValueAvg. Order Value
1aPurchase (sGTM via Stape) — Web OnlyWebsite1,036.12$399,788.21$385.85
1bShopify Purchase Webhook via Stape (Filtered)Website (Import from clicks)+35.71+$16,661.23$466.57
1 (Total)Split Setup Total (Web + Filtered Webhook)Mixed1,071.83$416,449.44$388.54
2Purchase (sGTM via Stape, combined — Web + Unfiltered Webhook)Website1,085.85$426,369.03$392.66
3Shopify Purchase Webhook via Stape (All — Webhook Control)Website (Import from clicks)909.70$367,463.18$403.94

Here is what stood out from the October numbers:

  • True Webhook Uplift Over Browser-Only sGTM: Even a properly configured Server-Side GTM browser pixel (#1a) missed 35.71 orders ($16,661.23 in revenue, or +3.4% conversions / +4.2% value) where the shopper never reached the Thank You page or an ad blocker blocked the client-side request completely. When using the Combined Unfiltered Webhook setup (#2), total attributed conversions rose by +49.73 orders (+4.8%) and +$26,580.82 (+6.6%) over browser-only tracking.
  • Filtered (#1) vs. Unfiltered (#2) Proves Native Deduplication Works: Comparing the Split Filtered total (1,071.83 conversions / $416.4k value) against the Combined Unfiltered action (1,085.85 conversions / $426.4k value) reveals a tight 1.3% (+14.02 conversions / +$9.9k) difference. Sending 100% of Shopify webhooks unfiltered into the same Website conversion action did not double-count the 1,036.12 browser orders — confirming that Google Ads natively deduplicates Web and Webhook signals sharing a Transaction ID while rescuing an extra ~1.3% slice of orders.
  • Unfiltered Webhook Control (#3): Sending 100% of store webhooks by themselves resulted in 909.70 attributed conversions (fewer than the 1,036.12 browser conversions), confirming that Google Ads only attributes webhook orders when it can match a stored click ID (_gcl_aw) or customer profile.

Why Did “Web + Unfiltered Webhook” (#2) Beat the Filtered Setup (#1)?

When we audited the sGTM execution logs and Stape Store lookups, three practical advantages of sending unfiltered webhooks into the same Website conversion action stood out — along with one important caveat we uncovered during our audit.

In a filtered webhook setup, whenever the browser Thank You page loads and fires a purchase event, sGTM writes the transaction_id into Stape Store. When the Shopify webhook arrives later, the filter sees that the browser already fired and blocks the webhook tag.

Here is the catch: just because the Thank You page loaded does not mean the browser still had the _gcl_aw (gclid) cookie.

  • When a shopper starts checkout on mobile or redirects through an external payment gateway (PayPal, Shop Pay, Klarna, 3D Secure), the browser can drop or partition cookies before landing on the Thank You page — or the user completes payment in an app and returns in a fresh browser tab.
  • Earlier in the session (on checkout_started), our custom pixel captured the user’s _gcl_aw cookie against their cart_token in Stape Store.
  • Yet because the Thank You page still fired a cookie-less purchase event, the Stape Store filter marked the order as tracked and blocked the webhook from sending the recovered gclid and verified Shopify billing email and phone.

When we instead send unfiltered webhooks into the same conversion action (#2), every webhook enriches the conversion with the cart_token’s stored gclid plus the Shopify order’s billing details. If the browser pixel already had the gclid, Google Ads deduplicates the event by Transaction ID. If the browser pixel lost the gclid during checkout, the unfiltered webhook recovers the attribution.

2. Google Ads Only Deduplicates Within the Same Conversion Action

Google Ads’ Transaction ID deduplication works per conversion action, not across separate conversion actions.

  • If we use two separate Primary purchase actions (as in Setup #1: one for Web and one for Webhook), and a Shopify webhook arrives 1–2 seconds before the customer’s browser finishes loading the Thank You page, our Stape Store lookup sees no web purchase yet and fires the Webhook action — and two seconds later, the browser fires the Web action.
  • Because they are two separate conversion actions, Google Ads will count the same order twice unless we delay the webhook.
  • Conversely, when both our Web Pixel and our Unfiltered Webhook point to the exact same Website conversion action ID, Google Ads natively deduplicates them while merging Enhanced Conversions user data and click identifiers.

3. No Need for Stape’s “Request Delay” Power-Up (Works on Lower-Tier Plans)

If we use the Filtered Webhook pattern (#1), we have to delay incoming webhooks by 5–10 minutes using Stape’s Request Delay power-up so the browser has time to write the transaction_id to Stape Store before the webhook checks it.

However, Stape’s Request Delay power-up requires a Business plan ($100+/mo) or higher. Many stores and client accounts run on Stape’s Pro plan ($20/mo), where Request Delay is not available.

With the Single-Action Unfiltered Webhook architecture (#2), we do not need Request Delay at all, and we cut our Stape Store operations in half because we never have to write or look up transaction_id records.

Warning

Audit Caveat & Ongoing Multi-Store Testing Note (Transaction ID Matching):


While auditing our experiment logs, we discovered that a small subset of unfiltered webhook events had a formatting mismatch in their Transaction ID compared to the browser pixel (for example, passing Shopify’s internal ID vs. order number, or missing a string conversion). When Transaction IDs do not match 1:1 between web and webhook, Google Ads cannot deduplicate those specific orders, which may account for part of the +14.02 conversion delta in Setup #2.



We have since normalized the Transaction ID mapping across all tags and are continuing to run this split test — as well as rolling it out across smaller-volume Shopify stores — to measure the exact post-fix delta across different order volumes. We will keep updating this case study as new monthly cohorts complete. Regardless, strictly matching our Web and Webhook Transaction ID format is the #1 rule of the unfiltered setup.


Winning Architecture & Summary Comparison

Below is the simplified data flow behind Setup #2:

flowchart LR
    A[1. Checkout Start] -->|Save _gcl_aw + cart_token| B[(Stape Store)]
    C[2a. Browser Purchase] -->|Web Tag| E((Google Ads<br/>Single Action))
    D[2b. Shopify Webhook] -->|Lookup GCLID| B
    B -->|Enriched Webhook Tag| E

    classDef step fill:#E8F4FD,stroke:#1C7ED6,stroke-width:2px,color:#1864AB;
    classDef store fill:#F3F0FF,stroke:#7950F2,stroke-width:2px,color:#5F3DC4;
    classDef google fill:#E6FCF5,stroke:#0CA678,stroke-width:2px,color:#065F46;

    class A,C,D step;
    class B store;
    class E google;
Feature / RequirementSplit & Filtered Webhook (#1)Unified Unfiltered Webhook (#2 - Winner)
October Attributed Conversions1,071.83 ($416.4k value)1,085.85 ($426.4k value)
Webhook Uplift vs. Browser-Only (1a)+35.71 orders (+$16.7k value)+49.73 orders (+$26.6k value)
Recovers “Cookie-Less Thank You Page” Orders?No (Blocked if Thank You page fired without _gcl_aw)Yes (Enriches order with stored cart_token GCLID)
Requires Stape Business Plan (Request Delay)?Yes (/stape/delay/10/… needed to prevent race conditions)No (Works on Stape Pro $20/mo plan)
Stape Store Operations per OrderHigh (Checkout write + Web Order write + 2 Lookups)Low (Checkout write only if GCL. exists + 1 Lookup)
Google Ads Smart Bidding SignalSplit across 2 conversion actionsUnified in 1 Primary Website Conversion Action
Critical Requirement10-minute webhook delayExact 1:1 Transaction ID match between Web & Webhook

Ready to Build This Pipeline?

We documented the exact step-by-step Server GTM, Shopify Custom Web Pixel, Stape Store, and Google Data Manager API setup in our companion guide: Advanced Google Ads Tracking for Shopify with Stape & Webhooks.

Once our conversion capture is complete, we can take Smart Bidding optimization even further by feeding gross profit instead of raw revenue into Google Ads — see our guide on Profit on Ad Spend (POAS) in Google Ads, or explore how we build custom server-to-server pipelines in Google Ads Offline Conversions via n8n.

Want us to audit or build your Shopify tracking?

We design and maintain enterprise Server-Side GTM pipelines that recover lost attribution without double-counting. Let's talk.

Book a Discovery Call
Stack & Tags:
  • Google Ads
  • Shopify
  • Stape
Share:

More Case Studies

SaaS FinTechSales Handoff with n8n & SlackZero-Touch VIP Onboarding
15+ mins
Saved Per Qualified Lead
0 sec
VIP Channel Setup Delay
100%
Support Noise Filtered

Automating the Sales Handoff with n8n & Slack

See how we helped a high-growth SaaS FinTech filter leads and automate client onboarding using n8n, Calendly, and Slack. Zero manual admin, instant VIP experience.

Calendlyn8nSlack API
Published: 17 Jan, 2026Read Case Study
High-Growth D2C BrandSupport Intelligence AutomationUsing n8n & AI
10+ hrs/wk
Saved on Manual Tagging
100%
Ticket Data Coverage
1,000+
Weekly Tickets Classified

Using n8n & AI to Automate Support Intelligence

How we helped a scaling D2C brand turn 1,000+ weekly support tickets into actionable strategic insights using Gorgias, n8n, and AI.

Gorgiasn8nSupabaseOpenAISlack
Published: 05 Dec, 2025Read Case Study