Your Shopify UTM Data Is A Number Dump (Here's How To Fix It)
- saurav soni
- 5 hours ago
- 4 min read
I was looking at a Shopify session detail the other day with a client — one of those screens where you can see exactly how a customer found the store, what pages they visited, how many sessions it took before they bought. And right there under UTM campaign, it said: 120235090222510007.
That's not a campaign name. That's a Meta ad ID. And it tells you absolutely nothing about what you're actually spending money on.
This is one of those problems that feels minor until you're trying to make a real decision — like whether to scale a campaign, where to cut spend, or which creative is actually driving sales. Then it becomes a real problem because your data is basically useless.
What Good UTM Structure Looks Like
The goal of UTMs is simple: when a sale comes in, you should be able to look at the source, medium, campaign, content, and term — and know exactly where that customer came from, what ad they saw, and what you were testing. Right now, if any of those fields are raw numeric IDs, you've lost that information.
Here's the naming convention I use across D2C accounts running Meta Ads to Shopify:
utm_source: facebook or instagram (whichever placement is serving). utm_medium: paid_social. utm_campaign: something human-readable like prosp_summerlinen_jun26 or retarg_addtocart_jun26. utm_content: the ad set name or audience type — broad, lookalike_3pct, retarg_7d. utm_term: the creative identifier — reel_ugc_v1, static_testimonial, carousel_product.
This takes maybe 30 minutes to set up properly in Meta Ads Manager. You go into each campaign, edit the URL parameters, and replace whatever's auto-populated with human-readable names. That's it. From that point, your Shopify analytics start making sense — you can filter by campaign and actually see what's working.
The Bigger Problem: Shopify Is Always Last-Touch
Even once you fix your UTM naming, Shopify only shows you the last touchpoint before purchase. So if a customer saw your Reel on Monday, clicked a Story on Wednesday, and then came back directly on Friday to buy — Shopify credits the direct visit. The ad that started the whole journey? Invisible.
That session detail screen with "2 sessions over 2 days" is actually telling you something important — this customer needed more than one touchpoint. But Shopify can't tell you what those touchpoints were or which one actually made the difference. That multi-touch story is genuinely invisible in native Shopify analytics, and it makes your Meta ROAS look worse than it is because brand-driven direct visits are eating credit that should go to the ads.
Three Practical Upgrades That Actually Help
The first one is the UTM fix I already described — costs nothing, do it this week. Without human-readable campaign names, everything else downstream is harder to interpret.
The second upgrade is a post-purchase survey. Fairing is the one I'd recommend for Shopify — it's around ₹3–4K a month, or roughly £30–£40 for UK brands. The survey shows up right after checkout and asks one question: "How did you first hear about us?" The answers are directional rather than precise, but they give you something no pixel can give you — the actual human memory of where the brand first registered. For a brand with a £50+ AOV, even one extra purchase traced correctly per week makes this pay for itself.
The third upgrade is tagging your invisible traffic sources. Right now, if someone clicks your Instagram bio link and buys, Shopify shows that as direct traffic. If you send a WhatsApp message with a recovery link and they click through, that's also direct. These are revenue lanes that are genuinely contributing to sales but show up as zero-attribution in your analytics — which makes it look like your paid channels are working harder than they are, or not working at all depending on how you're reading the numbers. Tag your bio link with utm_source=instagram&utm_medium=organic&utm_campaign=bio. Tag your WhatsApp links with utm_source=whatsapp&utm_medium=crm. Takes ten minutes and permanently fixes those invisible lanes.
What You Should Actually Be Looking At Weekly
Once your UTMs are clean, the reconciliation becomes a lot more useful. The exercise I run weekly for D2C clients is: pull total Meta spend, pull total revenue from Meta-attributed sessions in Shopify, and compare the two numbers. That gap — the difference between Meta's reported ROAS and Shopify's attributed revenue — is your blended efficiency signal. If Meta says 3.2x but Shopify attributes only 2.1x worth of revenue to Meta sessions, the gap is being filled by direct, organic, and WhatsApp-driven visits that Meta probably helped warm up.
The metric for this blended view is MER — Marketing Efficiency Ratio. Total revenue divided by total marketing spend, no attribution required. It doesn't tell you which campaign drove what, but it tells you whether your marketing investment as a whole is moving the business. For early-stage Shopify brands, MER is often a more honest signal than ROAS because it doesn't pretend that last-click attribution is telling the full story.
The Priority Order
If you're starting from scratch on this, the order I'd follow is: fix UTM naming first (free, immediate), then add post-purchase survey (small cost, big directional value), then tag your bio and WhatsApp links (free, ten minutes). If you're spending more than £3K a month on Meta, also look at setting up Meta's Conversions API through Shopify's native integration — it improves signal quality back to Meta's algorithm and helps with tracking reliability post-iOS changes.
None of this is complicated. It's just the kind of thing that doesn't get done because it doesn't feel urgent until you're trying to make a scaling decision and your data is a number dump you can't read.
If you're running Meta Ads to Shopify and want a proper UTM audit and tracking setup as part of how I manage accounts, book a free strategy call here and we'll go through it together.
Comments