Search Documentation

Search for a documentation page...

Product Feeds

Hosted CSV product feeds for ChatGPT ads, Google Merchant Center and Meta catalogs.

Your store publishes product feeds as CSV files at public URLs. Paste a feed URL into the ad platform and it re-fetches the file on its own schedule. Copy each URL from Settings → Feeds in the admin.

FeedPathUsed by
ChatGPT (OpenAI Ads)/api/feed/openaiOpenAI Ads Manager
Google Merchant Center/api/feed/gmcGoogle Merchant Center
Meta/api/feed/metaMeta Commerce catalog
curl https://your-store.yns.store/api/feed/openai

The feeds are served from your store's own domain. If your storefront is a separate app, it must forward /api/feed/* to the platform.

Every feed lists published products, one row per variant, priced with your store's tax setting. Bundles are left out. Settings → Feeds shows when each feed was last fetched and how many rows it returned.

ChatGPT (OpenAI Ads)

The OpenAI feed follows OpenAI's product file schema, so Ads Manager can take the URL as a hosted feed. The response is text/csv with a fixed header: every row has every column, and an unknown value is an empty cell.

Choose what to advertise

Two options in Settings → Feeds:

OptionEffect
CollectionsOnly products in at least one of the selected collections are included. Leave empty to include every published product.
Exclude out-of-stockSkip variants with no stock. When off, they are listed with availability set to out_of_stock.

Languages and currencies

The base feed uses your store's language and currency. Each additional language or currency you have enabled gets its own feed, with the market in the path because Ads Manager rejects hosted URLs with a query string:

URLFeed
/api/feed/openaiStore language and currency
/api/feed/openai/de-deGerman, store currency
/api/feed/openai/eurStore language, prices in EUR
/api/feed/openai/de-de/eurGerman, prices in EUR

The path is lowercase. A language or currency you have not enabled returns 404.

A feed in another language uses translated product names and summaries, falling back to the base text where a translation is missing. A feed in another currency includes only variants that have an explicit price in that currency – prices are never converted.

Columns

ColumnValue
item_idVariant ID
group_idProduct ID, shared by all variants of a product
titleProduct and variant name, up to 150 characters
descriptionProduct summary (title if none), up to 5000 characters
urlCanonical product page for the variant
brandProduct brand, or the store name
image_url, additional_image_urlsVariant images (videos excluded)
availabilityin_stock or out_of_stock
price, sale_priceWith currency code, e.g. 29.00 EUR. price is the price before a promotion and sale_price the promoted price.
gtinThe variant barcode, only when it is a valid GTIN-8/12/13/14
variant_dict, color, sizeVariant options
product_categoryCategory name
weight, length, width, heightGrams and millimetres, with item_weight_unit and dimensions_unit
review_count, star_ratingFrom product reviews, when there are any
is_ads_eligible, is_eligible_searchAlways true
is_eligible_checkouttrue only when your store has both a privacy policy and terms page
seller_url, seller_privacy_policy, seller_tos, return_policyStore and legal page URLs
store_countryCountry of the store address

Target ad groups by collection

ads_metadata is a JSON object an ad group can filter on as ads_metadata.<key>:

{ "on_sale": "false", "collection_summer-sale": "true" }

There is one collection_<slug> key per collection the product belongs to, so put products in a collection to target them together. on_sale is true when a promotion applies.

Rows OpenAI would reject

OpenAI rejects a row without an image or a positive price. Those variants are left out of the CSV and listed in Settings → Feeds with the reason (no_image or no_price), so you can fix them.

Google Merchant Center and Meta

/api/feed/gmc and /api/feed/meta return CSV in each platform's column format. The Google feed reports dimensions in centimetres (product_height, product_width, product_length) and weight in grams (product_weight); earlier versions reported dimensions ten times too small, so re-fetch the feed in Merchant Center after updating.