Nexa Solutions logo Nexa Solutions logo

Case study · Conversion tracking

Server-side Meta tracking, set up in 4 days.

A Quebec yarn retailer, with shops and a Shopify online store, wanted Meta to get reliable data it could control. Here’s what we built with Stape, what got in the way, and what we measured on the first night.

7events sent from the browser and the server, with a shared ID so Meta counts each one once
100%of purchases sent to Meta with the customer’s email (the strongest match)
0errors on the first night: every event accepted by Meta

Timeframe: October 4 to 7, 2026, live since October 7. Client: Quebec yarn retailer (shops and Shopify), French and English.

The client

A Quebec yarn and knitting retailer, with shops and a Shopify online store in French and English. We’ve run its Meta ads (Facebook and Instagram) since spring 2025. The ad budget is real, so the quality of the data Meta gets matters too: Meta uses that data to decide who sees the ads.

The challenge

Before the project, data went to Meta through Shopify’s built-in Facebook and Instagram channel. It worked, but:

  • No control or visibility over what was sent to Meta, or how duplicates were handled.
  • Ad blockers and browsers increasingly limit Meta’s cookies and scripts, so tracking loses sales.
  • Meta’s automatic events added noise (button clicks logged as events).
  • Quebec Law 25: Meta is ad profiling, so nothing should be sent without the customer’s consent.
  • A Google Analytics setup run by another consultant that we had to leave untouched.

What we did

  1. Audit of the existing tracking: every pixel, every Google Tag Manager container, the cookie banner, and how Meta received purchases.
  2. A tracking server in Canada with Stape (Canada East region), on a subdomain of the store. Data goes through the client’s own domain before reaching Meta, and stays on a server in Canada, which holds up well under Law 25.
  3. Two Google Tag Manager containers just for Meta, one in the browser and one on the server, kept separate from the existing Google Analytics setup so nothing broke.
  4. Seven events from both sides: page views, product views, searches, add to cart, checkout started, payment info and purchases. Each event leaves the browser and the server with the same ID, so Meta counts it once.
  5. Consent first: the checkout pixel only loads if the shopper accepts marketing cookies.
  6. Meta’s automatic events turned off, so only events we control are sent.
  7. Real-world tests: one French and one English order, checked in Meta and in the server logs, then cancelled.
  8. Go-live in under an hour: we turned off the Shopify channel’s data sharing as the new tracking went live, so Meta never got each purchase twice.

What got in the way (and how we fixed it)

Add-to-carts counted twice

The theme sent the same add-to-cart twice on every click. We added a filter that only lets the first of two identical sends a few seconds apart through. Remaining pairs went from about 100% of clicks to about 8%, mostly genuine quick adds.

Shopify checkout is invisible in preview mode

Shopify runs checkout tracking in an isolated frame, with no cookies. Google Tag Manager’s preview tools can’t attach to it. We rebuilt that environment to confirm the events still went out, then checked checkout in production through the server logs and Meta.

A setting that pointed to the wrong site

The tracking server address pointed to the main site instead of the tracking subdomain. Fixed on test day.

Results

First night after go-live (October 7 to 8, 2026)
Result
Server events rejected by Meta0
Purchases sent by the server68 unique orders
Purchases with the customer’s email100%
Online orders coveredAbout 7 in 10 (the rest: mostly free products and shoppers who decline marketing cookies)
Add-to-carts counted twiceFrom about 100% to about 8%

What we learned

Fewer sales sent, but the right ones

Tracking that respects consent doesn’t send everything to Meta. That’s on purpose. What matters is that every purchase sent is complete, not duplicated, and tied to the right customer.

Keeping Meta separate protects everything else

Putting Meta in its own containers let us install everything without touching another consultant’s Google Analytics setup. And rolling back takes three clicks.

Judge Meta on Meta and on real sales

Google Analytics always undercounts sales from Meta. We follow purchases in Ads Manager and the ratio of total online sales to ad spend.

  • “They quadrupled my revenue in the first 3 months of working with them.”

    Nicolas L. Google review, translated from French

  • “They know their stuff when it comes to paid media.”

    Maxime A. Google review

  • “Amazing service and understanding of what I wanted. Executed to perfection.”

    Chantz G. Google review

Ads that learn from good data.

If you don’t know exactly what your store sends to Meta, we’ll check your tracking and tell you what to fix first.