A Facebook product feed is a file of your products that Meta reads into a catalog in Commerce Manager, so they can show in your ads and shops on Facebook and Instagram. Each product needs nine fields: id, title, description, availability, condition, price, link, image_link and brand (plus size for clothing and shoes sold in Shops). Meta takes CSV, TSV, XLSX, Google Sheets or XML.
The template and examples on this page show what Meta expects the file to look like. If you run a WooCommerce store, don’t maintain that file as a sheet: generate the feed from your products with CTX Feed, which keeps it updated at a URL Meta fetches on a schedule. Below you’ll find Meta’s current limits field by field, the CTX Feed setup, CSV and XML examples, and a fix for each error Commerce Manager shows.
What changed in Meta’s spec recently, if your feed was built from an older guide:
availabilitynow accepts onlyin stockandout of stock. Older guides, including the previous version of this page, listed five values.- There’s a new set of direct checkout fields,
native_commerceandproduct_disclosures. - Meta now recommends
internal_labelinstead ofcustom_label_0–4for building product sets. quantity_to_sell_on_facebookonly matters for Shops on Facebook and Instagram.
What is a Facebook (Meta) product feed?
A catalog holds the products you advertise and sell across Meta’s apps, and a data feed is the file that fills it. Meta calls a feed “a file containing product data that you upload to your catalog”, either once or on a schedule.
One product catalog powers several things:
- Advantage+ catalog ads show each person your most relevant products, based on their interests and actions.
- Shops are a storefront on Facebook and Instagram, where you feature products or collections.
- Product tags make your Instagram ads shoppable.
- Collection and carousel ads can pull their products from the catalog.
So one feed covers Facebook and Instagram. You don’t build a separate Instagram feed.
Facebook product feed specifications (2026)
All field names, and some values, must be in US English. The tables below follow Meta’s Product data specifications for catalogs page, checked on 19 October 2026.
Required fields
| Field | What Meta wants | Limit / values |
|---|---|---|
id | A unique ID per product, ideally the SKU. Case sensitive, and it must not match any item_group_id. For Advantage+ catalog ads, it must match the content ID your Meta Pixel sends for the same product. | 100 characters |
title | A specific title, in title case. | 200 characters; under 65 recommended so it isn’t cut off |
description | Plain text, different from the title, no links, not all capitals. | 9,999 characters |
availability | Current stock status. | in stock, out of stock |
condition | Product condition. | new, refurbished, used |
price | A number, a space, then the ISO 4217 currency code. Use a period for decimals and no currency symbol. | e.g. 9.99 USD |
link | The product page. To sell with Shops, it must be on a domain your business owns. | Starts with http:// or https:// |
image_link | The main product image. | JPEG or PNG, at least 500 × 500 px, under 8 MB |
brand | The brand name. | 100 characters |
size | Required only for Shops, and only in some categories, such as clothing and shoes. | 200 characters |
Out-of-stock products don’t show in your ads. They stay in your Facebook and Instagram shops for up to 56 days, marked “sold out”.
Prices: one currency per file. To sell in other currencies, upload a country feed.
Required fields for direct checkout
Meta lists two fields for selling through direct checkout (agentic commerce), which Meta says “is not available to everyone yet”.
native_commerce:truemakes the product eligible for direct checkout.false, or leaving it blank, means it isn’t.product_disclosures: compliance disclosures such as California Proposition 65 warnings or choking hazards. Each disclosure has subfields (contentis required;title,symbol,jurisdictionsand others are optional), numberedproduct_disclosures[0],[1]… up to 20 per product.
If direct checkout isn’t open to your account yet, leave both out.
Optional fields
Meta recommends sending as much relevant data as you can. These are the ones store owners use most:
| Field | What it does | Notes |
|---|---|---|
sale_price | Discounted price, same format as price | Must be lower than price. Meta hides a sale price that’s equal to or higher than the full price. |
sale_price_effective_date | When the sale starts and ends | Format 2025-11-24T09:30-08:00/2025-11-30T23:59-08:00. Without it, the sale runs until you remove the sale price. |
item_group_id | Groups variants (sizes, colours, patterns) of one product | Same value on every variant; must differ from every id |
status | active or archived | Archived products don’t show in ads or shops |
additional_image_link | Extra images | Up to 20 URLs |
gtin | Barcode: UPC, EAN, JAN, ISBN or ITF-14 | No dashes or spaces; only if you’re sure it’s correct |
mpn | Manufacturer part number | Use it when there’s no GTIN; 100 characters |
google_product_category / fb_product_category | Category from Google’s or Meta’s list | The category name or its ID number |
quantity_to_sell_on_facebook | Stock you have to sell | Shops only; a whole number |
color, material | Colour in words (not a hex code), material | 200 characters each |
pattern | Pattern or print | 100 characters |
gender | female, male, unisex | |
age_group | adult, all ages, teen, kids, toddler, infant, newborn | |
rich_text_description | HTML description for Shops | Tags <p>, <b>, <i>, <ul>, <li>; not used in ads; keep description too |
video[0].url … video[19].url | Product videos for Advantage+ catalog ads | A direct file link, not a YouTube page; max 200 MB |
shipping | Country:Region:Service:Price | Enables the “Free shipping” overlay (price 0.0) |
shipping_weight | Weight in lb, oz, g or kg | |
internal_label | Labels for product sets, visible only to you | Format ['summer','trending']. Recommended over custom labels: no policy review on change |
custom_label_0–4 | Text for your ad creative | 100 characters |
custom_number_0–4 | Whole numbers to filter product sets by range | 0 to 4294967295, no decimals |
Meta for Developers lists more optional fields.
Clothing and other variant products
Meta’s spec only requires size, and only for Shops in categories such as clothing and shoes. color, gender and age_group are optional. For variants, give each one its own row and its own id, the same item_group_id, and the attributes that tell them apart (color, size, material, pattern, gender). Fill in the same attributes for every variant in the group.
Additional fields for selling in India
Meta adds these only for products you sell with Shops or on WhatsApp in India:
origin_country: two-letter ISO country code.importer_nameandimporter_address, if the origin isn’t India.importer_addressis a JSON structure withstreet1,cityandcountryrequired.manufacturer_info: required for Shops.wa_compliance_category: WhatsApp only;COUNTRY_ORIGIN_EXEMPTfor non-physical goods such as services.
CTX Feed writes importer_address as a JSON object. If you map plain text, it wraps the text as the street1 value.
Other catalog types
Hotels, flights, destinations, vehicles, real estate, streaming media, apps, publications, professional services and activities each have their own field lists. You pick the catalog type when you create the catalog, and you can’t switch it later.
Feed formats: CSV, TSV, XLSX, Google Sheets or XML
| Format | Good for | Watch out for |
|---|---|---|
| CSV | Spreadsheet editing; most feed plugins | Built in a text editor or by code? Enclose fields that contain commas or spaces in double quotes. |
| TSV | Text with lots of commas | Same header-row layout as CSV |
| XLSX | Small, rarely changing catalogs, filled in by hand from Meta’s template | Download the template from Commerce Manager (below) |
| Google Sheets | Small, rarely changing catalogs | Only the first tab is read; share it as “Anyone with the link” |
| XML (RSS/ATOM) | Generated feeds | Must start with an <?xml declaration; one field per line |
Limits for every format: 100 MB for a one-time upload, 4 GB for a scheduled feed, and 5 MB per line. Meta recommends up to 1 million items per feed; split bigger catalogs into several feeds.
For a store, the feed should be a file at a URL that Meta fetches on a schedule, hourly, daily or weekly, so the catalog follows your products. A sheet or XLSX file only changes when someone edits it.
CTX Feed generates the Facebook feed as XML, CSV or TXT (tab-separated, which is Meta’s TSV format), three of the formats Meta accepts.
How to create a Facebook product feed from WooCommerce with CTX Feed
CTX Feed builds the feed from your WooCommerce products and keeps it updated at a URL Meta can fetch.
Why not keep a sheet by hand?
A spreadsheet feed works until your store changes. Then it fails in four ways:
- Stale price and stock. For prices and availability, Meta suggests an hourly update schedule. A sheet is only as current as its last edit, so a product that sold out in WooCommerce stays
in stockin your ads until someone fixes the row. - Re-uploads. A one-time upload changes nothing until you upload again. Even a scheduled feed only fetches what’s in the file, and Meta lists the upkeep of a data feed as “Update data file as needed”.
- One row per variant. Every size and colour needs its own row, its own
idand the shareditem_group_id. A T-shirt in 4 colours and 5 sizes is 20 rows to keep in step. - Rejected items. One
in_stock, one$24.00or one unquoted comma gets products flagged or rows misaligned.
CTX Feed reads the same data from WooCommerce every time it rebuilds the file on your Update interval. It can write each variation as its own row, with the parent product’s ID in item_group_id, and it writes values in Meta’s format (see the table below).
Set up the feed
Here’s the short version; the full guide with screenshots has every setting.
- Go to CTX Feed → Manage Feeds and click Make Feed.
- In Feed settings, choose the Facebook Catalog / Instagram template, the Country you sell to (required; it sets currency and tax handling), a File type, and an Update interval.

- On the Config tab, Meta’s nine required fields are already mapped to WooCommerce data. Check two rows: condition is fixed to
new, and brand is your site name, or Parent Brand if you use WooCommerce Brands. - Barcodes: WooCommerce 9.2 and later has its own GTIN, UPC, EAN, or ISBN field on the product’s Inventory tab, which you can map to
gtin. For MPN, turn on CTX Feed’s identifier fields under System → Settings → Product attributes → Product identifiers. - Categories: build a mapping set under Data mapping → Category mapping with the Facebook taxonomy (you search Meta’s list as you type), then select it as the Value of your category row on the Config tab. Category mapping guide.
- Optional: on the Filters tab, Product status is free. Removing out-of-stock or no-image products, or limiting the feed to some categories, needs CTX Feed Pro.
- Click Save & generate. On Manage Feeds, click the Copy URL icon next to the feed’s URL and leave Auto Update on. Then add the URL to Commerce Manager.

What CTX Feed changes for Meta (and not for Google)
The Facebook template has its own field mapping, separate from the Google template. CTX Feed formats each value the way Meta’s spec asks:
| In the feed | What CTX Feed writes for Meta |
|---|---|
| Availability | Meta’s spaced values, in stock / out of stock, not Google’s in_stock. |
| Title / description | Cut at Meta’s limits, 200 and 9,999 characters (Google: 150 / 5,000). |
| Variation descriptions | The variation’s attributes are added to the end, e.g. “— Color: Red, Size: L”. |
internal_label | Meta’s single-quoted list, ['summer','trending']. |
| Video | One Video attribute, mapped once per video. |
| Field names (XML) | Meta’s fields as g: tags (<g:id>, <g:title>, <g:link>…), like Meta’s sample. Meta-only fields such as fb_product_category have no prefix. |
| Price | A number, a space and the currency code, e.g. 24.00 USD, using the currency set on the feed’s price column. |
All Meta attributes and the Facebook template are in the free version.
Upload your feed to Meta Commerce Manager
- In Commerce Manager, select your catalog, open the Catalog tab and go to Products or Data sources.
- Click + Add and select Data file. Leave Commerce Manager selected as the format your file follows.
- Choose Use a URL or Google Sheets and paste your CTX Feed URL.
- Name the feed and pick the default currency, used when a price has no currency code.
- Choose an hourly, daily or weekly schedule, then click Upload.
A standard CTX Feed URL is public, so leave the username and password empty.
Replace or update? A Replace schedule (the default) adds, updates and deletes products to match your file. An Update schedule only adds and updates; products you drop from the file stay in the catalog.
Meta’s fetch schedule vs CTX Feed’s update interval
Two clocks run here: CTX Feed rebuilds the file, and Meta fetches it.
- CTX Feed: every 1h, 6h, 12h, 24h or 1w in the free version, or every 5, 15, 30 or 45 minutes with CTX Feed Pro.
- Meta: hourly, daily or weekly. Meta’s advice is to fetch shortly after your file updates, e.g. a 9:15 fetch for a file that updates at 9:00.
CTX Feed’s schedule starts from the moment you switch Auto Update on. To have a 24-hour feed rebuild at 02:00, toggle Auto Update off and on at 02:00, then set Meta’s daily fetch a little later.
What a Facebook feed file looks like: CSV template and XML example
These two files show the format Meta reads. They’re for reference: a store’s real feed should come from its products, as set up above.
Facebook product feed CSV template (example)
Here’s what the CSV looks like. The two T-shirt rows are variants of one product: they share an item_group_id and each has its own id. Only the first row is on sale, and its sale_price is lower than its price.

id,item_group_id,title,description,availability,condition,price,sale_price,link,image_link,brand,gtin,google_product_category,color,size,gender,age_group
"TSHIRT-BLU-M","TSHIRT-01","Organic Cotton T-Shirt, Blue, M","Relaxed-fit T-shirt in organic cotton. Cap sleeves.","in stock","new","24.00 USD","19.00 USD","https://example.com/product/organic-tshirt/?attribute_color=blue&attribute_size=m","https://example.com/images/tshirt-blue.jpg","Example Brand","","Apparel & Accessories > Clothing > Shirts & Tops","Blue","M","unisex","adult"
"TSHIRT-RED-L","TSHIRT-01","Organic Cotton T-Shirt, Red, L","Relaxed-fit T-shirt in organic cotton. Cap sleeves.","out of stock","new","24.00 USD","","https://example.com/product/organic-tshirt/?attribute_color=red&attribute_size=l","https://example.com/images/tshirt-red.jpg","Example Brand","","Apparel & Accessories > Clothing > Shirts & Tops","Red","L","unisex","adult"
"MUG-001","","Stoneware Coffee Mug","Hand-glazed stoneware mug, 350 ml. Dishwasher safe.","in stock","new","16.50 USD","","https://example.com/product/stoneware-mug/","https://example.com/images/mug.jpg","Example Brand","","Home & Garden > Kitchen & Dining > Tableware > Drinkware > Mugs","","","",""
Every value is in double quotes, so commas and spaces inside a value can’t shift the columns.
Template tips:
availabilityis exactlyin stockorout of stock: lowercase, with a space.priceandsale_priceare a number, a space and the currency code; no$.- Leave
gtinempty unless you’re sure the barcode is right. google_product_categorytakes the category name or its ID. Use a category from Google’s current list; the paths above are examples.- Keep the header names exactly as Meta spells them.
Copy it to see the format. For a live store, CTX Feed builds and updates this file from WooCommerce automatically.
Facebook product feed XML example
Meta’s own sample “Products” XML file is an RSS 2.0 feed that declares Google’s namespace (xmlns:g) and wraps each product in <item>. This example follows the same structure:
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<title>Example Store</title>
<link>https://example.com</link>
<description>Example Store product feed</description>
<item>
<g:id>TSHIRT-BLU-M</g:id>
<g:item_group_id>TSHIRT-01</g:item_group_id>
<g:title>Organic Cotton T-Shirt, Blue, M</g:title>
<g:description>Relaxed-fit T-shirt in organic cotton. Cap sleeves.</g:description>
<g:link>https://example.com/product/organic-tshirt/?attribute_color=blue&attribute_size=m</g:link>
<g:image_link>https://example.com/images/tshirt-blue.jpg</g:image_link>
<g:brand>Example Brand</g:brand>
<g:condition>new</g:condition>
<g:availability>in stock</g:availability>
<g:price>24.00 USD</g:price>
<g:sale_price>19.00 USD</g:sale_price>
<g:google_product_category>Apparel & Accessories > Clothing > Shirts & Tops</g:google_product_category>
<g:color>Blue</g:color>
<g:size>M</g:size>
</item>
</channel>
</rss>
XML notes:
- Start with the
<?xmldeclaration and put one field per line. A single line over 5 MB is rejected. - Escape
&,<and>inside values (&,<,>), as Meta’s sample does in its category path. - In XML, CTX Feed writes Meta’s fields with the same
g:tags as Meta’s sample (<g:id>,<g:title>,<g:link>…). Meta-only fields such asfb_product_categoryare written without a prefix.
Copy it to see the format. For a live store, CTX Feed builds and updates this file from WooCommerce automatically.
Facebook Marketplace bulk upload template
We couldn’t find a Marketplace bulk upload template, or a Marketplace column list, in Meta’s Business Help Center (checked October 2026). For medium to large inventories, or products that change often, Meta lists a catalog data feed as one of the routes: a spreadsheet or XML file. The CSV example above shows the layout; for a WooCommerce store, generate the feed with CTX Feed.
How to download the official template from Commerce Manager
Meta’s template is a reference for the exact column names, or a starting point for a small catalog that rarely changes.
- Go to Commerce Manager and select your catalog.
- Open the Catalog tab and go to Products or Data sources.
- Click + Add in the top right and select Data file.
- Click Download template.
- Pick Excel (XLSX) or CSV for the standard template. For category-specific columns, click Custom template, select your product categories, then download it as .xlsx or .csv.
You need full control of the catalog to do this. Don’t rename the header row; delete the example rows and add one product per row.
A hand-filled template works for a handful of products. For a WooCommerce store, generate the file with CTX Feed instead, so price and stock changes reach Meta without anyone editing a spreadsheet.
Common Facebook feed errors and fixes
After each upload, the feed’s overview in Data sources lists the issues, and Download issue report gives you a sample. These are the errors Meta documents, with the fix on the WooCommerce side:
| Error in Commerce Manager | What it means | Fix |
|---|---|---|
| Your data feed file couldn’t be accessed / Failed to connect to server / Fetching feed from server failed | Meta can’t reach the file. | Open the feed URL in a private window. If it doesn’t load, regenerate the feed; a security or caching plugin may also block it. Make sure robots.txt doesn’t block facebookexternalhit/1.1. |
| HTML format isn’t supported | The URL returns a web page, not a feed file. | Use the feed file URL from Manage Feeds, not a page on your site. |
| Incorrect number of columns | Rows don’t line up with the header row, for example because of unquoted commas. | Let CTX Feed write the CSV, or quote fields that contain commas. |
| Invalid values | A field has a value Meta doesn’t support, e.g. in_stock or preorder in availability. | Send only the values in the spec tables above. |
| Missing or invalid price or currency | Price missing, or written as $9.99 or 24,50 EUR. | 9.99 USD format. Keep sale_price lower than price. |
| IDs can’t be duplicated / ID conflicts with group ID | Two products share an id, or an id is also used as an item_group_id. | Give every variant its own id and the parent product the shared item_group_id. |
| Universal IDs are missing / Invalid GTIN | No brand, gtin or mpn, or a GTIN in the wrong format. | Map brand; add real GTINs (step 4 above) or leave gtin empty. |
| Invalid Google or Facebook product category | The category isn’t on the list. | Map store categories to the channel list (step 5 above). |
| Field can’t be all uppercase letters | e.g. a description in capitals. | Fix the product text, or add a data rule in Commerce Manager. |
| Line or row of text exceeds size limit | A row over 5,242,880 characters, sometimes from very long links. | Shorten the field; in XML, put one field per line. |
| Out of stock | Not an error: the product is hidden from ads. | If it’s actually available, fix the stock status in WooCommerce and regenerate. |
If a scheduled feed fails several times, Meta can pause the schedule. Resume it under the feed’s Settings → Schedules.
Products missing from the catalog altogether? See why WooCommerce products go missing from your Facebook catalog.
Facebook product feed vs Google Shopping feed
| Meta catalog feed | Google Merchant Center feed | |
|---|---|---|
| Availability values | in stock, out of stock | in_stock, out_of_stock, preorder, backorder |
| Title limit | 200 characters | 150 characters |
| Description limit | 9,999 characters | 5,000 characters |
| Image minimum | 500 × 500 px | Google has announced 500 × 500 px for all product images, enforced from 31 January 2027 |
| Category | google_product_category or fb_product_category, optional | google_product_category |
| Where it goes | Commerce Manager | Merchant Center |
Can Meta read your Google feed? Commerce Manager has a Google Merchant Center option for files formatted for Google. A separate Meta feed still lets you use Meta’s own limits and fields, such as fb_product_category and internal_label. In CTX Feed, the Google and Facebook templates format the same products differently (see the table above).
FAQ
What is a Facebook product feed?
A file of your products (CSV, TSV, XLSX, Google Sheets or XML) that Meta reads into a catalog in Commerce Manager, so the products can appear in your ads and shops on Facebook and Instagram.
What are the required fields in a Facebook product feed?
id, title, description, availability, condition, price, link, image_link and brand. size is also required for Shops in some categories, such as clothing and shoes.
What availability values does Facebook accept?
Only in stock and out of stock, lowercase with a space.
What fields does Meta require for direct checkout?
native_commerce (true to make a product eligible) and product_disclosures (compliance warnings). Direct checkout isn’t available to everyone yet.
What format should a Facebook product feed use?
Meta accepts five formats. For a WooCommerce store, use a generated CSV, TSV or XML file at a URL Meta fetches on a schedule; CTX Feed writes all three (pick TXT as the file type for TSV). XLSX and Google Sheets suit small catalogs that rarely change. Files can be up to 100 MB uploaded once, or 4 GB on a schedule.
How often does Facebook update the product feed?
As often as you schedule it: hourly, daily or weekly. Set your feed tool to rebuild the file just before Meta fetches it.
Can I use one feed for both Facebook and Instagram?
Yes. One catalog serves your ads and shops on both.
How do I fix “Your data feed file couldn’t be accessed”?
Open the feed URL in a private browser window. If it doesn’t load, regenerate the feed and check that no security plugin or robots.txt rule blocks Meta’s crawler, facebookexternalhit/1.1.
What is the difference between a Facebook product feed and a Google Shopping feed?
They use different values and limits. Meta accepts only in stock and out of stock and allows 200-character titles and 9,999-character descriptions; Google uses in_stock, out_of_stock, preorder and backorder, and caps titles at 150 and descriptions at 5,000 characters.
Wrap up
Get the nine required fields right, use Meta’s two availability values, keep sale_price lower than price, and let Meta fetch a URL instead of a file you upload by hand. CTX Feed does the formatting for Meta and keeps the file current. It’s free on WordPress.org; the Facebook catalog for WooCommerce page covers the full feature set.
Generate your Meta catalog feed from WooCommerce with CTX Feed (free on WordPress.org) → Get CTX Feed · Need 5-minute updates or Pro filters? See CTX Feed Pro
Free version on WordPress.org. Every Pro licence includes a 30-day money-back guarantee.