Skip to content

How do I set up conversion tracking for Shopify?

By cartscaling Reviewed 5 min read

The short answer

Use the official channel integration or the customer events pixel rather than editing theme files, add a server side connection so you count orders the browser misses, wire up consent properly, and then verify with a real test order. One purchase event per order, with the order number as the deduplication key.

Decide what counts as a conversion before you install anything

Tracking problems are usually definition problems wearing a technical disguise, so settle the definitions first and write them down.

The primary conversion is a completed order. Everything else, including add to cart, checkout started, signups and page views, is a secondary event used for diagnosis and audience building, never for bidding. Accounts that optimise towards add to cart because it produces more data end up buying people who add and leave.

Then decide what the order value means. Does it include tax and shipping. Does it net off discounts. Are subscription renewals counted, and if so are they the same conversion as a first order. Do wholesale or point of sale orders belong in the ad platform at all. Each answer changes the number, and having two people assume different answers is how a store ends up with reports nobody trusts.

Decide the deduplication key too. The order number is the natural one, and it should be sent with every purchase event from every source so the same order can never be counted twice.

Finally, decide who owns it. One person should be responsible for the tracking setup, and the accounts should be in the store's own name, not an agency's, so the history stays with the business whoever manages the campaigns.

Once those decisions exist, the installation is a short job. Without them, every future disagreement about numbers restarts from nothing.

Install through the platform's own integration or the customer events pixel

Modern checkouts do not allow arbitrary scripts, so the old approach of pasting tags into theme files and the order status page no longer works and should not be attempted.

There are two supported routes. The first is the official sales channel app for the ad platform, connected inside the store admin. That handles the purchase event, the product identifiers and, on most platforms, the server side connection, with the least chance of a mistake. For most stores this is the right choice.

The second is a custom pixel added through the customer events area of the admin. That is where you put anything the channel apps do not cover, including analytics tags and third party tools. Custom pixels run in a controlled environment and are subject to the customer privacy settings, which is the point of them.

Either way, take care with product identifiers. The ad platform needs to match the purchased items to the products in your feed, so the identifier sent in the event has to match the identifier in the product data. When they disagree, the purchase is counted but not attributed to the product, which quietly breaks product level reporting and bidding.

Avoid running two installations of the same tag. A channel app plus a manually added pixel for the same platform is the most common source of doubled revenue, and it makes every campaign look twice as good as it is until somebody notices.

And check the settings for subscription renewals and for draft orders, so recurring charges and internal orders do not silently enter the ad reporting.

Add a server side connection and consent handling

Browser based tracking misses orders. Blockers, privacy settings, older devices, network failures and people who bounce between apps all remove events that genuinely happened. A server side connection sends the order from the store's back end, which is not subject to any of that.

Set it up alongside the browser event, not instead of it, and pass the same identifier with both so the platform can deduplicate. If the deduplication key is missing or different, you get double counting, which is worse than the gap you were trying to close.

Send the customer data the platform supports for matching, hashed as required, and only the fields you are permitted to send. Better matching improves attribution more than almost any bidding change, and it is a one time setup.

Consent is the other half. Where you operate under rules that require it, the tracking has to respect the visitor's choice, which means using the platform's consent signalling rather than simply blocking tags. Done properly, you keep modelled data for people who declined instead of losing them entirely. Done badly, either you break the rules or you throw away information you were allowed to keep.

Test the consent states deliberately. Accept, decline, and no choice yet, on a fresh browser, in each region you operate in. The common failure is a banner that blocks everything until a click, on a page where most visitors never click, which removes a large share of your data without anyone noticing for months.

Verify with a real order, then keep verifying

A tracking setup is not finished until a real order has been followed from the checkout to every report it should appear in.

Place a genuine low value order, or use the platform's test mode where one exists, and check four things. The purchase event fired once. The value matches what you decided the value should mean. The order identifier is present. The products are identified with the same codes used in your product feed.

Use the debugging tools on each platform to watch the event arrive, and then check the reports the next day, because real time views and final reports can disagree.

Then check the paths that break most often. Express wallet payments that skip parts of the normal flow, payment methods that redirect to an external page and come back, an order completed on a phone after being started on a desktop, and any subscription or deferred payment route. Each of these can miss the event while the standard credit card flow works perfectly.

Remember to exclude your own traffic and any test orders from analytics, and to cancel or refund the test order so it does not sit in your revenue figures.

After that, make verification routine. Compare ad platform conversions with orders in the admin monthly, and check again after any theme change, app installation, checkout change or platform update. Tracking rarely breaks loudly. It usually breaks a little, on one payment method, and the first sign is a slow unexplained decline in reported performance.

Worked example, not a result

One month, four places the same orders are counted

Orders in the store admin
1,000
Purchase events in the ad platform, browser only
780
Purchase events after adding a server connection
940
Orders from express wallet payments
150
Wallet orders missing before the fix
60
Test and draft orders excluded
12
Refunded orders in the period
35
Gap remaining after fixes
6 percent

Worked example, not a result

Related questions

Not for the checkout, and you should not for anything else either. Use the official channel app or a custom pixel through the customer events area, so the tags run in a supported way and respect the store's privacy settings.

Only if the events are not deduplicated. Send the same order identifier with both the browser event and the server event so the platform can recognise them as one purchase. Without that key, every order is counted twice.

Pick one definition and use it everywhere. Excluding both gets you closest to what the order is worth to the business, which makes return targets more meaningful. What matters most is that every platform and report uses the same rule.

Keep reading

Want this answered for your store?

Send it. The plan looks at your numbers, not the general case.

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

Get your free growth plan