Why this is harder than renaming columns
Every platform arranges product information differently. Google wants particular column names. Meta wants different field names and has different image rules. ChatGPT Ads uses OpenAI's own commerce schema, which shares almost none of Google's field names: item_id rather than id, image_url rather than image_link, a price written as a single string like "79.99 USD" rather than a number and a currency column, and a free-form category path rather than the Google taxonomy.
The tempting shortcut — rename what you can, leave the rest blank, call it done — is worse than no tool at all, because the feed looks complete and the destination rejects it days later without telling you which column was the problem. Format conversion is built to refuse that.
Step 1: Open Format conversion
It lives in Advanced feed tools. You will see any conversions you have already set up, listed by source and destination platform.
Step 2: Pick a source and a destination
Choose where you are coming from and where you are going: Google Merchant Center, Meta Catalog or ChatGPT Ads, in any direction. A platform is offered only when its mapping is complete against that platform's own published specification — you cannot convert onto a feed missing twenty required columns.
If the destination is a feed-file-only channel, the screen says so before you start. ChatGPT Ads is one: FeedGraph builds, validates and hosts the feed and you connect that URL in OpenAI's Ads Manager.
You can also point the conversion at an existing feed configuration, and its filters, sort order and limit come across with it — so you are converting the same set of products rather than rebuilding the selection.
Step 3: Read the column plan before you convert anything
Every column the destination will emit is classified:
- ▸Carried — transfers unchanged.
- ▸Rewritten — the destination words the same thing differently, and the value is translated. Availability is the common case: Google's vocabulary is not Meta's, and neither is OpenAI's.
- ▸Derived — computed rather than copied.
- ▸Unavailable — nothing in your data can supply it. These are named individually, with what to do instead, rather than exported as empty columns.
The clearest example of that last group is Meta's own product taxonomy, which has no published mapping from Google's. The conversion carries google_product_category instead, which Meta accepts, and tells you to set Meta's own field in Commerce Manager if you want its categorisation. Naming it is the point.
For a ChatGPT Ads destination, seller_name is the one field no other schema has an equivalent for. Set it once as an account setting — FeedGraph deliberately does not fall back to your brand name, because a wrong seller name is worse than an obvious blank.
Step 4: Check what the destination would refuse
The analysis counts feed rows rather than products, because one product in five sizes is five rows. It shows how many rows are ready and how many the destination would reject, groups a single problem across many products instead of listing it repeatedly, and reports per-column fill coverage so an empty column is visible rather than silent.
Validation here is the destination's own. Colour and size are mandatory for Google on apparel and optional in OpenAI's schema, so a product held out of your Google feed can be perfectly valid on ChatGPT — and will not be refused citing a Google rule.
Step 5: Export, then connect
Export as CSV, XML or JSON.
- ▸Google and Meta — push directly from Push to channels, behind the same per-change approval as every other platform write.
- ▸ChatGPT Ads — take the hosted feed URL and add it in OpenAI's Ads Manager. Use the hosted URL rather than a one-off upload: ChatGPT expires a product 14 days after it drops out of a snapshot, so a static file decays on its own.
Your original feed is untouched throughout, so you can run both channels side by side while you transition.
Try FeedGraph free
FeedGraph is in early access. Apply to join and get onboarded personally.
Join early access →