The Feedance AI features is rolling out. Check it out!
How Feedance can help your revenue growth
250+ channel and platform integrations
Start optimizing with powerful integration
Wordpress compatible e-commerce integration
Start optimizing Magento very quickly
Open source e-commerce platform integration
Integrate ChatGPT Ads Catalog in seconds
Optimize Meta Catalog Ads
Optimize your Google Shopping visibility correctly
Optimization of TikTok Catalog Ads
Facebook Dynamic Ads (now largely rebranded by Meta as Advantage+ catalog ads) are an ad format that assembles individual product ads automatically from a Commerce Manager product catalog, instead of an advertiser building one ad per SKU. Rather than a single static creative, Meta's ad engine pulls the title, image, price, and availability for a specific id in your feed and renders it into an ad template at serve time.
id
This page is not a repeat of the general Meta Ads / Commerce Manager catalog setup already covered on our Meta Ads integration page. It focuses specifically on what makes Dynamic Ads a distinct format: the retargeting mechanic that reconnects a shopper with the exact product they viewed or added to cart, the Pixel/Conversions API content_id matching that makes that reconnection possible, and the dynamic creative (price overlays, sale badges, frames) that gets stamped onto catalog images per product.
content_id
Dynamic Ads only work as well as the catalog behind them. Because the ad creative, price, and availability shown to a shopper are pulled live from your feed's fields, a feed that is stale, incomplete, or inconsistently formatted directly degrades ad relevance and can cause products to be rejected from the catalog entirely.
A feed management layer matters more for Dynamic Ads than for most other channels because the format is built around scale (advertisers routinely run catalogs of thousands of SKUs that could never be turned into individual ads by hand) and around freshness (a sold-out or repriced product still being shown to a retargeted shopper is a direct trust and ROAS problem, not just a minor inconsistency).
This is the mechanic that differentiates Dynamic Ads from a standard Meta catalog listing. Dynamic Ads run on three product events fired by the Meta Pixel and/or Conversions API (CAPI): ViewContent, AddToCart, and Purchase. Each event carries a content_ids parameter (an array of one or more IDs) and a content_type value of product or product_group.
ViewContent
AddToCart
Purchase
content_ids
content_type
product
product_group
Meta matches those content_ids against the id (or, for variant-level matching, the item_group_id) values in your product catalog feed. The match is an exact, case-sensitive string comparison — if your website's Pixel fires SKU-001 and your feed lists the same product as sku-001, Meta treats them as two different products and the retargeting link breaks silently for that item.
item_group_id
SKU-001
sku-001
You can monitor how well this is working in Events Manager under Diagnostics → Pixel → Catalog Match Rate, which reports the percentage of product events that were successfully matched to a catalog item. A low match rate means Meta cannot reliably tie a shopper's on-site behavior back to a specific product, which quietly shrinks your retargeting audience and creative pool even if the catalog itself looks healthy in Commerce Manager.
A common real-world cause of match-rate drops is a parent-vs-variant ID mismatch: some storefronts (Shopify is a frequently cited example) fire the specific variant ID in content_ids while the feed lists only the parent product ID, or vice versa. Keeping your feed's id/item_group_id values aligned with whatever ID your Pixel and CAPI implementation actually sends is the single highest-leverage fix for Dynamic Ads performance.
Dynamic Ads pull from the same Commerce Manager catalog infrastructure as other Meta catalog-based formats. Meta accepts catalog feeds in CSV, TSV, XML (RSS/ATOM-style), XLSX, or Google Sheets, submitted either as a one-time file upload or as a scheduled feed that Meta fetches automatically from a hosted URL (the URL must begin with http, https, ftp, or sftp and must point directly to the feed file, not to a storefront or Page).
http
https
ftp
sftp
For catalogs that change price or stock levels frequently, the Catalog Batch API offers a programmatic alternative that pushes updates directly rather than waiting on the next scheduled fetch. Compressed feeds (ZIP or GZIP) are also supported, provided the uncompressed file is CSV, TSV, or XML.
The core catalog fields below are required (or effectively required) for a product to be eligible to serve in a Dynamic Ad. Because Dynamic Ads depend on the id field for Pixel/CAPI matching, keeping it stable across every feed update is more critical here than for other catalog uses.
title
description
availability
in stock
out of stock
condition
new
refurbished
used
price
19.99 USD
link
image_link
brand
Feedance builds and maintains the Meta-compliant catalog feed that sits behind your Dynamic Ads setup, so the mapping and matching work described above doesn't have to be done by hand in a spreadsheet.
Meta supports scheduled feed fetches on an hourly, daily, or weekly cadence, plus the option of direct, event-driven updates through the Catalog Batch API for advertisers who need near-real-time changes.
Because Dynamic Ads are retargeting-driven, feed lag has an outsized effect: a shopper who added an item to cart yesterday and is retargeted today should not see a price that changed overnight or a product that has since sold out. Catalogs with volatile pricing, flash sales, or fast-moving inventory should run on the more frequent end of Meta's scheduled options (hourly) or move to the Batch API; slower-moving catalogs can generally run on a daily schedule without hurting match quality.
event_id
How is this different from the Meta Ads / Commerce Manager catalog I already have set up? The catalog itself is the same underlying object; Dynamic Ads is the retargeting-focused ad format built on top of it, driven by matching Pixel/CAPI content_id events back to catalog products. Standard catalog listings (like Shops) don't depend on that event-matching layer the way Dynamic Ads do.
Do I need the Meta Pixel, or is CAPI enough? Dynamic Ads can run on Pixel alone, CAPI alone, or both together; running both with a shared event_id for deduplication is Meta's recommended setup for the most complete match data.
What happens if a product's content_id doesn't match my catalog? That product's on-site view/cart/purchase activity can't be linked to a catalog item, so it's excluded from retargeting audiences and dynamic creative for that item, which shows up as a drop in Catalog Match Rate.
Can Dynamic Ads show a specific size or color a shopper viewed? Yes, provided the catalog uses item_group_id to group variants under a shared parent and the Pixel/CAPI events send the matching variant-level ID.
How fast do feed changes show up in live Dynamic Ads? As fast as your feed update method: within the hour on an hourly scheduled fetch, or near-instantly when pushed through the Catalog Batch API; a daily or weekly schedule will lag price and stock changes accordingly.
We’ll tailor your demo to your immediate needs and answer all your questions. Get ready to see how it works!