- query
- The Otto URL you submitted, echoed on every row so an export covering many products stays separable. Keep it: it is the only record of which input the rest of the row answers.
- sku_code
- The article code as the catalogue prints it. Pairs with
sku below - check both before choosing a join key, because across this schema family they are filled independently and have been observed both identical and different. - product_url
- The canonical product page. Distinct from
url, which reports the address the row was actually produced from; the two diverge whenever a submitted link redirects. - name
- The product title as the page states it. Expect German, since this is a German storefront - plan the collation and encoding of that column accordingly.
- description
- The description text. Expect a long free-text field rather than a short label, and give it a wide column or a text type in your database.
- parsed_price
- The price as a bare number, without symbol or thousands separator - the one to use for arithmetic, sorting and thresholds.
- price
- The price as displayed. Use it when you need to show a customer exactly what the page said; use
parsed_price when you need to compute. On a German storefront the displayed form will not be the one your spreadsheet parses by default. - currency
- The currency the price is quoted in. Read it rather than assuming it - assuming is how a euro figure ends up added to a dollar one.
- availability
- The stock state as published on the page. Treat it as the catalogue's claim at the moment of the scrape, not as a live inventory feed.
- rating
- The average rating, where the page publishes one. Not every product carries one, so write the importer to accept an empty cell rather than failing on it.
- reviews
- The number of reviews, with the same caveat as
rating. Where both are present they belong together; a score with no count behind it is not enough to rank on. - images
- Every image the page carries, in one field. Split it before storing if you need one row per asset - and check what the separator actually is before you split, because in this schema family that has bitten people.
- brand
- The manufacturer or brand. This is the field to group on for assortment work: which brands a retailer lists, and how deep each line goes.
- sku
- The item number. The other half of the identifier pair with
sku_code. - url
- The address the row was produced from. Compare with
query to detect redirects, and with product_url to detect canonicalisation. - image
- The primary image on its own, so the common case - one thumbnail per product - needs no string splitting.
- status
- A per-row flag written by our exporter, not by Otto. It reports whether the row was retrieved. Both runs behind this page read
http 404 here, because the URL submitted was a placeholder that does not exist.
Behind this page are two runs, from 14 and 15 July 2026, whose payloads are byte-identical. Both submitted https://www.example.com/product/123 - a placeholder, not an Otto address - and both returned a single row reading http 404 with all fourteen data columns empty. So we can give you the schema with confidence and nothing at all about Otto's values, and this page does not pretend otherwise. The seventeen names appear in the same order in our BiggestBook, Vistaprint and Waxie exports, and the Waxie runs are populated, which is how we know the schema is live rather than a stub. We deliberately do not describe Otto's columns using those pages' values: they are trade sites whose money columns are empty for reasons particular to each, and Otto is a consumer retailer. Borrowing their measurements would be a guess wearing the clothes of a fact.