ChatGPT Ads are built, paused, and URL-gated.
Illume has completed the campaign build, stronger card creative, tracking deployment, visual QA, fresh API verification, and NotebookLM canon update. We should not activate spend until OpenAI approves the `go.inspiredbu.com` destination, David adds billing, and JD gives final approval.
What is done versus what still blocks launch
Kitchen, Garage, and Whole Home are built as separate click campaigns at $25/day each.
Final non-archived set includes real project, planning, and real people/team trust cards.
Not because the build is weak. Because the current approved ad URLs are not the tracked LPs, and billing/final approval are still open.
Final prelaunch readback
Fresh Ads API audit confirmed this state after cleanup: 3 campaigns, 3 ad groups, 9 ads, all paused, all ads approved, 7 context hints per ad group, click bidding, $25/day budgets, $5 CPC bids, and `lead_created` attached to all 3 campaigns. The strategic choice is still broad first, narrow if needed. The DMA is not perfect, but it is the currently proven usable Bay Area target.
Tracking is deployed on the preferred landing pages
What is proven
- OpenAI Pixel ID `Mi5Eotf7XWaNVJ4jsoMcej` exists.
- `lead_created` and `page_viewed` event settings exist.
- All three paused campaigns reference `lead_created`.
- Production pages on `go.inspiredbu.com` include the OpenAI pixel loader and `page_viewed`.
- Focused route, CAPI, and tracking tests passed: 5 files, 26 tests.
- Direct OpenAI CAPI validate-only event returned HTTP 200 with `accepted_events: 1`.
- Production build and visual smoke passed.
Why we still wait
- Current approved ad URLs are still same-root `inspiredbu.com/services/...` fallback URLs.
- The real tracking stack lives on `go.inspiredbu.com`.
- OpenAI still treats `go.inspiredbu.com` as a different ad destination.
- Final activation should use the tracked LPs or a same-root tracked equivalent.
- No-context QA confirmed this URL/tracking mismatch is the core blocker.
We replaced the weak trust cards with real people
David Trust Card
Replaced the old room-only trust card with a real David card. Approved and paused.
Team Trust Card
Replaced the living-space-only card with a real human trust angle. Approved and paused.
Real Team Card
Replaced the room-only trust card with the Inspired Builders team photo. Approved and paused.
Creative lesson added to canon: do not label room-only images as team trust cards. Use real project photos plus real people/team cues.
Only three gates remain before activation
Destination approval
OpenAI must approve `go.inspiredbu.com`, or we must move/install equivalent tracking on an allowed same-root path. A guarded script and prepared payload are ready for the approved-LP moment.
Billing
David needs to add the payment method in Ads Manager. Campaigns remain paused after billing.
Final approval
After the URL and billing gates, re-run readback and one final synthetic test, then JD approves activation.
My CTO call
Keep everything paused. The build is strong enough to launch after the destination and billing gates clear, but the current approved ad destinations are not the tracked LPs. When OpenAI approves `go.inspiredbu.com`, use the prepared URL-switch payload, keep ads paused, re-run readback and synthetic proof, then ask JD to approve activation. Do not run traffic to the fallback service pages unless we add and verify the same OpenAI tracking there.
Safe Dry Run
The guarded helper already passed dry-run: 9 paused approved ads, 3 paused campaigns, `lead_created` attached, and all tracked LPs include OpenAI pixel signals. No ad URLs were changed.
Post-Approval Apply
After explicit OpenAI approval, the helper can update all 9 ads to `go.inspiredbu.com` while keeping them paused. It requires the long approval flag before any mutation can run.