Most GA4 audit checklists you will find are settings reviews. Confirm the time zone, confirm the currency, turn on enhanced measurement, exclude some internal traffic, tick the box. That is not an audit. That is reading the config screen out loud.
A real GA4 audit answers one question: does the number in GA4 match the money the business actually made? You can have every admin setting configured perfectly and still be reporting revenue that is 20% wrong, because the errors that matter do not live in the settings panel. They live in how events fire, whether they fire at all, and whether anyone ever reconciled the total against the store of record.
This is the GA4 audit checklist I actually work through for ecommerce brands, grouped into the three layers that matter: configuration, event quality, and reconciliation. The settings layer is the shortest section here, on purpose.
Layer 1: configuration (the part everyone already checks)
Get these right first, because they are cheap and they poison everything downstream if they are wrong. But do not stop here.
1. Time zone and currency. The reporting time zone should match how the business books revenue, and the currency should match what you charge. A store selling in GBP but reporting in USD will show revenue that drifts with the exchange rate and never matches the books. GA4 does not retroactively fix historical data when you change these, so catch it early.
2. Internal and developer traffic filters. Your own team browsing the site, and QA firing test purchases, both inflate everything. Define internal traffic by IP and set the filter to Active, not Testing. Test purchases are the sneakier problem, because a single $9,999 test order can visibly distort a small store's revenue for a day.
3. Unwanted referral exclusions. When your payment step or a subdomain sends users back to the site, GA4 can log that hop as a new referral, ending the original session and stealing attribution from the real source. Payment gateways, login providers, and your own subdomains all belong on the exclusion list. Google documents exactly how referral traffic is identified and excluded in the Analytics Help referral guidance, and this is the single most common cause of a bloated "Direct" or self-referral channel.
4. Cross-domain configuration. If your landing pages, storefront, and checkout live on different domains, cross-domain measurement has to be configured or the session breaks at every domain hop and the conversion gets attributed to the previous page instead of the ad. Every extra domain in the funnel is another place this silently fails.
Layer 2: event quality (where the real damage hides)
This is the layer settings-only audits skip, and it is where most broken revenue lives. You cannot check this from the admin panel. You check it in DebugView, in GTM Preview, and ideally against the raw event export.
5. Does the purchase event fire once, with the right parameters? Open DebugView, complete a real test purchase, and watch the purchase event land. Confirm it carries transaction_id, value, currency, and the items array. Google's recommended ecommerce events reference lists the exact parameters GA4 expects, and a purchase missing transaction_id is the root cause of the next problem on this list.
6. Duplicate transactions. If a customer refreshes the order-confirmation page, or the purchase trigger fires on every page load instead of once, GA4 records the same sale two or three times. The transaction_id is how GA4 is supposed to deduplicate, so a purchase event without a stable transaction ID means every refresh is a new phantom sale. This one check often explains a store whose GA4 revenue runs mysteriously higher than Shopify.
7. Value, tax, and shipping consistency. Decide whether value includes tax and shipping, and make sure it is consistent. A store that sometimes sends the subtotal and sometimes sends the grand total will never reconcile, and the gap will look random rather than systematic.
8. Refunds. Almost nobody sends refund events to GA4. That means reported revenue only ever goes up, and your ROAS looks better than it is. If refunds are a meaningful share of your volume, this is not a rounding error.
9. Consent and lost events. Consent Mode v2 changes whether events are collected, modeled, or dropped based on user choice. Misconfigured consent gating can silently suppress a large slice of purchases before they ever reach GA4. Read Google's Consent Mode documentation and then verify in the network tab that events actually fire under a realistic consent state, not just in your unblocked developer browser.
Layer 3: reconciliation (the check that makes it an audit)
Here is the step that separates an audit from a settings review, and the one almost every published checklist leaves out entirely.
10. Reconcile GA4 revenue against the store of record. Pull GA4 purchase revenue for a clean 30-day window and put it next to the same window from Shopify, your payment processor, or whatever actually holds the money. They will not match exactly, and they should not. Client-side tracking loses a few percent to ad blockers and consent no matter what you do. But you need to know the size and direction of the gap.
- A gap under about 5% is normal and stable. Document it and move on.
- GA4 higher than the store almost always means duplicate transactions (check 6).
- GA4 lower than the store means events are being lost, usually to consent, ad blockers, or a purchase tag that does not fire on every path to the thank-you page.
- A gap that swings wildly week to week means something is intermittently broken, which is worse than a large but stable gap.
11. Channel attribution sanity. Look at how much traffic and revenue lands in Unassigned, (not set), and Direct. A large Unassigned bucket usually points back to missing UTM parameters, broken referral exclusions, or the cross-domain gap from check 4. Direct is where sessions go to die when tracking loses the source, so an unusually large Direct channel is a symptom, not a fact about your customers.
12. Verify against the raw export. The most reliable way to check event-level quality at scale is the BigQuery export, which gives you every event and parameter instead of the aggregated, sampled reports. Google documents the BigQuery Export schema in full. A single query counting purchases per transaction_id will surface duplicates instantly, and counting purchases with a null or empty value will surface the malformed events that the standard reports quietly average away.
Turning the GA4 audit checklist into a report
A checklist is only useful if it ends in a prioritized list of what to fix and what each error costs. The output of a good audit is not "here are 40 things," it is "these three issues are why your GA4 revenue is 14% off, here is the fix for each, and here is what to leave alone." Most of the 40-point checklists circulating online optimize for looking thorough, not for telling you which two misconfigurations are actually distorting your decisions.
That prioritization is the entire point of our ecommerce analytics audit: we run every check above, reconcile against your store, and hand back a ranked fix list with the revenue impact of each item rather than a wall of green and red ticks. If the errors trace back to how tags fire in the first place, the fix usually lives one layer down in the GA4 and tracking setup work, because a clean container is what keeps an audited property from drifting back out of tune three months later.
How to decide if you need one
You do not need an audit because a blog told you to run one quarterly. You need one when a specific decision depends on a number you are not sure you can trust. Use this frame:
- If your GA4 and Shopify revenue are within a few percent and stable, and nobody is making budget calls off a channel report that looks off, you are probably fine. Spend the time elsewhere.
- If you are about to shift ad budget based on channel ROAS, and Direct or Unassigned is a large slice of your revenue, audit first. You are likely about to optimize against attribution noise.
- If your reported revenue and your bank deposits tell two different stories, that is not a reporting preference to reconcile later. That is the problem to solve before anything downstream, because every dashboard, forecast, and spend decision inherits the error.
Trustworthy measurement is not the property with the most settings enabled. It is the one whose number you can defend when the CFO asks where it came from. Work the three layers in order, and the answer stops being a shrug.
If you want a second set of eyes on your setup, a 15-minute walkthrough is usually enough to tell whether your numbers are trustworthy or whether the gap is hiding something.

