
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.

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.
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.
Setup
Live in five steps
From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.
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.
Install Feedflock
Add Feedflock from the Shopify App Store. It reads your products, variants, stock and images directly through the Shopify API.
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).
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.
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
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

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
How Miinto reads your feed
- A
URLMiinto 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/HTTPSorFTP, 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.
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.
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.
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;
JPGandWEBPfor the main image,JPGonly 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.
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
Related feeds
Explore all 101 channelsGet on every marketplace that matters this afternoon.
Install free, connect your first feed in minutes, and let Feedflock keep it fresh and validated.