There is a native app for this now. It lives in the Shopify App Store. Search "ChatGPT Ads for Shopify". You may still read June guides about hand-wiring theme.liquid. That part is now optional.
Here is what the connection actually does. It pushes your catalog into a ChatGPT Ads product feed. It pushes commerce events into the ad account. Through the OpenAI pixel. Then it lets you launch campaigns without leaving Shopify admin.
One thing to know before you spend. Ads only render for ChatGPT users on Free and Go plans. Plus, Pro, Business, Team and Enterprise never see them. So the audience skews price sensitive. Build creative for that.
As of this writing the app covers US Shopify merchants. OpenAI says availability follows wherever ChatGPT ads run. Check their help page, not this post. This surface moves monthly.
What you need first
• An active Shopify store.
• An active ChatGPT Ads Manager account. Or the details to create one.
• Permission to install and manage apps in Shopify.
• Permission to manage the ad account.
• A website, industry, country, currency. Plus time zone, for the ad account.
That last line trips stores up. Your ad account needs a legal billing entity. Selling into Canada? The country you set decides billing. It also gates feed eligibility.
The catalog layer most people skip
Most people skip the catalog. Start there.
Shopify product data already reaches ChatGPT. It arrives through Shopify Catalog. No separate application for organic discovery. Since the agentic storefront rollout, eligible US stores are discoverable by default.
The control lives in Shopify admin. Open Settings, then Sales channels. Find ChatGPT under the Agentic section. Confirm it matches your intent.
Organic visibility depends on feed quality. Your ads draw from that same catalog. Fix it once. Two channels improve.
Before connecting, check every product you plan to advertise:
• A descriptive title. Not a SKU, not a color code.
• A real description. Answer the questions a shopper would ask aloud.
• A genuine barcode or GTIN on the correct variant.
• Current price, compare-at price, and true availability.
• Variant images, not one shared hero photo.
• Product type and category assigned.
• Completed policy pages. Terms, privacy, returns.
Now check the rendering. Important facts must sit in the storefront HTML. Not in an app's tab. Not only in admin metafields. A crawler reading an empty shell indexes an empty shell.
Connect the store
The official flow has six steps.
- In Shopify, install and open the ChatGPT Ads app.
- Select Connect Account.
- Choose an existing Ads Manager account. Or create one. You confirm organization, name, website, industry. Then country, currency, time zone.
- Select or create the OpenAI Pixel for Shopify.
- Connect that pixel, so eligible commerce events flow to Ads Manager.
- Wait for inventory to sync into your ChatGPT Ads product feed.
Sync time depends on catalog size. Forty SKUs is quick. Forty thousand variants is not. Refresh Ads Manager once it finishes.
Now build the campaign. Shopify can do it, or Ads Manager.
• Open the ChatGPT ad area in the app.
• Click Create Campaign.
• Set campaign name, budget, optimization event, targeting.
• Choose an ad type. All products, single product, or website.
• Pick the products to include.
• Review the preview.
• Create and launch.
Shopify covers the basics. Budget control is coarser. You get fixed increments. The docs cite $25 steps in Shopify. Ads Manager takes an exact $28. Fine controls live at ads.openai.com.
Want a conversion-optimized feed campaign? Two gates. Select exactly one active standard conversion event. Your account must be enabled for conversion bidding. Miss either and creation fails with a 403. Then ask support to switch it on.
The measurement layer, and where it breaks
The pixel alone will not give honest numbers. OpenAI is explicit here. The Conversions API is the more reliable source. Not the browser pixel.
Know the anatomy of the browser layer. Then you can verify it.
The pixel file is oaiq.min.js. It loads from an OpenAI CDN. It initializes with your pixel ID. On click-through it sets a first-party __oppref cookie. That cookie runs 30 days. It stitches the ad click to a later purchase.
Shopify's custom pixel editor is the clean install point. No theme edits, no tag manager.
In Shopify admin, open Settings, then Customer events. Add a custom pixel. Paste the snippet the app or Ads Manager generates. Then map events. These are the five names the integrations use:
• page_viewed to page_viewed
• contents_viewed on product pages
• product_added_to_cart to items_added
• checkout_started to checkout_started
• checkout_completed to order_created
Illustrative shape, not a drop-in build. Use the snippet the app or Ads Manager generates. Keep the API secret out of browser code. That belongs server side.
Subscribe with analytics.subscribe inside the pixel. Keep debug true while testing. Turn it off after.
Two traps in this part.
First, blockers. A slice of traffic kills the browser pixel every day. That is why purchases must also go server side.
Second, deduplication. Every purchase must arrive with the same event_id on both calls. OpenAI deduplicates on that key. Derive it from the Shopify order ID. It is unique and stable.
Without a shared event_id you get double counting. Your reported ROAS becomes fiction. With no server-side call at all, your purchase count is low. Both errors push you toward the same wrong conclusions.
Server side looks like this:
• Subscribe to the Shopify orders/create webhook.
• Forward the event to OpenAI's Conversions API endpoint, bzr.openai.com/v1/events.
• Send order ID, value, currency, line items, and the shared event_id.
• Keep the API secret on the server. Never in browser code.
Getting that key: in ads.openai.com, open Tools, then Conversions. Create a data source with type Web. That gives you the Pixel ID. Then open conversion keys and create one. The key begins with sk-svc- and displays exactly once. Store it in a secrets manager. Not on your desktop.
Would rather not build that plumbing? Use a measurement partner app. They map five Shopify events to OpenAI's taxonomy. Purchases forward from the order webhook. OpenAI also documents partner integrations. Either is fine. Then verify. Match their counts against Shopify orders. Never trust a dashboard alone.
UTM discipline, or GA4 lies
Untagged clicks from AI surfaces often carry no classifiable referrer. They land in Direct. Your paid spend then hides in a bucket you cannot report on.
Lock UTMs on every destination URL. Keep them consistent. Use:
utm_source=chatgpt
utm_medium=cpc
utm_campaign=[campaign name]
Confirm no other app rewrites the query string. Then check GA4 channel grouping.
One more reason. Answer engines send real traffic now. It is organic and unpriced. Tag paid chat traffic separately, or you cannot split the two later.
Feed depth, if you outgrow the app
The native app syncs catalog data. Some merchants need more control. Intraday price changes. Promotions. Real inventory under heavy variant counts.
For that, OpenAI's product feed documentation describes a direct path. Full snapshots pushed at least daily, plus API upserts during the day. Prefer Parquet with zstd. Gzipped JSONL, CSV and TSV work too. UTF-8 throughout. Stable filenames.
Promotions are API only. Removals must be explicit. Set the eligibility flag to false, or drop the record from the next full snapshot. Never let a feed go stale and hope.
New retail advertisers are usually asked for a sample first. Around 100 representative SKUs. Start with top revenue items. Cleaner signal in the first weeks.
Now note the difference. The Ads Manager feed serves sponsored product ads. The Shopify Catalog path serves organic discovery. Separate systems. Feed quality lifts both. Neither replaces the other.
A quick robots.txt check
Blocking OpenAI's crawlers hurts both surfaces. Allow Googlebot and bingbot as usual. Bing still feeds ChatGPT's retrieval layer. Do not block search or ads agents at the edge.
Verify it. Curl your own URL. Then confirm real hits in the access log. Do not guess.
Troubleshooting, in the order that saves time
If products do not appear in Ads Manager:
• Confirm the app points at the correct Ads Manager account.
• Confirm the product feed finished syncing.
• Check that the products are active and available in Shopify.
• Confirm the OpenAI Pixel for Shopify is connected.
• Refresh Ads Manager after sync completes.
• Try Chrome or Safari. Support notes browser issues here.
If the feed is fine but conversions read low:
• Check that one standard conversion event is active, and only one.
• Check the pixel fires on all pages, not just product templates.
• Check server-side events land with a shared event_id.
• Check event match quality, not just event count.
• Check currency and country on the ad account match the store.
If campaigns fail at creation with a 403:
• Ask for conversion bidding to be enabled on the account.
If nothing works, email ads-support@openai.com. Include the Ads Manager account ID you are trying to connect.
Disconnecting, and what it costs you
Disconnecting Shopify stops future product updates. It does not delete your ad account or your campaigns. Campaigns that depend on the disconnected feed may pause or stop updating.
Treat the connection as live infrastructure. Retire the app and product ads degrade quietly. Not loudly. Nobody notices that failure in week two.
What to do in your first two weeks
• Week one. Connect the app. Verify the pixel fires on all five events. Place one test order. Watch it arrive with a matching event_id.
• Week one. Fix titles and GTINs on your top 20 SKUs. Leave the long tail alone for now.
• Week two. Launch one product campaign. All products. One optimization event. A daily budget you can afford to lose. Let the auction find the context.
• Week two. Compare Ads Manager purchases to Shopify orders tagged chatgpt. Note the gap. Fix tracking before you touch bids.
Most early failures are plumbing. Not media.
Need help building this properly? Work with an OpenAI Partner ChatGPT Ads Agency for e-commerce.
A partner earns the fee in the messy parts. Feed hygiene. Server-side events. Deduplication. A bidding structure that survives a changing auction. Ask for the event_id scheme before signing. If they cannot explain it, they have never shipped a conversion campaign.
The channel is young. Inventory, pricing and penetration have all moved several times in 2026. Anyone quoting a fixed CPM from memory is quoting history. Build the plumbing so you can read the truth yourself.