GapFill Help
History and statuses
History lists, one by one, the orders GA4 didn’t track. For each you can see what GapFill did with it and why.
The four statuses
- Planned
- Recorded during the dry run, before you approve, and not sent yet. After you approve sending, new orders skip this status and are sent straight away. If GA4 tracks an order later on its own, it is taken off the planned list.
- Sent
- Sent to GA4. Each purchase GapFill sends carries the event parameter
gapfill=1, so you can tell it apart from purchases tracked by your tag. - Skipped
- Not sent. The reason is shown next to the order.
- Failed
- GA4 returned an error. The message is shown next to the order.
What the Reason column says
The Reason column shows why an order was skipped, and also what kind of order a sent one was. These are all the messages that can appear.
For skipped and failed orders
- Buyer declined analytics cookies
- The buyer refused the use of their data for analytics, for example in your store’s consent banner. The order is not sent, and no setting changes this.
- No confirmed consent in a region that requires it (country)
- An order from the EEA, the UK or Switzerland for which no consent record was found. It is not sent.
- Refund already tracked in GA4
- With refunds turned on, the same refund was already in GA4, so it wasn’t sent again. Nothing to do.
- No purchase in GA4, so no refund needed
- The refunded order has no purchase in GA4. There is no revenue to take off, so no refund is sent. Nothing to do.
- Counted twice in GA4 (the store’s tag tracked it later)
- After GapFill sent the order, the purchase tracked by your tag also reached GA4. This is found by the check that runs 3 to 10 days after sending. If there are many, sending pauses automatically.
- An error message
- When GA4 rejects an event, the message GA4 returned is shown as it is and the status is Failed. If it keeps happening, send us the message.
For sent and planned orders
- (blank)
- An order placed through your store’s checkout that the GA4 tag missed. Most rows look like this.
- In-app checkout in … (the GA4 tag doesn’t fire there)
- An in-app checkout in an AI assistant or a social app. The name, such as Gemini or Instagram, is shown.
- Other channel (…), selected in Settings
- An order from a channel you selected under Orders from other channels.
- Subscription renewal (sent as the same customer as the first order)
- Sent with the browser ID of the first order, as a purchase by the same person.
- Subscription renewal (sent as a separate user)
- Sent as a separate user. Customers with no first-order record are sent this way even when “As the same customer” is selected.
- Validation only (development store)
- On development stores, events go to the GA4 validation endpoint only and never appear in GA4 reports.
Orders that are not listed
Test orders, cancelled orders and kinds of order you have turned off are not candidates, so they don’t appear in History. Neither do orders GA4 already has.
When orders are sent
- An order is sent when it is 26 hours old and still missing from GA4. GapFill checks every hour, so this is normally 26 to 27 hours after the order.
- Before sending, GapFill checks that GA4 has data from after the hour of the order. If it doesn’t (for example, GA4 has stopped processing), GapFill waits up to 50 hours. This keeps it from sending an order your tag already tracked.
- Orders older than 70 hours are not sent. Orders that pass 70 hours while sending is paused are not sent after you resume.
Protection against double counting
- Matched by transaction ID
- An order is not sent if GA4 already has the same transaction ID. GapFill also keeps a record of what it sent, and never sends an order twice.
- Check after sending
- Three to ten days after sending, GapFill checks that GA4 did not count the purchase twice. If too many were, sending pauses automatically.
- When the transaction ID format changes
- If more than half of the purchases in GA4 match no Shopify order, GapFill assumes the transaction ID format in GA4 has changed and sends nothing for that run. Otherwise it would send orders GA4 already has. It detects the new format on its own and resumes once the IDs match. A high share of missing orders alone never stops sending.
Refund and cancellation rows
When refunds or cancellations are turned on, rows with “(refund)” or “(cancellation)” after the order name appear. You can change this under What to send.
See it on the order page
The order details page can show how GapFill handled that order (tracked in GA4, sent, planned, or skipped with the reason). To show it, do this once in your Shopify admin:
- Open any order
- Near the bottom, under Blocks, click "+ Block"
- Choose "GapFill: GA4 status"
- Click the pin icon on the right of the block to keep it (once pinned, it shows on every order page)
By Shopify’s design, app blocks don’t appear on order pages until you add them. Without the block, you can always check the status on GapFill’s History page.
Email us with your store address (example.myshopify.com). We reply within two business days (Japan time). [email protected]