Keitaro ChatGPT Ads Integration: oppref Capture, Postbacks, and the CAPI Gap
Why ChatGPT Ads Needs a Tracker-First Setup
Running ChatGPT Ads traffic through Keitaro follows the pattern every other network uses - with one wrinkle. Keitaro's traffic source is a template for receiving click parameters from an ad network and sending conversions back through S2S postback, and ready-made templates usually fill both halves automatically. ChatGPT Ads has no ready-made template at the time of writing, so both halves are manual: a custom traffic source that captures OpenAI's click reference, and a deliberate decision about the conversion leg. The reward is the usual tracker stack value - rotation, funnel statistics, and cost-per-conversion per offer - on top of a brand-new ad platform that most of the market has not instrumented yet.
Capturing oppref With a Custom Traffic Source
OpenAI does not substitute dynamic macros into campaign URLs - it appends ?oppref=gAAAAAb123 to the landing URL on click, which makes oppref an incoming parameter to capture rather than a macro to paste. In Keitaro's custom source flow - the three columns being report aliases, tracker parameter names, and the source-side macro or incoming parameter - the incoming oppref parameter should be mapped onto a tracker parameter that later feeds postbacks. Mapping it to the tracker's external_id field is the natural choice, because {external_id} is the placeholder Keitaro's documentation names for returning the source click ID in postbacks; a sub-id such as sub_id_1 works too, with its own matching placeholder. After the source is attached to a campaign, Keitaro adds its parameters to the campaign URL automatically, so every ad click arrives carrying the token - and one check is worth making early: confirm the stored value is the real token, not a literal word, by sending a test click through.
Passing the Click Reference Through the Funnel
Values stored against tracker parameters are passed onward - into the offer URL through the tracker's macros, with {external_id} carrying the source click ID. A funnel that hops through a pre-lander or a second tracker hop must forward the parameter at every stage, because OpenAI's measurement guidance says exactly the same thing for its pixel - preserve the click reference through redirects and landing-page navigation. The failure mode is boring and expensive: one rebuilt URL between the ad and the converting page, and the conversion still happens but arrives at OpenAI without its click context, dropping from solid click-level attribution into fallback matching. The same oppref mechanics apply with or without a tracker in the middle.
Sending Conversions Back: S2S Postback vs the CAPI
Here is the integration's structural decision. Keitaro's S2S postback field sends conversion information to an external service as a URL call, with placeholders like {external_id} substituted for stored click values. The OpenAI Conversions API, however, is not a flat postback URL: it is a POST request to https://bzr.openai.com/v1/events?pid=<PIXEL-ID> with a bearer-authorized JSON body following the supported event shapes. An authenticated JSON POST is a different shape from the flat postback URL, so plan for a bridge on that last leg - a delivery tool that accepts the tracker's postback and formats the OpenAI call, or your own middleware making the authenticated POST. Keitaro's status filter (send only chosen statuses) belongs in the same plan, so only real conversions reach the bridge instead of every status change. This is the same division of labor as the tracker-to-CAPI stacks built on Meta and TikTok: the tracker owns routing and reporting, the delivery layer owns platform formatting. The mechanics of the click reference itself are covered in the oppref guide, and the delivery rules in the conversions API glossary entry.
Validating and Debugging the Loop
Keitaro ships the debugging view for its half: the Sent postback log under Maintenance, Logs, S2S postbacks shows which URL each conversion went to and what response came back - the first place to look when conversions stall. Keitaro's own checklist reduces to one habit that matters doubly here: verify the source's click value is actually substituted in the outbound link, because an unsubstituted placeholder means the whole chain silently lost its key. On the OpenAI half, append a sample oppref to the funnel entry URL and confirm it survives every hop, then fire a test conversion and confirm it appears in Ads Manager - the same test-before-spend discipline the rest of the cluster runs on. MOST accepts tracker postbacks and delivers conversions server-side to ChatGPT Ads alongside Meta, TikTok, Reddit, Snapchat, and Pinterest, covering the CAPI leg for Keitaro funnels, and the free Pixel Activator validates one event per landing at pixel.way2.us.
