Paste your Google Shopping or Meta feed link. In seconds you get the file in the format OpenAI requires and the exact list of products that would be rejected, with the reason — before you upload anything to your ad account.
The feed has more than 25,000 products; only the first 25,000 were checked.
Seenly's ChatGPT Ads integration (in beta) uploads the validated feed daily and keeps ChatGPT spend and clicks as a separate channel — not mixed into your profit report.
ChatGPT Ads reads the OpenAI product specification, not Google's. Most feeds fail on a few small details — which the converter fixes or shows you.
| What | Google Merchant | ChatGPT Ads |
|---|---|---|
| ID and links | id, link, image_link | item_id, url, image_url |
| Seller | from the Merchant account | seller_name on every row |
| Variants | item_group_id | group_id + listing_has_variations + variant_dict |
| Pre-order | preorder | pre_order |
| Ads eligibility | implicit | is_ads_eligible explicit |
| Description | HTML tolerated | plain text, max 5,000 characters; title max 150 |
| GTIN | tolerant | the check digit must be valid |
A score for the whole catalog, the errors that exclude a product (no image, zero price, invalid link) and the warnings we fix automatically (title too long, invalid GTIN, sale price higher than the price) — per product.
The product card ChatGPT builds from your feed: image, title, price, sale price. If titles get cut or images are missing, you see it here, not after paying for clicks.
OpenAI's documentation says the standard feed targets the US and other markets require confirmation. We uploaded to a live account in Romania, on the RO market, and followed processing to the end: rows accepted, ads-eligible, looked up one by one.
In beta: the catalog uploads automatically every day over SFTP, with a history for every upload. And because Seenly knows profit per product, you see which products make money and which only spend — so you don't promote the whole catalog blindly.
An accepted feed brings impressions. To know whether it brings sales, you need the steps below — otherwise you're left with clicks and the ROAS the platform reports.
order_created event.oppref parameter kept until the orderChatGPT adds it to the click link. The pixel stores it on its own; for server-side events you have to capture and send it.ChatGPT Ads uses the OpenAI product specification: different column names, the seller on every row, variants described differently and ads eligibility declared explicitly. The Google format is accepted only after OpenAI confirms it for your feed.
We tested on a live ChatGPT Ads account in Romania, with a feed set to the RO market, and every valid row was accepted and ads-eligible. Because OpenAI requires confirmation for markets outside the US, check that your account can create a feed for your country.
In Ads Manager you create a feed, get SFTP access and put the CSV directly in its root folder (no subfolders). Processing takes a few minutes; the upload history shows rows accepted, rejected and ads-eligible. Don't keep several files with the same products in the root — they add up as one catalog.
UTF-8 CSV, the format OpenAI describes for ads feeds and the one we saw accepted on a live account. We don't generate formats we haven't tested.
We don't keep the original feed: we download it, check it and generate the file. We keep the converted CSV for at most one hour for download, under a random link; then it is deleted automatically.
Not necessarily. Acceptance means the data is correct; delivery depends on the campaign, budget, bidding, review and the product being in stock.
Seenly's ChatGPT Ads integration is in beta: a validated feed uploaded automatically, an upload history and daily reporting, as a separate channel. Create an account and tell us you want to join the beta.