Your WooCommerce dashboard says the store took a certain number of orders last month. GA4 says something else, sometimes fewer, sometimes oddly more, and its revenue figure does not match either. You want to know which marketing brings buyers, but you cannot trust a report that cannot even count sales.
GA4 ecommerce tracking will never match your shop’s order list exactly, but it should be close, and the gap should be explainable. This post covers what the purchase event needs to carry, the usual ways to set it up on WooCommerce, how to check GA4 against your real orders, and what to do about refunds and cash on delivery.
What GA4 ecommerce tracking records
GA4 tracks a shop through a set of recommended events, each sent when a shopper reaches a step. The main ones are:
| Event | When it fires | What it tells you |
|---|---|---|
| view_item | A product page is viewed | Which products attract interest |
| add_to_cart | A product is added to the cart | Which products people consider buying |
| begin_checkout | The checkout page starts | How many carts reach checkout |
| purchase | The order is confirmed | Orders, revenue and which source led to them |
| refund | An order is refunded, if you send it | Revenue that was later returned |
There are other optional events, such as viewing a list of products or adding shipping details, but for a small shop the purchase event matters far more than the rest. Get it right first.
What the purchase event must carry
A purchase event without the right details is little better than a page view. Each one should include:
- transaction_id: your WooCommerce order number. GA4 uses it to recognise the same order sent twice, and you use it to match GA4 against your orders.
- value: the order total you want to report. Decide whether that includes tax and shipping, and keep it consistent.
- currency: the currency code, such as INR. Without it, revenue may not be recorded properly.
- items: the products, each with its ID or SKU, name, price and quantity.
Google’s developer guide to measuring ecommerce in GA4 lists the full set of fields. A plugin should handle this for you, but it is worth knowing what to look for when testing.
Ways to set up WooCommerce purchase tracking
A dedicated tracking plugin
Several plugins send GA4 ecommerce events from WooCommerce, including an official Google Analytics extension from WooCommerce and various third-party options. They are the quickest route for a store with no Tag Manager setup. Check whether a plugin sends events from the browser only or can also send purchases from the server, and whether it respects your consent banner.
Google Tag Manager with a WooCommerce data layer
A plugin such as GTM4WP can push WooCommerce product and order details into the data layer, and Tag Manager then sends GA4 events from it. This takes more setup but keeps every tag, including Google Ads and the Meta Pixel, in one place, using the same order data.
Server-side sending
Some setups send the purchase from your server rather than the shopper’s browser. That helps when shoppers block scripts, close the tab before the confirmation page loads, or pay on a gateway that never returns them. It is more complex, and it still needs to respect consent choices.
Whichever you choose, use one method only. A theme or SEO plugin quietly sending its own GA4 tag alongside your ecommerce plugin is a common source of doubled revenue, covered in our post on finding duplicate conversions.
Why GA4 shows fewer purchases than WooCommerce
Some shortfall is normal. Larger gaps usually have one of these causes:
- Declined consent. Shoppers who reject analytics are not recorded in the usual way, or at all.
- Ad blockers and privacy browsers stopping the GA4 script.
- Off-site payment without a return. If the gateway does not send customers back to your order confirmation page, or they close the tab first, a browser-based purchase event never fires.
- Cached confirmation pages. If the thank-you page is cached, the order details may be missing or wrong. Checkout and order pages should be excluded from caching, as our post on caching rules for cart and checkout explains.
- Manual and phone orders created in the admin area, which never pass through the website checkout.
Why GA4 sometimes shows more
- The purchase event fires again when the shopper refreshes or revisits the confirmation page, and the plugin does not prevent it.
- Two tags send the purchase, so each order arrives twice with different settings.
- Failed or cancelled payments still reach the confirmation page and count as sales.
- Test orders by staff are not filtered out.
The transaction ID helps here. If GA4 shows the same order number twice, you know which kind of problem you have.
Checking GA4 against your orders
Do this after setup and then monthly. It takes only a spreadsheet.
- Pick a recent date range, a week or a month.
- Export the orders from WooCommerce for those dates, with order number, status and total.
- In GA4, open an exploration with transaction ID and purchase revenue for the same dates. The monetisation reports give totals but not the order-level detail.
- Match order numbers between the two lists. Note orders in WooCommerce that GA4 missed, and any in GA4 that WooCommerce does not show as paid.
- Look for patterns. If the missing orders all used one payment method, the problem is that gateway’s return journey.
Check that both use the same time zone. A store set to one time zone and a GA4 property set to another will disagree at the edges of every day.
Refunds, cancellations and cash on delivery
GA4 records the purchase when the order is placed. What happens later is not reflected unless you send it.
- Refunds. Some plugins send a refund event when you refund an order in WooCommerce, reducing revenue in GA4. If yours does not, GA4 revenue stays higher than what you kept.
- Cancelled orders. Usually not sent back to GA4 at all. If cancellations are common, your own records are the only accurate revenue figure.
- Cash on delivery. A COD order counts as a purchase in GA4 the moment it is placed, even if it is refused at the door. For stores with many COD orders, compare GA4 revenue with delivered orders, not placed orders. Our post on cash on delivery in WooCommerce covers reducing refused orders.
The practical rule is to use GA4 to compare sources and products against each other, and WooCommerce for the true sales figure. That division of jobs is the same one our guide to measuring your marketing recommends across every channel.
Frequently asked questions
Should the purchase value include tax and shipping?
Either can work, as long as you choose once and stay consistent across GA4, Google Ads and any reports. Many shops report revenue without shipping so product performance is easier to compare. Whatever you choose, write it down so future setups and plugins follow the same rule.
Can I see which products sell best by traffic source in GA4?
Yes, once item details are sent with the purchase event. The ecommerce purchases report lists items, and an exploration can combine item name with session source or campaign. With small order volumes, read the results as rough guidance rather than precise rankings.
Does GA4 track orders placed through WhatsApp or the phone?
Not automatically. Orders created by staff in the WooCommerce admin, or taken over WhatsApp or the phone, never pass through the website checkout. Some setups send them with the Measurement Protocol, but most small shops simply note these orders separately in their own records.
Why does GA4 show revenue in the wrong currency?
Usually because the currency parameter is missing or different from the property’s reporting currency. GA4 converts between currencies when it can, but a missing currency can leave revenue unrecorded. Check the purchase event in DebugView and confirm the currency code matches your store’s setting.
Ecommerce tracking is fiddly because it touches the theme, the checkout, the payment gateway, caching and consent all at once. Since we build and maintain WooCommerce stores, our ecommerce and conversion tracking setup can work on both the site and the tags. The wider picture is on our digital marketing hub.
Next in this series: Marketing Attribution Explained for Small Businesses