Facebook Product Feed for Shopify: Setup, Fields and Mistakes

Updated Oct 12, 2026

A Facebook product feed is a file (usually XML or CSV) that lists every product you want in your Meta catalog, with its ID, title, price, availability, link and image. You host it at a URL, add it as a scheduled data source in Meta Commerce Manager, and Meta fetches it hourly, daily or weekly so your catalog powers Advantage+ catalog ads, Instagram Shopping and Facebook Shops. Most problems come from bad product data and from feed IDs that don't match the IDs your pixel sends, not from the feed format.

What the feed actually does

Meta doesn't read your Shopify store directly. Everything it shows in catalog ads, shop tabs and product tags comes from a catalog in Commerce Manager, and the catalog is filled by one or more data sources. A product feed is the most common data source for stores that want control over what Meta sees.

The feed feeds three things:

  • Advantage+ catalog ads (the format previously called dynamic product ads), which show each shopper the products they viewed or similar ones.
  • Facebook and Instagram Shops and product tags in posts, where those are available in your country.
  • Product sets, the filtered groups of products you target in campaigns.

If the feed is wrong, every one of those is wrong too. A price that's $5 off in the feed is $5 off in your ads.

Three ways to get Shopify products into a Meta catalog

MethodHow it worksGood forWatch out for
Shopify's Facebook & Instagram channelMeta's sales channel app syncs products through the APISmall catalogs, stores that want Shops and checkout featuresLimited control over titles, images, labels and which variants sync
Scheduled feed URLA feed app or custom script publishes an XML/CSV file; Meta fetches it on a scheduleStores that run ads seriously and need control over dataYou must keep IDs consistent with your pixel
Manual upload or Google SheetsYou upload a file or connect a sheetTiny catalogs, testingGoes stale the moment prices or stock change

Many stores use both: the Shopify channel for the pixel and Shops, and a feed URL for an ads catalog. That works, but be careful about running two catalogs with different ID formats. Your pixel can only match one of them cleanly (more on that below).

Meta accepts CSV, TSV, RSS XML, ATOM XML and Google Sheets for feeds. A Google Shopping-format XML file is accepted as-is, which is handy because the same file can also go to Google Merchant Center, TikTok and Pinterest.

The fields Meta requires

Every item needs these. Missing any one of them gets the item rejected.

FieldWhat to put in itCommon Shopify source
idA unique, stable ID per variant (max 100 characters)Variant ID or SKU
titleProduct name, max 200 charactersProduct title, optionally with variant
descriptionPlain text about the productProduct description, HTML stripped
availabilityin stock, out of stock, preorder, available for orderInventory quantity and policy
conditionnew, refurbished, usedUsually new
priceNumber plus ISO currency, e.g. 29.99 USDVariant price
linkThe product page URL, ideally pointing at the variantProduct URL with ?variant=
image_linkDirect URL to the main imageFeatured or variant image
brandBrand name (or provide gtin/mpn)Vendor

Fields worth adding even though they're optional:

  • sale_price for discounted items, so ads show a strikethrough.
  • item_group_id to tie variants of the same product together.
  • color, size, gender, age_group for apparel. They improve matching and make variant filters work.
  • google_product_category or fb_product_category to help Meta classify items.
  • custom_label_0 through custom_label_4 (up to 100 characters each) for your own segmentation.
  • additional_image_link for extra photos used in carousel and collection formats.

Fix the product data before you connect anything

The feed is only a copy of your Shopify data. Clean data in Shopify means a clean catalog.

Titles

Shoppers see your title in a small card, often cut off after 30-40 characters on mobile. Put the important words first. "Merino Crew Sweater – Navy, Men's" beats "The Everyday Classic by Northfield Knitwear".

If your Shopify titles are written for brand voice, consider using the SEO title (the "Search engine listing" field) in the feed instead. Many stores already wrote shorter, keyword-led titles there.

Descriptions

Meta wants plain text. Strip HTML, remove "Free shipping on orders over $50!" banners and size-chart tables. Keep the first two sentences descriptive, since that's what gets shown when anything is.

Images

Meta asks for at least 500 x 500 pixels and recommends 1024 x 1024 or larger. Square (1:1) images display best across Feed, Stories, Reels and Shops. Common trouble spots:

  • Tall portrait photos (4:5 or 2:3 fashion shots) get cropped awkwardly in square placements.
  • Lifestyle images as the featured image, where the product is a small part of the scene. Catalog ads work better with a clean product shot first.
  • Text overlays like "SALE 40%" or watermarks, which can trigger rejections and look stale after the sale ends.

If your best ad image isn't your Shopify featured image, the feed should be able to send a different one per product.

Brand and GTINs

For your own products, brand can simply be your store name. For resold products, use the real manufacturer brand and include the GTIN (UPC/EAN barcode) from the Shopify barcode field. Leaving vendor as a supplier name like "Wholesale Co Ltd" makes ads look odd.

Variants

Export one item per variant, all sharing the same item_group_id. A T-shirt in 3 colors and 5 sizes becomes 15 catalog items in one group. Meta then shows the right color in ads when someone viewed the navy one.

Make the link point to the specific variant (/products/tee?variant=1234567890). Otherwise a shopper clicks a red shirt ad and lands on the default blue.

Prices and sale prices

Put the regular price in price and the discounted price in sale_price. In Shopify terms, the Compare-at price is your regular price and the variant price is the sale price. If you sell in the EU or UK and show tax-inclusive prices, make sure the feed price includes VAT too. A feed price lower than the checkout price is a fast way to get ad rejections and angry customers.

Availability

Keep sold-out items in the feed marked out of stock rather than deleting them. Meta won't advertise out-of-stock items, but keeping them preserves their history and avoids pixel events pointing at IDs that no longer exist. When they come back in stock, they're ready immediately. Remove items only if they're discontinued for good.

Setting up the scheduled feed in Commerce Manager

Once you have a feed URL, connecting it takes a few minutes:

  1. Open Commerce Manager and pick your catalog (or create one with the E-commerce type).
  2. Go to Catalog > Data sources and choose Add items.
  3. Choose Data feed, then the option to use a URL and schedule uploads.
  4. Paste the feed URL. If it's password-protected, add the credentials.
  5. Set the schedule: hourly, daily or weekly, plus the time and time zone.
  6. Pick the default currency if your file doesn't include currency on every price.
  7. Start the upload and wait for the first fetch to finish.

After the first fetch, open the data source and check the Issues tab. Fix anything flagged as an error first; warnings for missing optional fields can wait.

For a store with daily price or stock changes, an hourly or daily fetch is reasonable. Keep in mind the catalog is only as current as the last fetch and the last time your feed file was regenerated, so "hourly" in Commerce Manager doesn't help if the file itself updates once a day.

Make your feed IDs match your pixel

This is the mistake that breaks catalog ads without showing an obvious error.

When a shopper views a product, your Meta pixel (and Conversions API) sends a ViewContent event with content_ids. Meta looks those IDs up in your catalog to know which product to retarget. If the pixel sends 44012345678901 (a Shopify variant ID) and your feed's id is TEE-NAVY-M (a SKU), nothing matches. Your retargeting ads then fall back to generic products or don't deliver.

How to check it:

  • In Commerce Manager, open the catalog and look at the Events section, which shows whether pixel events are matched to catalog items and the match rate.
  • In Events Manager, open your pixel, view a recent ViewContent event and compare its content_ids with the IDs in your feed.

Shopify's Facebook & Instagram channel usually sends variant IDs, sometimes in a prefixed format depending on the channel's settings. Whatever your pixel sends, set your feed's id to the same format. Aim for a match rate well above 90%. Once you've picked an ID format, don't change it, or Meta loses the history attached to every item.

Structure the catalog so you can actually use it in ads

A feed with 3,000 products in one undivided catalog limits what you can do. Product sets and labels let you build campaigns that match how you sell.

Product sets

Product sets are filters on catalog fields: brand is X, price under 50, product type contains "dresses", custom label 0 is "bestseller". Typical sets for a fashion store:

  • Bestsellers for prospecting.
  • New arrivals (last 30 days) for repeat buyers.
  • Clearance with a sale price set, for a separate budget.
  • High margin items, for a campaign with a higher target cost.

Product sets based on Shopify collections are common, since your collections already reflect how you merchandise. You'll need the collection information in the feed (as a label or product type) to filter on it.

Custom labels

Use the five custom label slots for things Meta can't know: margin tier, season, bestseller status, price band. Keep values short and consistent ("margin_high", not "High margin items (above 60%)"). A label that changes daily is fine as long as the feed updates as often.

Selling in several countries or languages

If you sell in the US, UK and Germany, one USD catalog will show Germans dollar prices. You have two options:

  • Separate catalogs per country, each with its own feed in local currency. Simple, but it multiplies setup and pixel matching.
  • One catalog with country and language feeds. Your main feed holds the base data, and supplementary country feeds override price and availability for a country, while language feeds override title, description and link. Each override file uses an override column with values like DE for a country or de_DE for a language.

With Shopify Markets, the prices in country feeds should come from the market's price list (including any rounding rules), not a converted number, so the ad price matches what the shopper sees on your site.

Mistakes that cost stores the most

  1. Feed IDs that don't match the pixel. Check this first if catalog ads underperform.
  2. Two catalogs connected to the same pixel with different ID formats. Pick one catalog for ads.
  3. Sending every product, including samples, gift cards and wholesale-only items. Exclude them with tags or collections before they waste spend.
  4. Prices that differ from the checkout, usually tax, currency or an expired sale price. Meta can reject items and the account can get flagged for price mismatches.
  5. Portrait or lifestyle images cropped into squares. Resize to the ratio your placements use.
  6. A feed that updates less often than your stock changes. If you drop a product weekly and sell out in hours, a daily fetch means ads for sold-out items.
  7. Deleting sold-out items instead of marking them out of stock.
  8. Links to the parent product instead of the variant, so shoppers land on the wrong color.
  9. Ignoring the Issues tab after the first upload. Rejected items silently stay out of every ad.

How Awesome Feeds helps

Awesome Feeds (formerly Awesome Facebook Product Feed) turns your Shopify catalog into a Google-format XML feed URL that Meta Commerce Manager accepts as a scheduled data source, and it rebuilds the file automatically when products, prices, inventory or collections change. You can choose the product ID format to match your pixel, export compare-at prices as sale prices, pick and resize images per channel, set custom labels, and add collection IDs as internal labels for product sets. Start with creating a product feed, then follow adding it to Commerce Manager.

Don't have Awesome Feeds yet? Install it from the Shopify App Store →

Frequently asked questions

Do I need a product feed if I use Shopify's Facebook & Instagram channel?

Not necessarily. The channel syncs products to a Meta catalog for you. Stores add a separate feed when they need more control over titles, images, variants, labels or which products appear in ads. If you run both, make sure only one catalog is used for ads and its IDs match your pixel.

How often does Facebook update my product feed?

Meta fetches a scheduled feed hourly, daily or weekly, whichever you set in Commerce Manager. The catalog is only as fresh as the feed file itself, so check how often your app or script regenerates the file. You can also trigger a manual fetch from the data source page.

Why are products missing from my Facebook catalog?

The usual causes are missing required fields (often image, brand or price), images below 500 x 500 pixels, policy rejections, or the product being excluded from the feed in the first place. Open the data source in Commerce Manager and check the Issues tab, which lists each affected item and the reason.

Can I use the same feed for Facebook and Google Shopping?

Yes. Meta accepts Google Shopping-format XML, so one well-built feed can serve both Commerce Manager and Google Merchant Center. You may still want separate feeds when the channels need different images, titles or product selections.

What image size should a Facebook product feed use?

Meta's minimum is 500 x 500 pixels, and 1024 x 1024 or larger is recommended. Square images display most consistently across Feed, Stories, Reels and Shops. Avoid text overlays and put a clean product shot first.