Guide

Facebook catalog feed: the complete guide

A Facebook catalog feed is the file that fills a Meta product catalog, the one catalog behind Advantage+ catalog ads, Facebook Shops and Instagram Shopping. Meta's spec asks for id, title, description, availability, condition, price, link, image_link and at least one of brand, gtin or mpn, each with its own format. Below is that spec with Meta's limits, the two ways to get a feed into a catalog, and the rules that turn a store export into a valid Meta product catalog.

We connect your store, build the feed and keep it in sync. Updated 2026-10-27.

At a glance

  • Required by Meta: id (100 chars, unique), title (200 max, keep to 65 or fewer), description (9,999, plain text), availability, condition, price, link, image_link, and brand, gtin or mpn.
  • Values differ from Google: availability is in stock or out of stock with a space; price is a number, a space and an ISO code (9.99 USD).
  • Meta accepts CSV, TSV, RSS XML and ATOM XML feeds; scheduled feeds cannot update more often than once an hour.
  • A duplicated id makes Meta ignore every copy of it; variants share item_group_id instead.
  • We set up the feed in Textfinity from the Meta Ads channel template; it is published as CSV on a stable URL that Commerce Manager fetches as a scheduled data feed, registered with you.

Meta's required fields for a Facebook catalog feed

FieldMeta's ruleTypical store source
idMax 100 chars; unique, or all copies are ignoredVariant SKU
titleMax 200 chars; Meta advises 65 or fewer so it is not cutProduct title, shortened
descriptionMax 9,999 chars; plain text, no HTML, links or all capsDescription with HTML stripped
availabilityin stock or out of stockStock quantity
conditionnew, refurbished or usedUsually a static value
priceNumber, space, ISO 4217 code: 9.99 USD; no symbolsPrice plus currency suffix
linkProduct page on your own domain, http:// or https://Product URL
image_linkJPEG or PNG, at least 500 x 500 px, up to 8 MBMain image URL
brand / gtin / mpnAt least one; brand and mpn max 100 chars; gtin a valid UPC, EAN, JAN, ISBN-13 or ITF-14Vendor, barcode
google_product_category or fb_product_categoryOne of them; most specific category name or IDCategory mapping

From Meta for Developers, Catalog fields for commerce, checked 2026-10-27.

Optional fields that change what the catalog can do

  • item_group_id (100 chars): the same value on every variant of one product, so ads and Shops show one product with options.
  • sale_price: lower than price, same format; pair it with sale_price_effective_date for a dated promotion.
  • additional_image_link: up to 50 more images, 2,000 characters in total, comma-separated and quoted.
  • color, size, gender (female, male, unisex), age_group (adult, all ages, teen, kids, toddler, infant, newborn): required for some categories such as clothing and shoes.
  • custom_label_0 to custom_label_4 (100 chars each): your own values for building product sets, such as price band or season.
  • quantity_to_sell_on_facebook and status (active or archived): for Shops checkout and for hiding items without deleting them.

Two ways to get the feed into a Meta product catalog

Scheduled data feed: in Commerce Manager you add a data source, paste the feed URL and choose how often Meta fetches it. Meta's feed reference lists CSV, TSV, RSS XML and ATOM XML, notes that CSV and TSV are the most common, and says scheduled feeds do not support uploads more often than once per hour. A replace schedule deletes items that are no longer in the file; an update-only schedule creates and updates but never deletes.

Platform connection: a store platform's own Meta channel (Shopify's Facebook & Instagram app, for example) writes products into a catalog without a file. It carries the store's data as it is, with no room for feed rules, and if a platform channel and a feed both write to one catalog, items collide on id. Textfinity uses the scheduled data feed route: we register the feed URL in Commerce Manager with you. Create the product (e-commerce) catalog in Commerce Manager first. Either way the item diagnostics live in Commerce Manager; Textfinity does not import them.

From a store export to a valid Facebook product feed

Most of the work is format, not content. Availability needs Meta's spelling, which a Google feed does not have (Google writes in_stock). Prices need the currency code after a space. Descriptions need HTML stripped. Titles need a short version: Meta's 65-character advice is much shorter than what a Google feed or Textfinity's AI titles (100 to 150 characters) produce, so build the Meta title with a combine of fewer fields or a regexp that trims it, and keep the long title for Google.

In Textfinity, each of those is one mapping rule we set up on the Meta Ads template, and the output is a comma-delimited CSV on a stable URL that is rebuilt whenever the store syncs. Products that should stay out of ads, such as gift cards or zero stock for prospecting, come out with a filter rule rather than a second export.

Meta Ads feed rules

availability <- if [stock] equals "0" then "out of stock" else "in stock"
price        <- [price] + " EUR"
description  <- remove from regexp <[^>]+>
condition    <- static "new"
item_group_id <- rename [parent_sku]

Examples

Worked examples, by situation

Four Meta catalogs built from four different stores and goals.

Fashion · Meta catalog, EU · Google Shopping XML as source, 2,600 variants

Reusing a Google feed as the Meta catalog

Before

availability: in_stock
price: 59.00 EUR
title: Women's Merino Crew Neck Sweater in Forest Green, Size M, Regular Fit

After

availability: in stock
price: 59.00 EUR
title: Merino Crew Neck Sweater, Forest Green

How we set it up

We read the Google-shaped XML feed URL as the source, map availability with replace from regexp _ with a space, and title as a combine of product type and color only, under 65 characters. Google keeps its long title in its own feed.

Furniture · Advantage+ catalog ads · Shopify, 600 SKUs

Price-band product sets with a custom label

Before

price: 1299.00
custom_label_0: (empty)

After

price: 1299.00 USD
custom_label_0: over-1000

How we set it up

We give custom_label_0 conditional rules on the raw price: matches regexp ^\d{4,}(\.\d+)?$ gives over-1000, ^[3-9]\d{2}(\.\d+)?$ gives mid, else entry. In Commerce Manager, one product set per label feeds separate ad sets.

Specialty food · Facebook Shops and ads · Google Sheet catalog, 150 SKUs

A small catalog kept in a spreadsheet

Before

name: Smoked Sea Salt 120 g
price: 8.50
brand: (empty)

After

title: Smoked Sea Salt 120 g
price: 8.50 USD
brand: Saltworks Co.
condition: new

How we set it up

We read the Google Sheet as the source, map title by rename from name, give price the suffix " USD", and give brand and condition static values, since every product is the shop's own brand and new.

Electronics · Meta catalog · WooCommerce CSV, 3,000 SKUs

Gallery images and a guard against small pictures

Before

images: https://shop.example/a.jpg|https://shop.example/b.jpg|https://shop.example/c.jpg
image_link: https://shop.example/a-150x150.jpg

After

image_link: https://shop.example/a.jpg
additional_image_link: https://shop.example/b.jpg|https://shop.example/c.jpg

How we set it up

We map image_link with remove from regexp \|.*$ on the gallery column, so the full-size first image replaces the 150 x 150 thumbnail, and additional_image_link with remove from regexp ^[^|]*\| on the same column (Meta accepts vertical bars as separators). An exclude filter, images is blank, reads the source column, not the mapped image_link.

Copy this plan

Plan: a working Facebook catalog feed today

Steps 1 and 6 happen in Meta's Commerce Manager; the rest in Textfinity.

  1. 01

    Create the product catalog in Commerce Manager

    Under your business portfolio, create an e-commerce (product) catalog before connecting anything. This is done in Meta's interface.

  2. 02

    Send us your store

    Shopify connects natively; other stores connect by a CSV or Google Shopping-shaped XML export URL, over HTTP or SFTP, or a Google Sheet.

    What we set up: We connect the store, export URL or Google Sheet.
  3. 03

    Start from the Meta template

    The template pre-fills Meta's required and recommended columns.

    What we set up: We start from the Meta Ads (Facebook + Instagram catalog) channel template.
  4. 04

    Add the Meta-specific rules

    Availability with a space, price with a currency code, stripped description, a short title, static condition, item_group_id for variants.

    What we set up: We map availability with an advanced rule, add the currency suffix to price, strip description with remove from regexp and build title as a combine.
  5. 05

    Filter what should not advertise

    Gift cards, samples, drafts; zero stock for prospecting catalogs if you prefer.

    What we set up: We add exclude filters with includes and is less or equal to.
  6. 06

    Register the feed on the catalog

    Add the feed URL in Commerce Manager as a scheduled data feed (hourly at most). Review item issues in Commerce Manager after the first fetch.

    What we set up: We hand you the feed URL and register it with you: you give us access or we walk you through it.

Customization tips

Make it yours

One source per catalog

If a platform channel and a feed both write to one catalog, items collide on id. Give each catalog a single source; use a second catalog when ads need different data from Shops.

Replace or update-only

A replace schedule removes items missing from the file, which keeps the catalog clean but deletes products your filter dropped. Update-only never deletes, which is safer for partial feeds and messier over time.

Product sets beat extra feeds

Custom labels let you build product sets for price band, season or margin from one feed. Extra feeds double maintenance.

Use the Google category you already have

Meta accepts google_product_category in place of fb_product_category, so a store that already maps Google categories can reuse that column instead of learning a second taxonomy.

FAQ

Questions about facebook catalog feed

What fields does a Facebook catalog feed need?

Meta requires id, title, description, availability, condition, price, link and image_link, plus at least one of brand, gtin or mpn, and a category in google_product_category or fb_product_category. Availability is in stock or out of stock, and price is a number followed by a space and a currency code.

What file format does a Meta product catalog accept?

CSV, TSV, RSS XML and ATOM XML. Meta notes CSV and TSV are the most common. Textfinity publishes a comma-delimited CSV on a stable URL that Commerce Manager can fetch on a schedule.

How often can Meta update a catalog from a feed?

Scheduled feeds cannot update more often than once per hour. For faster changes Meta points to its Catalog Batch API; for most stores an hourly or daily schedule is enough.

Can I use my Google Shopping feed as a Facebook catalog feed?

Mostly. The fields overlap, but Meta writes availability with a space instead of an underscore, recommends much shorter titles, and has its own limits on ids and descriptions. Build a separate Meta feed from the same source with those rules applied.

Set up for you

Have your Meta product catalog filled from your store, rules included.

Send us your store and your catalog in Commerce Manager. We set up the Meta feed in Textfinity with the availability, price and title rules, and register its URL as a scheduled data feed with you.

Have us build this feedOr email support@textfinity.io

Tell us your store and channels. We reply within 24 hours.