Skip to content

Shopify Meta ads agency

Meta ads on Shopify: one pixel not three, server-side events through the channel, product sets built from collections, tracking that survives checkout.

Shopify hands you most of the Meta setup if you let it. The Facebook & Instagram sales channel installs the pixel, keeps the catalogue synced to your live inventory, and can send events from Shopify's servers as well as from the browser. The problems we find are almost never that the setup is missing. They are that it has been done three times.

A store that has changed agencies twice usually has a pixel from the channel, a second one pasted into the theme, and a third arriving through a tag manager. Meta receives the same purchase from all three, deduplication fails because the event IDs do not match, and every reported result is inflated. Nobody notices because the numbers look good.

The other Shopify specific piece is checkout. Since checkout moved to extensions, scripts pasted into the old checkout template no longer run, so tracking has to be registered as a customer event instead. Stores that never made that change lost their purchase events and often blamed the ads.

We work inside your store and your own Business Manager, fix what is duplicated, and build product sets from the collections you already merchandise.

Native on Shopify

  • The Facebook & Instagram sales channel for pixel installation and catalogue sync
  • The data sharing setting in the channel, including sending events from Shopify's servers
  • Customer events and the web pixel sandbox, which is where checkout tracking now belongs
  • Collections used directly as the basis for catalogue product sets
  • Variant-level catalogue items grouped under a shared item group
  • Live inventory and price sync, so a sold-out variant stops being advertised

Settings that matter

Set the data sharing level and prove deduplication works

The channel can send events from the browser, from Shopify's servers, or both. Both is normally right, and only if the same order carries one event ID in each path. We set the sharing level, then test a real order and confirm Meta shows it once rather than twice. Event match quality gets checked at the same time, since server events can carry customer details the browser never had.

Move checkout tracking into customer events

Shopify's checkout no longer runs code pasted into the old template, so any tracking that lived there stopped firing. Purchase events now belong in the customer events area as a pixel with a defined scope. We check what is registered, what it sends, and whether the purchase event carries the order value, currency and contents. This is the single most common reason a Shopify store's Meta reporting looks broken after a platform update.

Build product sets from collections you already maintain

Meta product sets can be built by filter, but collections already encode how you merchandise. Automated collections keep themselves populated as stock and tags change, which means a product set built from one stays current without anyone maintaining it. We map the collections worth advertising, add margin and stock filters on top where the catalogue supports them, and leave the rest of the catalogue out of dynamic campaigns rather than in.

Reduce the account to one pixel

We list every pixel firing on the storefront, work out which one has the useful history, and remove the rest at the source, meaning the theme, the tag manager and any app injecting its own. Where an old pixel holds audiences that still matter, it is kept in the account but taken off the site. The goal is one pixel receiving one copy of every event, which makes every number after it trustworthy.

What we avoid

  • Pasting pixel code into theme.liquid when the sales channel already installs and maintains it
  • Uploading a manual catalogue file, which drifts out of step with Shopify stock within days
  • Leaving tracking in the old checkout template, where it no longer runs at all

Questions

For the catalogue, yes. The channel is what keeps product data, price and availability in sync with your store, and dynamic ads depend on that being accurate. You can run the pixel separately, but then you are maintaining a catalogue by hand and the two will disagree. Having the channel does not stop you controlling the pixel setup.

Almost certainly because tracking that lived in the old checkout template stopped executing when the store moved to checkout extensibility. The browser purchase event disappears, server events may still arrive, and the difference shows up as a sudden fall in reported sales with no change in real orders. Re-registering the tracking as a customer event restores it.

Two common causes. The variant is unavailable in the market or sales channel the catalogue is drawing from, so Shopify is right and the catalogue is reading a different context. Or the catalogue is a manual upload that has not refreshed. Checking which catalogue source the ad account is using answers it quickly.

No. Product sets should reflect what you want to spend differently on, which is usually margin, price band and stock depth rather than the navigation. A store with forty collections rarely needs forty sets. We normally start with a small number, including one that excludes the products you cannot afford to promote, and add more only when a campaign needs the separation.

Send your Shopify store.

The plan is written for your store on the platform it runs on.

Store, name, email and phone. A person replies from a real inbox. Privacy

Get your free growth plan