Shopping · Otto

Otto Price Monitoring API

The Otto Price Monitoring API gets you live Otto data the moment you ask, as clean, structured data – ready for your own app, a spreadsheet or an AI assistant. No scraping, nothing to maintain.

100 free requests every month · no credit card · one API key for all platforms

Key facts

Updated

Status note: otto.de currently blocks automated access to product pages, so /ott/otto-lookup-product answers 502 (not charged) until that is resolved; search-side prices via /ott/otto-search-by-keyword work normally. Otto's price dynamics are different from a marketplace's: most articles are sold by Otto itself, price changes come from planned campaigns – the Otto sale, Black Week, seasonal furniture promotions – and the interesting ticket sizes are large. A sofa that drops from 1,299 to 899 EUR, a washing machine whose shipping surcharge disappears, or a mattress whose 140×200 variation is discounted while 180×200 is not. The everydata.io Otto Price Monitoring API is the product-details endpoint polled on your schedule: it returns price, retailPrice, priceSaving, shippingPrice and the delivery promise for the exact variationId you watch.

Platform
Otto
Quota per call
2 requests
Free plan
100 req / monththen from €30 / month
What you get

What the Otto Price Monitoring API returns

There is no separate price-history endpoint for otto.de. Instead, every call to GET /ott/otto-lookup-product fetches the live page and hands you the current numbers; you store each observation with a timestamp and build the history yourself. That is deliberate honesty rather than a limitation – the value you keep is exactly what you polled, and you decide the cadence per product.

Because Otto prices per variation, the response is variation-aware. price and retailPrice describe the variationId in your URL, priceSaving carries Otto's own badge ("-36%"), shippingPrice tells you whether a Speditionszuschlag currently applies, and warehouseAvailability gives the German delivery sentence. The variations array adds price, retailPrice and available for every sibling, so one call captures the whole size or colour ladder.

  • Live price and crossed-out retailPrice in EUR for the selected variationId
  • priceSaving badge exactly as displayed, so you can flag campaign discounts versus permanent markdowns
  • shippingPrice to catch free-delivery promotions on furniture and large appliances
  • warehouseAvailability with Otto's delivery promise – "lieferbar - in 2-3 Werktagen bei dir" or a longer lead time
  • Per-sibling price and available flags in variations[] to monitor a full size run from one request
  • Search-side prices via /ott/otto-search-by-keyword for category sweeps with preis-aufsteigend
  • Realtime on every poll – nothing is served from a stale catalogue
Use cases

What teams build with the Otto Price Monitoring API

Furniture and appliance deal alerts

Consumer sites watch large-ticket items – sofas, wardrobes, washing machines – and push a notification when price drops below the 90-day minimum in the user's own table or when shippingPrice becomes 0.

Brand price and promotion compliance

Manufacturers check that their retailPrice on otto.de matches the UVP they communicated and log each priceSaving badge as evidence of a promotion window.

Competitive pricing for German retailers

Shops that compete with Otto in furniture or home electronics poll the same models daily and feed the price into their repricing rules, keeping variation sizes aligned.

Discount-depth analytics

Analysts aggregate their own observation table per category to measure how deep and how long Otto's sale periods run, and how often a retailPrice is reinstated afterwards.

How it works

Otto Price Monitoring API: example request and response

Store the otto.de URL including #variationId for every item on your watch list and call the product endpoint at the interval you choose. The example watches one colour of a discounted running shoe; the response has been reduced to the fields a monitor actually persists.

GET /ott/otto-lookup-product

curl "https://api.everydata.io/ott/otto-lookup-product?url=https%3A%2F%2Fwww.otto.de%2Fp%2Freebok-astroride-trail-gt-x-2-0-laufschuh-damen-laufschuh-C887844716%2F%23variationId%3D887846268" \
  -H "x-api-key: YOUR_API_KEY"

Response (shortened)

200 OK · application/json
{
  "responseStatus": "PRODUCT_FOUND_RESPONSE",
  "productTitle": "Reebok Astroride Trail GT-X 2.0 Laufschuh Damen Laufschuh",
  "manufacturer": "Reebok",
  "productId": "887844716",
  "variationId": "887846268",
  "price": 69.99,
  "retailPrice": 110,
  "priceSaving": "-36%",
  "shippingPrice": 0,
  "warehouseAvailability": "lieferbar - in 2-3 Werktagen bei dir",
  "soldBy": null,
  "variations": [
    {
      "variationName": "size",
      "values": [
        {
          "value": "5 US - 35 EU - 2.5 UK",
          "asin": "S097Q0IYYLE2",
          "available": false,
          "price": 69.97,
          "retailPrice": 0
        }
      ]
    }
  ]
}
Otto Price Monitoring API: fields of the example response from /ott/otto-lookup-product
Otto Price Monitoring API: fields of the example response from /ott/otto-lookup-product

Building the history: write one row per poll with observedAt, productId, variationId, price, retailPrice, priceSaving, shippingPrice and warehouseAvailability. Index on (variationId, observedAt). From that table you compute the 30- and 90-day minimum, detect a campaign start (retailPrice appears and priceSaving changes from "" to "-36%") and spot a shipping promotion (shippingPrice moves from 29.95 to 0). Keep the raw JSON if you want to backfill new metrics later.

Cadence guidance from Otto's behaviour: campaign prices typically switch at midnight or early morning, so one poll after 06:00 CET catches most changes; add a second in the evening for electronics during Black Week. Polling every ten minutes buys little on otto.de and burns quota.

A 404 means the article disappeared from otto.de – record it as delisted rather than as a price of 0. If Otto blocks or times out you receive a 502/503 that is not billed; retry on the next cycle instead of immediately.

Related endpoints

GET/ott/otto-lookup-product

Product details. Product page by URL. Temporarily unavailable (otto.de bot protection), returns 502 and is not charged.

GET/ott/otto-search-by-keyword

Search products. Keyword search with paging: title, price, rating and image per product.

GET/ott/otto-lookup-reviews

Reviews. Paged reviews for a product.

Full API reference
Pricing

Otto Price Monitoring API pricing: pay per request

Every poll is one product request and counts 2 quota units. Watching 150 variations once a day is about 4,500 requests or 9,000 units a month – the Production plan (50,000 units, €80); Starter (5,000 units, €30) covers about 80 variations daily. Production supports roughly 400 variations twice daily, Business (300,000, €300) an assortment of 2,500 items twice a day. Otto-side errors are never deducted.

Free
100 req / month
Starter
5,000 req · €30
Production
50,000 req · €80
Business
300,000 req · €300

Otto Price Monitoring API: frequently asked questions

Is there a price-history endpoint for otto.de?

No. Price monitoring on Otto works by re-polling GET /ott/otto-lookup-product and storing each response. The How-it-works section above describes a minimal schema for building the history yourself.

Does the price belong to the variation in my URL?

Yes. price, retailPrice and priceSaving describe the variationId you passed (or Otto's default if you omitted the fragment). Sibling prices are listed in variations[].values[].price so you can monitor all sizes from one call.

How do I detect a shipping promotion?

Compare shippingPrice between polls. Furniture and white goods often carry a Speditionszuschlag that Otto waives during campaigns; a change to 0 is the signal.

Can I monitor a whole category instead of single items?

Use GET /ott/otto-search-by-keyword with sortBy=preis-aufsteigend to sweep a term and record price and retailPrice per productId from the result tiles. For shipping and stock details drill into individual products.

How often should I poll?

For most otto.de articles once or twice a day is enough; campaign prices usually change overnight. Your rate limit (10 to 250 requests per minute depending on plan) is the only technical cap.

Are prices shown with German VAT?

Yes. otto.de displays consumer prices in EUR including 19% (or 7%) VAT, and the API returns them unchanged. There is no net-price field.

Start monitoring otto.de prices

Free account, API key, first live price in a minute. Store the response and your history starts today.