In short
Install Meta's own sales channel in Shopify and let it make four connections: your Meta business account, your verified domain, the dataset that receives purchase events, and the product catalogue itself. The channel then syncs products on a schedule and keeps prices and availability current. The work that actually decides whether it functions is the checking afterwards: that the product identifiers in the catalogue match the identifiers in your purchase events, that domain verification is complete, and that server-side events are deduplicated against browser events.
Use Meta's sales channel rather than a hand-built feed
The channel published by Meta for Shopify is the supported route and it does more than a feed file can. It creates or connects the catalogue, keeps it synchronised with your product data, sets up the dataset that receives events, and can enable server-side event sending without separate development work.
Install it from the Shopify admin, connect the Meta business account that should own the assets, and follow the setup through each connection. If several people have created business accounts over the years, take a moment to establish which one owns the ad account you actually spend from, because assets created under the wrong business account are tedious to move later.
A manual feed still has a place. If you need to exclude products by margin, rewrite titles for advertising, or split one catalogue into several country versions with different rules, a feed management tool gives you that control and the channel does not.
Most stores should start with the channel and add a feed tool later if the catalogue outgrows it. Running both against the same catalogue without a plan produces duplicate items and conflicting updates.
Verify the domain and settle the event setup before spending
Domain verification belongs to the business account, not to the ad account, and it governs which business is allowed to configure events on your website. Complete it early, because several downstream settings cannot be finished until it is done.
Then check the dataset. There should be one purchase event per order, arriving both from the browser and from the server, joined by a shared event identifier so the two copies are recognised as the same event. The events tooling reports on deduplication, and this is worth reading rather than assuming.
Check match quality at the same time. The more identifying fields accompany each event, formatted consistently, the more events can be attributed, and this improves delivery without any change to the budget.
Consent has to be respected in this setup rather than bolted on. Where a visitor has declined, events should not be sent, which means the consent state has to be available to both the browser and the server side of the integration. Build that in at setup time; retrofitting it after a campaign is running is far more disruptive.
Make the catalogue identifiers match the event identifiers
This is the step most often missed, and it quietly breaks product-level retargeting. The identifier your website sends when someone views a product must match the identifier of that product in the catalogue, or the platform cannot tell which item was viewed and cannot show it back to the shopper.
Shopify products carry both a product identifier and variant identifiers, and a catalogue built one way with events sent another way will fail to line up. When the official channel handles both ends, the alignment is usually correct out of the box. When a feed tool builds the catalogue and a separate tag sends the events, verify it directly.
The symptom is specific: dynamic product advertising that shows random items from the catalogue rather than the products a person actually viewed, and low match rates in the diagnostics.
Check it by viewing a product on the site, watching the event fire, and finding that exact identifier in the catalogue. It takes minutes and it prevents weeks of poor retargeting performance that is easy to misread as a creative problem.
Countries, currencies and what to do when products are missing
A store selling into several countries needs the catalogue to describe the price and availability each shopper will actually see. Where you use Shopify Markets with market-specific pricing, make sure the catalogue reflects those markets rather than a single home-currency price, using country-specific feeds or the channel's own market settings.
Products go missing from a catalogue for a small set of reasons. The product is not published to that sales channel. It has no price or no image. It is out of stock and the sync excludes those. It failed a policy review. Or it belongs to a market the catalogue does not cover.
Work through those in order before assuming a technical fault. The commerce diagnostics list the rejected items with a reason attached, and most rejections are product data problems rather than policy ones.
Set the sync to run often enough that price changes and stock movements reach the catalogue before a shopper clicks an advertisement for something you no longer have. Mismatches between the advertised price and the checkout price are one of the fastest ways to waste creative that was working.
The four connections, in order
- 1. Business account
- The one that owns the ad account you spend from
- 2. Domain verification
- Completed in business settings before event setup
- 3. Dataset
- One purchase event, browser plus server, deduplicated
- 4. Catalogue
- Synced from Shopify, identifiers matching the events
- Then verify
- A product view event identifier appears in the catalogue
- Then verify
- Prices and availability match the storefront for each market
An illustrative setup order. Doing domain verification before event configuration saves the most rework, because several later settings depend on it.
Related questions
Do I need a feed tool if I use the official Shopify channel?
Not to get started. A feed tool earns its place when you need to exclude products by margin or stock, rewrite titles for advertising, or maintain different catalogues per country with different rules. Until one of those applies, the channel is simpler and less likely to drift.
How often does the catalogue update from Shopify?
The channel synchronises on a schedule and picks up changes automatically, though not instantly. For most stores that is fine. Stores running frequent flash sales or with volatile stock should check how quickly changes appear and plan promotions with that lag in mind.
Why are my dynamic ads showing the wrong products?
Almost always because the identifiers in your website events do not match the identifiers in the catalogue. Check one product end to end: view it on the site, capture the identifier in the event, and confirm the same value exists on that item in the catalogue.