A complete step-by-step walkthrough of running ChatGPT Ads for a Shopify store — from creating your OpenAI Ads account to setting up a product feed, installing the pixel, and picking the right conversion event.
ChatGPT has quietly become one of the most visited sites on the internet — and now you can run ads on it. For Shopify stores, the setup is more straightforward than most people expect. This guide walks through the entire workflow: creating your account, connecting a product feed, installing the tracking pixel, and wiring up conversion events so the algorithm actually knows what it's optimising for.
We'll use a made-up store called Boulder Outdoor Co. as the example throughout — a US-based Shopify store selling hiking and camping gear.
What you need before you start
- A Shopify store (any plan)
- A product feed in Google Shopping format — more on this below
- An OpenAI Ads account — free to create at ads.openai.com
- About 30 minutes
Step 1: Create your OpenAI Ads account
Head to ads.openai.com and sign up. If you already have a ChatGPT account, you can use the same login.
Once in, you'll land in Ads Manager. For Boulder Outdoor Co., the setup took about five minutes — business name, website URL, billing details, time zone. Nothing surprising. OpenAI currently requires a US billing address for new advertiser accounts, though this is expanding.
After setup, go to Tools → Conversions → Pixel and copy your Pixel ID. You'll need this in step 4.
Step 2: Set up your product feed
ChatGPT Ads supports the Google Shopping feed format — which is great news for Shopify stores because tools for generating that feed already exist.
For Boulder Outdoor Co. we used Unlimited Feed, a Shopify app that generates a Google Shopping-compatible XML feed from your product catalog. Install it, configure your feed (title, description, price, image, GTIN if you have it), and it gives you a public feed URL.
That URL is what you paste into OpenAI Ads Manager when setting up a feed-based campaign. OpenAI crawls it periodically and keeps your product data up to date automatically.
A complete, well-structured feed makes a real difference. Include accurate titles, clear descriptions, and good images — ChatGPT Ads uses this data to match your products to relevant conversations.
Step 3: Create your first campaign
In Ads Manager, click New campaign. For a Shopify ecommerce store, the setup looks like this:
- Campaign objective: Conversions (not clicks — you want purchases)
- Bidding: oCPC — OpenAI optimises toward your chosen conversion event
- Product feed: paste your Unlimited Feed URL here
- Daily budget: start conservatively — $20–50/day while testing
- Targeting: ChatGPT Ads targets by conversation context, not demographics. You describe your audience and the types of queries your ads should match
For ad copy, keep it short. OpenAI's own guidance suggests 16–24 characters for headlines and 32–48 for descriptions. Boulder Outdoor Co.'s best performing ad was simply: "Gear built for the trail" with a one-line description of free shipping. Clever doesn't beat clear here.
Step 4: Install the ChatGPT pixel on Shopify
This is where most guides overcomplicate things. You don't need an app, GTM, or theme edits. Shopify has a built-in system for exactly this — Customer Events.
- In Shopify admin go to Settings → Customer events
- Click Add custom pixel, name it
ChatGPT Ads Pixel
- Set Customer Privacy: Permission = Required, categories Marketing + Analytics
This makes Shopify's consent banner automatically gate the pixel — GDPR handled, no extra code.
- Paste the code below, replace
YOUR_PIXEL_ID with your ID from Step 1
- Click Save
Show pixel code ↓
// ── 1. Load OpenAI Pixel SDK ──────────────────────────────────────
(function (w, d, s, u) {
if (w.oaiq) return;
var q = function () { q.q.push(arguments); };
q.q = [];
w.oaiq = q;
var js = d.createElement(s);
js.async = true;
js.src = u;
var f = d.getElementsByTagName(s)[0];
f.parentNode.insertBefore(js, f);
})(window, document, "script", "https://bzrcdn.openai.com/sdk/oaiq.min.js");
oaiq("init", {
pixelId: "YOUR_PIXEL_ID",
});
// ── 2. Standard ecommerce events ─────────────────────────────────
analytics.subscribe("all_standard_events", (event) => {
switch (event.name) {
case "page_viewed":
oaiq("measure", "page_viewed", { type: "contents" });
break;
case "product_viewed":
var p = event.data && event.data.productVariant;
oaiq("measure", "contents_viewed", {
type: "contents",
contents: [{ id: p && p.sku || p && p.id, name: p && p.product && p.product.title, content_type: "product" }],
});
break;
case "product_added_to_cart":
var line = event.data && event.data.cartLine;
var m = line && line.merchandise;
oaiq("measure", "items_added", {
type: "contents",
amount: Math.round(((line && line.cost && line.cost.totalAmount && line.cost.totalAmount.amount) || 0) * 100),
currency: (line && line.cost && line.cost.totalAmount && line.cost.totalAmount.currencyCode) || "USD",
contents: [{ id: m && m.sku || m && m.id, name: m && m.product && m.product.title, content_type: "product", quantity: (line && line.quantity) || 1 }],
});
break;
case "checkout_started":
var cs = event.data && event.data.checkout;
oaiq("measure", "checkout_started", {
type: "contents",
amount: Math.round(((cs && cs.totalPrice && cs.totalPrice.amount) || 0) * 100),
currency: (cs && cs.totalPrice && cs.totalPrice.currencyCode) || "USD",
contents: ((cs && cs.lineItems) || []).map(function(i) {
return { id: (i && i.variant && i.variant.sku) || (i && i.variant && i.variant.id), name: i && i.title, content_type: "product", quantity: i && i.quantity };
}),
});
break;
case "checkout_completed":
var co = event.data && event.data.checkout;
oaiq("measure", "order_created", {
type: "contents",
amount: Math.round(((co && co.totalPrice && co.totalPrice.amount) || 0) * 100),
currency: (co && co.totalPrice && co.totalPrice.currencyCode) || "USD",
contents: ((co && co.lineItems) || []).map(function(i) {
return { id: (i && i.variant && i.variant.sku) || (i && i.variant && i.variant.id), name: i && i.title, content_type: "product", quantity: i && i.quantity };
}),
});
break;
}
});
// ── 3. Form submissions ───────────────────────────────────────────
analytics.subscribe("form_submitted", (event) => {
var element = event.data.element;
var action = element.action || "";
var formId = element.id || "";
var keywords = ["contact", "newsletter", "email", "subscribe"];
var isLead = keywords.some(function(k) {
return action.includes(k) || formId.includes(k);
});
if (isLead) {
oaiq("measure", "lead_created", { type: "customer_action" });
} else {
oaiq("measure", "custom", { type: "custom" }, { custom_event_name: "form_submitted_other" });
}
});
// ── 4. Mailto and tel link clicks ─────────────────────────────────
analytics.subscribe("clicked", (event) => {
var href = event.data.element.href || "";
if (href.startsWith("mailto:")) {
oaiq("measure", "custom", { type: "custom" }, { custom_event_name: "mailto_click" });
} else if (href.startsWith("tel:")) {
oaiq("measure", "custom", { type: "custom" }, { custom_event_name: "tel_click" });
}
});
To verify it's working: open your store in an incognito window, filter the Network tab for bzrcdn, and browse around. You should see pixel requests firing within seconds. Then check Tools → Conversions → Event Stream in Ads Manager — events appear there within 5–15 minutes.
Step 5: Set the right conversion event in your campaign
Back in Ads Manager, go to your campaign settings and set the conversion event. For Boulder Outdoor Co. — and for any ecommerce store — that's order_created. This is the purchase event, and it's what tells the oCPC algorithm which users to find more of.
One event per campaign. The pixel tracks eight events in total (page views, product views, add to cart, checkout started, purchase, lead, mailto click, tel click), but the algorithm only optimises toward the one you designate. The rest show up in reporting.
Don't pick a funnel event like checkout_started thinking you'll get more signal. You'll optimise for people who start checkouts, not people who complete them. Start with order_created and let the algorithm learn.
You're live — what to expect
ChatGPT Ads is still early. Volume is lower than Google or Meta, competition is lighter, and CPCs are genuinely interesting right now. For Boulder Outdoor Co., the first two weeks were about learning — watching which product categories got clicks, whether the feed data was good enough, and whether the pixel was receiving clean purchase signals.
Give it at least two weeks before drawing conclusions. The Event Stream and conversion data take time to stabilise, and oCPC needs a few conversions before optimisation meaningfully kicks in.
The full stack — feed, pixel, right conversion event — is what makes it work. Any one of those missing and you're flying blind.
ShopMCP is a Shopify MCP server that lets you manage your store with Claude. Learn more →