Product vertical
Food and beverage
Food and drink feeds carry obligations no other vertical has: a unit price so shoppers can compare per kilo or per litre, an expiry date for perishable goods, and a multipack or bundle declaration. Alcohol is separately restricted and is refused outright on some channels.
Categories this covers
The Google product taxonomy branches these rules apply to. Match your own products against these paths before assuming the extra requirements are yours.
- Food, Beverages & Tobacco
- Food, Beverages & Tobacco > Beverages
- Food, Beverages & Tobacco > Food Items
- Health & Beauty > Health Care > Nutrition & Food Supplements
Attributes this vertical changes
These sit on top of the attributes every feed needs. A requirement shown here applies because of the category, not because of the channel.
| Attribute | Requirement here | Why |
|---|---|---|
| unit_pricing_measure | Required in some cases | Required in markets whose unit-pricing rules apply to goods sold by weight or volume, so a shopper can compare a 500g jar against a 1kg one. |
| unit_pricing_base_measure | Required in some cases | The denominator the unit price is expressed against, such as 100g or 1l. Required alongside unit_pricing_measure wherever that applies. |
| expiration_date | Recommended | Tells a channel to stop showing a perishable item after a date. Without it, short-life stock can be advertised past the point where you can legally ship it. |
| multipack | Required in some cases | Required when you have grouped identical items into a pack yourself, which is extremely common in this vertical and changes how the item is matched and priced. |
| is_bundle | Required in some cases | Required when an item is a bundle of different products, such as a hamper or a tasting set, so it is not matched against one of its components. |
| adult | Required in some cases | Applies to alcohol in the places it is permitted at all. Several channels restrict or refuse alcohol regardless, so check policy before mapping. |
| gtin | Required | Packaged groceries almost always carry a barcode, so an empty gtin in this vertical reads as missing data rather than as a product without an identifier. |
What catches food and beverage stores out
The unit price cannot be derived from the title
A product called "Olive Oil 750ml" carries its measure in a string meant for humans. The feed needs the number and the unit as separate values, and parsing them out of titles works until the first product named "2 x 500ml" or "1.5L (magnum)". A metafield holding the net quantity is the only mapping that stays correct.
Multipacks are matched against single units without the declaration
A six-pack submitted without a multipack value looks to a channel like a single unit at six times the price, which is exactly how a competitive item ends up looking expensive. The value is the count of identical items in the pack, and it matters most on precisely the products where margin is thinnest.
Shopify weight is shipping weight, not net quantity
The weight field on a Shopify variant is what the parcel weighs, including the jar and the packaging. Unit pricing needs the net contents. Mapping shipping weight into unit_pricing_measure produces a unit price that is wrong on every product, and wrong in a direction that looks plausible.
Perishable stock outlives the feed
Channels keep product data for days or weeks after the last successful read. For short-life food that window is longer than the product's life, so an expiration_date is what stops the listing rather than the next feed run.
Alcohol policy is not a feed problem you can map around
Some channels refuse alcohol entirely, some allow it in specific countries with additional requirements, and none of that is expressed through feed attributes. The mapping work is only worth doing once the policy answer is known for each market you intend to sell into.
Where these values come from in Shopify
Shopify has a field for some of these and nowhere to put the rest. Both cases are worth knowing before you start mapping.
- unit_pricing_measure
- From a metafield holding the net quantity and unit. Parsing it from the title is the common shortcut and the common source of wrong unit prices.
- unit_pricing_base_measure
- Usually a static value per product type, such as 100g for food and 1l for drinks, applied through a rule rather than stored per product.
- expiration_date
- A metafield where the store tracks it. Stores that manage short-life stock by hand generally do not have it, in which case removing the product is the only mechanism available.
- multipack
- From a metafield or derived from the variant option where packs are sold as options of one product. Both are more reliable than the title.
- gtin
- From the variant barcode, which packaged groceries usually have. Supplier price lists are the practical source for filling the gaps in bulk.
Frequently asked questions
Do I need unit pricing in a food feed?
In the markets whose unit-pricing rules cover goods sold by weight or volume, yes, and that includes the EU. It needs the net quantity and a base measure such as 100g or 1l, neither of which Shopify stores as a structured field.
Can I use the Shopify weight field for unit pricing?
No. Shopify weight is the shipping weight of the packaged item, including the container. Unit pricing needs the net contents, so it has to come from a metafield or another explicit source.
How do I feed a multipack?
Send the multipack attribute with the number of identical items in the pack. Without it the channel treats a six-pack as a single unit at six times the price, which makes a competitively priced product look expensive.
Can I advertise alcohol through a product feed?
It depends entirely on the channel and the market, and several channels refuse it outright. No combination of feed attributes changes that, so confirm the policy per channel before building the mapping.
Attributes involved
- gtin The gtin attribute is the globally unique barcode number a manufacturer assigns to a product, covering UPC, EAN, JAN and ISBN formats. Channels use it to match an item against the same product sold elsewhere, and on Shopify it comes from the variant's barcode field, which is optional in the admin and therefore frequently empty.
- price The price attribute is the item's full price before any discount, submitted as a number followed by an ISO 4217 currency code. It must match what a shopper sees on the landing page in that market, including whether tax is included, which is why multi-market Shopify stores so often trip the price mismatch disapproval.
- title The title attribute is the product name a channel shows in a listing and matches against search queries, which makes it the single highest-leverage field in a product feed. On Shopify it usually needs building from the product title plus the variant's options, because the raw product title alone does not describe an individual variant.
Errors this vertical runs into
- Missing value: GTIN The "Missing value: GTIN" issue means a channel believes a product has a manufacturer-assigned barcode but the feed did not supply one. On Shopify it almost always traces back to the variant barcode field, which is optional in the admin and therefore left empty across large parts of most catalogues.
- Mismatched value: price The price mismatch error means the price in the feed does not agree with the price the channel found when it crawled the landing page. On Shopify the three usual culprits are a feed that has not regenerated since a price change, a link pointing at the wrong market's storefront, and a tax convention difference between the feed and the displayed price.
Related concepts
- Product identifiers Product identifiers are the values that let a sales channel recognise that your listing and someone else's describe the same physical product: a GTIN, or a manufacturer part number together with a brand. They matter because a channel that can identify a product can attach reviews, specifications and competing offers to it, and one that cannot has to treat your listing as an unknown object.
- Feed scheduling Feed scheduling is the arrangement where a sales channel fetches a feed from a fixed URL on a repeating timetable instead of the merchant uploading a file. It matters because the interval between regenerations is the window in which a channel can be wrong about a price or a stock level, and most mismatch disapprovals are caused by that window being too wide rather than by a bad mapping.
Channels this applies to
- Google Shopping Google Shopping is the surface where Google displays product listings from a merchant's catalogue, fed by a product feed uploaded to Google Merchant Center. Google's product data specification is the most detailed of the major channels, and the one whose attribute names the other channels tend to borrow.
- Meta Meta's product catalogue is the data source behind Facebook and Instagram Shops, Advantage+ catalogue ads and dynamic retargeting, populated by a product feed uploaded to Commerce Manager. Its attribute names largely mirror Google's, but its accepted values and its handling of variants differ enough to break a feed copied straight across.
- Microsoft Advertising Microsoft Advertising runs product ads across Bing, Yahoo and the Microsoft Audience Network from a catalogue uploaded to Microsoft Merchant Center. Its feed specification is closely modelled on Google's, which makes it the cheapest additional channel to launch once a Google Shopping feed already exists.
Primary sources
Channel specifications change. These are the official documents this page is based on.