About Tracking

Ad Platform Tracking

Meta Pixel + CAPI TikTok CAPI LinkedIn CAPI Snapchat CAPI Pinterest CAPI Quora Pixel Bing + UET Tag

Google Ecosystem

Google Ads Tracking GA4 Setup & Audit Google Tag Manager

Advanced Solutions

Server-Side Tracking Looker Studio Offline Conversion
Case Studies Blog Free Checklist Book Free Audit →

When a customer returns a product and you issue a refund in Shopify, GA4 does not automatically know about it. The purchase event was already recorded, and unless you explicitly send a refund event, GA4 continues to report that revenue as part of your totals. Over time, this creates a growing gap between GA4’s reported revenue and your actual net revenue.

For stores with significant return rates — common in fashion, footwear, and electronics — untracked refunds can cause GA4 revenue to overstate actual revenue by 10–25%. This affects ROAS calculations, campaign decisions, and any GA4 report you use for business analysis.

How GA4 Handles Refunds

GA4 has a built-in refund event called refund. When you send a refund event with a transaction_id and a negative value (or with the items array including a quantity that offsets the original purchase), GA4 subtracts that revenue from your totals.

The refund event is not automatic. You have to send it explicitly when a refund is issued in Shopify. There are three main ways to do this.

Method 1: Shopify Flow + GA4 Measurement Protocol

This is the most reliable method for stores on Shopify plans that include Flow.

  1. Create a Shopify Flow workflow triggered by the Refund Created event in Shopify
  2. Use the Flow HTTP Request action to send a POST request to the GA4 Measurement Protocol endpoint
  3. Include the refund event payload with the transaction_id from the original order and a negative value equal to the refund amount

This runs server-side whenever Shopify processes a refund, so it works for all refunds regardless of whether the customer is still browsing your store.

Method 2: GTM + Shopify Webhook

If you are managing tracking through Google Tag Manager and have a server-side GTM container:

  1. Set up a Shopify webhook for the refunds/create event
  2. Route the webhook payload to your server-side GTM container
  3. Create a GTM trigger that fires a GA4 refund event tag when the webhook arrives

This requires a server-side GTM setup, which has additional hosting costs but gives you a centralised place to manage all server-side events.

Method 3: Custom App or Middleware

For stores with a developer available, a custom Shopify app or middleware service can subscribe to the refunds/create webhook and send GA4 refund events via the Measurement Protocol. This gives you the most flexibility in how you format and send the data.

What Data to Send with the GA4 Refund Event

A valid GA4 refund event requires:

Using the items array is important if you have partial refunds — where only some items from a multi-item order are being returned. Without the items array, GA4 will apply the refund to the full transaction rather than to the specific SKUs.

Partial Refunds vs Full Refunds

For full refunds: send the full negative transaction value with all items.

For partial refunds (one item returned from a multi-item order): send only the items that were refunded, with the quantity and price of those specific items. GA4 will calculate the revenue adjustment for those items only.

How to Verify Refund Tracking Is Working

Issue a test refund in Shopify (use a test order or a very small amount you are willing to actually refund). Then check GA4:

You can also check the Realtime report during the test to see if a refund event appears.

What Happens to ROAS Calculations Without Refund Tracking

If you are using GA4 imported conversions in Google Ads, untracked refunds inflate your reported conversion value. Google Ads sees the original purchase revenue but never sees the refund, so its ROAS calculation uses gross revenue rather than net revenue. Smart bidding optimises toward purchases that look more profitable than they actually are.

For stores with more than a 5% return rate, this is a meaningful distortion that can lead to campaigns looking profitable on paper while actually underperforming against real margins.

Get Your Full Revenue Picture Set Up

Tracking revenue without tracking refunds gives you a systematically optimistic view of performance. If you do not know your real net revenue in GA4, you do not know your real ROAS, and your ad budget decisions are based on inflated numbers.

We set up refund tracking via the GA4 Measurement Protocol connected to Shopify’s refund webhooks. Book your free Shopify tracking audit here.

Leave a Reply

Your email address will not be published. Required fields are marked *