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
- Sending the Google feed. The portal reads no items and reports it as an empty feed, not as a format error.
- Words where a number is expected. “In stock” in
DELIVERY_DATEorDeliveryTimedrops the item. - Currency symbols and thousands separators in the price.
2 490 Kčand1.249,00are both wrong;2490.00and1249.00are right. - Your own category names. Map to the portal's tree, path and all.
- Missing EAN, or a made-up one. Fake barcodes get the offer matched to the wrong card, which is worse than no match.
- One file for a whole “family”. Check the spec of each portal by name, not by owner.
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.