Skip to content
ceaksan
SUBSCRIBERS ONLY analytics

Connecting a Shopify Order to an Ad Click: Choosing a Join Key for Offline Conversions

The ad platform wants a click ID for offline conversion upload, but the Shopify order does not carry one. The cart attribute path only works going forward, so it cannot serve a backfill request. Using GA4 as a join table, the cart token naming trap, and the consent ceiling both paths share.

Aug 6, 2026
TL;DR

Offline conversion upload requires the click ID and the order to land on the same row. A Shopify order does not carry the click ID by default, so a join key sits in between. Capturing it going forward and recovering past orders are separate problems that need separate paths. The real trap is naming: four similar identifiers surround a single order, and picking the wrong one silently drops the match.

Subscribers Only

The full article plus 21 more subscriber-only posts come with a subscription.

Key Takeaways
  • 01 The cart attribute path works forward, the GA4 join path works backward; a request to upload orders from a past date onward forces the second one.
  • 02 The landing field on a Shopify order only holds the entry URL of the converting session and may arrive without a query string in practice, which makes it an unreliable click ID source.
  • 03 The cart token acts as the join key; it can be parsed from the checkout URL, read through the Web Pixel, or sent to GA4 as a custom dimension at add-to-cart time.
  • 04 cart_token, checkout_token and token on the order payload are all different; the hash in the order confirmation URL is actually the order token, and a join built without format verification silently returns nothing.
  • 05 What sets the loss ceiling for every path is the consent rate, not the join key; measure the ceiling first, then pick the method.
Frequently Asked Questions (FAQ)
+ Why is there no msclkid or gclid on a Shopify order?

The Shopify order record was not designed to carry ad click identifiers. The landing field on the order only holds the entry URL of the converting session, and even when campaign parameters are present in that URL, the query string can be lost during data transfer. The supported way to bring a click ID onto the order is to read the parameter at click time and write it as a cart attribute or metafield.

+ Does the cart attribute path recover past orders?

It does not. A script that writes cart attributes only affects carts created after it goes live. When a backfill request arrives for orders from a given date onward, this path alone is insufficient; you need another source collected during that period, which in practice means GA4 data.

+ Which field should be used to match a Shopify order with GA4?

The cart token created at the checkout step is the most practical key. It appears inside the checkout URL in the GA4 page path report and is stored as the cart identifier on the order side. Because the landing URL in the same session carries the click ID, all three can be brought onto a single row. The alternative key is the order hash in the order confirmation URL.

+ What is the difference between the cart token and the checkout token?

They are identifiers belonging to different lifecycles and they appear in different formats. The token in the checkout URL and the cartToken delivered through the Admin API or Flow may not share the same representation in every store. Before building the join, place the cn value from the checkout URL next to the cart_token, checkout_token and token fields on a single test order and verify which one matches which.

+ What is this matching good for if no offline conversion upload happens?

The same matching produces measurement even without an upload. How many of the sessions carrying a click ID actually converted into an order, how large the gap is between the conversion count the platform reports and the store record, and how that gap is distributed across channels all come out of this table. It can be a sufficient input for budget decisions on its own.

+ Is there a backward time limit for uploading?

Yes. On both Microsoft Advertising and Google Ads, conversions uploaded more than 90 days after the last click are not processed. On Google, the limit drops to 63 days when enhanced conversions for leads is used. For that reason, backfill projects should check the window first and plan data preparation around that limit.

Feedback

Share your thoughts on the selected paragraphs. Email is required so I can reply.

Type