# How cPixel Counts Each Purchase Once {#doc-title}

By [B2B Gold](/about/#how-we-write) Updated 24 September 2026 [cPixel page](/shopify/cpixel/) [cPixel on the Shopify App Store](https://apps.shopify.com/cpixel?utm_source=b2bgold.app&utm_medium=referral&utm_campaign=docs&utm_content=docs/cpixel/deduplication&utm_term=docs-header)

## How does cPixel stop a purchase counting twice? {#how-does-cpixel-stop-a-purchase-counting-twice}

cPixel sends each Shopify purchase once to every connected account, under one event ID built from your shop and the checkout, and switches Meta’s browser Purchase off while its server sending is active. Other events go from the browser or the server, or from both under one shared ID. Remaining duplicates usually come from another app or tag.

The ID is a hash of your store’s myshopify.com address and the checkout token, not the order ID, so the shopper’s browser and cPixel’s server arrive at the same value independently. Every account you connect on a platform gets it, and cPixel won’t connect one pixel twice. Most other events carry Shopify’s own event ID. Orders taken outside your online checkout, when you switch them on, get an ID from the order, and refunds, sent to GA4 only, get their own.

## Which ID does each platform deduplicate on? {#which-id-does-each-platform-deduplicate-on}

Each platform has its own key: an event ID for Meta, TikTok, OpenAI Ads, Pinterest and Snapchat, and a transaction ID for GA4 and Google Ads. cPixel sends each event to a platform once, or twice under the key that platform matches.

| Platform | Deduplicates on | Window | What cPixel sends |
| --- | --- | --- | --- |
| Meta | Event name and event ID, same pixel; generally keeps the first received | 48 hours | Browsing and checkout events from both sides, one ID; the Purchase from the server alone |
| TikTok | Event and event ID; keeps the first received | 48 hours | All from the server, except the Pageview, which both sides send under one ID |
| GA4 | Transaction ID, on web streams | Not stated | The purchase from the server, with the order ID as transaction ID; the rest from the browser |
| OpenAI Ads | Pixel ID, event name and `id`; the first received wins | Not stated | Checkouts and purchases from the server; the rest from the browser tag |
| Pinterest | Event name and event ID; keeps the first captured | 48 hours | Checkouts and purchases from the server; the rest from the browser tag |
| Snapchat | Its dedup ID; purchases also by order ID | 48 hours; 30 days by order ID | Checkout, payment info and purchase from the server; the rest from the browser tag |
| Google Ads | Transaction ID, within one conversion action | Not stated | The purchase from its browser tag on the Thank you page, with the order ID |

Sources, checked 24 September 2026: [Meta](https://developers.facebook.com/documentation/ads-commerce/conversions-api/deduplicate-pixel-and-server-events), [TikTok](https://ads.tiktok.com/help/article/event-deduplication), [GA4](https://support.google.com/analytics/answer/12313109), [OpenAI](https://developers.openai.com/ads/conversions-api), [Pinterest](https://developers.pinterest.com/docs/track-conversions/track-conversions-in-the-api/), [Snap](https://developers.snap.com/marketing-api/Conversions-API/Deduplication), [Google Ads](https://support.google.com/google-ads/answer/6386790).

In **Live**, a server send’s details name its key, such as “deduplicated by event ID”: the key the platform matches on, not proof that it merged a pair.

## Why does Meta get the purchase from the server only? {#why-does-meta-get-the-purchase-from-the-server-only}

Because Meta is the one platform where cPixel could send the purchase from both sides, and a single copy can’t be counted twice. The server copy is built from Shopify’s order, so it doesn’t depend on the shopper’s browser, and it carries more of the details Meta matches customers on.

Meta’s browser Purchase fires only while cPixel’s server sending to that pixel isn’t active: the account has no access token, Meta has rejected the token, **Send events from our servers** is off, or the Free plan has paused server sends. Either way, Meta gets one Purchase per order.

In Live, Meta appears on the purchase’s **Server** row, not its **Browser** row. In Meta Events Manager, the Purchase arrives through the Conversions API, while the other events show as “Multiple” because both sides send them.

## What can still double-count? {#what-can-still-double-count}

Another tool sending to the same pixel, and a resend after the platform’s window has closed. cPixel can’t deduplicate another app’s events: each app creates its own event IDs, so the platform sees two purchases.

The usual second senders are a platform’s own Shopify app, such as Facebook & Instagram or Google & YouTube, another tracking app or custom pixel, and pixel code pasted into your theme. A duplicate often shows as “doubled page views while order revenue still looks correct”, in the words of cPixel’s own notice, so check page views as well as purchases. The fix is one sender per pixel: [use cPixel with the Facebook and Instagram app](/docs/cpixel/official-channel-apps/).

## How do I find a second sender? {#how-do-i-find-a-second-sender}

Start on cPixel’s **Destinations** page, then confirm in the platform. Once a day, cPixel reads your storefront for tags written into the theme and pixels registered with Shopify, and lists any overlap under **Another app is set up for a platform cPixel also sends to**.

1. In cPixel, open **Destinations** and read **What to do about it** under each finding.
2. In Shopify, go to **Settings** → **Customer events** and note every app pixel and custom pixel that could send to the same platform.
3. In cPixel, open **Live**, click **Start session** and place a real order to see which accounts cPixel sent it to.
4. In the platform, check that the order made one purchase. In Meta Events Manager, a Purchase arriving from the browser as well as the Conversions API has a second sender, because cPixel’s browser Purchase is off while its server sending is active.

The scan reports what is configured, not what fired, and it can’t read a password-protected store, so a missing notice doesn’t rule out a second sender. For theme code, tag managers and Meta’s event setup tool, read [why Meta counts Shopify purchases twice](/blog/duplicate-purchases-meta-shopify/).

## What happens when a purchase is resent? {#what-happens-when-a-purchase-is-resent}

It keeps its original event ID, so a platform that still remembers the first copy keeps one. Retries after a failed send, the replay of orders held while the Free plan was paused, the nightly repair of orders whose webhook never arrived, and **Resend event** in Live all reuse that ID.

The platform’s window is the limit. Meta deduplicates within 48 hours, so cPixel’s replay of held orders skips Meta once an order is older than that, and the nightly repair covers only yesterday’s orders, inside Meta’s and TikTok’s windows.

**Resend event**, on paid plans, re-sends a purchase to every connected account under its original ID. Use it for a purchase that didn’t arrive, not to top up numbers: after 48 hours, a resend to Meta can count the purchase twice.

## Related {#related}

- [Why Meta counts Shopify purchases twice](/blog/duplicate-purchases-meta-shopify/)
- [Use cPixel with the Facebook and Instagram app](/docs/cpixel/official-channel-apps/)
- [Watch each send in Live](/docs/cpixel/live-events/)
- [Purchases not showing](/docs/cpixel/purchases-missing/)

[cPixel Facebook Pixel CAPI GA4](/shopify/cpixel/)

cPixel is a Shopify app that sends your store’s events to Meta, TikTok, Google Analytics 4 and OpenAI’s ChatGPT Ads from shoppers’ browsers and from its own servers, with one shared event ID so each platform can keep a single copy. A live view shows each send, with the platform’s reply to server sends, and alerts flag a rejected token or stalled tracking.

[Install free on the Shopify App Store](https://apps.shopify.com/cpixel?utm_source=b2bgold.app&utm_medium=referral&utm_campaign=docs&utm_content=docs/cpixel/deduplication&utm_term=card) [Plans and pricing](/shopify/cpixel/#pricing)

Need help with cPixel? Email [support@b2bgold.app](mailto:support@b2bgold.app).
