Skip to content
Billiger.de
Price comparison

Billiger.de feed for Shopify

Billiger.de is the Karlsruhe price comparison site run by solute, and one feed lists you in the whole billiger.de network: the comparison itself, partner portals and Google CSS / Microsoft Shopping ads. Feedflock turns your Shopify catalog into the CSV the solute spec documents: twelve required columns per offer, prices incl. VAT without a currency sign, shipping cost and delivery time in every row, one row per variant.

01 · ShopifyProduct in the catalog
Linen shirt SandNordlin · Men's shirtsSKU-2048 · S–XL
Price
49 €
In stock
0 pcs
When out of stock
02 · billiger.csvUpdated just now
aid,GTIN,name,brand,desc,price,old_price,link,target_url,images,shop_cat,dlv_cost,dlv_time,availability,condition,item_group_id,size,color
SKU-2048,8594000123453,Linen shirt Sand M,Nordlin,A breathable linen shirt in a regular cut.,49.00,,https://shop.example/products/linen-shirt-sand?variant=9087654322&utm_source=billiger.de&utm_medium=cpc,https://shop.example/products/linen-shirt-sand?variant=9087654322,https://cdn.shop.example/img/linen-shirt-sand.jpg;https://cdn.shop.example/img/linen-shirt-sand-2.jpg,Mode > Herren > Hemden,4.90,1-3 Werktage,out of stock,new,8236409175213,M,Sand
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
Herrenhemden
Catalog coverage79 %
Feed health

Catch feed issues before Billiger.de 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 · billiger.csv
76 / 100
To review: 4
No shipping cost entereddlv_cost is required on every row. The template leaves it empty on purpose, because 0.00 would declare free shipping. solute names missing shipping costs as the main cause of abandoned purchases.
Missing GTIN on 14 offersEvery article that has a manufacturer barcode needs its GTIN; an article without one needs an mpn instead. The template reads the Shopify barcode field.
Variant names without size or colour on 9 offersThe spec wants variants distinguishable by name, so colour and size belong in it. The template's default appends the variant title to the product title.
Generic category path on 7 offersshop_cat must be your shop's own category path in German. Generic terms like “Sale” or “Top-Deal” and brand names in the path are explicitly disallowed.

Setup

Live in five steps

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

  1. Register with solute

    Sign up as a billiger.de merchant and sign the contract; your partner-portal credentials arrive once solute has it. Your shop needs a cart, an imprint, a cancellation policy and gross prices in the local currency.

  2. Install Feedflock

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

  3. Pick the Billiger.de template

    Create a new feed and choose the Billiger.de template. aid, GTIN, name, brand, desc, link, target_url, images, price and shop_cat are mapped from the start, one row per variant with the variant in the name.

  4. Enter your shipping cost

    dlv_cost and dlv_time are required on every row and legally expected in Germany. Feedflock deliberately leaves the shipping cost empty until you enter your real rate, because 0.00 would declare free shipping. Selling to Austria too? dlv_cost_AT is ready.

  5. Set up the feed in the partner portal

    Configure the feed export at partner.solute.de and check it with solute's Feedcheck validator before it goes live. Feedflock regenerates the file every hour on the same URL.

    https://feedflock.appfleece.com/f/demo-billiger/billiger.csv

The feed

What the channel receives

billiger.csv
aid,GTIN,name,brand,desc,price,old_price,link,target_url,images,shop_cat,dlv_cost,dlv_time,availability,condition,item_group_id,size,color
SKU-2048,8594000123453,Linen shirt Sand M,Nordlin,A breathable linen shirt in a regular cut.,49.00,,https://shop.example/products/linen-shirt-sand?variant=9087654322&utm_source=billiger.de&utm_medium=cpc,https://shop.example/products/linen-shirt-sand?variant=9087654322,https://cdn.shop.example/img/linen-shirt-sand.jpg;https://cdn.shop.example/img/linen-shirt-sand-2.jpg,Mode > Herren > Hemden,4.90,1-3 Werktage,in stock,new,8236409175213,M,Sand
Live preview
Linen shirt Sand

Nordlin

Linen shirt Sand

49 €

Feed fields

aid

SKU-2048

GTIN

8594000123453

name

Linen shirt Sand M

brand

Nordlin

desc

A breathable linen shirt in a regular cut.

price

49.00

link

https://shop.example/products/linen-shirt-sand?variant=9087654322&utm_source=billiger.de&utm_medium=cpc

target_url

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

shop_cat

Mode > Herren > Hemden

dlv_cost

4.90

dlv_time

1-3 Werktage

availability

in stock

condition

new

item_group_id

8236409175213

size

M

color

Sand

The channel

One feed, the whole network

The same feed that lists you on billiger.de also drives what solute calls the billiger.de network: partner portals and Shopping ads on Google CSS and Microsoft Advertising are served from it automatically.

Shipping is part of the price

billiger.de folds the shipping cost into the total price it compares, so the offer that wins is the cheapest delivered, not the cheapest sticker. A feed with honest dlv_cost values competes on the number shoppers actually pay.

A validator before you go live

solute's Feedcheck tool checks your file before the first listing, and its expert team reviews the feed at onboarding. You find out what is wrong before shoppers do.

The feed

  • All twelve required columns (aid, GTIN, name, brand, desc, link, target_url, images, price, dlv_cost, dlv_time and shop_cat) mapped from the start; the shipping rate is the one value only you can enter
  • Prices go out incl. VAT as bare numbers with a dot decimal and no currency sign, as the spec's formatting rules demand
  • Every variant is its own row sharing one item_group_id, with the variant title in the name and a ?variant= deep link that preselects it in your store
  • link carries your feed-level UTM parameters for traffic analysis; target_url stays the canonical shop URL solute checks the landing page against
  • Your compare-at price fills old_price only when it is actually higher, so the strike-through saving shown with it is real
  • shop_cat keeps your own category path while the category mapping resolves google_product_category on the German Google tree
  • The readiness check lists required columns with gaps (a missing GTIN, an empty shop_cat, the shipping cost you have not entered yet) before the first export

Deep dive

01

A CSV with strict, simple rules

  • CSV, JSON or XML (the CSV shape is the one the spec documents in detail): UTF-8, one file, one language
  • Comma between columns, double quotes around fields that need them, semicolon for lists inside a cell
  • A header row is mandatory; column order and names are free, but the spec's own names map automatically
  • Compression is allowed; every variant of an article is its own row
Technical details

solute's feed guide accepts CSV, JSON or XML, but the CSV shape is the one it documents line by line: UTF-8 encoding, a mandatory header row, a comma between columns, double quotes around any field that contains the delimiter, and a semicolon as the list separator inside a cell, so two image URLs travel in one images cell. The whole catalog goes in one file, in one language, and compression is allowed.

Column order and names are formally free (solute maps them rather than matching them), but a renamed column can interrupt your listing, so the template keeps the spec's names verbatim, down to the uppercase GTIN. Feedflock renders exactly this layout and hosts the file on a stable URL.

02

The required twelve

  • Required on every offer: aid, GTIN, name, brand, desc, link, target_url, images, price, dlv_cost, dlv_time, shop_cat
  • GTIN for every article that has a manufacturer barcode; an article without one needs mpn instead
  • A price of 0.00 or less is the one named rejection: the article is refused
  • Price, availability and details on the landing page must match the feed and be visible without a login
Technical details

Twelve columns are required on every offer: a stable per-variant aid, the GTIN, a name that distinguishes the variant, brand, a plain-text description without HTML or links, both URLs, at least one image, the price incl. VAT, shipping cost, delivery time and your shop's own category path. The one named rejection in the spec is the price: 0.00 or less and the article is refused.

Two URLs are required because they do different jobs. link is the deep link with your tracking parameters for traffic analysis; target_url must be the shop URL and is the address solute checks the landing page against. Price, availability and details there have to match the feed and be visible without a login. Feedflock deep-links the exact variant in both and appends your feed-level UTM to link.

03

Delivery is part of the offer

  • dlv_cost and dlv_time are required on every row: no carrier columns, no COD, no payment methods
  • 0.00 declares free shipping, including when the offer alone exceeds your free-shipping threshold
  • dlv_time always carries a unit ('2 Werktage', '1-3 Tage'); without one, days are assumed
  • dlv_cost_AT adds the Austrian rate when you also ship there
Technical details

billiger.de has no feed-level shipping settings and no carrier list: the shipping cost and delivery time travel inside every row as dlv_cost and dlv_time, and both are required. The cost is a bare number without a currency sign, and 0.00 means free, also when you ship free above a basket value and this offer alone crosses the threshold, because the feed carries the resolved cost, never the threshold.

The template ships no default rate on purpose: 0.00 would declare free shipping on your behalf, and solute names missing shipping costs as the main cause of abandoned purchases. You type your real flat rate once (or keep it in a metafield per product); dlv_time defaults to "1-3 Werktage", always with a unit. Shipping to Austria gets its own optional column, dlv_cost_AT.

04

Your category path, plus Google's

  • There is no billiger.de category tree: shop_cat carries your shop's own path, in German
  • Generic paths like “Sale” or “Top-Deal” and brand or model names in the path are disallowed
  • google_product_category is optional: a path from Google's taxonomy, in German, in its own column
  • The numeric google_product_category_ID lives in a separate column and reads from a metafield
Technical details

solute publishes no category tree of its own. The required shop_cat column carries your shop's own category path in German: “Mode > Herren > Hemden”, not “Sale-Angebot” and never a brand or model name folded into the path. It fills from your Shopify product type by default.

If you want a standardised tree on top, google_product_category takes a path from Google's product taxonomy in German. Feedflock's category mapping for this feed runs on exactly that tree, the same Google taxonomy family the idealo and Google Shopping feeds use, so one shop-level mapping serves all three. The numeric ID form travels in its own column from a metafield.

The takeaway

One URL, an hourly refresh and a CSV that already follows solute's formatting rules: twelve required columns, variant by variant, shipping included. Your Shopify catalog stays the single source of truth for the whole billiger.de network.

Claude · ChatGPT

Or set up your Billiger.de feed in chat

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

feedflock · mcp

Create a Billiger.de 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

CSV, JSON or XML, UTF-8, in a single file per shop with a mandatory header row; compression is allowed. Feedflock renders the CSV shape the spec documents in detail: comma-delimited, double-quote escaping, a semicolon for lists inside a cell, one row per variant.
Registration and a signed contract come first; solute then sends your partner-portal credentials and the feed is configured at partner.solute.de. Before the first listing, solute's Feedcheck tool validates the file and its expert team reviews the feed with you at onboarding.
For every article that has a manufacturer barcode, yes. GTIN-13, UPC-12, ITF-14, ISBN-13 and GTIN-8 are all accepted, several GTINs semicolon-separated. An article without a manufacturer GTIN needs an mpn instead. The template reads the Shopify barcode field.
Inside every row, as dlv_cost (a bare number, no currency sign, 0.00 for free shipping, also when the offer alone crosses your free-shipping threshold), plus dlv_time as text with a unit, like “2 Werktage”. dlv_cost_AT is the optional Austrian rate. There are no carrier or payment columns.
Yes. The spec requires every variant of an article as its own offer. All rows of one product share an item_group_id, and the name must distinguish the variant by colour and size. The template builds both from your Shopify variants automatically.
Where German base-price labelling applies, ppu carries a string like “59.90 € / 100 ml” alongside unit_pricing_measure and unit_pricing_base_measure, read from metafields. Second-hand and B-stock goods must be marked in condition (new / refurbished / used); omitted means new.

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