
Vivino feed for Shopify
Vivino is the wine app, and Vivino Marketplace is its shopping half: your inventory is matched against Vivino's wine database and sold to its users. The feed is one global XML file (no per-country vocabulary, no category tree), and Vivino is strict about the pairing: wines are identified by their product name, built to a fixed formula. Feedflock turns your Shopify catalog into that feed on a template written against Vivino's own Product Feed Guidelines, and hosts it on the stable URL Vivino pulls every one to six hours.

Setup
Live in five steps
From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.
Open a Vivino merchant account
Vivino Marketplace is where merchants sell to Vivino's users. The account is where your feed URL and your currency are registered, and where fulfilment is arranged. The feed itself carries no currency and no shipping.
Install Feedflock
Add Feedflock from the Shopify App Store. It reads your products, variants, stock and images directly through the Shopify API.
Pick the Vivino template
Create a new feed and choose the Vivino template. All eight mandatory data points are mapped from the start (product-id from the SKU, the link as a variant deep link, price, bottle size and quantity, the stock count), and sold-out variants stay out of the feed.
Build the product name and map the wine fields
product-name is the pairing key: producer, wine name and appellation, vintage, and the colour for non-red wines. Map producer from the vendor and vintage, appellation, colour, grape and the mandatory alcohol from metafields, and add the GTIN, Vivino's eligibility criterion for its marketing campaigns.
Paste the feed URL into the merchant dashboard
Register the hosted feed URL in your Vivino merchant account. Vivino pulls the file every one to six hours and asks you to keep it fresh: preferably hourly, at the very least daily. Feedflock regenerates it every hour on the same URL.
https://feedflock.appfleece.com/f/demo-vivino/vivino.xml
Catch feed issues before Vivino does.
Before every generation Feedflock checks that every field the channel requires is filled, and, on templates verified against the channel's own spec, that the values fit its rules. Most problems are fixed with one click, without editing products in Shopify.
The feed
What the channel receives
<product> <price>49.00</price> <bottle_size>750 ml</bottle_size> <bottle_quantity>1</bottle_quantity> <link>https://shop.example/products/linen-shirt-sand?variant=9087654322</link> <gtin>8594000123453</gtin> <producer>Nordlin</producer> <image>https://cdn.shop.example/img/linen-shirt-sand.jpg</image> <description><![CDATA[A breathable linen shirt in a regular cut.]]></description> <product-id>SKU-2048</product-id> <product-name>Linen shirt Sand</product-name> <quantity-is-minimum>false</quantity-is-minimum> <inventory-count>12</inventory-count> </product>

Nordlin
Linen shirt Sand
49 €
Feed fields
price
49.00
bottle_size
750 ml
bottle_quantity
1
link
https://shop.example/products/linen-shirt-sand?variant=9087654322
gtin
8594000123453
producer
Nordlin
description
A breathable linen shirt in a regular cut.
product-id
SKU-2048
product-name
Linen shirt Sand
quantity-is-minimum
false
inventory-count
12
The channel
The wine app's own checkout
Vivino matches your inventory against its wine database and sells it to the app's users: the shoppers who just scanned or searched that very wine. One feed serves the whole marketplace; there is no per-country vocabulary and no category tree.
Pulled every one to six hours
You host one publicly accessible XML file and Vivino fetches it automatically, every one to six hours, and asks that it always be up to date, preferably hourly. A price change reaches the marketplace on its own.
A barcode opens paid channels
The GTIN is optional for listing, but it is an eligibility criterion for inclusion in Vivino's online marketing campaigns, the route onto paid channels such as Google Shopping.
The feed
- A template written against Vivino's Product Feed Guidelines: the vivino-product-list root, one product per offer, and the exact lowercase element names: underscores on bottle_size and bottle_quantity, hyphens everywhere else, because a wrong-case element is simply not read
- All eight mandatory data points mapped from the start: product-id from the SKU with the variant ID as fallback, so the key is never empty, and the link as a deep link that preselects the variant
- product-name built to the pairing formula (producer, wine name and appellation, vintage, colour for non-red wines) from your vendor and metafields, and stable once the wine is live, because a changed name is re-listed as a new product
- The price goes out as the total for the bottle quantity, with a dot decimal, no thousands separator and no currency symbol, since the currency is set in your Vivino account
- bottle_size defaults to 750 ml and maps from a variant option or metafield when you sell halves or magnums; only 375, 500, 750, 1000 and 1500 ml are imported at all
- Sold-out variants leave the feed by default, because Vivino has no out-of-stock marker and a count under 1 means the offer must be removed
- The EU e-label block maps once: the e-label URL, or the nutrition values plus all thirteen allergen flags with their Yes/No values
Deep dive
How Vivino reads your feed
- One publicly accessible
UTF-8XMLfile, itsURLregistered in the merchant account - Vivino pulls it every 1–6 hours and asks for a feed that is always up to date, preferably hourly, at least daily
- The currency is set per merchant in the account; the feed carries a bare number
- Feedflock hosts the file on a stable
URLand regenerates it every hour
Technical details
Vivino pulls; the merchant hosts. You create an XML feed hosted online as a publicly accessible file, register its URL in the merchant account, and Vivino fetches it automatically, every one to six hours. Their ask is that the data is always current: preferably hourly, at the very least daily.
That is precisely the model Feedflock provides: a hosted file on a stable URL, regenerated every hour from your Shopify catalog. Currency never travels in the feed: it is set per merchant in the Vivino account, and the price element is a plain number. You paste the URL once; there is nothing to re-upload.
The name is the pairing key
- product-name follows one formula: [Producer] + [Wine name and appellation] + [Vintage] + [Colour]
- The colour is written in English or French, and only for non-red wines
- Banned from the name: punctuation, promo text, scores, packaging, bottle size or quantity, abbreviations
- Never rename a live wine: Vivino re-lists it as a new product
Technical details
Wines on Vivino are identified via their product name, and the name must be attributable to exactly one wine. The prescribed form is producer, wine name and appellation, vintage, and the wine colour, in English or French, and only for wines that are not red. Everything else is explicitly banned: punctuation and promotional text, availability notes, reviewer scores, packaging, bottle size and quantity (they have their own fields), accolades, pricing options and abbreviations. Wines missing any component may not appear at all, and the only escape from the vintage is NV for non-vintage sparkling wines.
Stability matters as much as accuracy: Vivino asks you not to modify product names once the products are live, because a changed name (even a new vintage) is re-listed and unhidden as a new product. And when Vivino's database matches your wine to the wrong page, the fix is a message to merchant support with the two Vivino wine-page URLs, not a feed field. Feedflock builds the name once from your vendor, title and metafields, so the formula holds on every regeneration.
Price, quantity and stock are one statement
- price is always the total for the bottle quantity, never the price per bottle
- Dot decimals, no thousands separators, no currency symbol; tax included outside the US and Canada
- quantity-is-minimum picks between a fixed case (false) and a threshold discount (true)
- inventory-count caps at 9999, and under 1, the offer leaves the feed
Technical details
The price in the feed is the total amount charged for the associated quantity: a case of six carries the case price, never the per-bottle price. Outside the US and Canada the price must include tax, and Vivino requires price parity with your own website. Quantity discounts come in two shapes picked by quantity-is-minimum: a fixed case, where bottle_quantity is the case size and the price the case total, or a threshold, where bottle_quantity is the minimum and Vivino extrapolates the price above it.
The stock count follows the same logic: inventory-count is the number of units of this offer (bottles at quantity 1, cases at quantity 6), except with a threshold discount, where it counts single bottles. The maximum value is 9999. And there is no out-of-stock marker at all: an offer whose count drops below 1 must be removed from the feed, which is why Feedflock excludes sold-out variants by default.
Alcohol, allergens and the EU e-label
- Alcohol strength is mandatory across all markets: a percentage with the % character, like 13.5%
- For wine bottled after 8 December 2023 and sold in the EU, the e-label data is mandatory
- Either the e-label
URL, or the values themselves: energy, fat, protein, salt, residual sugar, ingredients - Thirteen contains-*-allergens flags, valued Yes/No; true/false belongs to quantity-is-minimum only
Technical details
Alcohol sits among the optional extras in Vivino's table, yet carries its own sentence: it is mandatory across all markets, formatted as a percentage with the % character and a dot decimal. Shopify has no ABV field, so the template maps it from a metafield you fill once.
For wines bottled after 8 December 2023 and sold in the EU, the labelling data is mandatory; elsewhere it is optional but recommended. Two ways satisfy it: the elabel element with the URL of the wine's e-label page, or the values themselves: energy in kJ per 100 ml, fat, protein and salt in grams per 100 ml, residual sugar in grams per litre, the ingredient list in descending order of volume, plus thirteen allergen flags from milk to mollusc. The flags take Yes/No, while quantity-is-minimum alone uses true/false; the template keeps the two vocabularies apart.
The takeaway
One stable URL, an hourly refresh and an XML that follows Vivino's guidelines field for field: the name formula, the totals, the five bottle volumes, the e-label block. Your Shopify catalog stays the single source of truth, and Vivino's pull every one to six hours always reads its current state.
Claude · ChatGPT
Or set up your Vivino feed in chat
Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to Vivino's own tree and tells you what is still missing. You approve every change.
Create a Vivino feed for my store and map my categories.
I'll create it as a draft and show you each change before I make it.
FAQ
Get on every marketplace that matters this afternoon.
Install free, connect your first feed in minutes, and let Feedflock keep it fresh and validated.