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 (Heureka's specification; Heureka.sk's is the same format). 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 format section of the Compari and Árukereső merchant portals). 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. Compari's format page states no decimal or thousands rule for it; the prices in its examples are whole numbers with no separator, such as 4033 and 999. 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. - A dot as the thousands separator in the price. Heureka.sk reads the dot as the decimal point, so
1.249,00is wrong there;1249.00is 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. Account setup and submission are in the Compari, Árukereső and Heureka guide.
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 with a decimal point and no thousands separator, 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. To see which dialect a feed you already have is written in, paste it into the free feed check: it reads both.
Sources
Heureka's offer feed XML documentation and the Heureka.sk specification; the feed-format sections of the Compari.ro and Árukereső.hu merchant portals; Google's product data specification for the format they all differ from.