BEAM

Seedlight BEAM: one place to run your whole eCommerce, with AI agents that know your business →

← All articles
MarketplaceSzymon Żynda11 min read

Kaufland product feed integration: what the data model demands

Kaufland does not take one feed in the Google Shopping sense. It takes product data into a shared catalogue record, and your offer separately. What follows for the integration, where these builds break, and how to read the states after submission. On documentation checked at source on 27 October 2026.

Kaufland does not accept a single file of products and prices. It accepts product data that feeds a shared catalogue record, and separately an offer: your price, stock, handling time and your own identifier. Most integration trouble starts with squeezing both into one “feed”, in the sense that a Google Shopping file is a feed.

Key takeaways

  • Two separate sets of data go to Kaufland: product data, which feeds a shared catalogue record, and the offer, which carries your price, stock and handling time. The documentation states that product and inventory data are kept separate.
  • The EAN is the key to the whole model. Without it Kaufland cannot identify the product, so your offer has nothing to attach to.
  • The product description is assembled from several sources and some of your data may never reach the published page. Measure the integration by the state of your offer, not by whose copy is showing.
  • An upload that returns no error is not a published offer. Data passes through a pending state and a check that can end in a block with a reason code. An integration that never reads the state back learns about problems from missing sales.

This article describes the Kaufland data model from the implementation side: what the key is, which fields are required, what happens to data after submission, and where these builds break most often. All of it checked in the Seller API documentation on 27 October 2026. If you are after tooling rather than the model, we have a separate piece on building feeds with an agent.

Two things go to Kaufland, not one

The documentation puts this split on page one: product data and inventory data are kept separate. A product is a catalogue entry shared by every seller. An offer, called a unit in the docs, is inventory data for a single product from a single seller. One product record, many units attached to it.

MARKETPLACE DATA MODEL · PRODUCT vs UNITPRODUCT (shared)ean · title · categorymanufacturer · attributesdescription · imagesone record, merged from many sourcesUNIT · your offerid_offer · price · stock · handling timeUNIT · another sellersame product, different priceUNIT · another sellersame product, different stockthe catalogue entry is not yours to ownyour data is a candidate: some of it may never reach the published descriptionwhat you fully control is the unit: price, stock, handling time

The consequence is practical. A price or stock change never touches the catalogue, and a fix to the title never changes your offer. Two different operations, two schedules, two places where something can stall.

Your offer is identified by your own id_offer, which must be unique across your entire inventory. Kaufland keeps warehouse and quantity in sync by that identifier, so it, rather than the EAN, is the key on your side of the integration. Creating a unit also requires a listing price above zero, a condition, and a handling time counted in working days.

A practical rule: if your system derives id_offer from something that can change, say a row index in a file or a variant name, your first large catalogue change will hand you duplicate offers and drifting stock. Derive id_offer from an identifier that is immutable in your own database.

EAN decides whether the product exists at all

The product data file documentation is blunt about this: every product has an EAN, and without the EAN Kaufland cannot identify the product. The EAN is the glue between your offer, the catalogue record, and the offers other sellers hold against the same product.

For an own brand that means work to plan before the integration: obtaining and assigning codes to every variant you intend to sell separately. Mapping by SKU does not replace it. Bundles, multipacks and size variants are separate products, so they need separate codes.

Missing EANs are the single most common reason a Kaufland integration stalls halfway for a fortnight.

File format: semicolons, UTF-8, a locale on every row

If the data goes as a file rather than through the API, the requirements are specific and worth knowing before the first export. Below is what the documentation states directly.

ElementRequirementWhat it means for the integration
FormatCSV with semicolon separatorsA spreadsheet export may comply by accident; set the separator in code.
EncodingUTF-8German and Polish characters in titles are the first test of a valid file.
HeaderFirst line holds attribute namesAttribute names are the contract; keep them in a mapping, not in a spreadsheet.
Multiple valuesRepeat the column name, one value in eachNeeds a column generator, not a template with a fixed field count.
LocaleEvery row has a locale, one file may hold manyMarkets are handled per row, so catalogue translation is part of the feed.
CategoryLeaf, a higher level, or omittedOmitting it turns on automatic categorisation, which is convenient and risky.

That last row is a trap. Automatic categorisation works while the catalogue is conventional, and on products that sit between categories it starts placing items in branches that carry different required attributes and different filters. For the assortment that matters to revenue, state the category explicitly.

Your data is a candidate for the description

This is the part of the model that surprises people most. A Kaufland product description is assembled from several sources: product information services, sellers, manufacturers, and Kaufland own product data team. The documentation says plainly that some of the data you upload may not be selected for the final description.

For anyone arriving from Amazon or from their own store, that is a change of habit: the product page is shared, not yours.

The implication for implementation: do not build a process whose success metric is “our copy is on the page”. The metric is the state of your offer and its visibility. Send well-prepared content, because it raises the chance of being selected, but what you control is the offer.

What happens after you submit

Data does not go live when the response arrives. The update status starts as pending and moves to in progress while automatic or manual checks run. Some values, the docs note, go to manual review by the category management team. At the end the offer is either visible or blocked with one of the reason codes.

AFTER SUBMISSION · WHERE DATA ACTUALLY SITSsubmittedcsv or apipendingqueued, not livein progressauto + human checkliveblockedreason codefix at the source, resubmit, wait againan upload that returns no error is not a published offerif nothing reads the state back, the first signal is a product missing from the listing

There are twenty-four reason codes and they cover things no export can fix on its own: missing brand authorisation, doubts about authenticity, missing certification, regulatory restrictions, product safety. Which means the integration has to read them and put them in front of a person, because the fix lives in documents or in a business decision rather than in the file.

A clean upload is not a publication. If your integration pushes data and never reads states back, the first signal of trouble will be a product missing from the listing, spotted by someone in customer service three weeks later.

Where these integrations break in practice

Across our channel builds the same four problems come back, always in the same order.

  • One-way push. Data leaves for the channel and nobody reads statuses or block codes. The seller portal becomes the only place where the truth lives, so nobody checks it regularly.
  • Mapping in a spreadsheet. Attribute and category assignment lives in a file on one person laptop. When channel requirements change there is nothing to version and nothing to test.
  • Offers updated per product. Stock and price pushed by EAN instead of by id_offer drift apart as soon as the same product exists in two warehouses or two conditions.
  • One locale treated as a translated title. Markets differ in required attributes and filter expectations too, and the row-level locale is where those differences have to be handled.

How to build it so it survives

The architecture that holds up over time has four layers, each responsible for one thing.

  • The catalogue as the source of truth. One place holding product data, feeding every channel. Without it each channel starts living its own life.
  • A mapping layer per channel. The Kaufland schema described in code: required attributes, categories, units, locales. A change in channel requirements becomes one file and one test.
  • Validation before sending. A missing EAN, a zero price, a negative handling time or a duplicate id_offer surface on your side rather than in moderation. Cheap, and immediate.
  • A queue with retries and state reads. Every submission carries an identifier, and its state is polled and stored. Blocks land on a human list with the code and the product.

That is exactly the scope we deliver as feed automation, and as channel expansion when a new channel goes live. If your catalogue sits in a store and you want it on Kaufland without hand-editing files, write to us and let us look at your product data together.

One caveat to close with. Kaufland changes its requirements independently of us, and figures the documentation does not state, such as file size limits or time to publication, deliberately do not appear here. Check the current Seller API documentation before you build.

FAQ

Does Kaufland accept an XML feed like Google Shopping?

Not in this model. Product data is accepted as CSV files with semicolon separators and UTF-8 encoding, or through the Seller API, while offers are submitted as separate inventory data. The product file carries neither your price nor your stock, because those belong to the offer.

Do I need an EAN to sell on Kaufland?

Yes. The documentation states that every product has an EAN and that without it Kaufland cannot identify the product. For an own brand, obtaining and assigning codes to variants has to be planned before the integration starts.

Why has my product description not appeared on the page?

Because the page is shared. The description is assembled from product information services, sellers, manufacturers and Kaufland own data team, and the documentation explicitly allows for some of your data not being selected for the final description.

Why does a clean upload not mean the offer is visible?

Because the data passes through a pending state and a check that is sometimes automatic and sometimes manual. The outcome is either publication or a block carrying one of twenty-four reason codes, for example about product safety or brand authorisation.

Does one offer cover every Kaufland storefront?

Do not assume so. Every product data row carries a locale and one file may hold several, so serving another market is part of the feed rather than a switch in the portal. Confirm the storefronts available to your account in the documentation and in the seller portal.

Journal

Szymon Żynda

Co-founder of Seedlight · eCommerce platforms, AI, SEO and GEO

More by this author

Newsletter

The Journal, straight to your inbox

New articles and lessons from real builds, every now and then. No spam, unsubscribe with one click.