Skip to main content

Meta Marketing API v27: New Ads May Show Catalog Products Unless You Opt Out

Starting with Marketing API v27.0, Meta may turn on Product showcase for an ad whose creative has no Product showcase settings, when it has high confidence that a product set in your catalog matches. We quote Meta's full opt-out example and say what our own Meta ad skill sends.

Mauricio Valdivia

Mauricio Valdivia

·6 min

Meta Marketing API v27: New Ads May Show Catalog Products Unless You Opt Out

Ads made through the API may show products you never added

If you publish ads through code, or have an AI agent do it, one sentence in Meta's release post of November 4, 2026, is about you. "Starting in v27.0, Meta may turn on Product showcase (product_extensions in the API) when you create ads with creatives that have no Product showcase settings."

The post continues, "Meta does this only when it has high confidence that a specific product set in your catalog matches the ad. Your ads can show closely matched products from your catalog without extra integration work." As we read that, your ad can show catalog products you never put in it. No Meta page we read defines high confidence, though Meta documents how to preview what it may pick.

The two write-ups we could read don't quote Meta's docs on where those products show up or where a tap on one goes, so we read the docs. We didn't test this. We sent no API calls and haven't seen these products appear on an ad. Everything we say about Meta comes from its own pages, read from Spain on November 5, 2026, except one help article we could only read in an archive copy dated September 17, 2026.

Who this affects, and who it doesn't

We read Meta's post as setting four limits.

  • You create the ad on v27.0 or later. "Versions before v27.0 do not change."
  • The creative has no Product showcase settings.
  • Meta has high confidence in the match. Its guide says possible matches include a set for the collection page the ad links to, an existing set with the variants of the linked product, and a set you used in earlier ads.
  • You have a catalog. The match is against a product set in "your catalog", and Meta's guide lists "A catalog" under eligibility.

Meta's guide says the default skips existing ads, ad updates and copies, ads and creatives made with versions before v27.0, and ads on a creative other ads already use.

Anything that publishes through code

Meta lists POST /{ad-account-id}/ads and POST /{ad-account-id}/adcreatives as "Representative affected endpoints". We read that as covering any script, tool or AI agent that creates ads through the API on v27.0.

The pages for Meta's own ads MCP server and ads CLI name no Graph API version and no product_extensions field, and no page we could reach says whether ads made through them are covered.

Ads Manager

The release post covers the API and never mentions Ads Manager. The only line we found about a default in Ads Manager is in that archive copy, which predates v27.0. "In the Creative setup, go to Products. It may be turned on by default."

How Meta says to opt out

Meta tells you to set degrees_of_freedom_spec.creative_features_spec.product_extensions.enroll_status to OPT_OUT, but the full example it gives sends one more block.

"degrees_of_freedom_spec": {"creative_features_spec": {"product_extensions": {"enroll_status": "OPT_OUT", "action_metadata": {"type": "MANUAL"}}}}

We haven't run it. Meta's guide puts the same block in both its opt-out examples, for a new creative and a new ad. Meta's summary of the change names only product_extensions.enroll_status, and its reference page for these fields doesn't list action_metadata. No page we read says whether a request needs it, so we'd send the whole example.

The summary also calls this "an optional feature", while the post titles its section "Product showcase default for high-confidence matches." We won't guess how the two fit.

The guide adds that the default skips creatives that set creative_sourcing_spec.catalog or creative_sourcing_spec.associated_product_set_id.

If Meta already turned it on

Meta's guide says the creation response won't show the default, so read the creative later. If Meta turned it on, enroll_status reads OPT_IN, creative_sourcing_spec.associated_product_set_id holds its pick, and later ads on that creative get it too. You can't change it on that creative, so Meta says to update the ad with a new creative that sets OPT_OUT.

Where the products show up and where a tap goes

The release post names no placements, so this comes from Meta's other pages on product_extensions, the field the post ties Product showcase to.

  • Below the image or video. Meta's product extensions guide says the feature "showcases products from your catalog below your static single media when it's likely to improve performance." Its eligibility list says "Single image or video ad format", so a static ad and a video both qualify there. The Advantage+ creative guide, updated June 28, 2026, says "next to your selected media" instead.
  • Only in Feed. The archive copy of the help article says, "Products are only shown in ads delivered to Facebook Feed and Instagram Feed."
  • A tap goes to your site. The same copy says, "When someone clicks on a product, they'll be directed to its product detail page on your website where they can learn more or make a purchase."

Two of these pages predate v27.0, and the guide's v27.0 section names no placement, so we can't confirm any of this for the new default.

The names and objectives change from page to page

"Product showcase" is the new label, which Meta's guide uses beside product extensions.

Meta pageDateName it usesObjectives it lists
Release postNovember 4, 2026Product showcaseNone
Product extensions guideRead November 5, 2026Product extensions, "Add catalog items", Product showcaseSales or Traffic
Preview pageRead November 5, 2026Product showcaseSales, Traffic, Engagement or Leads, for the preview call
Advantage+ creative guideJune 28, 2026"Show products"None
Help article copySeptember 17, 2026ProductsTraffic, Leads, Engagement, Sales or App promotion

The help article also says, "Create a catalog in Commerce Manager and add at least 4 products." No page we read says whether that minimum applies to the v27.0 default.

Meta's 2025 dynamic media default applies to a different field, media_type_automation, on Advantage+ catalog ads from September 1, 2025.

How to preview the product set Meta may use

Meta's post says, "To preview the product set that Meta may use, see Preview the Product showcase default." The link opens the product extensions guide, whose "How to preview the default" section points to Meta's page of that name.

Meta's guide names GET /{ad-account-id}/product_extensions/catalog_suggestions_preview, a call you make before you create the creative. We haven't run it.

ItemWhat Meta's preview page says
Hostads-api.facebook.com, not graph.facebook.com, with /marketing-api/ after the version and the account as act_<AD_ACCOUNT_ID> in Meta's example
Versions"available in v26.0 and later"
Effect"The preview is read-only." It doesn't turn on Product showcase or create or change catalogs, product sets, creatives or ads.
objectiveRequired. It takes OUTCOME_SALES, OUTCOME_TRAFFIC, OUTCOME_ENGAGEMENT or OUTCOME_LEADS. Meta says "Other values return HTTP 400 (code 100)." The objective "can change which product set, if any, has recommended_action set to DEFAULT_ON."
ad_urlRecommended, "the strongest signal for a product set match"
page_idOptional
ad_url and page_id"Send ad_url, page_id, or both." With neither, recommendation_status is INSUFFICIENT_CONTEXT.
recommendation_status"Read recommendation_status first." Each recommendation outcome returns HTTP 200, and with no recommendation the response has no recommended object.
recommendation_status_detailMeta says "retry later" on NOT_ENABLED and "retry with backoff" on TEMPORARY_FAILURE.
DEFAULT_ONThe recommended_action of "the product set that Meta may use for the default". At most one set has it.
NEEDS_CONFIRMATIONMeta doesn't use that set for the default, and says to use it only "if the advertiser selects it". The All Products set is always this, and Meta won't pick it.
product_sets[].id"You can use it as creative_sourcing_spec.associated_product_set_id", with enroll_status set to OPT_IN, to make sure the creative uses that set.

If no set has DEFAULT_ON, Meta doesn't intend to turn Product showcase on. The preview also "does not check all the conditions for the default," so what Meta applies when you create the ad can differ.

If you publish through an AI agent

The Novoads app makes the ad and doesn't publish to Meta. But our public agent-skills pack includes a Meta ad skill that creates a paused ad in an existing ad set through the Marketing API.

  • Its deploy-ad.py has sent product_extensions with enroll_status set to OPT_OUT since its first commit on August 2, 2026.
  • It calls Graph API v23.0 unless you set META_API_VERSION to another version.
  • It doesn't send the action_metadata block from Meta's example.
  • We haven't run it on v27.0.

Its creatives send OPT_OUT, and Meta's guide says the default skips ads made with versions before v27.0, so by our reading it doesn't reach the skill as shipped. The skill's v23.0 default is out of date, though, and that's on us. Meta's Marketing API version table gives that version an expiration date of June 9, 2026, and Meta's versioning page says calls to an unavailable version "may fail or be upgraded to the next available version." So set META_API_VERSION yourself.

If you'd rather publish from an assistant, our post on Meta's ads MCP server covers that setup.

Other changes in the release if you publish ads

  • Device targeting. From v27.0, new eligible Sales ad sets that target specific mobile devices or operating systems "have Reach more people across other mobile devices turned on unless you set device to 0". All versions follow "approximately 90 days later (February 2027), date to be confirmed."
  • Lookalikes. From v27.0, Meta rejects a new lookalike with country or location_spec in its lookalike_spec. Other versions follow in about 90 days, "date to be confirmed".
  • Catalog uploads. /{catalog-id}/batch "no longer works on v27.0+", and Meta points you to /{catalog-id}/items_batch.
  • SDKs. Meta says the Business SDK's v27 release "will be published shortly after the release of Graph API v27". New Python and Node.js releases came out on GitHub on the evening of November 5, both still on the 26 line. They're 26.0.4 and v26.0.3, and their notes hold only a "Full Changelog" link.

State your choice in every creative you publish through code

Decide whether you want catalog products on an ad, then write that choice into the creative either way, so you aren't relying on a match the preview can't promise. We'd review it alongside the audience you can choose for each ad creative.

Novoads makes the ad from your product image or your script. Our pricing page shows what each plan's credits buy.

Make the ad, then decide what it states

Novoads makes video and image ads from your product and your script. The catalog setting stays yours when you publish. Every plan is paid from the first month.

Compare plans and credits

Before your next run on v27.0, print one creative your script or agent builds and check whether product_extensions is in it at all.

Frequently Asked Questions

Will Marketing API v27.0 add catalog products to my ads?

It may. Meta's release post of November 4, 2026, says that starting in v27.0 it may turn on Product showcase when you create ads whose creatives have no Product showcase settings, but only when it has high confidence that a specific product set in your catalog matches the ad. Versions before v27.0 don't change. To opt out, Meta's example sets enroll_status to OPT_OUT under product_extensions and also sends action_metadata with the type MANUAL. We haven't run that call ourselves.

Mauricio Valdivia

Mauricio Valdivia

Founder of Novoads

Mauricio is the founder of Novoads, where he works to democratize video advertising with AI for brands in Latin America.

Ready to create video ads with AI?

Generate professional video ads in minutes, not weeks.

Start for $15/month