Skip to content
Vivino
Marketplaces

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.

01 · ShopifyProduct in the catalog
Linen shirt SandNordlin · Men's shirtsSKU-2048 · S–XL
Price
49 €
In stock
0 pcs
When out of stock
02 · vivino.xmlUpdated just now
<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>0</inventory-count>
</product>

Setup

Live in five steps

From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.

  1. 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.

  2. Install Feedflock

    Add Feedflock from the Shopify App Store. It reads your products, variants, stock and images directly through the Shopify API.

  3. 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.

  4. 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.

  5. 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
Feed health

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.

Feed quality · vivino.xml
76 / 100
To review: 4
Vintage missing from product-name on 11 winesWines are identified by their product name, and a name missing any of the formula's components may not appear on Vivino. Accurate vintages are required, with NV only for non-vintage sparkling wines.
No GTIN on 9 winesThe barcode is not mandatory, but it is an eligibility criterion for Vivino's online marketing campaigns. Without it your wines stay out of paid channels like Google Shopping.
Sold-out wines still in the feed (4)Vivino has no out-of-stock marker: an offer with an inventory count under 1 must be removed from the feed. The sold-out exclusion is switched off.
Empty alcohol on 7 winesAlcohol strength is mandatory across all markets: a percentage with the % character, like 13.5%. Shopify has no ABV field, so it ships empty until you map a metafield.

The feed

What the channel receives

vivino.xml
<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>
Live preview
Linen shirt Sand

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

01

How Vivino reads your feed

  • One publicly accessible UTF-8 XML file, its URL registered 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 URL and 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.

02

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.

03

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.

04

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.

feedflock · mcp

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

Through a Vivino merchant account. That is where you register your feed URL and your currency, and where fulfilment is arranged. The feed itself carries neither. Once the account is live, you give Vivino one publicly accessible XML URL and it pulls your inventory automatically.
Every one to six hours, and Vivino asks that the feed always be up to date, preferably hourly, at the very least daily. Feedflock regenerates the file every hour on the same stable URL, so every pull reads current prices and stock.
Always the total for the bottle quantity: a case of six carries the case price, never the per-bottle price. Use a dot decimal with no thousands separator and no currency symbol (the currency is set in your Vivino account), include tax outside the US and Canada, and keep the price identical to your own website: Vivino requires price parity.
It must leave the feed. Vivino has no out-of-stock marker: an offer with an inventory count below 1 is removed from the feed, not flagged. Feedflock excludes sold-out variants by default, so the file never carries a wine you cannot ship.
Pairing runs on the product name: a name missing the producer, appellation or vintage may not appear on Vivino at all. If Vivino matched your wine to the wrong page in its database, the fix is a message to merchant support with the two Vivino wine-page URLs and your own product URL, as there is no feed field for it. The merchant dashboard's Products tab shows what was imported and matched.
No. The feed has no shipping element at all: no cost, no carrier, no delivery time. Fulfilment terms live in your merchant account and the orders arrive through the dashboard or the orders API.

Get on every marketplace that matters this afternoon.

Install free, connect your first feed in minutes, and let Feedflock keep it fresh and validated.

.myshopify.com