Skip to content
Miinto
Fashion & living

Miinto feed for Shopify

Miinto is the Danish fashion marketplace that lists the stock of physical boutiques and brands across Europe. It is not a comparison site: a row in your feed is a product Miinto sells, so the feed is your catalogue and your stock signal at once. Feedflock turns your Shopify catalog into Miinto's tab-separated feed, one row per size, prices as integer cents including VAT, stock as a plain count, hosted on a stable URL that Miinto polls every thirty minutes.

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 · miinto.tsvUpdated just now
id item_group_id brand title color size description material madein image_link c:stock_level:integer c:retail_price_EUR:integer c:discount_retail_price_EUR:integer gtin product_type gender
SKU-2048 8812345678901 Nordlin Linen shirt Sand Sand M A breathable linen shirt in a regular cut. {"en_EN.utf8": "100% Linen"} IT https://cdn.shop.example/files/linen-shirt-sand.jpg 0 4900 8594000123453 Shirts M
−20% off compare-at
Productprice (compare-at)sale_​price
Linen shirt Sand49.00 €39.20 €
Mug Fjord 350 ml15.00 €12.00 €
Trail Pro119.00 €95.20 €
Backpack Ridge 28 l89.00 €71.20 €
Soy candle Les12.00 €9.60 €
56.80 €saved across these products
5 / 5products with the sale overlay
Sale prices

A discount is a second column: empty, never zero.

Miinto's price vocabulary is two columns: c:retail_price_EUR:integer for the regular price and c:discount_retail_price_EUR:integer for the promotional one, both integers with the cents appended and including VAT. Feedflock sends the compare-at price as the retail price when it is higher, and the discounted price in the discount column, and Miinto is explicit that a price that does not exist must be an empty cell, not 0. So a full-price item ships with the discount column blank, and the promotion ends the moment you remove the compare-at price in Shopify.

Feed health

Catch feed issues before Miinto 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 · miinto.tsv
76 / 100
To review: 4
Different images for sizes of one productEvery row of an item_group_id must carry the same image_link. Miinto's validator scores “Multiple values in image_link” as a critical error and the products are not imported.
Empty material on 14 productsmaterial is a mandatory column and Miinto wants it as a JSON object with a language tag. Shopify has no such field, so it fills from a metafield these products lack.
Size or brand in the title on 9 productsMiinto states it twice: brand name, size, id and colour are not accepted in titles. The size and colour travel in their own columns.
Empty brand on 5 productsbrand is mandatory and fills from the Shopify vendor, and once the feed is live, changing it takes the product offline.

Setup

Live in five steps

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

  1. Apply as a Miinto partner

    Miinto onboards boutiques and brands through its partner application, and a feed does nothing until your account is connected to Miinto's Product Engine. Delivery is arranged at account level too, under the Miinto Shipping Agreement. The feed carries no shipping data at all.

  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 Miinto template

    Create a new feed and choose Miinto. All 21 columns come pre-mapped, one row per variant. The currency is part of the price column names: the template ships the EUR variant, which serves Miinto's euro channels (NL, BE, IT, FI, FR, DE, ES).

  4. Fill what Shopify has no field for

    Material and care instructions go out as JSON objects with a language tag. A metafield holds them, and a Liquid wrapper builds the English-only object from a plain-text metafield. Gender is M, F or U, and the category is a path from Miinto's own tree.

  5. Validate, then paste the feed URL

    Run the file through Miinto's public Feed Analysis Service (it needs no account), then paste the hosted URL into your Miinto integration. Miinto fetches it every 30 minutes on a fixed schedule, so keep the filename constant.

    https://feedflock.appfleece.com/f/demo-miinto/miinto.tsv

The feed

What the channel receives

miinto.tsv
id	item_group_id	brand	title	color	size	description	material	madein	image_link	c:stock_level:integer	c:retail_price_EUR:integer	c:discount_retail_price_EUR:integer	gtin	product_type	gender
SKU-2048	8812345678901	Nordlin	Linen shirt Sand	Sand	M	A breathable linen shirt in a regular cut.	{"en_EN.utf8": "100% Linen"}	IT	https://cdn.shop.example/files/linen-shirt-sand.jpg	0	4900		8594000123453	Shirts	M
Live preview
Linen shirt Sand

Nordlin

Linen shirt Sand

49 €

Feed fields

id

SKU-2048

item_group_id

8812345678901

brand

Nordlin

title

Linen shirt Sand

color

Sand

size

M

description

A breathable linen shirt in a regular cut.

material

{"en_EN.utf8": "100% Linen"}

madein

IT

c:stock_level:integer

0

c:retail_price_EUR:integer

4900

gtin

8594000123453

product_type

Shirts

gender

M

The channel

A marketplace, not a comparison site

Miinto lists the stock of physical boutiques and brands, and a shopper buys on Miinto. A row in your feed is a product Miinto sells, so the feed is your catalogue and your stock signal at once, not one offer among many on a price grid.

Stock and price refresh themselves

Miinto fetches every feed every 30 minutes on a fixed schedule, and stock and prices, discount included, are the attributes that update automatically with each fetch. A restock or a price change in Shopify reaches Miinto within the half hour.

A public validator before you commit

Miinto's Feed Analysis Service is open to anyone without an account: paste a feed URL and it reports missing headers, deprecated columns and per-item errors with severities. You can see exactly what Miinto will say before you connect a thing.

The feed

  • A template written against Miinto's own integration knowledge base and validated against its live Feed Analysis Service. All 21 columns, and none of the deprecated ones: availability, price, sale_price and c:style_id are never emitted, because a deprecated header is a feed structure error
  • The title is your plain product title. Miinto rejects brand, size, id and colour in titles, so the template sends them in the brand, size and color columns instead
  • Prices go out as integers with the cents appended, including VAT: 49 € is 4900 in c:retail_price_EUR:integer, and a compare-at price splits into the retail and discount columns on its own: the discount cell stays empty, never 0, when nothing is on sale
  • Stock is a non-negative count, clamped at 0. Shopify reports oversold variants as a negative number and Miinto accepts 0 and up, so the template clamps it
  • One image per group: image_link defaults to the product's featured image, because Miinto's validator treats different images inside one item_group_id as a critical error that keeps the products out
  • Material and care instructions go out in Miinto's JSON-with-language-tag shape, built from a plain metafield by the template's Liquid wrapper
  • Regenerated every hour on a stable URL, exactly the hosted-file model Miinto's fixed 30-minute poll expects, and fetch tracking shows when Miinto last downloaded the file

Deep dive

01

How Miinto reads your feed

  • A URL Miinto polls every 30 minutes, on a fixed schedule it will not adjust per partner
  • The full catalogue every time: incremental updates are not supported
  • HTTP/HTTPS or FTP, public or with Basic Auth; sFTP is not supported
  • The filename must never change, and the file must download in 15 seconds with a first byte in 5
Technical details

Miinto's Product Engine fetches every partner feed every thirty minutes, and that schedule is fixed. Miinto will not delay or accelerate it for one partner. The file is the whole catalogue each time, because delta updates are not supported, served over HTTP/HTTPS or FTP from a filename that must never change. There is even a speed budget: the download may take no longer than 15 seconds, with the first byte inside 5.

That is exactly Feedflock's hosted-URL model: one stable address, regenerated every hour, that you paste into the integration once. The format is TSV or CSV in UTF-8 with Unix line endings and one header row. Column order does not matter, column names are case-sensitive, and every column you use must be in the header even where the value is blank.

02

The columns Miinto expects

  • Thirteen mandatory values, from id and item_group_id to material and madein
  • The title carries no brand, size, id or colour. Those have their own columns
  • The size is the brand's own, straight off the label. Conversions are not accepted, and a labelled country code stays in (36 IT, 8 UK)
  • gender knows only M, F and U. Kids are declared through the category path instead
Technical details

Miinto's mandatory set is larger than most: id, item_group_id, brand, title, color, size, description, material, madein, image_link, the stock count and both price columns. The title rule is the one most feeds get wrong. Miinto states twice that brand name, size, id and colour are not accepted in titles, which is why the template sends the plain product title and lets the size and colour columns do that work.

Some values have shapes of their own. The size must come directly from the producer. Miinto will not accept your conversions, and when the label carries a country code, the code is part of the value: 36 IT, 38 FR, 8 UK. gender is a three-value enum, M, F and U; there is no kids value, so a kids' product is declared through its category path, like Kids > Shoes > Sneakers. And gtin is optional, unusual for a marketplace, but when present it must be 9 to 13 digits with a valid check digit, so an 8-digit EAN needs a leading zero and a 14-digit GTIN is outside the window.

03

Prices in cents, stock as a count

  • Prices are integers with the cents appended, incl. VAT: 100099 reads as 1000,99
  • The currency is part of the column name: c:retail_price_EUR:integer serves the euro channels
  • A price that does not exist is an empty cell, never 0
  • A sold-out size stays in the feed with stock 0. Do not remove it for at least an hour
Technical details

Miinto's price is an integer with the cents appended, including VAT: 4900 is 49,00 €. The currency lives in the column name itself (c:retail_price_EUR:integer), with one column pair per sales channel: the EUR columns serve the Dutch, Belgian, Italian, Finnish, French, German and Spanish storefronts, while Denmark, Sweden, Norway, Poland, Switzerland and the UK read their own currency columns. And a price that does not exist must be an empty cell: 0 is a price, blank is 'no price in this currency'.

Stock is a plain count in c:stock_level:integer, and there is no availability element at all. The old availability column is deprecated. When a size sells out you keep the row and send 0, and Miinto asks you not to remove it for at least an hour. Here is the part to plan around: stock and prices are the only attributes Miinto updates automatically. Rename a product, swap a colour, touch the brand, and nothing changes on Miinto until their side removes the product and the feed re-creates it. item_group_id, brand, color and size are frozen outright after go-live.

04

Images, duplicates and the validator

  • Every row of an item_group_id carries the same image_link. Differing images are a critical error
  • Images must be https with a trusted certificate; JPG and WEBP for the main image, JPG only for the rest
  • The first image is a pack shot on a white background. It is what listing pages show
  • A repeated group_id + size + color + brand combination keeps the whole colliding set off the site
Technical details

Miinto fetches your images itself, under its own rules: https with a certificate from a trusted authority, no user-agent games, no 403 or placeholder, and a link that never changes once the feed is connected. The main image accepts JPG and WEBP, additional images JPG only, and the first picture must be a pack shot on a white background. One rule above all: every row of a variant group repeats the same image_link. Miinto's validator scored differing images inside a group as a critical error even on Miinto's own sample feed, which is why the template defaults to the product's featured image rather than the variant's.

Duplicates are just as strict: the combination of group_id, size, color and brand must be unique, and a repeated combination keeps every product sharing it off the site, not just the extras. Before you connect anything, run the file through Miinto's Feed Analysis Service at proxy-fas.miinto.net: it is public, needs no account, and reports missing headers, deprecated columns and per-item errors with their severities.

The takeaway

One stable URL, a fixed 30-minute poll and a template that already writes Miinto's TSV: cent-priced columns, frozen variant attributes, JSON materials and all. Your Shopify catalog stays the single source of truth, and Miinto's stock signal is never more than half an hour old.

Claude · ChatGPT

Or set up your Miinto feed in chat

Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to Miinto's own tree and tells you what is still missing. You approve every change.

feedflock · mcp

Create a Miinto 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

Apply through Miinto's partner onboarding. It accepts boutiques and brands. The feed alone does nothing: your account has to be connected to Miinto's Product Engine, and delivery is arranged separately under the Miinto Shipping Agreement, an account-level contract. Only then does the feed URL you provide start being polled.
The currency is part of the price column name, so coverage follows the columns you send. The template ships the EUR variant, whose c:retail_price_EUR:integer column serves Miinto's Dutch, Belgian, Italian, Finnish, French, German and Spanish channels. Denmark, Sweden, Norway, Poland, Switzerland and the UK each read a column in their own currency.
It stays in the feed with a stock level of 0. Miinto explicitly asks you not to remove a sold-out item for at least an hour, and there is no availability flag to send instead. Stock and price are the only attributes Miinto refreshes automatically, and each 30-minute fetch picks the new count up.
Because only stock and prices update automatically. Any other attribute (the title, the description, the material) needs the product removed in Miinto's Product Management Service and re-created from the feed, which is a manual step on Miinto's side. And item_group_id, brand, color and size can never change: editing those takes the product offline.
They are optional on Miinto, unlike most marketplaces. If you send them, they must be 9 to 13 digits with a valid check digit: an 8-digit EAN is padded with a leading zero, while a 14-digit GTIN, which Shopify's barcode field often holds, is outside the accepted window.
The gender attribute has exactly three values, M, F and U, and no kids option. Kids' products are declared through the category instead: a product_type path such as Kids > Shoes > Sneakers, from Miinto's published tree of 462 English paths.

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