Examples

Facebook catalog feed example

A Facebook catalog feed is a CSV, TSV or XML file with one row per product and Meta's field names as the header: id, title, description, availability, condition, price, link, image_link and one of brand, gtin or mpn. Below is a complete example file, then seven example feeds from different stores, each with the rows Meta accepts and the Textfinity rule that produces them.

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

At a glance

  • Every row needs id, title, description, availability, condition, price, link and image_link, plus at least one of brand, gtin or mpn.
  • Meta is strict about spelling: availability is "in stock" with a space, price is "28.00 USD" with a space and an ISO 4217 code, and images are JPEG or PNG of at least 500 x 500 pixels.
  • Variants of one product share item_group_id; each variant keeps its own id of up to 100 characters. If two rows share an id, Meta ignores every copy.
  • Textfinity's team builds these rows from Shopify, a CSV export or a Google-shaped XML feed and publishes them on a stable feed URL that Commerce Manager fetches on a schedule.

A Facebook catalog feed example, row by row

This is the smallest file that uploads cleanly for a product with variants: the eight required fields, brand, the variant fields and a category. Titles stay under Meta's recommended 65 characters, and the description is plain text without links. The file is comma-separated with a header row; values that contain commas sit in double quotes.

meta-catalog.csv

id,item_group_id,title,description,availability,condition,price,link,image_link,brand,color,size,gender,age_group,google_product_category
TEE-NVY-S,TEE-ORG,Organic Cotton Tee Navy,"Midweight organic cotton tee, relaxed fit.",in stock,new,28.00 USD,https://shop.example/tee?v=1,https://cdn.example/tee-navy.jpg,Marlow,Navy,S,unisex,adult,212
TEE-NVY-M,TEE-ORG,Organic Cotton Tee Navy,"Midweight organic cotton tee, relaxed fit.",in stock,new,28.00 USD,https://shop.example/tee?v=2,https://cdn.example/tee-navy.jpg,Marlow,Navy,M,unisex,adult,212
TEE-SND-M,TEE-ORG,Organic Cotton Tee Sand,"Midweight organic cotton tee, relaxed fit.",out of stock,new,28.00 USD,https://shop.example/tee?v=3,https://cdn.example/tee-sand.jpg,Marlow,Sand,M,unisex,adult,212

What each value in the example means

FieldExample valueMeta rule
idTEE-NVY-SUnique per row, max 100 characters; the variant SKU is the safe choice
item_group_idTEE-ORGSame value on every variant of one product, max 100 characters
titleOrganic Cotton Tee NavyMax 200 characters, 65 recommended so placements do not cut it
descriptionMidweight organic cotton tee…Plain text, max 9,999 characters, no HTML, links or all caps
availabilityin stockin stock or out of stock, with a space
conditionnewnew, refurbished or used
price28.00 USDNumber, space, ISO 4217 code; period as decimal point, no symbol
sale_price22.00 USDSame format, lower than price; add sale_price_effective_date for dated offers
image_linkhttps://cdn.example/…jpgJPEG or PNG, at least 500 x 500 pixels, up to 8 MB
additional_image_link"url1,url2"Up to 50 URLs in one quoted cell
age_groupadultadult, all ages, teen, kids, toddler, infant or newborn
google_product_category212Google category ID or path; accepted instead of fb_product_category

Field names, limits and values from Meta's catalog fields reference, checked 2026-10-27.

Why rows like these fail in Commerce Manager

  • Google spellings left in place: in_stock and out_of_stock are Google values. Meta wants the words with a space, and a feed copied from Merchant Center fails on this first.
  • Price with a symbol or a comma decimal: $28 or 28,00 USD is rejected; 28.00 USD is accepted.
  • Duplicate ids: a store that uses the product handle as id writes it on every variant, and Meta drops all of them, not just the extras.
  • Thumbnail image URLs: store exports often point at 150 or 300 pixel thumbnails that fall below Meta's 500 x 500 minimum.
  • HTML descriptions: paragraph tags and inline styles from the store editor are not plain text. Strip them before the feed is built.

Examples

Worked examples, by situation

Seven stores, seven different reasons the plain store export was not good enough for Meta. Each shows the rows before and after, and the rule that changed them.

Fashion · Meta Advantage+ catalog ads · 2,400 variants

One row per variant, grouped by item_group_id

Before

Handle: linen-shirt
Option1: Sand / M
SKU: LS-SND-M
Variant price: 59.00

After

id: LS-SND-M
item_group_id: linen-shirt
color: Sand
size: M
price: 59.00 USD

How we set it up

We map id by rename from SKU and item_group_id by rename from Handle; color takes Option1 with remove from regexp \s*/.*$ (keeps the part before the slash); size takes Option1 with remove from regexp ^.*/\s* ; price gets the suffix " USD".

Furniture · Instagram Shopping · 350 SKUs, seasonal sale

Sale price with an end date, extra images in one cell

Before

Price: 899.00
Compare at price: 1099.00
Images: https://cdn.example/oak-1.jpg,https://cdn.example/oak-2.jpg,https://cdn.example/oak-3.jpg

After

price: 1099.00 USD
sale_price: 899.00 USD
sale_price_effective_date: 2026-11-24T00:00-05:00/2026-12-01T23:59-05:00
additional_image_link: "https://cdn.example/oak-2.jpg,https://cdn.example/oak-3.jpg"

How we set it up

We give price a conditional rule: if Compare at price matches regexp ^\s*$, Price with the suffix " USD", else Compare at price with the suffix " USD"; sale_price uses the same condition to leave the field empty or add the suffix to Price; sale_price_effective_date is a static value for the campaign window; additional_image_link applies remove from regexp ^[^,]*,? to Images, which drops the first URL and keeps the rest comma-separated.

Electronics · WooCommerce Google XML reused for Meta · 1,200 SKUs

A Google Shopping item turned into a Meta row

Before

<g:id>CHG-65W</g:id>
<g:availability>in_stock</g:availability>
<g:condition>new</g:condition>
<g:price>49.00 USD</g:price>

After

id: CHG-65W
availability: in stock
condition: new
price: 49.00 USD

How we set it up

We read the plugin's Google-shaped RSS feed as an XML URL source and build the Meta feed from it. availability gets replace from regexp _ with a space. Everything else is a rename, because the field names already match.

Beauty · Facebook and Instagram Shops checkout, US · 180 SKUs

Discontinued shades archived, stock passed through

Before

Shade: Fig
Status (Shopify): archived
Inventory: 0

After

status: archived
quantity_to_sell_on_facebook: 0
availability: out of stock

How we set it up

We add the status and quantity_to_sell_on_facebook columns to the Meta feed. status gets an advanced rule: if [Status] equals "archived" then "archived" else "active". quantity_to_sell_on_facebook is a rename from Inventory.

Specialty coffee · Meta catalog, Sweden · 90 SKUs, Swedish copy

SEK prices and Swedish titles for a local catalog

Before

Title: Ethiopia Guji Natural, 250 g whole bean
Price: 159

After

title: Etiopien Guji Natural, 250 g hela bönor
price: 159.00 SEK

How we set it up

We set up an AI config that translates the Title field into Swedish, with Roast as additional context, and the generations are accepted after a read-through. title uses replace from AI config, which takes accepted translations and falls back to Title; price gets an advanced rule: [Price] + ".00 SEK" (the store exports whole kronor).

Home decor · catalog product sets by margin · 3,000 SKUs

Custom labels that Commerce Manager can build sets from

Before

SKU: VASE-112
(margin lives in a spreadsheet)

After

custom_label_0: margin-high
custom_label_1: bestseller

How we set it up

We join a Google Sheet keyed on SKU with a margin_band column as a merged source. custom_label_0 is a rename from margin_band; custom_label_1 gets a conditional rule, Tags includes bestseller → static value bestseller. Product sets then filter on custom_label_0.

Pet supplies · rows rejected for images and ids · 700 SKUs

Fixing duplicate ids and thumbnail images

Before

id: dog-bed (on 3 sizes)
image_link: https://shop.example/bed-150x150.jpg

After

id: BED-S / BED-M / BED-L
image_link: https://shop.example/bed.jpg

How we set it up

We map id by rename from the variant SKU instead of the slug; image_link gets remove from regexp -\d{2,4}x\d{2,4}(?=\.(jpe?g|png)$) to point at the full-size file. Feed hygiene's URL check flags malformed image links before Meta sees them.

Copy this plan

Plan: build and link a Facebook catalog feed

Start from the store data you already have; the catalog itself is created in Meta's interface.

  1. 01

    Create a product catalog in Commerce Manager

    Make an e-commerce (products) catalog under your business portfolio. This happens in Meta's interface, before anything is connected.

  2. 02

    Send us the store as a source

    Shopify, or the URL of a CSV export or a Google-shaped XML feed. The catalog gets profiled first, so empty brands, long titles and broken image URLs show up before any mapping.

    What we set up: We connect the store and run the feed hygiene profile on it.
  3. 03

    Start from the Meta channel template

    The template pre-fills Meta's field names. Map each one from your columns using the table above.

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

    Apply the Meta-specific values

    Availability with a space, price with a currency code, a static condition, variant SKU as id, plain-text description.

    What we set up: We set availability with an advanced rule, add the currency suffix to price, give condition a static value, and strip HTML from description with remove from regexp <[^>]+>.
  5. 05

    Check a few products, then register the feed URL

    Open three products and compare them with the example rows. Then add the feed URL in Commerce Manager as a scheduled data feed on the catalog (Meta's interface).

    What we set up: We check the rows in the product explorer, hand you the feed URL and register it in Commerce Manager with you: you give us access or we walk you through it.

Customization tips

Make it yours

Variant SKU as id, product id as item_group_id

Using the variant SKU keeps ids unique and stable across syncs. The trade-off: if your store reuses SKUs across products, fix that in the store first, because any duplicate id makes Meta drop every copy.

Short titles for ads, long ones for Shops

Meta recommends 65 characters. A shorter combine (color, product, brand) reads better in carousel ads but drops detail that helps on the Shop product page. If both matter, run two feeds into two catalogs.

Reuse google_product_category

Meta accepts a Google category ID in place of fb_product_category. If you already map Google categories for Shopping, reuse that column and skip the second taxonomy.

Hourly is the floor

Scheduled data feeds in Commerce Manager fetch at most once an hour. Stock that sells out in minutes needs the store's own channel or Meta's API, not a faster feed.

FAQ

Questions about facebook catalog feed example

What does a Facebook catalog feed look like?

It is a CSV, TSV or XML file with one row per product or variant. The header uses Meta's field names: id, title, description, availability, condition, price, link, image_link and brand, gtin or mpn, plus optional fields such as item_group_id, sale_price, color, size and custom_label_0 to custom_label_4.

What is the price format in a Meta catalog feed?

A number with a period as the decimal point, a space and a three-letter ISO 4217 currency code, for example 9.99 USD. Currency symbols are not accepted, and sale_price uses the same format and must be lower than price.

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

Mostly. The field names overlap, but availability must be rewritten from in_stock to in stock, titles are better kept near 65 characters, and descriptions must be plain text. A rule-based tool can apply those changes on every sync instead of editing the file by hand.

Why does Meta ignore some products in my feed?

The most common cause is duplicate ids: when two rows share an id, Meta ignores all instances. Other causes are images under 500 x 500 pixels, prices without a currency code and missing brand, gtin or mpn.

Set up for you

Have your store export turned into rows Meta accepts.

Send us your store URL and your catalog in Commerce Manager. We build the Meta feed with the value rules above 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.