Skip to content
Idealno.ba
Price comparison

Idealno.ba feed for Shopify

Idealno.ba is Bosnia and Herzegovina's price comparison site, run by Ceneje d.o.o. within the Heureka Group. It publishes the very same CNJExport specification as Ceneje.si, relabelled so literally that four of its sentences still name Jeftinije.hr. The format pairs offers on codes, imports most values exactly once and runs no validator over your file; an editor reviews it instead. Feedflock renders the feed against the live specification, keeps the pairing fields filled and regenerates the file every hour on a stable URL.

01 · ShopifyProduct in the catalog
Linen shirt SandNordlin · Men's shirtsSKU-2048 · S–XL
Price
95 KM
In stock
0 pcs
When out of stock
02 · idealno-ba.xmlUpdated just now
<Item>
<ID>SKU-2048-M</ID>
<groupId>8236409175213</groupId>
<name><![CDATA[Linen shirt Sand]]></name>
<description><![CDATA[<p>A breathable linen shirt in a regular cut.</p>]]></description>
<link>https://shop.example/products/linen-shirt-sand?variant=44718293450817</link>
<mainImage>https://cdn.shop.example/img/linen-shirt-sand.jpg</mainImage>
<moreImages>https://cdn.shop.example/img/linen-shirt-sand-back.jpg</moreImages>
<price>95.00</price>
<curCode>BAM</curCode>
<stock>preorder</stock>
<deliveryTimeMin>1</deliveryTimeMin>
<deliveryTimeMax>3</deliveryTimeMax>
<fileUnder><![CDATA[Odjeća i obuća > Muška odjeća > Muška odjeća za slobodno vrijeme > Muške košulje]]></fileUnder>
<cenCategoryId>1902</cenCategoryId>
<brand><![CDATA[Nordlin]]></brand>
<EAN>8594000123453</EAN>
<productCode>SKU-2048-M</productCode>
<condition>new</condition>
<attributes>
<gender>male</gender>
<color><![CDATA[Sand]]></color>
<size><![CDATA[M]]></size>
<ageGroup>adult</ageGroup>
<attribute>
<name>Linen shirt Sand</name>
<values><value>100% linen</value></values>
</attribute>
</attributes>
</Item>
Category mapping

Your product types. The channel's categories.

The channel files offers under its own category tree. Feedflock suggests a category for each Shopify product type and you just confirm. One mapping covers every product of that type, including products you add later.

Full category path in the feed
One mapping per product type
Override per individual product
Shopify typeproducts
Channel category
Muške košulje
Catalog coverage79 %
−20% off compare-at
ProductregularPriceprice
Linen shirt Sand95.00 KM76.00 KM
Mug Fjord 350 ml29.00 KM23.20 KM
Backpack Ridge 28 l145.00 KM116.00 KM
Soy candle Les27.00 KM21.60 KM
Wool scarf Fjell56.00 KM44.80 KM
70.40 KMsaved across these products
5 / 5products showing a discount
Sale prices

A discounted item carries two prices, and the old one is required.

When an item is on sale, Idealno.ba requires regularPrice: the price incl. taxes before the discount, beside the final price. Feedflock fills it from your Shopify compare-at price and leaves the element out entirely when nothing is discounted, exactly as the template's guard works. A real markdown shows as an old price and a new one, and a full-price item never carries a fake one.

Feed health

Catch feed issues before Idealno.ba 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 · idealno-ba.xml
76 / 100
To review: 4
Missing EAN on 12 variantsEAN is a required element and the first of the three codes Idealno.ba pairs offers on: exactly 13 digits, valid per GS1. The barcode field on these variants is empty.
Empty fileUnder on 9 productsfileUnder is required and Idealno.ba classifies offers from it. It fills from the category mapping, which these products lack.
No brand on 7 productsbrand is required in the spec's table; it may stay empty only for genuinely unbranded goods, never “N/A” or “Generic”. The Shopify vendor field is empty.
Missing description on 6 productsdescription is required: HTML without styling in CDATA, matching the landing page. These products have no description in Shopify.

Setup

Live in five steps

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

  1. Register your shop with Idealno.ba

    Apply through the merchant registration linked in Idealno.ba's navigation (/registracija-internet-trgovine). Onboarding is personal: you host the XML file on your server and send them the URL, and an editor confirms the feed before anything imports. Questions go to the shared group address, urednik@ceneje.si.

  2. Install Feedflock

    Add Feedflock from the Shopify App Store. It reads your products, variants, stock and images directly through the Shopify API.

  3. Pick the Idealno.ba template

    Create a new feed and choose the Idealno.ba template. One Item per variant under a bare CNJExport root, with ID, name, link, mainImage, price, stock, fileUnder, brand and EAN mapped from the start and prices in convertible marks with curCode BAM, one of the only three currencies the format allows.

  4. Map categories and check pairing data

    Match your product types in the category mapping. That fills fileUnder, which Idealno.ba classifies from. Their numeric cenCategoryId, stored in a metafield, places an item within 48 hours. And fill the trio Idealno.ba pairs on: a 13-digit EAN from the barcode, productCode from the SKU, productModel from a metafield.

  5. Send the feed URL

    E-mail the hosted feed URL to Idealno.ba. After the editorial check your products import; the sync runs once a day around half past midnight and a faster rhythm is a conversation, not a setting. Feedflock regenerates the file every hour, so it is always ready.

    https://feedflock.appfleece.com/f/demo-idealno-ba/idealno-ba.xml

The feed

What the channel receives

idealno-ba.xml
<Item>
  <ID>SKU-2048-M</ID>
  <groupId>8236409175213</groupId>
  <name><![CDATA[Linen shirt Sand]]></name>
  <description><![CDATA[<p>A breathable linen shirt in a regular cut.</p>]]></description>
  <link>https://shop.example/products/linen-shirt-sand?variant=44718293450817</link>
  <mainImage>https://cdn.shop.example/img/linen-shirt-sand.jpg</mainImage>
  <moreImages>https://cdn.shop.example/img/linen-shirt-sand-back.jpg</moreImages>
  <price>95.00</price>
  <curCode>BAM</curCode>
  <stock>in stock</stock>
  <deliveryTimeMin>1</deliveryTimeMin>
  <deliveryTimeMax>3</deliveryTimeMax>
  <fileUnder><![CDATA[Odjeća i obuća > Muška odjeća > Muška odjeća za slobodno vrijeme > Muške košulje]]></fileUnder>
  <cenCategoryId>1902</cenCategoryId>
  <brand><![CDATA[Nordlin]]></brand>
  <EAN>8594000123453</EAN>
  <productCode>SKU-2048-M</productCode>
  <condition>new</condition>
  <attributes>
    <gender>male</gender>
    <color><![CDATA[Sand]]></color>
    <size><![CDATA[M]]></size>
    <ageGroup>adult</ageGroup>
    <attribute>
      <name>Materijal</name>
      <values><value>100% linen</value></values>
    </attribute>
  </attributes>
</Item>
Live preview
Linen shirt Sand

Nordlin

Linen shirt Sand

95 KM

Feed fields

ID

SKU-2048-M

groupId

8236409175213

name

Linen shirt Sand

description

A breathable linen shirt in a regular cut.

link

https://shop.example/products/linen-shirt-sand?variant=44718293450817

price

95.00

curCode

BAM

stock

in stock

deliveryTimeMin

1

deliveryTimeMax

3

fileUnder

Odjeća i obuća > Muška odjeća > Muška odjeća za slobodno vrijeme > Muške košulje

cenCategoryId

1902

brand

Nordlin

EAN

8594000123453

productCode

SKU-2048-M

condition

new

gender

male

color

Sand

size

M

ageGroup

adult

name

Materijal

value

100% linen

The channel

Bosnia's comparison site of the Ceneje group

Idealno.ba publishes no aggregate counter, but its front page is a live catalogue of departments, products and merchant names (Djaksport, Intersport and alpinashop.ba among them, read 2026-09-03), with prices in convertible marks. The group's storefront for Bosnia and Herzegovina, behind the same editorial team and the same importer as Ceneje.si.

Pairing runs on codes

Your offer is matched to the product card by EAN + productCode + productModel. Send CUIN, the group's own product code from the card, and the item auto-links to the existing catalog entry within 48 hours.

Convertible marks on the wire

BAM is one of the only three currency codes the format allows, and Idealno.ba quotes its catalogue in KM. The template fixes curCode to BAM and prices go out with a dot decimal separator, consistent across the whole file: the one separator rule the spec insists on.

The feed

  • A template written against Idealno.ba's own page (read 2026-09-03), including its four leftover mentions of Jeftinije.hr and a sample feed still printing HRK, a currency its own allowed list forbids; the rules come from the element tables, not the leftover prose
  • One Item per variant tied together by groupId; clothing and footwear send gender, color, size and ageGroup, every other attribute a repeatable <attribute> block
  • The pairing fields mapped from the start: EAN from the barcode, productCode from the SKU, brand from the vendor
  • fileUnder from category mapping against the real Idealno.ba tree (1,403 categories, synced in the app), and cenCategoryId from a metafield for 48-hour placement
  • The only per-element difference in the whole four-site document honoured: the Bosnian page sets no length limit on videoUrl, so the template declares none
  • regularPrice from the compare-at price, present only on discounted items, exactly as Idealno.ba requires; final prices in marks with a dot separator and curCode BAM
  • The readiness check names every required element with a gap (a missing EAN, fileUnder or brand) before the URL goes to Idealno.ba

Deep dive

01

How Idealno.ba reads your feed

  • One UTF-8 XML file on a URL you host. Idealno.ba polls it; there is no upload UI and no API
  • The first import waits for an editor to confirm the feed; questions go to urednik@ceneje.si
  • The sync runs once a day around 0:30; shops whose prices change often are invited to ask for a faster rhythm
  • No item cap and no file-size limit: live merchant feeds on the group's importer exceed 70 MB
Technical details

Idealno.ba reads one XML file from a URL you host and e-mail to their team; there is no upload interface and no API. Nothing imports until an editor confirms the feed; the address at the foot of the spec, urednik@ceneje.si, is shared by all four storefronts of the group. The page states one synchronization a day, around half past midnight, and invites shops whose prices and availability change often to get in touch. A faster cadence is a conversation, not a setting.

No item cap, file-size limit or compression rule is stated anywhere, and none is enforced across the group, with merchant feeds over 70 MB in production on the same importer. The declared encoding must match the file's real one; Feedflock emits and declares UTF-8, hosts the file on a stable URL and regenerates it every hour, so whenever Idealno.ba pulls, it reads current data.

02

The name is written once

  • Only about twenty elements are re-read daily: price, stock, link, delivery and a few more
  • name, description, mainImage, fileUnder, brand and EAN import once; later changes bring additional costs
  • The name must carry brand + product type + model: no promo words, no all-caps, no size in clothing
  • description and specifications are HTML in CDATA; specifications feed Idealno.ba's filters
Technical details

The most consequential line of the spec is easy to miss: most values are imported into Idealno.ba's database only once, and later changes to them bring additional costs. The re-read list covers price, regularPrice, clubPrice, stock, stockText, link, the delivery elements, condition, warranty, coupon and gift. A name, description, main image, category path, brand or EAN is not on it. A wrong product name is a support ticket, not a regeneration.

So the name deserves the care the spec asks for: brand + product type + model, as in their example “SAMSUNG hladnjak RB37J5018SA”. No promo phrases like besplatna dostava or poklon, no all-caps, second-hand status stated, and for clothing and footwear the size must stay out of the name. Descriptions are HTML without styling, wrapped in CDATA, and the specifications element is what Idealno.ba turns into the filters buyers narrow results with.

03

Pairing runs on codes

  • Offers pair to the catalog by EAN + productCode + productModel; the name is what editors classify from
  • The EAN is exactly 13 digits with a valid GS1 check digit; a 14-digit GTIN fails
  • CUIN, the group's own product code, auto-links an item to the existing catalog within 48 hours
  • An ID must never change or be reused: the group's FAQ says a duplicated ID drops every offer that shares it
Technical details

Idealno.ba pairs your offer to its product card by EAN, productCode and productModel, stated outright in the spec's closing list of common problems. The EAN is exactly 13 digits, valid per GS1, with restricted and coupon prefixes excluded; a 14-digit GTIN or a leading-zero value does not pass, exactly as on Heureka. The template fills EAN from the Shopify barcode and productCode from the SKU.

Two shortcuts exist. CUIN, the group's own product code shown on every product page, auto-links your item to the existing catalog entry within 48 hours, and cenCategoryId (the numeric id from the group's category archive) places it into the right category just as fast. The ID itself is permanent: never changed, never recycled, kept across a platform migration. What a duplicated ID does is not stated on Idealno.ba's page; Ceneje's B2B FAQ (the same group and the same importer) says it drops every offer that shares it.

04

Variants, categories and delivery

  • One Item per variant, tied together by groupId, which is reserved for color, size, gender and ageGroup differences
  • Clothing and footwear must send gender, color, size and ageGroup
  • fileUnder is your shop's own category path: required, exactly one per item
  • deliveryCost is a single price per item (0 means free); delivery times are a working-day pair
Technical details

Variants are flat: one Item per variant, tied together by groupId, and groupId is reserved for products that differ by the four pre-defined attributes color, size, gender and ageGroup, sent inside the attributes block. For clothing and footwear all four are required; every other attribute goes out as a repeatable attribute block with a name and values.

fileUnder carries your shop's own category path, exactly one per item. Idealno.ba classifies from it, so the mapping matters. Availability is a three-value enum with dispatch semantics: in stock ships within a day, preorder in 2–10 working days, out of stock has no known date, and unlike Heureka, an out-of-stock item may stay in the feed. Delivery is one price per item, 0 for free, with deliveryTimeMin/Max in working days required whenever the item is in stock or on preorder.

The takeaway

One URL, a daily sync and an XML that follows Idealno.ba's spec element by element. The names and codes Idealno.ba imports only once go out right the first time, and Feedflock keeps price and stock current from then on.

Claude · ChatGPT

Or set up your Idealno.ba feed in chat

Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to Idealno.ba's own tree and tells you what is still missing. You approve every change.

feedflock · mcp

Create a Idealno.ba 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. The Idealno.ba template renders the full CNJExport structure (case-sensitive tags, CDATA where the spec asks for it, one Item per variant) for you. If you ever need a custom layout, the Liquid editor builds one in XML, CSV or JSON with a live preview.
Yes. Idealno.ba publishes the Croatian specification relabelled, and four sentences were left pointing at Jeftinije.hr: the serving instruction, the price-of-0 rule, cenCategoryId and fileUnder. Its sample feed even still prints HRK, a currency its own allowed list forbids. The rules themselves are identical on all four sites: one importer stands behind the four front ends, and the template follows the element tables, not the leftover prose.
The page states one synchronization a day, around half past midnight, and invites shops whose prices change often to ask for a faster rhythm. Feedflock regenerates the file every hour on a stable URL, so whenever Idealno.ba reads it, the data is current.
curCode allows EUR, RSD and BAM, so euro is a legal value, but Idealno.ba quotes its catalogue in convertible marks, and the template defaults to curCode BAM. Whichever currency you settle on, the spec insists on one decimal separator across the whole file.
Exactly 13 digits, valid per GS1: correct check digit, no restricted (02/04/2) or coupon (98–99) prefix. A 14-digit GTIN or an EAN stored in Shopify with an extra leading zero does not pass and has to be corrected in Shopify.
The same specification, yes: Idealno.rs (Serbia), Ceneje.si (Slovenia) and Jeftinije.hr (Croatia) publish the very same document and have their own templates in Feedflock. What changes is the currency (RSD, EUR), the language and the category CSV; even the support address, urednik@ceneje.si, is shared.

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