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
opprefby 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.
- Open a private (incognito) window, open developer tools (F12) on the Network tab and tick Preserve log.
- 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.) - If the first request is a redirect (
301,302,307,308), check its Location header. Does the new address still containoppref=test123? - Accept the cookie banner and wait a few seconds.
- Go to Application > Cookies (Chrome) or Storage > Cookies (Firefox) and find
__oppref. It should holdtest123. You should also see__obref, the pixel’s browser reference. - Filter the Network tab by
bzr.openai.comand open a request: the payload should carryopprefwith 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.
- 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 redirectshttptohttpsand 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,opprefincluded. Still use the exact final address (primary domain,https, no trailing slash) in every ad, so the visitor lands without a redirect. - 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=test123as above; if one drops it, link the ad to the destination page directly. - 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.
- Make sure the pixel runs on the landing page right after consent. The pixel reads
oppreffrom 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 thecookie_consent_updateevent on the same page. Framer changes pages without a full reload, and the next page’s address no longer hasoppref, so a tag that only starts later never sees it. See “OpenAI Pixel does not fire after consent”. - Do not withdraw consent for visitors who already agreed. OpenAI documents that
oaiq("consent", false)removes both pixel cookies,__opprefincluded. 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. - 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. - 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
gclidto native form submissions, notoppref. - 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__opprefcookie after consent: the form is often on another page than the one the ad pointed to, where the address no longer hasoppref. - On the server, send the original string unchanged as
oppref. For setups that send both browser and server events, OpenAI also asks for the__obrefcookie value asuser.obref.
- Framer’s Campaign tracking (Site Settings > Forms, Enterprise plan) adds UTM parameters and
- 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
- Repeat the test above using the exact ad address: no redirect drops
?oppref=test123, and after accepting cookies__opprefholdstest123. - Open another page on the site:
__opprefis still there, and the pixel’s requests still carryoppref. - 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
- OpenAI Developers, Measurement Pixel (captures
oppreffrom the landing page URL into the first-party__opprefcookie,__obref, cookies used when consent is granted,oaiq("consent", false)removes both cookies, place the script near the top of the<head>): https://developers.openai.com/ads/measurement-pixel - OpenAI Developers, Conversions API (
opprefis not captured by the API, pass the original string;user.obreffrom the__obrefcookie): https://developers.openai.com/ads/conversions-api - Framer Help, How to setup redirects to maintain SEO ranking (Site Settings > Hosting > Redirects, sub-paths within the current domain only): https://www.framer.com/help/articles/how-to-setup-redirects-to-maintain-seo-ranking/
- Framer Help, Add Google Tag Manager to your site (placement “Start of
<head>”): https://www.framer.com/help/articles/how-to-add-google-tag-manager-to-your-site/ - Framer Help, Track UTM parameters and Google Ads IDs in forms (Campaign tracking: UTM parameters and
gclid, Enterprise plan): https://www.framer.com/help/articles/track-utm-and-google-ads-ids/ - Framer Help, How to add hidden fields to forms for tracking (Hidden property, code override): https://www.framer.com/help/articles/hidden-fields-form-tracking/
- Framer Help, Connect Framer forms to a webhook: https://www.framer.com/help/articles/framer-form-webhook-setup/
- Framer Academy, Add a Cookie Banner to your site in Framer: https://www.framer.com/academy/lessons/cookie-banner-component
- IsPixelWorking live test, 2026-10-23 (responses served by Framer hosting):
https://superlist.com/?oppref=test123redirected (308) tohttps://www.superlist.com/?oppref=test123;http://www.superlist.com/?oppref=test123tohttps://andframer.com/updates/?oppref=test123to/updates?oppref=test123kept the parameter; a custom redirect on framer.com (/features?oppref=test123to/?oppref=test123) kept it too. Framer’s page changes through the History API were observed in the 2026-10-01 test.
More OpenAI guides
- OpenAI Pixel fires before consent on Framer: how to fix
- OpenAI Pixel not firing after consent on Framer: how to fix
- Repeated OpenAI event IDs drop ChatGPT Ads conversions
- Duplicate OpenAI Pixel events on Framer: how to fix
- OpenAI Pixel event_id missing on Framer: fix deduplication
- OpenAI Pixel tracks a button on desktop but not on mobile
- Two OpenAI Pixel IDs on one site: when it's fine, how to fix
- OpenAI Conversions API deduplication: match the pixel event_id
- OpenAI Ads Pixel setup: install the ChatGPT Measurement Pixel
- How to set up the OpenAI Conversions API for ChatGPT Ads