• 1PD Ops Club
  • Posts
  • I've spoken to Adobe, Oracle, so many good companies. Nobody has solved it

I've spoken to Adobe, Oracle, so many good companies. Nobody has solved it

Attribution has been the biggest problem for the past three-four years

Hellooo,

About seventeen minutes in, he said it flatly:

"Attribution has been the biggest problem for the past three-four years. I've spoken to Adobe, Oracle, so many good companies. Nobody has solved it."

I was searching for something to write about this week. Then I found a recording of a call between our co-founder Hari Krishnamurthy and a potential client, a DTC growth consultant who runs performance across a set of fashion and lifestyle brands.

I listened to the whole thing. Then I wrote this.

Just in case, if you’d like to have a call with Hari

This isn't someone new to the game

Twelve-plus years, ran a vertical doing roughly $4M a month before going independent. And his core complaint wasn't creative, wasn't budget, wasn't audience.

It was that he cannot justify the ad spend because he cannot track the journey.

Now here's the funnel he described and why it breaks

His brands run the full spread: $18 AOV up to $230 AOV. Fashion. Lifestyle. Nobody buys on the first click.

The actual journey: sees the ad on Instagram → googles the brand → lands on the site → leaves → comes back three days later → checks a variant → leaves again → buys on day eleven.

Now watch what the tracking stack does with that

Break 1: Meta's memory stops at the click

Inside Meta's ecosystem, everything is timestamped. Liked a page at 8:10am. Scrolled a shoe post at 8:14. Meta knows the browser, the device, the interest. The second the person clicks through to your domain, that memory ends. To your website, they're anonymous.

Break 2: Shopify's CAPI doesn't unify sessions

Come back on day three and you're a new visitor. Shopify only recognises a returning customer after a second purchase, matched on email or phone. Everything before that, the browsing, the variant checks, the cart adds, never gets stitched to one person.

As Hari put it on the call: 

“Shopify is an order management system. CAPI got added under pressure from performance marketers eight months after iOS 14. It was never built for advancement.”

Break 3: your checkout layer rewrites the ID

This is the part most brands have never looked at.

Meta's own definition of external_id is a string representing a user in your system, a loyalty membership ID, a user ID, a cookie ID. Meta expects it to stay stable, then matches it against a real profile on Facebook or Instagram, usually alongside a hashed email.

But any checkout layer that owns its own checkout and fires its own pixel events issues its own identifier. Bolt is the clearest example, it sits on top of BigCommerce, Adobe Commerce, Salesforce Commerce Cloud, WooCommerce and custom builds, and it recognises shoppers through its own network, not yours. Headless builds and custom checkouts create the same split.

So: add-to-cart fires with one ID. Ten days later, another add-to-cart, another ID. Purchase, a third.

Then you optimize for Purchase and expect Meta to connect the memory.

It can't. You handed it to three strangers.

Worth checking on your own stack: open Events Manager, look at the external_id on an AddToCart and on a Purchase from the same customer. If they don't match, this is your problem.

What solution did Hari propose?

A foundation.

A server-side unique ID per visitor, from day one. Browser-side cookies, including click IDs, tend to get wiped in 24 hours. A server-side ID doesn't. Every session after that gets stitched into one profile, holding the first campaign that brought them in, the UTMs, the click IDs, the full behavioural trail. Anonymous until they identify themselves. Privacy intact.

That same ID goes to Meta as your external_id, one person, one ID, across sessions and across whatever's sitting on your checkout. Now Meta can connect add-to-cart → purchase → repeat purchase as one story.

Then signal engineering on top. Meta's own guidance says optimize for what your business values most, and it explicitly supports optimising with non-purchase event values. 

One brand on the call had done exactly this, a custom event firing only for first-time purchasers, so the algorithm was instructed to hunt new customers rather than celebrate repeat ones. Of 685 tracked purchases, 596 came back tagged as first-time buyers.

And audience engineering, because you now own the anonymous side. Visitors who viewed a product three or four times and never added to cart become a cohort. Pushed to Meta via API, no manual list uploads. Exclusions get sharper too, every past purchaser, going back years, not just the window Meta remembers.

One honest note from the call

Hari didn't promise ROAS. He said it twice, unprompted: we don't give you a scope of saying ROAS is going to skyrocket.

What he committed to was the data foundation being correct. Meta's algorithm isn't heuristic and it isn't binary, it's probabilistic. You're not flipping it from wrong to right. You're moving it from roughly 50–60% aligned with your goal to 85–90%.

That's the whole pitch. Better data in, better algorithm out.

If your ROAS behaves strangely every time you scale, check your external_id before you check your creative.

Read the signal engineering breakdown → What is Signal Engineering

Book a call with Hari and bring your ROAS chart → Pick a slot

Reply

or to participate.