OpenAI Ads Pixel vs Conversions API vs Done-For-You Setup: Which Should You Choose?
Three real paths exist for tracking OpenAI Ads: pixel-only (fast to launch, quietly incomplete), DIY pixel + Conversions API (thorough, but a real engineering project with real failure points), and done-for-you setup (fastest route to decision-grade data, no engineering time required from your team). The right choice depends on whether you have backend engineering time to spend and how much a week of bad conversion data actually costs you.
None of these paths is wrong in every situation. Pixel-only is a legitimate starting point for a low-stakes test campaign. DIY pixel + CAPI is the right call if you already have a developer with bandwidth. Done-for-you exists because most teams have neither the spare engineering hours nor the appetite to debug a server-to-server integration that touches an API key. This post lays out what each path actually gets you, where each one breaks, and how to decide — including a straightforward disclosure of where Comercio Services fits into that decision.
The three paths, compared
| Pixel-only | DIY pixel + CAPI | Done-for-you | |
|---|---|---|---|
| Setup time | 30–60 minutes | Days to a few weeks, depending on backend access | Typically a few business days, no engineering time from your team |
| Technical skill required | Paste a script tag; edit <head> | Server-side API integration, key management, dedup logic | None from you; a specialist handles code and testing |
| Data completeness | Incomplete — misses ad blockers, Safari ITP, multi-session journeys | Complete, if implemented and deduplicated correctly | Complete, built and verified against the standard events reference |
| Maintenance burden | Low, but silent decay as browser privacy tightens | Ongoing — your team owns key rotation, event schema changes, monitoring | Low — documented handoff, but you should still know what was built |
| Cost | Free (your time only) | Developer time (opportunity cost, not a flat fee) | $1,600 flat for pixel + CAPI combined (complete setup) |
| Best fit | Quick tests, pre-launch validation, very low ad spend | Teams with in-house backend developers and time to own it long-term | Teams that need accurate data now and don't have spare engineering capacity |
Read the row that matters most to you first. If "technical skill required" or "maintenance burden" is the blocker, the comparison below explains why those rows look the way they do.
Path 1: Pixel-only — what you get, what you silently lose
The OpenAI Ads measurement pixel is a browser-side SDK loaded from https://bzrcdn.openai.com/sdk/oaiq.min.js. You initialize it with your Pixel ID —
oaiq("init", { pixelId: "YOUR-PIXEL-ID" });
— and fire events as visitors interact with your site:
oaiq("measure", "order_created", {
currency: "USD",
value: 12999
});
That's genuinely all it takes to get some data flowing into OpenAI Ads Manager. The pixel auto-captures source_url, event timestamps, and — critically for attribution — the first-party __oppref cookie, which gives you roughly a 30-day window connecting a later conversion back to the ad click that drove it. For a first campaign, or a low-spend test, this is a reasonable place to start. It's fast, it requires no backend work, and it gets you something in the conversions column within the hour.
What you silently lose is the part that doesn't show up as an error message. The pixel only fires when:
- The visitor's browser actually executes the script (ad blockers stop this outright)
- Safari's Intelligent Tracking Prevention or similar browser privacy features don't interfere with the cookie or the request
- The visitor doesn't decline tracking consent where required
- The conversion happens in the same browser session the pixel can see — not, for example, a lead who fills out a form on their phone and books an appointment by phone three days later
None of these failures produce a visible error. Your dashboard just shows a lower number than what actually happened, and there's no flag telling you that's what occurred. If your reported conversions look thinner than what your backend or CRM shows, this gap is the most common explanation — and it's exactly why OpenAI's own guidance treats the pixel and CAPI as complementary rather than either/or (see the measure results article). Pixel-only isn't broken; it's an intentionally partial signal, and treating it as the complete picture is where teams get burned.
Path 2: DIY pixel + CAPI — the realistic time investment and where it breaks
Adding the Conversions API closes most of the pixel's gaps, because it sends the same event server-to-server, bypassing the browser entirely:
curl -X POST "https://bzr.openai.com/v1/events?pid=PIXEL-ID" \
-H "Authorization: Bearer YOUR-API-KEY" \
-H "Content-Type: application/json" \
-d '{
"data": [{
"id": "order-48213",
"type": "order_created",
"timestamp_ms": 1721000000000,
"data": { "currency": "USD", "value": 12999 }
}]
}'
That's the shape of it, but "the shape of it" is not the same as "a correct, production-safe implementation." Here's the realistic scope once you actually build this:
API key handling. The Bearer key authenticates every request to bzr.openai.com, which means it has to live server-side — in an environment variable, a secrets manager, anything that isn't browser-visible JavaScript. Teams under deadline pressure sometimes paste it into a client-side script "temporarily," then move on. That's a real exposure, not a hypothetical one, and it's common enough that we wrote a dedicated post on securing a CAPI implementation.
Deduplication. If you run both the pixel and CAPI for the same event — which is the whole point, since CAPI recovers what the pixel misses — you need OpenAI to recognize they're the same conversion, not two. That means the pixel's event_id must match the id field you send via CAPI, using the same Pixel ID for both. For custom events, the custom_event_name also has to match. Miss this and you double-count every conversion the pixel did capture, which is arguably worse than undercounting — it corrupts your ROAS math in the optimistic direction, right when you're trying to trust it.
Batching and timing constraints. CAPI requests batch up to 1,000 events per call, and every event's timestamp_ms has to fall within 7 days of when you send it. If your backend queues events and flushes them in batches, that window needs a place in your architecture, or delayed events silently get rejected.
The __oppref gap. Unlike the pixel, CAPI does not automatically pick up the __oppref attribution cookie. If your server-side events need that signal — and for anything beyond a single-session purchase, they do — your backend has to read the cookie value and pass it through explicitly. This is easy to miss because nothing errors when you skip it; your CAPI events just arrive without attribution context.
Add it up: a correct pixel + CAPI implementation is a real project — key management, a sending mechanism, dedup logic, monitoring for silent failures — not an afternoon task. It's worth doing in-house if you already have a backend developer with bandwidth to own it long-term, including maintenance when OpenAI updates the supported events list. If that developer doesn't exist yet, or has three other priorities ahead of this, that gap is what Path 3 is for.
Path 3: Done-for-you — what's actually included
A done-for-you setup does the same technical work described above — pixel install, CAPI integration, dedup configuration, and testing — but performed by someone whose full-time job is getting this specific integration right, with the security and dedup risk designed out from the start rather than discovered in production.
Concretely, that means:
- Pixel installed correctly on every page, not just the landing page, with the init call configured for your account
- CAPI built server-side from day one — the API key never touches browser code, because it's architected that way from the start, not patched after an exposure
- Event IDs matched between pixel and CAPI so dedup works out of the box, instead of surfacing as a double-counting bug weeks into a campaign
__opprefcapture and forwarding wired into the server-side events that need attribution context- Testing against real traffic before handoff, so "we installed it" and "we confirmed it works" are the same statement
- Documentation of what was built, so your team isn't dependent on one person if something needs to change later
The reason this removes risk rather than just removing effort is that the two most expensive DIY failure modes — an exposed API key and a broken dedup match — are exactly the parts that require the most specialized attention and the parts a generalist developer is least likely to have hit before. A specialist who builds this integration repeatedly has already made those mistakes once, on someone else's first attempt, and built the checks that catch them.
A decision framework: three questions
Skip the debate and answer these three questions honestly.
1. Do you have backend engineering time you can spend on this, not just engineering staff who exist? Having a developer on the team is not the same as having a developer with a free week. If the honest answer is "we'd have to pull someone off other work for an uncertain amount of time," that's a real cost, even without an invoice attached.
2. Is your ROAS decision actually decision-grade right now? If you're making budget or bidding decisions based on pixel-only numbers, ask what percentage of your real conversions you think you're seeing. If you don't know — and most pixel-only setups don't, because the gap is invisible — you're optimizing against a number you can't defend.
3. What does a week of wrong data cost you? Not in the abstract — in your actual media budget. If you're spending enough on ChatGPT Ads that a week of under- or over-counted conversions could shift a real budget decision, the cost of getting tracking wrong for that week likely exceeds a $1,600 setup that gets it right the first time.
If the honest answers are "no spare engineering time," "no, I don't fully trust these numbers," and "more than a setup would cost," that's a done-for-you decision, not a close call.
Honest disclosure
Comercio Services offers Path 3 — we are an independent OpenAI Ads tracking shop, and the pixel + CAPI complete setup described above is a service we sell. That's a real conflict of interest to flag plainly, not bury in a footnote.
Here's how we've tried to handle it: everything in the Path 1 and Path 2 sections is drawn from OpenAI's own developer documentation — the Ads developer docs, the measurement pixel reference, the Conversions API reference, the supported events list, and the measure results article — not from our sales material. The failure points described for DIY pixel + CAPI (key exposure, dedup mismatches, the __oppref gap) are accurate regardless of who fixes them: you, your own developer, or us. If you read this and conclude your in-house team should build Path 2 themselves, that's a legitimate conclusion from the same facts.
What we'd ask is that you weigh the three questions above against your own situation, not against a hypothetical. If you have the engineering time and want to own this long-term, build it. If you don't and want a second opinion on which path fits, a free readiness audit is a lower-commitment way to find out than either guessing or committing to a build.
Quick-reference: which path fits your situation
- Running a small test campaign, low spend, just want a number in the dashboard: Pixel-only is defensible. Know what you're not seeing.
- You have a backend developer with real bandwidth and want to own this long-term: Build DIY pixel + CAPI. Budget for key management and dedup testing, not just the initial POST request.
- You need accurate, decision-grade data and don't have spare engineering time: Done-for-you removes the two most expensive failure modes (key exposure, dedup errors) by design.
- You're not sure which bucket you're in: A tracking audit ($450, 48-hour turnaround, credited toward any setup) tells you exactly what's firing today and what isn't, before you commit to any of the three paths.
Want this done for you?
Fixed-scope setup, tested end-to-end and documented.
Explore the serviceTake the free audit