Skip to content
Expando
Ad platforms

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.

01 · ShopifyProduct in the catalog
Linen shirt SandNordlin · Men's shirtsSKU-2048 · S–XL
Price
1 290 Kč
In stock
0 pcs
When out of stock
02 · expando.xmlUpdated just now
<product>
<item_id>SKU-2048</item_id>
<name><![CDATA[Linen shirt 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>0</quantity>
<ean>8594000123453</ean>
<manufacturer><![CDATA[Nordlin]]></manufacturer>
<description><![CDATA[Prodyšná lněná košile volnějšího střihu.]]></description>
</product>

Setup

Live in five steps

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

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

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

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

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

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

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.

Feed quality · expando.xml
76 / 100
To review: 4
Stock as text instead of a number on 8 productsExpando states it twice: “just ‘in stock’ is not sufficient”. The quantity must be a real number, or the marketplaces cannot sync your stock.
Missing EAN on 6 productsThe barcode is one of the five data items every target marketplace requires: it is the key they match on. Expando's answer without one: “contact us”.
One gross price for both Alza and Kaufland on 5 productsKaufland takes prices including VAT; Alza wants them including commission, without VAT. A second price column in the feed serves both.
All variants share one name on 9 productsExpando has no variant parameters: each row is matched by name and EAN, so identical names make sizes and colours indistinguishable.

The feed

What the channel receives

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

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

01

There is no schema to get wrong

  • “Our EXPANDO APP can read almost any XML feed, 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.

02

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 without VAT
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.

03

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: ACTIVE or INACTIVE, 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.

04

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.

feedflock · mcp

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

No. Expando is a Czech marketplace-integration service: you give it one product feed and it lists your goods on Alza Trade, Kaufland (Germany, Czechia, Slovakia, Austria, Poland), Amazon and other CEE channels, syncing stock and prices, repricing with an autopricer and handing orders and shipping labels back to you.
No. Expando states that its app reads almost any XML feed: during onboarding it auto-detects the repeating element (product, item or product_item) and you map your element names to its parameters once. The Feedflock template simply uses the names from Expando's own examples, so that mapping step is a formality.
Expando's two help articles differ: the newer one says every 2 hours, accelerated to roughly every 20 minutes on request; the older one says 3 hours and 30 minutes. Either way the feed is polled, not pushed, and Feedflock regenerates the file every hour, so each download reads current prices and stock.
Because syncing stock is the core of the service. Expando states it in both feed articles: “just ‘in stock’ is not sufficient”. The feed must carry the real quantity in stock. Feedflock maps it from your Shopify inventory, so a sold-out variant goes out as 0 rather than as a flag.
It depends on the channel. Kaufland receives prices including VAT; Alza wants prices including commission without VAT (adjustable on Expando's side with a CSV if your feed lacks a net price). Send prices in your shop's own currency (Expando converts with a coefficient), and use extra price columns such as Price_KauflandDE when channels need different numbers.
No. Expando states that a shipping price cannot be sent directly. You send a shipping template instead: a parameter that groups your products, with each group priced in the Kaufland account. The group name in the feed must match the name in the marketplace settings exactly.
An Expando account, and each channel's own credentials: Alza Trade wants a BranchID, SupplierID and Secret Key (with Expando set as the warehouse system in Alza's logistics settings), Kaufland wants a seller account with shipping groups. Every product also needs a barcode (Expando's advice if you have none is to contact them) and a real stock count.

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