# Variant-level feed

A variant-level feed emits one row for each purchasable variant rather than one row per product, because sales channels treat every size, colour and material as a separately buyable item with its own price, stock and barcode. A Shopify product with four sizes in three colours is one product in the admin and twelve items to a channel.

- **Canonical URL:** https://www.feedlab.io/knowledge/concepts/variant-level-feed
- **Last reviewed:** 17 September 2026
- **Source:** feedlab knowledge base
- **Licence:** free to quote and cite with attribution to feedlab










## Frequently asked questions

### Should a product feed have one row per product or per variant?

Per variant. Channels treat each variant as a separately purchasable item with its own price, stock level and barcode, so a product with twelve variants produces twelve rows, tied together by a shared item_group_id.

### What breaks in a product-level feed?

Shoppers cannot filter by the size or colour they want, because only one variant is described. Price and availability are wrong for every variant except the one submitted. Barcodes, which are per variant, are wrong or missing. And the listing loses the variant picker entirely.

### How do variants stay grouped as one listing?

Through item_group_id. Every variant row carries its own unique id plus an item_group_id shared across the product, which tells the channel to present them as one listing with a size or colour selector rather than as unrelated products.

### Does every variant need its own landing page URL?

Each row should link to the product page with that variant preselected, usually through the variant query parameter. Without it a shopper lands on the default variant, which may be a different size and price than the listing they clicked.




## Primary sources

- [Google: item_group_id attribute specification](https://support.google.com/merchants/answer/6324507)



