How to Recover From a Shopify Tracking Outage Without Wrecking Your Ad Bidding

|Dan Giura
How to Recover From a Shopify Tracking Outage Without Wrecking Your Ad Bidding

TL;DR

Once the cause is fixed, each platform wants the missing days handled differently: Google Ads documents a tool for keeping the broken dates out of bidding, while GA4, Meta, Snapchat and OpenAI Ads accept late events for a fixed time that started with the first missing purchase. WeltPixel Conversion Tracking sends each order once and doesn't re-send a failed delivery, so anything you re-send needs a sender of your own.

Key Takeaways

  • Read the break off the app's Conversion tracking card before it scrolls away: it shows the last 7 days per channel, day by day.
  • In Google Ads, open Tools → Adjustments → Exclusions and create a data exclusion covering the clicks behind the broken dates. Past dates are allowed, and reporting keeps the conversions [1][2].
  • Never remove a data exclusion once it's applied, and don't backfill for bidding. A reporting backfill is possible no sooner than 5 days after the exclusion [2].
  • Within the same conversion action, a reused order ID is rejected by Google Ads with ORDER_ID_ALREADY_IN_USE [3][12], so a later reporting upload to that action can't double-count an order that did arrive.
  • GA4 accepts Measurement Protocol events backdated up to 72 hours [5]; Meta, Snapchat and OpenAI Ads up to 7 days [4][7][8].
  • Meta rejects the whole request if any event in it is older than 7 days [4]. Send the oldest day in its own batch.
  • Add a GA4 annotation for the same date range so nobody reads the dip as a real sales drop later [6].

First: was it a break at all?

A purchase count that looks low at 9 a.m. can simply be a reporting delay. Every platform reports on its own schedule, and some take a day or more to settle, which is covered in how long conversions take to show up, by platform.

This article also starts after the cause is fixed. If a theme publish or a checkout change took the tracking down and it's still down, work through what to check first after a theme or checkout change, then come back. Repairing the history while the leak is still open just means repairing it twice.

Date the break by channel and day

Every repair below needs a start and an end per channel, and "sometime last week" isn't one.

On WeltPixel Conversion Tracking, the Conversion tracking card on the app's home page shows each enabled channel over the last 7 days, and expanding a channel gives the per-day breakdown: sent, attempted, skipped and accuracy. How the card works as a detector, and the alarms that should have fired sooner, are in how to get alerted when Shopify conversion tracking breaks.

  1. Open the app from Shopify admin → Apps → WeltPixel Conversion Tracking and find the Conversion tracking card.
  2. Expand each channel and note the first day accuracy fell and the first day it recovered. On the Google Ads row, read accuracy rather than the skipped count: orders with no Google Ads click are skipped there by design.
  3. Take the start and end dates from those per-day rows. If you know the hour the cause went in, such as a theme publish, note that too.
  4. In a GA4 report, right-click a data point on a line graph and choose Add annotation, covering the date range, with a title of up to 60 characters and a description of up to 150 [6]. You need Analyst access or higher to create one [6].

The card covers 7 days. A break you find on day 9 has already scrolled partly off it, which is one more reason to do this the week it happens.

Tell Google's bidder first, with a data exclusion

A data exclusion tells Smart Bidding to ignore the conversion data from a date range, and Google lists "Tagging issues, Website outages, Data import issues" among the reasons to create one [1]. It works with Smart Bidding strategies based on conversions or conversion value, in Search, Display, Shopping and Performance Max campaigns, and it isn't supported in Hotel and Travel campaigns [1].

The steps, per Google's help page [1]:

  1. In Google Ads, go to Tools → Adjustments and open the Exclusions tab.
  2. Click the plus button, and give the exclusion a name and a description that says what broke.
  3. Set the end at the fix, and move the start earlier than the break by your typical conversion delay. Exclusions apply to clicks: Google's example excludes October 10 to 18 for an October 15-18 upload issue with a 5-day conversion delay [1][2].
  4. Under Scope, choose the whole account or specific campaigns, and the devices affected.
  5. Save, then create the data exclusion.

Three rules in Google's help matter more than the steps. Past dates are allowed: exclusions applied for past dates "should see performance fluctuations begin to stabilize after a few days" [2]. Reporting is untouched, because "data exclusions only affect the data that Smart Bidding uses" and the excluded conversions still show in reports [1]. And once it's applied, leave it: Google's instruction is "Don't remove a data exclusion after it has been applied" [2].

Google also warns against using exclusions "frequently or for prolonged periods" [1], and publishes no maximum length. After applying one, Google recommends adjusting CPA or ROAS targets while keeping budgets at acceptable levels, and warns that bids and spend may drop for a brief period [1][2].

A data exclusion isn't a seasonality adjustment. Seasonality adjustments tell the bidder to expect a conversion-rate change, like a sale, and they belong to the calendar in the Black Friday tracking freeze.

Why not just backfill the missing conversions?

Because Google says not to, in writing. "It's generally not recommended to backfill data, including in the case where there was a data outage" [2]. The page does allow a backfill "for reporting purposes but only after waiting 5 days after the data exclusion was applied" [2]. So the order is exclusion first, reporting backfill later if you want it, and never a backfill aimed at the bidder.

If you do a reporting backfill, Google Ads protects you from the obvious mistake. An upload that includes an order ID Google already recorded fails with ORDER_ID_ALREADY_IN_USE: "the event was not processed" [3]. So re-uploading a whole day, including the orders that did get through, can't count those orders twice, as long as each row carries the same order ID the app used and goes to the same conversion action the app uploads to. Google allows an order ID only once per conversion action [12]. WeltPixel Conversion Tracking uploads each purchase with the numeric Shopify order ID (the number at the end of the order's admin URL), not the #1001-style order name. A row whose click falls outside the conversion action's click-through window fails with EXPIRED_EVENT, and one whose click is less than 6 hours old fails with TOO_RECENT_EVENT [3].

The legacy manual route is a file under Goals → Conversions → Uploads, which needs a Google Click ID, the conversion name and the conversion time for each row, with order ID, value and currency optional, and takes 24 to 48 hours to process [9]. The click ID is the hard part. Whether you can recover it for a given order depends on where your store stored it, so check that before you plan an upload.

You've probably felt the pull to re-send everything at once. Where the platform dedupes on a key you control, like an order ID within one Google Ads conversion action, that's safe. Elsewhere it's how one outage becomes double-counted purchases, the problem in why server-side retries double-count Shopify purchases.

How long does each platform accept late events?

This is the clock. It starts at the first missing purchase, not at the moment you noticed.

Platform Late-event limit What happens when you miss it
Meta Conversions API event_time up to 7 days before you send it [4] If any event in the request is older than 7 days, the whole request is rejected and no events are processed [4]
GA4 Measurement Protocol Events can be backdated up to 72 hours [5] The protocol doesn't return an error code for a malformed payload [5], so a success response isn't proof it landed
Google Ads click conversions The conversion action's click-through window, and at least 6 hours after the click [3] EXPIRED_EVENT or TOO_RECENT_EVENT [3]
Snapchat Conversions API event_time can't be more than 7 days in the past [7] Stated as a limit; the page doesn't describe the error
OpenAI Ads Conversions API timestamp_ms within the last 7 days, and no more than 10 minutes in the future [8] Stated as a limit
Pinterest No age limit in Pinterest's developer page or API spec; it asks for real time or a lag of at most one hour [10] Not published
TikTok, Reddit Not published in a source we could read Not published

Run the arithmetic on an illustrative break. Purchases stopped reaching GA4, Meta and Google Ads on Tuesday at 14:00, and you fixed it on Thursday at 10:00. The first missing GA4 purchase can be backdated until Friday at 14:00, which leaves 28 hours from the fix. Meta's first missing purchase stays sendable until the following Tuesday at 14:00. Google Ads gets the exclusion now, and a reporting backfill no sooner than 5 days after it, if at all.

What does the app do with a delivery that failed?

The flash-sale article on which tracking failures self-heal ends one case by saying it's worth asking your tracking tool whether it retries platform-side failures. For WeltPixel Conversion Tracking the answer is no, apart from an immediate retry on some Google Ads errors. The app sends each order once, records for each channel whether it was sent, failed or skipped, and doesn't re-send a failed delivery later. A later duplicate of the same order webhook sees the order as already sent and skips it. There's no replay, resend or backfill button.

So re-sending inside the windows in the table needs your own sender, usually a developer script against each platform's API. Two things decide whether that's safe:

  • GA4: send the same transaction_id the app uses, the numeric Shopify order ID. Google says it "helps you avoid getting duplicate events for a purchase" [11], and its ecommerce help describes that as deduplicating "transactions from the same user" [13]. A script of yours may not send the purchase as the same user the app did, and the protocol won't tell you [5]. Only re-send where you can prove which orders were lost.
  • Meta and the others: a script of yours won't carry the event IDs the app sent, so the platform has no key to recognize an order it already has. The app shows you days, not a list of the orders that failed, so re-sending a whole day would also re-send the orders that did get through. Only re-send where you can prove which orders were lost.

On Meta, there's no bidding-side tool to lean on either. Meta's developer documentation doesn't describe an equivalent of Google's data exclusions that we could find (searched September 30, 2026). What you can control is what you change while the numbers settle: avoid significant edits to the affected campaigns for a few days, for the reasons in whether switching to server-side tracking resets Meta's learning phase.

FAQ

Should I backfill conversions into Google Ads after a tracking outage?

Not for bidding. Google's help says backfilling is generally not recommended after an outage and allows it for reporting no sooner than 5 days after the data exclusion was applied [2]. Apply the data exclusion first.

Can I use a data exclusion for dates that already happened?

Yes. Google says exclusions applied for past dates should see performance stabilize after a few days [2]. Don't remove one once it's applied.

How far back can I send a late purchase to Meta?

Seven days. If any event in a Conversions API request is older than that, Meta rejects the entire request and processes none of it [4], so batch the oldest events on their own.

Does WeltPixel Conversion Tracking re-send purchases that failed during an outage?

No. It sends each order once, records per channel whether the delivery succeeded, and doesn't re-send a failed one. The only exception is an immediate retry on some Google Ads errors.

See the broken days before you fix them

WeltPixel Conversion Tracking shows, on its home page, which channels delivered purchases on each of the last 7 days. That's the start and end date a Google Ads data exclusion and a GA4 annotation need, and the list of channels where the late-event clock is already running.

Sources

  1. Google Ads Help, "About data exclusions" support.google.com/google-ads/answer/10370710, accessed September 30, 2026
  2. Google Ads Help, "Use data exclusions for conversion data outages" support.google.com/google-ads/answer/10276486, accessed September 30, 2026
  3. Google Ads API reference, "ConversionUploadErrorEnum.ConversionUploadError" (ORDER_ID_ALREADY_IN_USE, EXPIRED_EVENT, TOO_RECENT_EVENT), developers.google.com/google-ads/api/reference/rpc/v25/ConversionUploadErrorEnum.ConversionUploadError, accessed September 30, 2026
  4. Meta for Developers, Conversions API "Server Event Parameters", developers.facebook.com/docs/marketing-api/conversions-api/parameters/server-event, accessed September 30, 2026
  5. Google for Developers, "Measurement Protocol reference", developers.google.com/analytics/devguides/collection/protocol/ga4/reference, accessed September 30, 2026
  6. Google Analytics Help, "About annotations" support.google.com/analytics/answer/15884203, accessed September 30, 2026
  7. Snap for Developers, Conversions API "Parameters", developers.snap.com/api/marketing-api/Conversions-API/Parameters, accessed September 30, 2026
  8. OpenAI Developers, "Conversions API", developers.openai.com/ads/conversions-api, accessed September 30, 2026
  9. Google Ads Help, "Import conversions from ad clicks into Google Ads using files (legacy)" support.google.com/google-ads/answer/7014069, accessed September 30, 2026
  10. Pinterest Developers, "Track conversions in the API", developers.pinterest.com/docs/track-conversions/track-conversions-in-the-api/, accessed September 30, 2026
  11. Google for Developers, GA4 "Recommended events" reference, developers.google.com/analytics/devguides/collection/ga4/reference/events, accessed September 30, 2026
  12. Google Ads API reference, "ClickConversion" (order_id: one conversion per conversion action), developers.google.com/google-ads/api/reference/rpc/v25/ClickConversion, accessed September 30, 2026
  13. Google Analytics Help, "Minimize duplicate key events with transaction IDs", support.google.com/analytics/answer/12313109, accessed September 30, 2026

Ready to upgrade your tracking?

Server-side tracking for Magento and Shopify — accurate data, better attribution, full privacy compliance.