Template

idealo feed template

idealo is Germany's largest price comparison site and it reads a CSV with its own column names: sku, title, price with VAT, url, a parseable German delivery time, and shipping and payment costs per method. This page gives you the template, the formatting rules that differ from Google, example rows from Shopify and three other stores, a CSV to download, and a plan to publish the file on a URL idealo fetches daily.

We connect your store, build the feed and keep it in sync. Updated 2026-10-27.

At a glance

  • Core required columns: sku, title, price, url, delivery (delivery time), deliveryCosts and paymentCosts; brand and eans are required in practice because idealo matches offers to its catalog by brand and EAN.
  • Prices are in EUR including VAT, with a dot as decimal separator and no currency symbol: 149.95, not 149,95 €.
  • Delivery time is a short German phrase idealo can parse, such as 1-3 Werktage or sofort lieferbar; vague text like versandfertig is rejected.
  • Lists inside a field (eans, imageUrls) are semicolon-separated; the file is UTF-8 and comma-delimited, hosted on a public HTTPS URL that idealo fetches once a day.
  • Textfinity has no idealo template; we build a custom feed with idealo's column names and publish the CSV on a stable URL, from Shopify, a CSV export or a Google Sheet.

What an idealo feed template contains

idealo's importer takes a flat CSV with its own column names rather than the Google vocabulary. The exact required set depends on the csv-importer schema configured for your partner account, so treat the first group below as required for every account and the second as required for matching and variants. Out-of-stock items are not sent with an availability flag; they are left out of the file.

ColumnRequirementLimit / formatExample
skuRequiredMax 100 characters, uniqueSOFA-220-BE
titleRequiredMax 200 characters, manufacturer first, no promotional textNordhem Dreisitzer-Sofa Linnea Leinen Beige 220 cm
priceRequiredEUR incl. VAT, dot decimal, no symbol1199.99
urlRequiredMax 2,000 characters; for variants the variant must be preselectedhttps://shop.example.de/products/sofa-linnea?variant=beige
deliveryRequiredParseable German delivery time, max 50 characters2-4 Werktage
deliveryCostsRequired (at least one method)EUR incl. VAT, decimal; 0.00 for free; per-carrier columns such as deliveryCosts_dhl49.00
paymentCostsRequired (at least one method)EUR, decimal; 0.00 for free; per-method columns such as paymentCosts_paypal0.00
brandRequired for matchingMax 100 characters; the shop name for own brandsNordhem
eansRequired for matchingUp to 14 digits; several values separated by ;7350012345678
hansRecommendedManufacturer article numbers, ; separatedSOFA-220-BE
categoryPathRecommendedMax 255 characters, levels separated by >Möbel > Sofas > Dreisitzer
descriptionRecommendedPlain text, no HTMLMassives Buchengestell mit abnehmbaren Leinenbezügen.
imageUrlsRecommended; separated URLs, first is the main image, JPG or PNGhttps://cdn.example/sofa-220-beige.jpg;https://cdn.example/sofa-220-side.jpg
basePriceRequired where PAngV appliesPrice per base unit1,99 € / 100 g
eecRequired for products with an energy labelEU class A to GA++
size / colourRequired for variantsOne offer per size and colour220 cm / Beige

Column names and formats as documented in idealo partner material and two feed-vendor references (WisePIM, Koongo), checked 2026-10-27. The authoritative schema is the csv-importer configuration in your idealo partner account; the official page was not reachable at the time of writing.

German formatting rules that break an idealo product feed

Most idealo rejections are formatting, not missing data. The rules below are the ones that differ from a Google Shopping feed built for the same store, so a Google feed cannot simply be renamed.

  • Price: 1199.99 with a dot, VAT included, no currency symbol, no thousands separator. An export in 1.199,99 format needs one replace from regexp rule before it ships: ^(?:(\d+)\.(\d{3})|(\d+)),(\d{2})$ → \1\2\3.\4 turns both 1.199,99 and 179,95 into dot decimals.
  • Delivery: a short German phrase idealo can parse in working days (1-3 Werktage, 2-4 Werktage, sofort lieferbar). English or vague phrases such as versandfertig and Lieferzeit auf Anfrage are not accepted.
  • Shipping and payment costs: decimals with 0.00 for free, at least one delivery method and one payment method; each payment method shown on idealo needs its own value.
  • Lists: eans and imageUrls use semicolons between values, never commas, and the first image becomes the main picture.
  • Encoding: UTF-8, preferably with a byte-order mark, so umlauts in titles and categories survive the import.
  • Variants: one row per size and colour, each with a URL where that variant is preselected; a parent URL that shows the default colour is treated as a wrong offer.

idealo product feed from Shopify

Shopify has no idealo export of its own, and the store's prices, delivery promise and category tree are rarely in the shape idealo wants. The Textfinity Shopify connection pulls products, variants, metafields and the German locale directly from the store, so the idealo feed can read the German title and body from the market translation rather than from a copy. There is no idealo channel template in Textfinity, so you create a custom feed and type idealo's column names as its output columns; then you map sku from the variant SKU, price from the variant price (Shopify stores it gross for EU markets), url from the handle with a variant parameter, imageUrls from the gallery joined with semicolons, and delivery from a static value or a metafield per product.

Shops on WooCommerce, Magento, Shopware or JTL connect through a CSV export URL (or a Google Shopping-format XML feed, which most of their Google feed plugins emit) and follow the same mapping; a shop-specific XML schema has to be exported as CSV first. What the export does not carry, typically EANs, idealo category paths or per-product delivery times, is joined on as a merged Google Sheet keyed on SKU. The feed is rebuilt on the shop's sync schedule and published on a URL; idealo fetches it daily, or up to four times a day on accounts with scheduled fetches.

idealo.csv (header and one Shopify row)

sku,title,price,url,delivery,deliveryCosts,paymentCosts,brand,eans,categoryPath,imageUrls
SOFA-220-BE,Nordhem Dreisitzer-Sofa Linnea Leinen Beige 220 cm,1199.99,https://shop.example.de/products/sofa-linnea?variant=41234567,2-4 Werktage,49.00,0.00,Nordhem,7350012345678,Möbel > Sofas > Dreisitzer,https://cdn.example/sofa-220-beige.jpg;https://cdn.example/sofa-220-side.jpg

idealo product feed for Germany: matching, categories and base prices

idealo lists offers under products in its own catalog, and matching is what decides whether your row appears on the product page with the other shops or sits unlisted. Brand plus EAN gives an exact match; a title that starts with the manufacturer and model is the fallback. The categoryPath column helps idealo place offers it cannot match, so send your own category tree with levels separated by a greater-than sign and leave out marketing levels such as Sale or Neu.

German price law adds two fields other channels do not have. Products sold by weight, volume or length need basePrice, the price per 100 g, litre or metre, under the Preisangabenverordnung. Products with an EU energy label need the class in eec. Both are plain columns in the template. Textfinity's advanced expressions do the arithmetic: round(calc{[price] / [weight_g] * 100}, 2) + " € / 100 g" gives the price per 100 g from the pack weight, and a Google Sheet lookup can supply energy classes by model.

Examples

Worked examples, by situation

Four German stores, four idealo rows, each with the Textfinity rule that produces it.

Furniture · idealo.de · 600 SKUs on Shopify (DE market)

Shopify variant row with German title and delivery

Before

Handle,Title (de),Variant SKU,Variant Price,Option1 Value
sofa-linnea,Dreisitzer-Sofa Linnea,SOFA-220-BE,1199.99,Beige

After

sku,title,price,url,delivery,deliveryCosts
SOFA-220-BE,Nordhem Dreisitzer-Sofa Linnea Leinen Beige 220 cm,1199.99,https://shop.example.de/products/sofa-linnea?variant=41234567,2-4 Werktage,49.00

How we set it up

title is an advanced expression on the German locale fields: [product_vendor] + " " + [product_title] + " " + [product_metafield_custom_material] + " " + [variant_color] + " " + [product_metafield_custom_width] + " cm" (advanced expressions name Shopify fields with underscores; with the feed language set to German, product_title holds the German title). url is advanced: [product_onlineStoreUrl] + "?variant=" + [variant_id]. delivery is add static value 2-4 Werktage, or a product metafield where it varies; deliveryCosts is add static value 49.00.

Electronics · idealo.de · 3,000 SKUs from a JTL export · energy labels

EAN matching and eec from a sheet

Before

artnr,name,preis,ean,energieklasse
TV-55Q,55 Zoll QLED Fernseher,699,4260123456789,

After

sku,title,price,eans,eec,categoryPath
TV-55Q,Vero 55 Zoll QLED Fernseher 4K,699.00,4260123456789,F,TV & Audio > Fernseher > QLED

How we set it up

eans is a rename of ean; eec comes from a merged Google Sheet keyed on artnr that the compliance team maintains; categoryPath is a replace from google sheet lookup from the JTL category (it replaces substrings, so list full paths). A filter rule excludes rows where ean is blank because unmatched electronics rarely convert on idealo.

Food · idealo.de · 250 SKUs from a WooCommerce feed plugin · base prices

basePrice computed from pack size

Before

sku,name,price,weight_g
COF-1KG,Bergamo Espresso Bohnen,24.90,1000

After

sku,title,price,basePrice,delivery,deliveryCosts_dhl
COF-1KG,Bergamo Espresso Bohnen 1 kg,24.90,2.49 € / 100 g,1-3 Werktage,4.95

How we set it up

basePrice is advanced: round(calc{[price] / [weight_g] * 100}, 2) + " € / 100 g". delivery is add static value; deliveryCosts_dhl is advanced: if calc{[price]} >= 49 then "0.00" else "4.95". Advanced expressions cannot read column names with spaces, which is why the plugin export uses price and weight_g rather than WooCommerce's Regular price and Weight (g).

Fashion · idealo.de · 1,800 SKUs from a Shopware export · prices in German format

Price normalization and one row per size

Before

ordernumber,name,price,size,colour
JKT-77-M,Winterjacke Nova,"179,95",M,Navy

After

sku,title,price,size,colour,url
JKT-77-M,Alpen Winterjacke Nova Navy M,179.95,M,Navy,https://shop.example.de/winterjacke-nova?number=JKT-77-M

How we set it up

replace from regexp on price: , → . turns 179,95 into 179.95. size and colour are plain renames so each variant is its own offer; url is advanced: [url] + "?number=" + [ordernumber] so the variant is preselected. Feed hygiene's value consistency check caught navy, Navy and NAVY before the first fetch.

Copy this plan

From template to a feed URL idealo fetches daily

Six steps. idealo's side is entering the URL in the partner portal; the rest is one custom feed we set up in Textfinity.

  1. 01

    Connect the store with its German data

    Shopify directly (the connection pulls the DE market and locale), or the CSV export URL of a Shopware, JTL, WooCommerce or Magento shop, fetched over HTTPS or SFTP. A Google Shopping-format XML feed from a plugin works too.

    What we set up: We connect your Shopify store with its DE market and locale, or read the CSV or XML export URL you send us.
  2. 02

    Create a custom feed with idealo's columns

    There is no idealo template in Textfinity, so the columns are typed in idealo's spelling: sku, title, price, url, delivery, deliveryCosts, paymentCosts, brand, eans, categoryPath, description and imageUrls, plus basePrice, eec, size and colour where they apply. The output is a comma-delimited CSV.

    What we set up: We create a custom feed and add idealo's output columns from your partner account's importer schema.
  3. 03

    Map prices and costs in idealo's format

    Gross price with a dot decimal (replace from regexp if the export uses a comma). deliveryCosts and paymentCosts as static values, or an advanced if on calc{[price]} where a free-shipping threshold applies; 0.00 where free.

    What we set up: We map price with replace from regexp , → . and deliveryCosts as a static value, or an advanced rule for a free-shipping threshold.
  4. 04

    Add matching data

    brand from the vendor field, eans from the barcode, hans from the manufacturer number. Join a Google Sheet of EANs or category paths by SKU if the store lacks them.

    What we set up: We join your Google Sheet as a merged source keyed on sku and map eans as a rename.
  5. 05

    Filter to what idealo should list

    Exclude out-of-stock items (idealo expects them absent, not flagged), gift cards and items without an EAN or brand. Check the hygiene profile for umlaut encoding problems and inconsistent colour values.

    What we set up: We add exclude filters where the source stock column is equal to 0 and where the source EAN column is blank (variant.inventoryQuantity and variant.barcode on Shopify).
  6. 06

    Publish and register the URL with idealo

    Copy the feed URL. In the idealo partner portal, enter it as the data feed URL under your shop's settings; idealo fetches daily, with up to four scheduled fetches on standard accounts. The import report in the portal shows rejected rows after the first run.

    What we set up: We publish the feed and send you its URL to enter in the partner portal, or enter it with you on a call.

Customization tips

Make it yours

Send the EAN even when the brand is your own

idealo matches by EAN first. Own-brand products without an EAN are listed as unmatched offers with far less traffic. If you register GTINs for your range, add them to a merged sheet and the feed picks them up on the next rebuild; until then, a precise manufacturer-first title is the only matching signal you have.

Model the shipping rule, do not flatten it

A single deliveryCosts of 4.95 is wrong for every order over your free-shipping threshold and idealo ranks offers by total price. One advanced rule reproduces the threshold per row: if calc{[price]} >= 49 then "0.00" else "4.95". calc{} reads the number in the price, so the threshold is a plain comparison.

Leave out-of-stock rows out, but keep the SKU stable

idealo wants unavailable offers removed from the file rather than flagged. Filtering on stock does that; make sure the sku stays identical when the item returns so idealo reconnects the offer to its history instead of creating a new one.

Use the German locale, not a translation column

If the store runs a DE market with translated titles, map from the locale field so merchandising changes flow through. If it does not, an AI config can enhance titles or descriptions and translate them into German (titles run 100 to 150 characters with the key facts first, inside idealo's 200). Only generations you accept in review reach the feed through replace from AI config; the rest fall back to the English text.

Downloads

Take the files

FAQ

Questions about idealo feed template

Which columns does an idealo feed require?

For every account: sku, title, price (EUR including VAT), url, delivery (a parseable German delivery time), and at least one deliveryCosts and one paymentCosts value. In practice brand and eans are also needed because idealo matches offers to products by EAN and brand, and size and colour are required for variants. categoryPath, description and imageUrls are recommended. Your partner account's csv-importer schema is the final word.

How do I create an idealo feed from Shopify?

Shopify has no built-in idealo export. Connect the store to a feed tool that reads products, variants and the German locale, create a custom feed with idealo's column names (Textfinity has no idealo template), map sku, title, gross price, variant URL, delivery time, shipping and payment costs, brand and EAN, and publish the file on a URL. Enter that URL in the idealo partner portal; idealo fetches it daily.

What delivery time format does idealo accept?

A short German phrase in working days that idealo can parse: 1-3 Werktage, 2-4 Werktage, sofort lieferbar. Vague phrases such as versandfertig or Lieferzeit auf Anfrage are rejected. Send one value per row; per-product delivery times can come from a merged sheet or a rule on the stock level.

Does idealo need an availability column?

No. Unlike Google or Meta, idealo expects unavailable offers to be left out of the file. Filter out-of-stock products before publishing and keep their sku unchanged so the offer reconnects when stock returns.

How often does idealo fetch the feed?

Once a day by default. Standard accounts can schedule up to four fetches a day; business accounts have a partial-update API for price and stock. Textfinity rebuilds the file on the shop's sync schedule so each fetch gets current prices.

Set up for you

Have us publish your idealo feed from Shopify or any export

Send us your store or export URL and your idealo importer schema. We build the custom feed with idealo's columns and map prices, delivery and EANs once; Textfinity rebuilds the CSV on schedule on EU servers and gives idealo one URL to fetch.

Have us build this feedOr email support@textfinity.io

Tell us your store and channels. We reply within 24 hours.