The Feedance AI features is rolling out.
Check it out!

What Are Facebook Dynamic 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.

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.

Why Connect Your Product Feed to Dynamic Ads?

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).

How Dynamic Ads Match Shoppers to Products: Pixel, CAPI, and content_id

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.

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.

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.

What Feed Format Do Dynamic Ads Require?

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).

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.

Which Product Attributes Do Dynamic Ads Require?

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.

AttributeRequiredFormat / Notes
idYesUnique per product, max 100 characters; must exactly match the content_id your Pixel/CAPI events send for that product
titleYesMax 200 characters (roughly 65 recommended for visibility in ad placements)
descriptionYesPlain text, max 9,999 characters; should differ from the title
availabilityYesin stock or out of stock; stale values cause sellable products to be hidden or sold-out products to keep serving
conditionYesnew, refurbished, or used
priceYesA number followed by an ISO 4217 currency code, e.g. 19.99 USD; a missing currency code invalidates the item
linkYesValid URL to the product's page on your own domain
image_linkYesJPEG or PNG, minimum 500x500px (1024x1024px recommended)
brandRecommendedMax 100 characters; used for retargeting and filtering by product set
item_group_idConditionalRequired to group size/color variants under one parent so Dynamic Ads can match and display the correct variant

How to Connect Your Feed to Dynamic Ads with Feedance

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.

  1. Feedance maps your store's product data to Meta's required catalog fields (id, title, price, availability, condition, image_link, link, brand, item_group_id), normalizing formats such as the price-plus-currency-code requirement and the exact in stock/out of stock availability strings.
  2. Feedance keeps the id value for each product stable across every export, which is the field your Pixel/CAPI content_id events must match — the single most common point of failure in Dynamic Ads setups.
  3. Feedance hosts the resulting feed at a stable URL that you register in Commerce Manager under Catalog → Data Sources → Add Items → Scheduled Feed, or as a scheduled fetch on whatever cadence your catalog needs.
  4. Feedance refreshes the feed on a schedule, so price and availability changes propagate to Meta without manual re-uploads.

How Often Should the Feed Update?

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.

Common Dynamic Ads Feed and Matching Errors

  1. Content ID mismatch / low catalog match rate. The content_ids sent by the Pixel or CAPI don't match any id in the catalog, so Meta can't link the browsing event to a product. Checked in Events Manager → Diagnostics → Pixel → Catalog Match Rate.
  2. Parent vs. variant ID mismatch. The website fires a variant-level ID (specific size/color) while the feed only lists parent product IDs, or the reverse — a frequent issue on platforms whose default Pixel integration doesn't align with the feed's item_group_id structure.
  3. Case-sensitivity mismatch. SKU-001 in the feed versus sku-001 in the Pixel event are treated as two different products, silently breaking retargeting for that item.
  4. Missing currency code on price. A price value without an ISO 4217 currency code invalidates the entire product row.
  5. Stale availability. An availability value that lags real stock either hides sellable inventory from ads or keeps advertising products that are already sold out.

Optimization Tips for Dynamic Retargeting

  1. Protect your catalog match rate. Treat Events Manager's Catalog Match Rate as a standing health metric, not a one-time setup check — feed relabeling or a Pixel/CAPI change on the site can quietly drop it after launch.
  2. Group variants with item_group_id. Correct variant grouping ensures a shopper who viewed a specific color or size is retargeted with that same variant, not a generic parent listing.
  3. Use dynamic creative overlays deliberately. Meta's Advantage+ catalog ads support dynamic overlays that stamp current price, a strikethrough sale price, percentage-off, or free-shipping labels directly onto the catalog image per product — test which overlay type lifts click-through for your catalog rather than leaving all options on by default.
  4. Scope eligible inventory with product sets. Build product sets (filtered by availability, price, brand, or category) so retargeting only draws from full-price, in-stock, or otherwise strategically chosen inventory instead of your entire catalog.
  5. Run Pixel and CAPI together with a shared event_id. Sending the same event_id from both the browser Pixel and server-side CAPI lets Meta deduplicate the two signals into one event, which recovers otherwise-lost match data without inflating counts.

FAQ: Facebook Dynamic Ads and Product Feeds

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.

Schedule your 15-minute demo now

Schedule my demo

We’ll tailor your demo to your immediate needs and answer all your questions. Get ready to see how it works!