
Expando feed for Shopify
Expando is not a marketplace. It is a Czech integration service that takes one product feed and lists your goods on Alza Trade, Kaufland across five countries, Amazon and other CEE channels, keeping stock and prices in sync and handing orders back to you. And it reads almost any XML feed: you map your element names once, in the app. Feedflock builds that feed from your Shopify catalog with the five data items Expando requires, and regenerates it every hour on the URL Expando polls.

Setup
Live in five steps
From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.
Create an Expando account
Sign up with Expando and connect your first channel. Each marketplace wants its own credentials: Alza Trade asks for a BranchID, SupplierID and Secret Key, Kaufland for a seller account with shipping groups.
Install Feedflock and pick the Expando template
Add Feedflock from the Shopify App Store and create a feed from the Expando template. All five required data items (product code, name, stock quantity, barcode and price) are mapped from the start.
Paste the feed URL in the Expando app
During onboarding choose Custom .XML feed with products (or later open Settings → Product Source) and enter the hosted feed URL. UTF-8 is a must; the URL can even carry login:password@ credentials if you protect it.
Map your elements once
Expando auto-detects the repeating element (product is the first name it looks for), and you assign your feed's elements to its parameters in one pass. The tag names cannot be wrong: they are yours to map.
Set prices and channels
Convert currencies with a coefficient, add per-channel price columns like Price_KauflandDE if you need them, and configure the autopricer. Kaufland takes prices including VAT; Alza wants them including commission, without VAT.
https://feedflock.appfleece.com/f/demo-expando/expando.xml
Catch feed issues before Expando 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> <item_id>SKU-2048</item_id> <name><![CDATA[Lněná košile Sand]]></name> <url>https://shop.example/products/lnena-kosile-sand?variant=44718293450817</url> <image>https://cdn.shop.example/img/lnena-kosile-sand.jpg</image> <price>1290.00</price> <quantity>12</quantity> <ean>8594000123453</ean> <manufacturer><![CDATA[Nordlin]]></manufacturer> <description><![CDATA[Prodyšná lněná košile volnějšího střihu.]]></description> </product>

Nordlin
Linen shirt Sand
1 290 Kč
Feed fields
item_id
SKU-2048
name
Lněná košile Sand
url
https://shop.example/products/lnena-kosile-sand?variant=44718293450817
price
1290.00
quantity
12
ean
8594000123453
manufacturer
Nordlin
description
Prodyšná lněná košile volnějšího střihu.
The channel
One feed, a shelf on every major CEE marketplace
You hand Expando a single XML feed; it lists your products on Alza Trade, Kaufland in Germany, Czechia, Slovakia, Austria and Poland, and Amazon, keeps stock and prices in sync, and sends orders and shipping labels back.
An autopricer steered from the feed
Per product, the feed can carry a price floor and ceiling (absolute, in euros, or as whole percentages) plus a status switch. Expando reprices between your limits, and a bad value simply leaves the previous setting untouched.
Your feed vocabulary is already valid
Expando reads almost any XML feed, so nothing has to be renamed or rebuilt. You map your element names to its parameters once, in the app: the opposite of the usual feed integration.
The feed
- The five data items Expando requires (product code, name, stock quantity, barcode and price), mapped from the start, straight from your Shopify SKUs, titles, inventory and barcodes
- Stock goes out as a real number, the one value rule Expando spells out: “just ‘in stock’ is not sufficient”
- Element names picked from Expando's own examples (item_id, name, price, quantity, ean), and <product> is the first repeating element its auto-detection looks for, so the onboarding mapping becomes a formality
- Optional autopricer fields with the exact tag names Expando documents: minimum and maximum limits, absolute in euros or in whole percents, plus the status switch
- The readiness check lists every variant missing a required field (code, name, price, barcode or stock) before you paste the URL anywhere
- A stable public URL in UTF-8, regenerated every hour, so every poll Expando makes reads current prices and stock
Deep dive
There is no schema to get wrong
- “Our
EXPANDOAPPcan read almost anyXMLfeed, so you don't need to create one specifically for our application” - Onboarding auto-detects the repeating element (product, item or product_item) and lets you pick it by hand if it misses
- You then assign your feed's elements to Expando's parameters in one mapping step
- The template's tag names come from Expando's own examples, so the mapping is a formality
Technical details
Most channels hand you a fixed vocabulary and silently drop what they do not recognise. Expando is the opposite: it publishes no schema at all, because the merchant maps the elements. Step two of onboarding finds the repeating element (product is the first of the three names it looks for), and step three is a mapping screen where item_id, name, price, quantity and ean get pointed at your feed's elements, whatever they are called.
That makes the usual feed risks disappear: there is no tag name to get silently ignored, and no category tree to match, because Expando assigns marketplace categories on its side. What remains is the data itself, and Expando is precise about which five pieces it needs.
Five data items, one emphatic rule
- Required: product code, product name, quantity in stock, barcode (
EAN/UPC), price - Quantity must be a real number: “just ‘in stock’ is not sufficient”
- The barcode is what the target marketplaces match on; without one, Expando's answer is “contact us”
- Price is per marketplace: Kaufland including
VAT, Alza including commission withoutVAT
Technical details
Expando's required set is five items, quoted identically in both of its feed articles: a product code, a name, the quantity in stock, a barcode and a price. The quantity rule is the one value Expando spells out (a real number, never the words “in stock”), because stock sync is the service's core job.
The price follows the channel, not the feed: Kaufland receives prices including VAT, while Alza needs prices including commission without VAT. You send prices in your shop's own currency and Expando converts with a coefficient. And if channels need different numbers, extra columns like Price_KauflandCZ and Price_KauflandDE are mapped as their own parameters.
The autopricer reads the feed too
- Per product, a floor and a ceiling: absolute prices in euros, or whole percentages off the base price
- minimum_limit_percentage 25 on a €100 price means the autopricer may go down to €75; the maximum lets it reach €125
- status switches the autopricer per product:
ACTIVEorINACTIVE, in eight documented spellings - A bad value cancels the update for that marketplace and product only, and the feed always overwrites manual settings in the app
Technical details
Expando's autopricer reprices your offers between limits you set, and those limits can travel in the feed: minimum_limit_price and maximum_limit_price as absolute values in euros, or minimum_limit_percentage and maximum_limit_percentage as whole numbers (25 means 25 %, not 0.25), with a status element switching the product's autopricer on or off.
The failure mode is unusually gentle and unusually specific: an unspecified or incorrect value does not change the previous setting, and validation runs per marketplace, so one bad value cancels the update for that marketplace and that product only. The feed always wins over a value typed into the app by hand.
What the feed cannot carry
- No shipping price: “it is not possible to directly send the shipping price”; a shipping template groups products and the price lives in the Kaufland account
- The shipping group name in the feed must match the name in the marketplace settings exactly
- No categories: Expando assigns marketplace categories on its side
- On Alza, Alza writes the listings itself from your materials, so images and descriptions in the feed are inert there
Technical details
Shipping is the clearest case of what stays outside the feed. Instead of a per-offer price you send a shipping template (a parameter that sorts products into groups), and the groups are priced in the Kaufland account, down to per-extra-item surcharges and a free-shipping threshold. The one hard rule: the group name in the feed must match the name in the marketplace settings exactly.
The same pattern repeats elsewhere. There is no category element to fill, because Expando matches categories per marketplace itself. On Alza, the listing is created by Alza from your materials rather than from the feed. And while a one-time CSV import exists, it is not schedulable. The XML feed on a URL is the integration that stays current.
The takeaway
One XML feed from your Shopify catalog, with the five data items every marketplace asks for, stock as a real number and autopricer limits when you want them, and Expando turns it into listings on Alza, Kaufland and Amazon. Feedflock keeps that feed current every hour, on the URL Expando already polls.
Claude · ChatGPT
Or set up your Expando feed in chat
Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to Expando's own tree and tells you what is still missing. You approve every change.
Create a Expando 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.