Shopify with server-side tracking is losing Google Ads attribution when customers pay with Shop Pay or PayPal
Short answer
Capture the click at first landing and store it on the cart, send the sale from the order webhook, and use hashed email as a fallback.
Express checkouts and PayPal often send the customer through a flow where the original click ID is gone by the time the order exists, so a tracker that relies on the browser to carry the click through to the thank-you page cannot match the sale. The fix is to capture the click early and store it against the order, so the server can send it later.
Here is why it happens. A normal checkout keeps the customer on your domain, and the thank-you page can read the cookie that holds the click ID. With a wallet like Shop Pay, or a redirect to PayPal and back, the customer may leave your pages, pay elsewhere and return in a way that does not carry the same cookies or parameters. The order is real. The link back to the ad click is missing.
The usual cause is that the click ID lives only in a script-set cookie or a URL parameter. Safari and some browsers limit script-set cookies, and a payment redirect adds another place for it to be lost. By the time Shopify creates the order, the information the ad platform needs may no longer be on the page.
So capture the click at the first request and keep it somewhere durable. The best place is the server: record the click ID, the time and a visitor identifier when the visitor first lands, then attach it to the cart or checkout, for example as a cart attribute or note attribute, so it travels with the order itself.
Next, send the sale from the order, not from the thank-you page. Shopify's order data and webhooks exist whether or not the customer ever reaches your confirmation page. If your tracker reads the paid order from the order webhook and reads the stored click from the order attributes, Shop Pay and PayPal orders can be matched like any other.
Add a second key as a fallback. For Google Ads, when the click ID is missing, enhanced conversions can match on hashed email or phone from the order. It is not as strong as a click ID for every case, but it recovers many sales that would otherwise be unattributed.
Test it with real payment methods. Place a test order with each wallet and with PayPal, then check whether the click ID is on the order and whether the sale appears in Google Ads. Do not assume the standard card test covers the others.
DataCops reads the paid order from Shopify's own order webhook, so Shop Pay, Apple Pay and closed tabs still count, and it captures the click on your own domain and keeps it on the server for up to 90 days. The delivery log shows each send as sent, held, skipped or failed with the reason. It cannot create a click ID that was never captured, so check that landings are covered.
Do the missing sales share a payment method, a device, or a landing page?
DataCops in short
For this question: DataCops reads the paid order from Shopify's order webhook and keeps the click on the server for up to 90 days, so Shop Pay, Apple Pay and closed tabs still count.
DataCops is a tool that counts every paid order once on every ad platform: the DataCops Shopify app reads the paid order from Shopify's own order webhook and a Web Pixel reports the shopping steps, with a bot verdict on every visit and a log of every send.
How DataCops does it
- The paid order from the server. It comes from Shopify's order webhook, so Shop Pay, Apple Pay and closed tabs still count.
- Counted once. The pixel and the server share an event ID, and the same order ID twice counts once.
- Every ad platform. Meta, Google Ads, TikTok and LinkedIn are live, with more connectable.
- Real people only. A bot verdict on every visit, with a switch per platform, off by default.
- A log you can read. Each send as sent, held, skipped or failed, with the reason.
Best for: Shopify and other online stores that want paid orders counted once on every ad platform, and CRM or phone sales counted too.
Ads Warmup: tell the ads who pays
Ads Warmup, DataCops' flagship feature, sends customers you already have to Meta, Google Ads and TikTok before a new campaign spends: upload a CSV (only email is required, up to 20,000 rows), see a 0 to 10 match score per person, pick the event, and send. Rows are dated when you send, and Google Ads credits only people who clicked a Google ad. Preview is free; sending needs a paid plan. Check your own consent basis for the list first. See Ads Warmup.
Ways to do this job
| Option | Best for |
|---|---|
| DataCops | Paid orders to every ad platform, with a bot verdict and a log |
| Shopify's Facebook and Instagram app | One Meta pixel and server events on Shopify, Meta only |
| A store tracking app (such as Elevar) | A managed data layer for a Shopify store |
| Hosted server GTM (such as Stape) | A team that already owns a GTM container |
When not to use DataCops
- Your only ad platform is Meta and your store is small. Shopify's own Facebook and Instagram app at Maximum data sharing may be enough.
- You need custom tag logic. DataCops sends to ad platforms and is not a Google Tag Manager container.
Sources and further reading
More on this: Shopify CAPI, and the complete guide to offline conversion tracking.
Start by grouping your unattributed orders by payment gateway. If one gateway dominates, you have found the break.