Fix guide · Framer · medium · about 30 min

ChatGPT Ads click ID (oppref) lost on Framer: how to fix

For the finding “Click ID from OpenAI ads is not stored”. Also for: Any website, Shopify, WordPress, Webflow.

What this means

When someone clicks an ad in ChatGPT, the link to your site carries an attribution identifier in the oppref URL parameter. The OpenAI Pixel on your Framer site should pick it up on the landing page, store it in the first-party cookie __oppref, and send it with later events, so that a form submission on another page can still be tied to the ad click.

On your site, the click ID did not make it: it was not stored, or not sent with the pixel’s events.

Why it costs you money:

  • Conversions lose their link to the ChatGPT ad click, so ChatGPT Ads reports fewer conversions than your ads really brought.
  • Conversion-optimized campaigns learn from fewer attributed conversions.
  • If you send server events through the OpenAI Conversions API, OpenAI notes that the API does not capture oppref by itself; your server has to pass it on.

How to confirm it yourself

Our check opens your page in a browser in the EU as if arriving from a ChatGPT ad, with a test click ID in the URL, accepts the cookie banner, and then looks for the click ID. If our report shows a redirect chain, start there: it often shows exactly where the parameter was dropped.

  1. Open a private (incognito) window, open developer tools (F12) on the Network tab and tick Preserve log.
  2. Open the exact address your ads use on the published site, with a made-up click ID added: https://yourdomain.com/landing?oppref=test123. (This sends a normal page view to your own pixel. It does not create an ad click.)
  3. If the first request is a redirect (301, 302, 307, 308), check its Location header. Does the new address still contain oppref=test123?
  4. Accept the cookie banner and wait a few seconds.
  5. Go to Application > Cookies (Chrome) or Storage > Cookies (Firefox) and find __oppref. It should hold test123. You should also see __obref, the pixel’s browser reference.
  6. Filter the Network tab by bzr.openai.com and open a request: the payload should carry oppref with your test value.

How to fix

Work through the chain: the link must arrive with oppref, the pixel must run on that page once the visitor accepts, and nothing may delete the cookie afterwards.

  1. Point your ads at the final address. A Framer site with a custom domain has one primary domain, and the other version (with or without www) redirects to it. Framer also redirects http to https and removes a trailing slash from page addresses. In our test on Framer-hosted sites on 2026-10-23, all of these redirects kept the query string, oppref included. Still use the exact final address (primary domain, https, no trailing slash) in every ad, so the visitor lands without a redirect.
  2. Check your Framer redirects. Redirects you set up yourself are under Site Settings > Hosting > Redirects (they used to live in the Domains dashboard). In the same test, a redirect set up on a Framer site also kept oppref. Test each redirect your ads go through with ?oppref=test123 as above; if one drops it, link the ad to the destination page directly.
  3. Check redirects outside Framer. Framer only redirects paths within the domain connected to it; moving visitors from an old domain happens at that domain’s own host. Registrar forwarding, link shorteners and campaign link tools in front of your site commonly drop the query string. Test each one.
  4. Make sure the pixel runs on the landing page right after consent. The pixel reads oppref from the address of the page it runs on, and OpenAI says it uses its cookies only when measurement consent is granted. With Framer’s Cookie Banner and Google Tag Manager (GTM), the OpenAI tag must fire on the cookie_consent_update event on the same page. Framer changes pages without a full reload, and the next page’s address no longer has oppref, so a tag that only starts later never sees it. See “OpenAI Pixel does not fire after consent”.
  5. Do not withdraw consent for visitors who already agreed. OpenAI documents that oaiq("consent", false) removes both pixel cookies, __oppref included. Check Site Settings > Code and each page’s own custom code for this command, especially in entries set to run on every page visit: there it deletes the stored click ID after the landing page. With the pixel in GTM behind the Cookie Banner, the command is not needed at all.
  6. If the pixel is in custom code, load it early. OpenAI recommends placing the snippet near the top of the <head>; in Framer, that is the Start of <head> placement on all pages.
  7. Pass the click ID to your server events. If a Framer form sends its submissions to a webhook that forwards conversions to the Conversions API:
    • Framer’s Campaign tracking (Site Settings > Forms, Enterprise plan) adds UTM parameters and gclid to native form submissions, not oppref.
    • Add a hidden field to the form (turn on Hidden, name it oppref) and fill it with a code override, as Framer suggests for values hidden fields do not pick up by themselves. Read the value from the __oppref cookie after consent: the form is often on another page than the one the ad pointed to, where the address no longer has oppref.
    • On the server, send the original string unchanged as oppref. For setups that send both browser and server events, OpenAI also asks for the __obref cookie value as user.obref.
  8. Publish the site after any change.

Common causes

  • Ads link to an old domain whose host forwards to the Framer site without the query string.
  • A registrar forwarding rule, link shortener or campaign link tool drops oppref.
  • The OpenAI tag in GTM fires only after a later page change, not right after consent.
  • A custom code entry calls oaiq("consent", false) on every page visit, so the cookie is removed again and again.
  • The form webhook sends Conversions API events without oppref.

How to verify the fix

  1. Repeat the test above using the exact ad address: no redirect drops ?oppref=test123, and after accepting cookies __oppref holds test123.
  2. Open another page on the site: __oppref is still there, and the pixel’s requests still carry oppref.
  3. Re-run the check on IsPixelWorking. The issue should be gone, and the redirect chain in the report (if any) should keep the click ID.

Sources

More OpenAI guides