X·Twitter/X Pixel·warning

Twitter/X conversion_id Deduplication

Your X Pixel events either ship without a `conversion_id`, or they ship with `conversion_id` values that repeat across distinct orders. Either pattern breaks the dedupe contract. Missing IDs let the same Purchase get counted twice when the browser tag and the Conversions API both fire. Repeated IDs collapse two different orders into one event. Both directions break your reported Purchase count and the value attached to it.

CL
By Christopher LandaverdeCreator of AdLint · ad-tech tracking specialistUpdated

Why It Matters

X uses `conversion_id` (sometimes paired with `event_id`) to recognise that a browser hit and a server hit describe the same business event. The dedupe window inside X looks for matching `conversion_id` on the same configured event tag and merges them. When the browser pixel fires a Purchase with `conversion_id: "10492"` and your Conversions API call fires the same Purchase with `conversion_id: "10492"`, X keeps one record. When the browser sends `conversion_id: "10492"` and the server sends nothing, X has no basis to merge and you get two Purchases. When two different orders both send `conversion_id: "ORDER"` because somebody hard-coded a literal, X collapses them into one and your Purchase volume drops by exactly the duplicate rate. The stable pattern is to derive `conversion_id` from a per-event identifier you already have. Order ID for Purchase. Lead ID for Lead. Subscription ID for Subscribe. Then pass that same value from every path that reports the same event. The audit pain comes from teams that wire the browser tag and the CAPI integration separately, using different generators, so the IDs never match even when they are both populated. For accounts running browser-only with no CAPI yet, `conversion_id` still matters because retries and double-firing inside the page can produce duplicates that dedupe against the same identifier.

How To Fix It

  1. Pick a stable per-event identifier. Order ID for Purchase, Lead ID for Lead, Subscription ID for Subscribe. Avoid timestamps, session IDs, or literals like "ORDER".
  2. Update the browser pixel call so every conversion event passes the identifier as `conversion_id` in the parameters object, for example `twq('event', 'tw-XXXXX-XXXXX', { conversion_id: orderId, value: 129.00, currency: 'USD' })`.
  3. Update your Conversions API or server-side tag to send the same `conversion_id` on the same event for the same order. The browser value and the server value must be byte-for-byte identical.
  4. Audit recent events in Ads Events Manager. Look for events with no `conversion_id` and for `conversion_id` values that repeat across different timestamps or users.
  5. Validate by completing one test Purchase and confirming Events Manager reports a single deduped event rather than two.

Example

Configuration
Purchase order 10492
  Browser: twq('event', 'tw-o1234-abcde', { conversion_id: '10492', value: 129.00, currency: 'USD' })
  Server (CAPI): { event: 'Purchase', conversion_id: '10492', value: 129.00, currency: 'USD' }
Result in Events Manager: 1 deduped Purchase, value $129.00
For Your Client Report

Your X Pixel conversion events are missing `conversion_id` values or reusing the same `conversion_id` across distinct transactions. Per X Ads Help Center documentation on website conversion tracking and the web event tags reference, `conversion_id` is the deduplication key X uses to merge matching browser and server-side events for the same business action. Missing IDs prevent the merge and produce double-counting when browser and Conversions API both fire, while repeated IDs collapse distinct events into one. Both patterns distort Purchase volume and reported conversion value, which then feeds back into optimisation. Fix: derive `conversion_id` from a stable per-event identifier such as order ID, pass the identical value from both browser and server paths for the same event, and verify in Ads Events Manager that a test transaction dedupes to a single record. Source: business.twitter.com/en/help/campaign-measurement-and-analytics/conversion-tracking-for-websites.html.

Drop this paragraph into your client deliverable. Sources back to the canonical platform documentation linked below.

References

Audit your own files for this check

AdLint runs this check (and 177 others) against your GTM, Google Ads, Meta, TikTok, LinkedIn, Pinterest, Twitter/X, and Snapchat exports. Everything stays in your browser. No uploads, no accounts.

Run a free audit