Skip to main content

Meta Product Catalog

Why a catalog?​

The Meta Product Catalog is required to enable on the Ads Manager side:

  • Dynamic Product Ads (DPA) β€” personalized retargeting with the exact products a visitor viewed/added to cart.
  • Advantage+ Catalog Ads β€” ML-optimized campaigns over the catalog.
  • Instagram / Facebook Shopping tab β€” organic product visibility.
  • Reels Shopping β€” tagged products in Reels.

Connection with the dataLayer​

The item_id you push in dataLayer events MUST exactly match the id in the catalog.

dataLayerMeta CatalogStatus
item_id: 'BIO-CRM-001'id: 'BIO-CRM-001'βœ… Match
item_id: 'BIO-CRM-001'id: 'bio-crm-001'❌ Case mismatch
item_id: '4521' (DB id)id: 'BIO-CRM-001' (SKU)❌ No match

Agree upfront (dev + agency) on the canonical id format (SKU recommended) and use it everywhere.

Accepted feed formats​

The catalog is fed by a feed file you expose to Meta. Formats:

  • CSV (UTF-8, comma or tab separated)
  • XML / RSS / ATOM
  • TSV
  • Google Sheets (auto-sync)

Refresh: up to once per hour when configured.

Minimum required fields​

Meta fieldDescriptionExample
idSKU β€” matches item_id in dataLayerBIO-CRM-001
titleCommercial nameHydrating Day Cream 50ml
descriptionLong descriptionHyaluronic acid–enriched cream…
availabilityin stock / out of stock / preorderin stock
conditionnew / refurbished / usednew
priceWith currency42.00 EUR
linkProduct page URLhttps://biosphereskincare.com/en/product/day-cream
image_linkMain image HTTPS URLhttps://biosphereskincare.com/img/BIO-CRM-001.jpg
brandBrandBiosphere
FieldExample
google_product_categoryHealth & Beauty > Personal Care > Cosmetics > Skin Care
additional_image_linkComma-separated URLs, up to 10
sale_price33.60 EUR (when on sale)
sale_price_effective_dateISO 8601 range
item_group_idGroups variants (all sizes of the same product)
color, size, materialVariants
gtinEAN/UPC barcode
mpnManufacturer Part Number

What to deliver as dev​

The agency needs one of the following:

A stable URL like https://biosphereskincare.com/feeds/meta-catalog.xml that:

  • Lists all in-stock products.
  • Auto-refreshes (cron or real-time) with prices, stock, etc.
  • Follows the Meta XML format.

Option B β€” Recurring export​

CSV / shared Google Sheet, regenerated daily.

Option C β€” Native connector​

If you run Shopify / WooCommerce / Magento, use the official Meta connector (coordinate with the agency to avoid duplicates).

Example XML feed​

<?xml version="1.0"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<title>Biosphere Skincare</title>
<link>https://biosphereskincare.com</link>
<description>Product catalog</description>
<item>
<g:id>BIO-CRM-001</g:id>
<g:title>Hydrating Day Cream 50ml</g:title>
<g:description>Hyaluronic acid–enriched cream…</g:description>
<g:link>https://biosphereskincare.com/en/product/day-cream</g:link>
<g:image_link>https://biosphereskincare.com/img/BIO-CRM-001.jpg</g:image_link>
<g:availability>in stock</g:availability>
<g:condition>new</g:condition>
<g:price>42.00 EUR</g:price>
<g:brand>Biosphere</g:brand>
<g:google_product_category>Health &amp; Beauty &gt; Personal Care &gt; Cosmetics &gt; Skin Care</g:google_product_category>
<g:item_group_id>BIO-CRM</g:item_group_id>
</item>
<!-- … -->
</channel>
</rss>

Synergy with Google Merchant Center​

The same feed can power:

  • Meta Product Catalog
  • Google Merchant Center (Shopping ads + dynamic remarketing)

Recommendation: generate one feed, expose it over HTTPS, consume from both platforms. The Google Merchant Spec (g: namespace) is also accepted by Meta.

Pitfalls​

  • ❌ item_id (dataLayer) β‰  id (catalog) β†’ DPA audiences broken.
  • ❌ Slow feed (> 2 min to crawl) β†’ Meta aborts.
  • ❌ Price without currency β†’ products rejected.
  • ❌ Missing availability β†’ products rejected.
  • ❌ HTTP images instead of HTTPS β†’ rejected.
  • ❌ Image too small (under 500Γ—500 px) β†’ rejected in Shopping.