# ChatGPT Ads UTM Parameters

> Set up ChatGPT Ads UTM parameters with OpenAI's dynamic macros so AnyTrack attributes conversions from Ads Manager Beta to the right campaign, ad group, and ad.

## Why UTM Parameters Matter for ChatGPT Ads

ChatGPT Ads does not have a Conversion API integration with AnyTrack. Instead, you track campaign performance with UTM parameters appended to your landing page URLs. UTM parameters embed campaign details into each URL. AnyTrack reads them to identify the campaign, ad group, and ad behind each visit and conversion. Without UTM parameters, all ChatGPT Ads traffic looks the same in your reports.

<Callout icon="⚠️" theme="warning">
**ChatGPT Ads is not an AnyTrack integration yet**

- AnyTrack does not fetch ad spend or campaign metrics from ChatGPT Ads, and does not send conversions to it via a Conversion API.
- Install the UTM template on your campaigns, so AnyTrack tracks and attributes your ChatGPT Ads traffic in the [Campaign Report](/docs/campaign-report). You can then build custom audiences from that traffic.
- AnyTrack plans a ChatGPT Ads integration. Set up your UTM parameters now, so your campaign data is ready when the integration launches.
</Callout>

## About ChatGPT Ads

OpenAI serves ads inside ChatGPT and manages them through Ads Manager Beta. The platform is in beta, and OpenAI adds measurement features over time. Before you launch new campaigns, verify the current macro list against OpenAI's [Measure Results guide](https://help.openai.com/en/articles/20001214).

<Prerequisites
  title="Before you begin"
  items={[
    { label: "You have an OpenAI Ads Manager account with an active campaign", done: true },
    { label: "The AnyTrack Tracking Tag is installed on your landing pages", done: true },
  ]}
/>

## ChatGPT Ads UTM Parameters Template

```http
utm_source=chatgpt&utm_medium=cpc&utm_campaign={campaign_id}&utm_content={ad_group_id}&utm_term={ad_id}&utm_id={campaign_id}&adaccount_id={ad_account_id}
```

Ads Manager Beta fills each `{curly brace}` macro with a real value when the ad serves.

### Add the Template in Ads Manager Beta

1. In Ads Manager Beta, open the **Campaigns** page.
2. Click the three-dot menu on the campaign and select **Edit campaign**.
3. Enter the template in the **Landing page query parameters** field.
4. Save your changes.

The same field exists for ad groups and ads. On the **Ad Groups** or **Ads** page, click the three-dot menu. Select **Edit ad group** or **Edit ad**.

<Callout icon="📘" theme="info">
**Note**

Ads Manager Beta applies the most specific setting. The precedence order is: Ad URL, then Ad, then Ad Group, then Campaign. A parameter set at a more specific level takes precedence over the same parameter at a broader level. Set the template once at the campaign level. Leave the other levels empty, so one template governs each campaign.
</Callout>

## UTM Parameter Breakdown

Each parameter serves a specific purpose in your attribution chain:

| Parameter | Value | What It Tells AnyTrack |
|-----------|-------|----------------------|
| `utm_source` | `chatgpt` | The traffic source is ChatGPT Ads |
| `utm_medium` | `cpc` | The visit came from a paid click |
| `utm_campaign` | `{campaign_id}` | The campaign that served the ad |
| `utm_content` | `{ad_group_id}` | The ad group that served the ad |
| `utm_term` | `{ad_id}` | The individual ad the visitor clicked |
| `utm_id` | `{campaign_id}` | The campaign ID as a standard campaign identifier |
| `adaccount_id` | `{ad_account_id}` | The ad account, passed as a standalone parameter for reporting |

## Supported Macros

Ads Manager Beta supports four dynamic macros. There are no other macros at this time.

| Macro | Returns |
|-------|---------|
| `{campaign_id}` | The ID of the campaign |
| `{ad_group_id}` | The ID of the ad group |
| `{ad_id}` | The ID of the ad |
| `{ad_account_id}` | The ID of the ad account |

## The Macros Return IDs, Not Names

Each macro returns an ID. OpenAI does not offer macros for campaign, ad group, or ad names.

AnyTrack resolves platform IDs into names for Meta Ads, Google Ads, and TikTok Ads only. These are the platforms AnyTrack fetches campaign metrics from. ChatGPT Ads is not one of them, so the [Campaign Report](/docs/campaign-report) shows the raw IDs from your UTM parameters. You have two options:

- **Dynamic macros (recommended).** Enter the same template in every campaign. The Campaign Report shows IDs. Match an ID to a campaign in Ads Manager Beta or a CSV export. The IDs stay stable when you rename a campaign. The template never needs an edit.
- **Static labels.** Replace `{campaign_id}` in `utm_campaign` with a readable label, for example `utm_campaign=spring-sale`. The Campaign Report shows readable names. Each campaign needs its own template, and you maintain the labels yourself. Keep the dynamic macros in `utm_content` and `utm_term` so ad group and ad attribution stays intact.

## How AnyTrack Uses These Parameters

When a visitor arrives from a ChatGPT Ads click, AnyTrack reads the UTM parameters from the URL. AnyTrack stores them alongside the `click_id`. When that visitor converts, AnyTrack attributes the conversion with the full campaign context.

This data flows into:

- Your [Campaign Report](/docs/campaign-report) in the AnyTrack dashboard
- [Event Attributes](/docs/event-attributes) sent to your connected ad platforms
- Custom audiences built from rules based on UTM parameters and events

## About the oppref Parameter

OpenAI appends a parameter named `oppref` to every landing page URL. `oppref` is OpenAI's click reference, comparable to `gclid` on Google Ads or `fbclid` on Meta Ads. The value belongs to OpenAI's own measurement tools. The OpenAI Pixel reads the value into a first-party cookie. OpenAI's server-side Conversion API does not collect the value for you: OpenAI instructs you to pass the original string yourself, without modification. `oppref` is not one of the four macros and is not part of the UTM template. Do not add `oppref` to your **Landing page query parameters**; OpenAI appends the parameter automatically.

## Common Mistakes

**Expecting names instead of IDs.** The four macros return IDs. AnyTrack does not fetch campaign names from ChatGPT Ads. If you want readable campaign names in your reports, use a static label in `utm_campaign`. See [The Macros Return IDs, Not Names](#the-macros-return-ids-not-names).

**Setting parameters at more than one level.** The most specific level takes precedence: Ad URL, then Ad, then Ad Group, then Campaign. A parameter set on one ad silently overrides the campaign template for that ad. Keep the template at the campaign level unless you have a specific reason to override.

**Adding oppref to the template.** OpenAI appends `oppref` automatically. Leave the parameter out of your template.

**Treating beta behavior as permanent.** OpenAI changes Ads Manager Beta over time. If a parameter stops filling, verify the macro list against OpenAI's [Measure Results guide](https://help.openai.com/en/articles/20001214).

<FaqAccordion
  title="ChatGPT Ads UTM FAQ"
  icon="fa-duotone fa-circle-question"
  items={[
    {
      question: "Does AnyTrack send conversions to ChatGPT Ads?",
      answer: "No. ChatGPT Ads is not an Ad Network integration in AnyTrack, so AnyTrack does not send conversions to it. AnyTrack tracks ChatGPT Ads traffic through UTM parameters. The conversions appear in your <a href='/docs/campaign-report'>Campaign Report</a>. To report conversions inside Ads Manager Beta, use OpenAI's own Pixel or Conversion API."
    },
    {
      question: "Why does my Campaign Report show IDs instead of campaign names?",
      answer: "The ChatGPT Ads macros return IDs, and OpenAI does not offer macros for names. AnyTrack resolves IDs into names for Meta Ads, Google Ads, and TikTok Ads only. ChatGPT Ads rows show the raw IDs. For readable names, enter a static label in <code>utm_campaign</code>, for example <code>utm_campaign=spring-sale</code>."
    },
    {
      question: "At which level should I set the landing page query parameters?",
      answer: "Set the template at the campaign level. Ads Manager Beta applies the most specific setting: Ad URL, then Ad, then Ad Group, then Campaign. A template on one ad group or ad overrides the campaign template. Keep the other levels empty unless you need a deliberate override."
    },
    {
      question: "Do I need to add oppref to my UTM template?",
      answer: "No. OpenAI appends <code>oppref</code> to your landing page URLs automatically. The value belongs to OpenAI's own measurement tools, comparable to <code>gclid</code> on Google Ads. Do not add the parameter to your <b>Landing page query parameters</b>."
    }
  ]}
/>

## Related Articles

- [Campaign Report](/docs/campaign-report)
- [Custom UTM Parameters](/docs/custom-utm-parameters)
- [Install the AnyTrack Tracking Tag](/docs/install-anytrack-tag)
