> For the complete documentation index, see [llms.txt](https://docs.adpage.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.adpage.io/integrations-marketingtools/openai-ads/chatgpt-ads-event-id-deduplication.md).

# ChatGPT Ads event ID deduplication

Verify and troubleshoot event ID deduplication for ChatGPT Ads

Use the [main ChatGPT Ads setup guide](/integrations-marketingtools/openai-ads.md) to configure the Pixel and Conversions API. This page helps you verify and troubleshoot their shared event ID.

Running both server-side and client-side tagging means OpenAI receives the same conversion twice: once from the browser and once from your server. Deduplication stops OpenAI from counting it twice. It works when both events carry the **same event name** and the **same event ID**.

### What must match

For each interaction, pass one ID through this path:

1. The browser OpenAI Pixel sends the event with the Unique Event ID.
2. The matching GA4 event sends that value as `event_id`.
3. The server-side Conversions API tag reads `event_id` and sends it as Event ID.

The browser and server tags must also send the same event name. For example, both tags send `purchase`.

{% hint style="info" %}
The event ID must identify one occurrence of an event. Do not reuse a fixed value for every purchase or lead.
{% endhint %}

### Verify the event ID

Use GTM preview mode in both containers. Trigger one test conversion and compare these values:

1. In the web container, open the OpenAI Pixel tag and record its Event ID.
2. Open the matching GA4 event and confirm its `event_id` parameter has the same value.
3. In the server container, open the OpenAI Conversions API tag and confirm its Event ID matches.

The tags must describe the same interaction. They must fire from the same user action, such as a completed purchase.

### Fix common problems

| Symptom                          | Cause                                         | Fix                                                                                                    |
| -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| OpenAI counts two conversions    | Event IDs differ, or one tag has no ID        | Pass the Unique Event ID to GA4 as `event_id`, then map it in the server tag.                          |
| The server event has no Event ID | The server variable cannot read `event_id`    | Inspect the incoming GA4 request. Match the variable key exactly.                                      |
| Events are not deduplicated      | Event names differ                            | Use the same inherited name or override in both OpenAI tags.                                           |
| Only one tag fires               | The tag triggers cover different interactions | Use matching triggers for the Pixel and GA4 event. Restrict the server trigger to that incoming event. |

### Confirm in Ads Manager

After preview validation, ask the client to confirm the test conversion in OpenAI Ads Manager. Check that the conversion arrived and is not counted twice.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.adpage.io/integrations-marketingtools/openai-ads/chatgpt-ads-event-id-deduplication.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
