BEAM

Seedlight BEAM: one place to run your whole eCommerce, with AI agents that know your business →

← All articles
MarketplaceSzymon Żynda12 min read

Copilot shopping feed management: what Microsoft actually reads

Shopping in Copilot has two halves: discovery through a Microsoft Merchant Center feed, and purchase through a transaction layer. The first is open to European sellers, the second is a US pilot. Required fields, the thirty-day trap, and what to build today. On documentation checked at source on 30 October 2026.

Shopping in Copilot is two separate jobs, not one. The first decides whether your product can be found at all, and it runs on a feed in Microsoft Merchant Center. The second decides whether it can be bought without leaving the assistant, and it runs on a transaction layer with a payment provider. Microsoft frames it in exactly that split: feeds enable discovery, the transaction protocol enables the purchase.

Key takeaways

  • Microsoft separates two jobs: the Merchant Center feed decides whether your product can be found, and a separate transaction layer decides whether it can be bought inside the assistant. Checkout in Copilot is currently a pilot for English-language merchants selling to US buyers in USD.
  • Discovery is open much wider. Poland sits on the Microsoft Shopping country list, Polish on the content-language list and PL among target countries. The currency list in the Content API documentation does not include PLN, so confirm the currency for your market in your own account first.
  • The product ID is a composite of channel, language, country and your offerId, and none of those can change once the product exists. A poor offerId convention is a catalogue migration, not a file edit.
  • A product with no explicit expiration date expires 30 days after it was added or last updated. A catalogue that is not refreshed goes quiet on its own, and nobody gets an email about it.

This article covers what a European seller can do today, which fields are genuinely required, where the traps sit that the interface never shows, and how to build the feed so that it does not need weekly attention. All of it checked in Microsoft documentation on 30 October 2026.

SHOPPING IN AN ASSISTANT · TWO SEPARATE JOBS1 · DISCOVERYmerchant center store + product feedrequired fields · identifiers · imagesprice matches the product pageavailable in many countries, Poland includedanswer: your product can be foundthis is feed work, and it is yours to do2 · CHECKOUTtransaction layer + payment providerstore policies · checkout eligibility flagone provider per merchantpilot: English, US buyers, USD onlyanswer: your product can be bought in chatnot available to a European seller yetdo the first half now, because the second one needs it anywaya catalogue that is not findable has nothing to sell when checkout opens up

Who can sell in Copilot today, and who can only be visible

Here is the sentence that saves a week of work. Copilot Checkout, meaning completing the purchase inside Copilot, is a pilot for selected customers and carries a limit Microsoft states plainly: only English-language merchants selling to US buyers in USD are eligible at this time. The merchant remains the merchant of record.

The other half, discovery, reaches much further. Microsoft Shopping campaigns are available across a long list of countries that includes Poland, and in the Content API documentation Polish appears among content languages with PL among target countries.

One detail deserves checking before anyone forecasts revenue. The currency list on the price object in the Content API documentation does not include PLN, although it does include the euro, sterling, the Swedish krona and the dollar. We draw no product conclusion from that, because documentation and interface can disagree, but the currency for your market has to be confirmed on your own account before a build.

The practical conclusion: for a European store the sensible order is to do the first half now, because without a findable catalogue the second half has nothing to sell when it opens. Microsoft takes no commission on such a transaction today, so the cost of entry sits in your data rather than in fees.

Required fields: a list that surprises twice

The Content API documentation carries a “required for insert” column and it pays to read it literally, because several entries are not obvious.

FieldWhat to know
offerIdYour offer identifier, up to 50 characters, unique within the catalogue. It cannot be changed once the product exists.
channel, contentLanguage, targetCountryChannel, language and country. Together with offerId they form the product ID, so they are immutable too.
title, descriptionTitle up to 150 characters, description up to 10,000, no promotional text. Both go through editorial review.
linkUp to 2,000 characters, the domain must match the store domain, and the URL may not redirect.
imageLinkRecommended at 200x200, up to 3.9 MB. The image is reviewed as well.
priceMust match the price shown on the product page. Range from 0.01 to 10,000,000.
brand, gtin, mpnIf the manufacturer assigned a GTIN or MPN, you must supply it. Missing all three means identifierExists set to false.
availability, conditionAvailability and condition. Default to in stock and new.
shipping, shippingLabel, shippingWeightMarked required, with a note narrowing that to target country DE; optional for other markets.

The first surprise is the requirement that price match the product page. It sounds obvious until someone runs hourly promotions in the store while the feed goes out once a day. At that point the price mismatch is a design choice rather than a bug.

The second surprise is the shipping trio. They sit in the required column, yet the footnote limits that requirement to the German market. Read the column alone and you will model shipping weights across Europe to satisfy one country.

PRODUCT RECORD · WHAT AN ASSISTANT READSREQUIREDid · title · description · urlbrand · seller · imageprice + currencyavailabilitygtin · mpnjoins the same item across storesOPTIONAL, BUT DECISIVEreturns acceptedreturn window in daysshipping pricesize, fit, materialsthese settle the risk ofbuying without lookinga missing required field does not rank lower, it drops out of the comparisonunreadable is worse than worse

Why offerId cannot change afterwards

A product ID in Merchant Center is a composite of four things: channel, content language, target country and your offerId. In the documentation it looks like Online:en:US:Sku123. All four parts are immutable once the product exists, precisely because the ID is built from them.

That settles a decision usually made in five minutes and lived with for years: what your offerId derives from. Derive it from a SKU that changes when a supplier or a pack size changes, and every such change becomes a new product with no history. Derive it from an internal identifier nobody ever rewrites, and the problem never appears.

There is no graceful fix after the fact. Changing the offerId convention is a catalogue migration.

The thirty-day trap, or how a catalogue goes quiet

This is the passage that costs the most in practice and reads the fastest. A product for which you supply no expiration date expires 30 days after it was added or last updated. A pause in your sync is therefore enough for the catalogue to vanish in batches, in the order things were added.

The second half of the same puzzle: a deletion can take up to 12 hours to stop delivering, and the documentation recommends setting availability to out of stock first and deleting afterwards. Do it in the other order and for half a day Copilot and search may show a product nobody can buy.

The rule we work to: a product feed behaves like a pulse, not a one-off import. A full sync daily, with price and availability going out more often on their own channel. You will not spot expirations in the interface; you will spot them in sales.

New in the feed: the AI content declaration

The documentation now carries an attribute that did not exist a year ago: a declaration of whether an offer contains AI-generated or AI-modified content. In a text feed it is advertiser_ai_label, in the Content API advertiserAILabel, and it takes three values: AI content with a request for a visible watermark, AI content without that request, or a declaration of no AI content.

Microsoft describes it as an advertiser declaration rather than the output of detection. Processing requires a store pilot to be enabled, and an unrecognised value ends in a validation warning with the field cleared.

For a store that generates descriptions with a model, that is a new step in the process rather than a technical detail. Decide once what you declare, write it into the rule that generates descriptions, and keep it out of manual editing at export time. If your copy comes from a model, see how we structure that in our piece on multi-language catalogues.

Where these builds break

Across our channel feed work the same four problems come back, whatever the store platform.

  • A one-off import instead of a pulse. Someone sends the catalogue once, confirms the products are visible, and returns a quarter later to find the items expired.
  • A price from a different moment than the page. Promotions calculated live in the store, a feed shipped overnight. The price-match requirement is then broken daily at nine in the morning.
  • Testing in production. The documentation offers a dry-run parameter precisely so a request can be checked without touching data. Few teams use it until they have wiped a catalogue.
  • No limits in the code. A batch request takes up to 12,000 items and up to 4 MB, so chunking is part of the integration rather than an option.

How to build it so it needs no nursing

The architecture is the one we described for Kaufland feed integration, and that is no accident: channels differ in field names rather than in mechanics.

  • One source of truth per product. A catalogue feeding every channel, with required fields enforced on the way in.
  • The channel schema in code. Microsoft field mapping, character limits and the offerId rule described once, with a test.
  • Two cadences. A full sync daily, price and availability more often. Refreshing is also what protects you from the 30-day expiry.
  • Validation and dry-run before production. Missing identifiers, over-long titles and mismatched prices surface on your side rather than in editorial review.

We deliver that scope as feed automation, and as channel expansion when a new channel goes live. If you want to know whether your catalogue clears Microsoft requirements without rewriting descriptions by hand, write to us and let us look at your product data together.

And a caveat that matters more here than usual. Shopping inside assistants changes month to month, pilots open and close, and nobody outside Microsoft knows when Copilot Checkout will reach Europe. So this article carries no date the documentation does not state, and no promise of traffic. Check the current version at source before you build.

FAQ

Can I sell in Microsoft Copilot from a European store?

Completing a purchase in Copilot is currently a pilot covering English-language merchants who sell to US buyers in USD. From Europe you can still work on the other half, discovery through a feed in Microsoft Merchant Center.

Which fields are required in a Microsoft Merchant Center feed?

The Content API documentation lists as required for insert: availability, brand, channel, condition, contentLanguage, gtin, imageLink, link, mpn, offerId, price, shipping, shippingLabel, shippingWeight, targetCountry and title. For the shipping fields it adds that the requirement applies to target country DE.

Why did my products disappear from Merchant Center when I deleted nothing?

They most likely expired. A product with no explicit expiration date expires 30 days after it was added or last updated, so a gap in your sync mutes the catalogue in batches.

Can I change offerId after adding a product?

No. The product ID is built from channel, content language, target country and offerId, and those fields cannot change once the product exists. Changing the offerId convention means migrating the catalogue.

Should the feed price include tax?

The governing rule is simple: the price in the feed must match the price shown on the product page. Confirm the tax detail for your market against the Microsoft Merchant Center catalogue tax policy, because it depends on the target country.

Journal

Szymon Żynda

Co-founder of Seedlight · eCommerce platforms, AI, SEO and GEO

More by this author

Newsletter

The Journal, straight to your inbox

New articles and lessons from real builds, every now and then. No spam, unsubscribe with one click.