Train your ad platforms to find more customers · Identity Resolution for Shopify Brands

Miami, FL
Joined January 2023
Include

Only show posts containing:

Exclude

Hide posts containing:

Time range
-
Minimum likes
the recurring complaint that pushed us toward server-side is this exact one. everything looks fine until spend ramps, then the pixel's quietly missing months of purchases.
Too many brands upgrade their tracking way too early. The free Shopify connector was rough back in 2021. They fixed most of that since. For a brand starting out, the free connector does the job. Paying to upgrade your tracking before the rest of the business works is a bad trade. Early on you have almost no room to spare. And tracking is rarely the thing holding you back yet. Ad spend is what you need to watch. Once real budget is going into Meta every single day, incomplete data starts costing you. That's when the free connector becomes the most expensive thing in your stack.
40
most teams blame the dashboard when the real problem is they never collected clean data in the first place.
Dashboards are the easiest part of any tracking product. You collect the data and put it in a database. Then you show the number on a screen. Every tool in the category has one and they all look about the same. The hard part is identifying a device and matching it back to a person. It takes real thought to get right. A small mistake produces numbers that look fine and mean nothing. When you're evaluating one of these tools, the screen is the last thing worth looking at.
53
the version of this we hear most is 'why does my CAC go up when nothing changed in creative.' turns out meta's been counting the same buyer twice because cookies don't travel between browsers, and fixing that alone usually drops cac 15-20%.
Skip this and watch Meta drain 40% of your ROAS every month: Most ad accounts treat every buyer like a new one. That means you’re paying acquisition rates to reacquire customers who already love your stuff. I see tons of brands spending $50 on “wins” that email could have gotten for $10. It happens because Meta forgets who people are once they leave the in-app browser. Someone taps your ad, drops their email, and comes back a month later…and Meta counts them as brand new. This breaks your Klaviyo flows and you end up paying Meta just to buy back your own customers. Clever media buying can’t fix that. But here are two things that will: 1) Make sure returning buyers are identified and tied to their email. 2) Add three columns in Ads Manager: • Purchases • New-customer purchases • Subscription purchases Once you see those clearly, you stop judging ads on blended CPA and start judging on new-customer CPA and New Customer ROAS. That’s the difference between scaling profitably and lighting money on fire. So let Meta handle acquisition. And let email and owned channels handle retention. Clean your feed, separate your metrics, and stop letting Meta charge you twice for the same customer.
48
testing never catches this one. it resolves clean on our own devices, then we watch a real session start in the instagram browser and finish in safari, and find out which parts of the theme were quietly counting on the same cookie being there.
This “multi-browser tax” is wasting 30-50% of your ad spend: Imagine someone clicks your Instagram ad, which opens the in-app browser, where they enter their email for 10% off. A week later, they come back to Safari, add to cart, and check out. But Safari doesn’t talk to Instagram’s browser, so Klaviyo doesn’t know it’s the same person. Your abandoned cart email doesn’t send at all. Worst of all, Meta and Google have no way of learning who converted. Remember: Shopify and ad platforms can track button clicks and page views, but every time a customer switches browsers, clears cookies, or waits 30+ days, the system loses track of who they are. And when the system loses their identity, the revenue goes too. Fixing this usually boosts abandoned cart revenue by 40%, and overall CAC by 10-15%. It’s a fairly simple solution once you grasp the data problem…and this is what we do best at Upstack. Reach out if you’d like to see a demo.
49
the input side is the part you can check without trusting anyone. when we turn identity on, match quality moves inside meta well before any performance number does.
A lot of vendors will promise better performance even though they have no control over whether you get it. Every prediction about who sees your ad gets made inside Facebook. Nobody outside that building gets a vote. A vendor can only change the quality of what goes into that model: - Cleaner identity on every event - More events landing soon - Returning customers recognized Better input with better predictions on their end. The loop only runs in that direction. So when a vendor quotes you a number, ask what they're changing about the input data.
25
the reporting half is the smaller half. when every purchase feeds optimization the same way, delivery leans toward buyers who were already coming back, and the accounts we take over usually have months of spend pointed that way before anyone noticed.
Your Meta CAC is lying to you. Here’s how to see what you’re actually paying for new customers: When Meta shows “cost per purchase,” it’s counting every order the same. First-time buyers, returning customers, and subscriptions all get lumped together. That means your ads might look profitable on paper, even if most of those “purchases” are people who were already on your list. If your dashboard says your CAC is $92, but your new customer CAC is $142, you’re not scaling at all…you’re just recycling. That’s why we add a “New Customer CPA” column (see photo) directly into Ads Manager for all our clients at Upstack. It separates new customer acquisition from repeat orders so you can finally see what your ad spend is actually doing. Reach out if you want us to set this up.
17
'did something break' is how a soft month usually reaches us, and most of the time nothing did. the account looks the same as it did in a strong one, the demand just went outside for a few weeks.
A down month is the best thing that can happen to a company that needs to ship. July was slow. The World Cup pulled attention and the weather was beautiful. Both of those get people off their phones and out of checkout. The company itself was busier than usual. We spent the entire month shipping. Slow months are good for building what you'll be selling in the fast ones.
22
depends on what the work is. plenty of it can wait three weeks. instrumentation is the piece we've never been able to let warm up, since it's collecting the whole time and a wrong call there costs you months of history nobody can go back and fix.
Most of what I would have corrected in week one sorts itself out by week three. My instinct is to hand someone notes before they've had a chance to get moving. 20+ years of doing the work myself will do that. Now I let it warm up. People need room to take their own route through a problem. Whatever doesn't sort itself out is worth my time. The rest was me being uncomfortable watching somebody work differently than I would.
25
deciding whether a session belongs to someone we've already seen is the call that never gets easier. the signals available to make it keep shifting, so thresholds we settled long ago get reopened, and getting it wrong quietly poisons everything downstream.
Twenty-five years of writing software and I still can't hand off product. We have an engineering team. Plenty of the work runs without me now. Support moved off my plate this year and product is slowly getting spread around. The core of it stays with me. Identifying devices and matching people across sessions carries enough judgment calls that I want to be in the room for them. Part of that's honest self-interest. I got into software because I like building software and I've been doing it my whole life. Giving away the part you actually enjoy feels like a strange thing to volunteer for.
14
after att everyone we talked to called lookalikes dead. they weren't. they kept running off a shrinking slice of real buyers, which is worse, because a dead tool gets replaced and a half-fed one just gets blamed on creative.
Most Shopify brands scaling on Meta are building lookalike audiences on 40 to 60% of their actual buyer data. CAC climbs. The data foundation is usually why. When you scale spend, you're asking Meta's algorithm to find more people like your buyers. Partial data means it builds that profile on the wrong sample. Meta spends more sampling audiences that won't convert. You scale spend. Meta finds similar people. But similar to an incomplete sample. CAC climbs. The math: Brand A. Top of funnel EMQ 5.0 to 6.0. EMQ is Meta's score for how well it can tie an event back to a real user. Higher score, better optimization. Meta sees 40 to 60% of landing page clicks. Lookalikes built on partial data. Scales to $50K a month and plateaus. nCAC goes up, ROAS goes down. Brand B. Top of funnel EMQ 7.4. Meta sees 90%+ of landing page clicks. Lookalikes built on complete data. Scales to $100K a month. nCAC stays flat. Real example: One brand we work with scaled Meta spend 85%. CAC increased 4%. They fixed their data foundation first with Upstack Signal. Better signal means Facebook makes better predictions about who to show your ads to. Scaling gets more efficient. Most brands obsess over creative and ignore the signal. You need both.
21
nobody asks what the extra sends do to deliverability. it's the part of onboarding brands least expect to spend time on, because identifying more carts means a lot more email going out than the list was warmed for.
Your abandoned cart flow says it's generating $30K/month. But how much is it missing? The setup: - 10,000 identifiable cart abandons per month - Klaviyo remembers only 45% of them (industry average) - 4,500 emails sent - 2% conversion rate - 90 orders - $50 AOV Revenue captured: $4,500 What you can't see: - 5,500 abandons Klaviyo couldn't remember - These are opted-in customers who came back on a different device or after cookies cleared - They added to cart or initiate checkout. They wanted to buy. But no email fired. At the same 2% conversion rate, that's 110 orders and $5,500/month in missed revenue. It happens because Klaviyo remembers opted-in visitors and returning customers using cookies. When a customer: - Switches from phone to laptop - Clears browser data - Returns after 7+ days (Safari ITP) - Uses incognito mode ...the cookie is gone. Klaviyo sees a "new" visitor. Your flow never triggers. The fix: Identity resolution connects sessions across devices and browsers using first-party data instead of just cookies. Upstack ID typically identifies 30-50% more profiles than Klaviyo alone. And that 35% gap? It translated to $375K/month in flow revenue they were missing. Everything was the same. The identification was much better.
38
flags like this cluster. when meta tightens a category, a batch of brands get hit inside the same stretch, which looks like bad luck from inside one account and like a policy change from where we sit.
A health brand came to us doing 50 to 70 million a year, spending close to six figures a day on Meta. Then they got flagged under the health and wellness policy. Half their business started to evaporate overnight. Facebook was half their revenue and national TV was the other half. The Facebook half was drying up fast. And this is a pretty big brand. One you'd recognize from TV. At that scale, losing Meta is an existential problem. We got them compliant and back to advertising the same day. From cut off to running again inside 24 hours. Every brand at that spend is one policy flag away from the same call.
23
none of this matters until something breaks. a brand with its entire revenue on one channel still gets the same help form as everyone else, and that's usually when we get the call.
E-com founders assume they're a much bigger piece of Meta's revenue than they are. The actual number is around 20%. The Shopify industry is basically a wrapper around Facebook. When your entire ecosystem runs on one platform, it starts to feel like the platform runs on you. Political advertisers and SaaS companies take a big share. Financial services and local businesses fill in the rest. For a Shopify brand, Facebook drives 85% to 90% of sales. They can lose the entire e-com category and survive. A lot Shopify brands can't lose Meta and say the same.
20
internal builds don't fail at launch. the ones we end up inheriting worked fine for a while, then a platform changed a spec and nobody still on the team knew where to look.
Small businesses will waste their time and resources here on non-critical apps. Big businesses will focus their time and resources on gaining market share. Build vs. buy is nothing new. The inputs just change as to what is better to do internally vs. pay SaaS to solve. The ease of SaaS to develop bespoke solutions packed with 100x more features rose equally. If you're able to ship code 10x more easily, good SaaS can ship 100x.
30
health and wellness brands land on our calls asking whether better tracking gets them out of the penalty box. it doesn't. cleaner data just keeps you from bleeding more signal on top of a flag you can't undo.
Meta changed the rules for health and wellness brands about 18 months ago. Almost nobody knows why. It traces back to Hims and Hers going public. The books open when a company IPOs. Every dollar of ad spend gets disclosed. Suddenly it was public record how much these health brands were pouring into Facebook. Now think about what Facebook already collects. Every purchase you make online gets sent back and tied to your email. Hair loss medication one month. Anxiety supplements the next. Stack enough of those points on one person and that shopping history starts looking more like a medical profile. That's protected information. Facebook isn't built to handle it under FDA and HIPAA rules. Plus they are a huge target for a class action. So they made a call. They started flagging and penalizing anyone selling health and wellness products. Which cut off the purchase data that trains the algorithm. Those brands got caught in the middle of a liability decision that had nothing to do with them.
33
we buy ads for ourselves too, so we've done the version where you sit in ads manager hunting for the answer inside the same report that's causing the problem. what broke the loop was reconciling against what actually landed in the bank.
Have you ever had Ads Manager say you’re crushing it…while your bank account says you’re getting smoked? Most brand owners have felt this at some point: ROAS looks strong… CPAs look stable… Your “best performing” ad set looks like it’s printing… But something is very off. Because your P&L isn’t reflecting what you see on your dashboard. Growth stops and margins are slipping. And weirdly, nobody can explain why. The data behind your “winning” creative is false. It was never about budget or even your attribution windows. If the system can’t tell who actually converted, it also can’t tell what worked. So the creative that looks like it’s performing might not be doing anything at all. The sad part is that teams actually try to scale like this. They hire and plan inventory around hallucinated numbers. Fix your data, or nothing else you try will matter.
28
nothing breaks on the day this starts. the gap widens slowly, so by the time a brand calls us the conversation is about creative from months later and nobody connects it back.
If your tracking tool can't tell that yesterday's and today's visitors are the same person, what is it actually tracking? A customer clicks an ad, browses, leaves, then comes back three days later on a different phone. A lot of tools see a brand new stranger at that point. The cookie expired and the browser changed. So the trail becomes cold. Not for us. We already know them. We fingerprint the person and their devices. Then match against a graph of every visitor we've seen in four years. Hundreds of millions of people. So when we send that event to Facebook it looks like the same person who was logged into Instagram and clicked your ad 3 days ago. That's where we split from tools built on Google Tag Manager. Tag Manager is heavy and slow. It moves data and stops there. We resolve who the person actually is first. Better data in means Facebook makes better predictions about who sees your ad next. It's a feedback loop, and we feed it the cleanest info we can.
28
the question we get right after a number like that is whether the extra profiles are real people or fuzzy guesses. it's the right thing to be suspicious about, and how a vendor answers it tells you more than the case study does.
Klaviyo tracked 28,000 known visitors a month for an 8‑figure haircare brand. The real number was more than double… and that difference was costing them six figures a year in abandoned carts. Fixing it recovered an extra $315,000 a year. On paper, their retention looked solid: - Paid campaigns were profitable - Flows were built and running - Emails were getting clicks Then the abandonment flows that “should” have been printing money were underperforming. The problem turned out to be the identity layer behind the email. A shopper clicked an Instagram ad, browsed, opted in for a coupon and left. Came back days later via organic search. They added to cart but abandoned. To Klaviyo, that looked like two different people Cookies were expiring. Sessions weren’t stitched. And 40–50% of cart abandoners were never recognized, so the abandonment emails were never sent. We rebuilt the foundation: - Added a first‑party identity layer to connect visits across devices and time - Linked anonymous sessions back to real customer profiles - Moved key events to server‑side tracking Within 30 days: - Identified visitors jumped from 28,000 to 64,000 - Abandonment flow revenue grew 54% - +$24K per month in recovered revenue, with the same* flows and creative Sometimes the problem is infrastructure. If you can’t see the customer, you can’t market to them. If this sounds familiar and you want a second set of eyes on your setup, comment or DM me and I’ll take a look.
1
44
we learned this the slow way. early on our routing was clean and the match quality still came back weak, because we were passing along whatever the browser handed us instead of resolving who the person was first.
Server-side tracking gets talked about like it's a strategy. It's really a delivery mechanism. Picture every action a customer takes as a postcard you mail to Facebook: Someone viewed a page. Someone bought. Each one is a card going out. Server-side is just the route those cards take. More reliable than the browser because ad blockers and restrictions used to intercept them mid-trip. The route matters a lot less than what's written on the card. That message is what Facebook actually reads. Many tools in this space mails cards through the same API. What separates them is what they write before they seal the envelope.
33
the copy gets rewritten first. new subject lines, new send delay, a week spent testing emails that were never going out to those people in the first place.
The scary part about your abandoned cart flow? Up to half your ‘cart abandoners’ never get an email at all. It’s not "how many emails you sent" but “what's your reach rate” (Cart abandonment emails sent ÷ Total cart abandons) × 100 Drop your number below. I'll tell you if it's good, bad, or leaving money on the table. For context: • 80%+ = Excellent. You're capturing most opportunities. • 60-80% = Average. There's room to improve. • Below 60% = You're missing significant revenue. Most brands I audit are in the 50-65% range. That means 35-50% of people who add to cart and leave... never hear from you. They wanted to buy. They gave you their info. And you ghosted them. Why the gap exists: Klaviyo can only email people it recognizes. If a customer: - Returns on a different device - Cleared cookies - Comes back after 7+ days Klaviyo sees a "new" visitor. No email fires. That’s why we built the Upstack performance marketing data stack. It identifies shoppers across sessions and devices, so your abandonment flows actually fire.
23