Meta AdsCriticalProduct not eligible for Advantage+ catalog ads or Shops

How to Fix “Universal product code or availability is missing” in Meta Commerce Manager

Meta needs an availability value it recognizes on every item. Free-text stock states such as “available”, “Disponible” or “2 in stock” are read as missing, and the product drops out of dynamic ads.

Free, no signup

Scan your feed for this error for free

Paste your product feed URL (XML, CSV or JSON). The audit checks Universal product code or availability is missing along with 25+ other pre-channel rules.

Why this happens

Technical root cause

Availability is a controlled vocabulary in the Meta catalog spec, but most store exports emit whatever the inventory system stores — a boolean, a localized word, or a stock count. Meta does not coerce those values, so the field is treated as absent.

Meta Commerce Manager reports it as Universal product code or availability is missing and applies: Product not eligible for Advantage+ catalog ads or Shops.

Native CMS friction

  • Shopify

    Inventory policy and inventory quantity are separate fields; the native export can publish a variant with tracking disabled and no availability signal at all.

  • VTEX

    Availability derives from seller-level logistics data, which is often flattened into a numeric quantity rather than a catalog keyword.

  • WooCommerce

    The stock_status meta returns instock / outofstock / onbackorder, none of which match Meta's accepted values verbatim.

Fixing it manually

  1. 1

    Open Commerce Manager → Catalog → Data sources and download the list of rejected items.

  2. 2

    Confirm which inventory field your export actually publishes for each product.

  3. 3

    Translate every stock state into one of Meta's accepted values: in stock, out of stock, preorder, available for order or discontinued.

  4. 4

    Republish the feed and re-run the data source so Meta revalidates the items.

The IRONFEED automated solution

One rule, applied to every product on every export. No spreadsheets, no re-uploads.

Rule syntax
IF availability NOT IN ('in stock','out of stock','preorder')
  SET availability = normalize_stock(inventory_quantity, stock_status)
  ELSE IF inventory_quantity > 0 SET availability = 'in stock' ELSE 'out of stock'

Run automatic linter checks before Meta Commerce Manager crawls your feed. IRONFEED validates every export against the channel spec, so this error is caught in Feed Review instead of in your channel dashboard.

Attribute requirements

Meta Commerce Manager attribute requirements for Universal product code or availability is missing and the matching IRONFEED transformation
AttributeMeta Ads requirementAccepted formatIRONFEED transformation
availabilityRequired on every itemin stock | out of stock | preorder | available for order | discontinuedLookup table mapping every source stock state to an accepted keyword
inventoryRecommended for Shops and checkoutNon-negative integerCast to integer, negatives clamped to 0

Frequently asked questions

Yes. Mark them out of stock rather than removing them — Meta preserves learnings and re-serves the item when it returns to stock.

Preorder is accepted, but it also requires a valid availability_date so Meta can display the shipping expectation.

Related Feed Issues & Fixes

Other critical errors affecting catalog performance on Google, Meta, TikTok, and Mercado Libre.

Looking for a different error?