← All guides

Product feeds for price comparators: the XML formats explained

16 September 2026 · 7 min read

Every price comparison site reads its own XML. Heureka, Compari, Árukereső, idealo, Ceneo and Skroutz each publish a specification, none of them accepts the Google Shopping format, and two of them that belong to the same company still don't share a single element name. This guide shows what the two formats we see most in Central and Eastern Europe actually look like, what they have in common underneath, and the mistakes that make a portal silently list zero products.

A shared owner does not mean a shared file

Compari.ro and Árukereső.hu are one company and one format. Heureka.cz and Heureka.sk are one company and one format. Between those two families, not one element name is the same: the root, the product wrapper, the identifier, the name, the price and the category are all spelled differently. A Heureka file submitted to Compari isn't partly valid, it is unreadable, and the portal shows the merchant with no products and no error worth the name. We learned this the expensive way, so it goes first.

The Heureka format (Heureka.cz, Heureka.sk)

Root SHOP, one SHOPITEM per product or variant, uppercase names with underscores. The fields that decide whether you appear:

<SHOP>
  <SHOPITEM>
    <ITEM_ID>sku-1234</ITEM_ID>
    <PRODUCTNAME>Acme Trail Jacket Men Blue L</PRODUCTNAME>
    <DESCRIPTION>...</DESCRIPTION>
    <URL>https://shop.example/p/trail-jacket</URL>
    <IMGURL>https://cdn.example/trail-jacket.jpg</IMGURL>
    <PRICE_VAT>2490.00</PRICE_VAT>
    <MANUFACTURER>Acme</MANUFACTURER>
    <CATEGORYTEXT>Oblečení | Pánské | Bundy</CATEGORYTEXT>
    <EAN>8590000000012</EAN>
    <ITEMGROUP_ID>trail-jacket</ITEMGROUP_ID>
    <DELIVERY_DATE>0</DELIVERY_DATE>
    <PARAM><PARAM_NAME>Color</PARAM_NAME><VAL>Blue</VAL></PARAM>
  </SHOPITEM>
</SHOP>

PRICE_VAT is the final price including VAT, in the portal's currency, with no currency symbol. DELIVERY_DATE is a number of days, 0 meaning in stock and ready to ship; words like “in stock” are not accepted. CATEGORYTEXT is the full path with | separators, taken from Heureka's own category tree; a category of your own invention lands the product in “uncategorised”, where nobody browses. Variants share an ITEMGROUP_ID and carry their differences as PARAM pairs.

The Compari format (Compari.ro, Árukereső.hu)

Root Products, one Product per item, CamelCase names. The portal's parser normalises case and underscores, so the older spelling still in many live feeds (product_url, delivery_time, productid) is accepted too; we verified that against two feeds Compari ingests today.

<Products>
  <Product>
    <Identifier>sku-1234</Identifier>
    <Manufacturer>Acme</Manufacturer>
    <Name>Acme Trail Jacket Men Blue L</Name>
    <ProductUrl>https://shop.example/p/trail-jacket</ProductUrl>
    <Price>489.96</Price>
    <ImageUrl>https://cdn.example/trail-jacket.jpg</ImageUrl>
    <Category>Imbracaminte | Barbati | Geci</Category>
    <Description>...</Description>
    <DeliveryTime>2</DeliveryTime>
    <EanCode>8590000000012</EanCode>
    <ProductNumber>ACM-TJ-BL-L</ProductNumber>
    <GroupId>trail-jacket</GroupId>
  </Product>
</Products>

Price is the final price including VAT, decimals with a dot, and no thousands separator: in Romania the dot is the thousands separator, so 1.249 would be read as one thousand two hundred forty-nine. DeliveryTime accepts exactly four shapes: a bare number of days, N zile, N zile lucratoare, or NO for a product that cannot be ordered. Ranges, “imediat” and “in stoc” are listed as incorrect, and an unparsed value costs the listing. ProductNumber (the manufacturer's part number) is mandatory for electronics, IT and appliances.

What every comparator wants underneath

Strip the spelling away and the two formats, and the German, Polish and Greek ones besides, ask for the same six things: a stable identifier per variant; the final price with VAT in the local currency; a direct product URL and a direct image URL; the manufacturer; a category from their tree, not yours; and the EAN. The EAN matters more here than on Google. A comparison site works by matching your offer onto an existing product card and sorting it by price against the other shops. Without the barcode the portal has to guess from the name, usually gives up, and your offer sits alone on a card nobody visits.

The mistakes that produce zero products

How FeedRobin handles it

Heureka and Compari/Árukereső are separate channels with separate renderers, so each portal gets the elements its own specification names, with delivery time as days, prices without separators, EAN and part number passed through from your store and variants grouped. The Compari output was checked element by element against feeds the portal already ingests. Portals whose specification we haven't validated end to end aren't offered as channels, because “probably the same format” is the mistake this guide is about.

Read next

Get your products on Compari, Árukereső and Heureka: the product feed guideHow the CEE price comparators work, the feed format they expect (it's not Google's), delivery-time fields, category mapping, and how to submit your catalog step by step.
7 min
Fix “Limited performance due to missing identifiers [gtin]” in Google Merchant CenterWhat Google's missing-GTIN warning means, where to find barcodes for your products, and what to do when a product genuinely has none.
6 min
What is a product feed — and why every store advertising online needs oneThe file behind every Google Shopping ad, Instagram product tag and price-comparator listing: what a product feed contains, who reads it, and what happens when it's wrong.
5 min
Not sure what's wrong with your feed?Paste your feed URL and FeedRobin checks every product for missing barcodes, images, descriptions and more — free, no account needed.
Check my feed — it's free