Announcing CMP Feed Spec v0.1
Structured commerce for agents, not browsers
After a few weeks of iteration, I’m excited to share that the first version of the CMP Product Feed Spec is now live. This is the foundation for how products get discovered in an agentic commerce world — not through pixels and popups, but through machine-readable feeds designed for LLMs and autonomous buyers.
We started with building our own schema from scratch and completely ignored schema.org.
The idea was to treat SKUs as the atomic unit. Grouping was optional. The schema was clean, embedding-friendly, and tailored for how Discovery Nodes index and rank.
But then we ran into reality.
Should We Reinvent What Already Exists?
Schema.org has been around for over a decade. It’s imperfect. It’s bloated. But it’s also widely adopted—used by Google, Bing, Pinterest, and thousands of eCommerce platforms.
We found that schema.org/Product, along with ProductGroup and Offer, actually mapped decently well to our needs:
ProductGroupcould model variantsisVariantOfhelped anchor SKUs back to a shared contextadditionalPropertyallowed custom attributes like color, size, or denominationsOffers, pricing, inventory, and availability were all natively supported
By aligning with schema.org, we reduced the number of things brands had to learn. Instead of defining a new spec, we could lean on an existing vocabulary and just prescribe how to use it consistently.
That mattered more than we initially thought.
Our Goals
We're not trying to win a spec war.
We're trying to make it easy for brands to show up in agent-driven shopping flows.
And in that world, schema.org is already embedded across the stack — Google, Shopify, marketplaces, SEO tools. Everyone already emits schema.org/Product. So instead of introducing Yet Another Format™️, we decided to constrain how schema.org is used, and make that the CMP spec.
We define:
How to use
ProductGroup+isVariantOfcleanlyHow to express things like color, size, denominations via
additionalPropertyHow to shard product feeds (
feed-000.json,feed-001.json, etc.)What fields get embedded for semantic search
Where to host feeds (
.well-known/cmp/feed-index.json)
It’s all in v0.1. Simple. Structured. Machine-native.
Flat vs Grouped: The Real Tradeoff
Here’s one we debated hard:
Should we require all products to be flat?
Or let brands use
ProductGroupand model variants?
Flat = better for indexing. Each SKU has its own
Product, easy to embed, easy to search.Grouped = better for brands. Most Shopify catalogs are already structured this way. Descriptions, categories, and images are shared at the group level.
We chose to support both, but made it clear:
Discovery Nodes can flatten during ingest.
Variants must link using
isVariantOf.Groups must declare
variesBy.
No custom vocab. Just clean schema.org with predictable usage.
Final Thoughts
We could have invented our own schema. It would have felt cleaner and more “ours.” But the world doesn’t need another standard.
By extending schema.org, we give every brand a familiar onramp—and give every discovery node a predictable interface. The battle isn't about formats. It's about enabling a new type of commerce: programmable, agentic, and composable from the outside-in.
You can find the full spec, examples, and hosting requirements here: github.com/commercemesh/commercemesh
We’re just getting started.
What’s in v0.1
ItemListbased feed using only schema.orgFlat + grouped product support
Hosting spec (
.well-known/cmp/)Sharding via deterministic SKU hashing
Examples
Full spec, examples, and hosting docs here: https://github.com/commercemesh/commercemesh

