
Meta catalog feed for Shopify
A Meta catalog powers Shops on Facebook and Instagram and the Advantage+ catalog ads that show people the products they viewed on your site. Feedflock turns your Shopify catalog into a Meta-ready feed with IDs that match your pixel and regenerates it every hour, so your ads and shop don't keep showing an old price or a size you have sold out of.

Out of stock leaves the ad. It stays in the Shop.
Meta's availability has exactly two values (in stock and out of stock), and the feed's value decides where a product can sell: out-of-stock items stop serving in ads immediately, but stay in Facebook and Instagram Shops marked as sold out.
Catch feed issues before Meta does.
Before every generation Feedflock checks that every field the channel requires is filled, and, on templates verified against the channel's own spec, that the values fit its rules. Most problems are fixed with one click, without editing products in Shopify.
Setup
Live in five steps
From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.
Create a catalog in Commerce Manager
Create a catalog in Meta Commerce Manager. It holds the products for both Shops and ads. For Shops, verify your store's domain in Business settings, because every item link has to point there.
Install Feedflock
Add Feedflock from the Shopify App Store. It reads your products, variants, stock and images directly through the Shopify API.
Pick the Meta template
Create a new feed and choose the Meta template. All nine required fields come mapped: id, title, description, availability, condition, price, link, image_link and brand (your Shopify vendor).
Keep the IDs in line with your pixel
The feed's id defaults to the Shopify variant ID, which is what Meta's own Shopify guidance uses. As long as your pixel sends the same values as content_ids, Advantage+ catalog ads can retarget the exact products people viewed.
Add the feed URL as a data source
In Commerce Manager, go to Data sources, add a data file and choose Use a URL. Set the currency and an hourly schedule. Feedflock always exports the full catalog, so a Replace schedule removes products you delete in Shopify.
https://feedflock.appfleece.com/f/demo-meta/meta.xml
The feed
What the channel receives
<item> <g:id>46123456789012</g:id> <g:item_group_id>8812345678901</g:item_group_id> <g:title>Linen shirt Sand</g:title> <g:description>Soft linen shirt with a regular fit.</g:description> <g:link>https://shop.example/products/linen-shirt-sand?variant=46123456789012</g:link> <g:image_link>https://cdn.shop.example/files/linen-shirt-sand.jpg?v=1718000000</g:image_link> <g:availability>in stock</g:availability> <g:condition>new</g:condition> <g:price>1290.00 CZK</g:price> <g:brand>Nordlin</g:brand> <g:mpn>SKU-2048</g:mpn> <g:google_product_category>Apparel & Accessories > Clothing > Shirts & Tops</g:google_product_category> <g:product_type>Men's shirts</g:product_type> <g:size>M</g:size> </item>

Nordlin
Linen shirt Sand
1 290 Kč
Feed fields
g:id
46123456789012
g:item_group_id
8812345678901
g:title
Linen shirt Sand
g:description
Soft linen shirt with a regular fit.
g:link
https://shop.example/products/linen-shirt-sand?variant=46123456789012
g:availability
in stock
g:condition
new
g:price
1290.00 CZK
g:brand
Nordlin
g:mpn
SKU-2048
g:google_product_category
Apparel & Accessories > Clothing > Shirts & Tops
g:product_type
Men's shirts
g:size
M
The channel
Two surfaces, one catalog
One feed fills Shops on Facebook and Instagram as well as the ads that run on both, so a product update reaches every surface at once.
Retargeting built on viewed products
Advantage+ catalog ads show people the exact items they looked at in your store. That works because the IDs in your feed match the content_ids your pixel sends.
Sold out leaves the ad, not the shop
Once the feed says out of stock, the item stops serving in ads straight away. In Shops it stays listed as sold out for 56 days, so a quick restock doesn't cost you the listing.
The feed
- The Meta template maps all nine required fields from Shopify, from id and price to brand
- id defaults to the Shopify variant ID, the value Meta's Shopify guidance names and most pixels send, so variants never share an ID and retargeting lines up
- One item per variant grouped by g:item_group_id. Each item links to its own variant, and size, colour and material come from your Shopify options
- Compare-at prices are used only when they're higher than the selling price. g:price keeps the regular price and g:sale_price carries the discount, so Meta never ignores a sale
- quantity_to_sell_on_facebook goes out only for tracked variants that stop selling at zero. Everything else counts as unlimited, the same way Meta's own Shopify sync treats it
- Delivery options become g:shipping blocks priced per product, so a 'free above X' rate earns Meta's free-delivery overlay on the products that qualify
- A readiness check reports wrong availability values, price formats and over-long titles before Meta does, and fetch tracking warns you if Meta stops downloading the feed
Deep dive
How Meta reads the feed
- Commerce Manager fetches a data file from a
URLhourly, daily or weekly, on the schedule you choose - The format is Google's:
RSS2.0 with the g: namespace, one item per variant - A Replace schedule treats the file as the full catalog, so anything missing from it is deleted
- Feedflock hosts the file on a stable
URLand regenerates it every hour
Technical details
Commerce Manager fetches a data file from a URL hourly, daily or weekly, on the schedule you choose, and you can request an update at any time. Meta has no XML dialect of its own. It reads Google's RSS 2.0 with the g: namespace, using the same field names, with one item element per variant.
Feedflock hosts the file on a stable URL and regenerates it every hour, so an hourly fetch always picks up current prices and stock. Because the export always contains the whole catalog, a Replace schedule keeps Meta in step with Shopify, and products you remove disappear from the catalog too.
The fields Meta requires
- Nine required fields: id, title, description, availability, condition, price, link, image_link and brand
- Availability takes exactly two values, in stock and out of stock, spelled with spaces
- Price is a number, a space and an
ISOcurrency code, with one currency per file - Brand can be replaced by gtin or mpn. Only an item with none of the three is flagged
Technical details
Nine fields are required: id, title, description, availability, condition, price, link, image_link and brand. Availability takes exactly two values, in stock and out of stock. Meta has no preorder or backorder state. Price is a number, a space and an ISO currency code, with one currency per file.
In place of brand, Meta also accepts gtin or mpn, and only an item with none of the three is flagged as missing a universal identifier. Feedflock fills brand from your Shopify vendor, gtin from the barcode and mpn from the SKU.
Variants, IDs and the pixel
- Variants of one product share g:item_group_id, and each links to its own variant page
- Every variant in a group carries the same set of variant attributes in a unique combination
- A repeated id makes Meta ignore every item that shares it, so one shared
SKUcan take out a whole group - Keep id equal to the content_ids your pixel sends and retargeting holds together
Technical details
Variants of one product share g:item_group_id, and every variant in the group carries the same set of variant attributes, such as size, colour or material, in a unique combination. A different image alone does not make a variant. Variants may share the plain product title, because Meta tells them apart by their attributes.
The id must never repeat. When it does, Meta ignores every item that shares it, which is why Feedflock defaults to the Shopify variant ID rather than a SKU that may be reused. Keep it equal to the content_ids your pixel sends and retargeting holds together. Meta re-downloads an image only when its URL changes, and Shopify's versioned image URLs take care of that for you.
Ads and Shops from the same file
- Shops need a size for items in clothing, shoe and costume categories
- Without one, the item is hidden from the shop but can still run in ads
- quantity_to_sell_on_facebook covers checkout on the platform; when it's empty, an in-stock item counts as unlimited
- g:shipping with a price of 0 unlocks the free-delivery overlay in ads
Technical details
Shops on Facebook and Instagram ask for more than ads do. Items in clothing, shoe and costume categories need a size, and an item without one is hidden from the shop even though it can still run in ads. quantity_to_sell_on_facebook tells checkout on the platform how many units you can sell. When it's empty, an in-stock item counts as unlimited. Images should be at least 500 × 500 px, and square works best in Shops.
The g:shipping block drives the free-delivery overlay in Advantage+ catalog ads, which appears when the delivery price for a country is 0. Checkout shipping for Shops is set separately in Commerce Manager's shipping profiles. Sale prices go to g:sale_price, which Meta shows only when it's lower than g:price.
The takeaway
One URL, an hourly refresh and a template that already speaks Meta's catalog format, with IDs that match your pixel. Your Shopify catalog stays the single source of truth, and Meta always shows its current state.
Claude · ChatGPT
Or set up your Meta feed in chat
Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to Meta's own tree and tells you what is still missing. You approve every change.
Create a Meta feed for my store and map my categories.
I'll create it as a draft and show you each change before I make it.
FAQ
Get on every marketplace that matters this afternoon.
Install free, connect your first feed in minutes, and let Feedflock keep it fresh and validated.