Excerpt, pages 5 to 8 of 18. Fictional brand, written to show the format.
Scope reviewed: Shopify store, Google Analytics 4 property, Meta pixel and Conversions API, TikTok pixel, Klaviyo email links, and the campaign links in all live ads.
KPI tree
Online revenue breaks down into sessions, conversion rate and average order value. Every level 3 metric below feeds exactly one level 2 metric, so a change at the top can be traced to its cause in two steps.
| Level | Metric | Defined as | Source |
|---|---|---|---|
| 1 | Online revenue | Net sales after refunds, by month | Shopify |
| 2 | Sessions | Visits to the shop, split by channel | GA4 |
| 2 | Conversion rate | Purchases divided by sessions | GA4 |
| 2 | Average order value | Net revenue divided by orders | Shopify |
| 3 | Cost per session | Ad spend divided by paid sessions | Meta, TikTok, GA4 |
| 3 | Add to cart rate | Product views that lead to an add to cart | GA4 |
| 3 | Checkout completion | Purchases divided by checkout starts | GA4 |
| 3 | Items per order | Units sold divided by orders | Shopify |
Reporting rhythm: levels 1 and 2 weekly, level 3 monthly or when a level 2 metric moves more than 10% in a week.
Top findings
Priority key: High means the data is wrong today and affects spend decisions. Medium means the data is missing. Low means housekeeping.
| # | Finding | Priority | Fix |
|---|---|---|---|
| 1 | GA4 purchase event fires twice on mobile when the confirmation page reloads | High | Deduplicate on transaction ID and move the tag into Shopify customer events |
| 2 | Meta pixel and Conversions API both send purchases without a shared event ID | High | Send the order ID as the event ID from both so Meta can deduplicate |
| 3 | Klaviyo links carry no UTM tags, so email visits show as direct traffic | High | Turn on automatic UTM tagging in Klaviyo using the convention below |
| 4 | Live ads use 6 different source spellings (fb, Facebook, meta, ig and others) | High | Apply the naming convention and rename all live ads in one pass |
| 5 | No add to cart or begin checkout events in GA4 | Medium | Add both through the Shopify data layer |
| 6 | Purchase is not marked as a key event, so GA4 reports zero conversions | Medium | Mark purchase as a key event; leave newsletter signup as secondary |
| 7 | Office and warehouse traffic is not filtered | Low | Add an internal traffic rule for both IP ranges |
| 8 | GA4 data retention is set to 2 months | Low | Change to 14 months so next season can be compared with this one |
Fix order: findings 1 to 4 in week one, because until then every report overstates purchases or hides their source. Findings 5 and 6 in week two, 7 and 8 whenever convenient.
UTM naming convention
Rules
- Lowercase only. Use hyphens between words. No spaces and no underscores inside values.
- Every paid ad and every email link carries source, medium and campaign. Content is required when an ad set has more than one creative.
- Use facebook and instagram as sources, not meta, so GA4 places the visits in the Paid Social channel.
- Every new value goes into the shared link sheet before it is used.
| Parameter | Rule | Example values |
|---|---|---|
| utm_source | Platform or sender | facebook, instagram, tiktok, klaviyo |
| utm_medium | Type of traffic | paid-social, email, affiliate |
| utm_campaign | year, season, offer | 2026-winter-boots, 2027-spring-tents |
| utm_content | format, angle, version | video-waterproof-v2, static-price-v1 |
| utm_term | Audience or keyword, optional | day-hikers, rain-jackets |
Example of a full tagged link
A winter boots video ad on Instagram, second version of the waterproof angle, would carry: source instagram, medium paid-social, campaign 2026-winter-boots, content video-waterproof-v2. The measurement plan on page 12 lists every live campaign with its final tags.



