MediaMarkt in ten countries, as one JSON API
The MediaMarkt API returns Europe's largest electronics retailer as clean JSON, in three actions - search, category and product/detail - across ten national storefronts on one platform: Germany, Türkiye, Austria, Switzerland, the Netherlands, Belgium, Spain, Italy (where the brand is MediaWorld), Poland and Hungary, plus Saturn in Germany.
3 active endpoints. Every call is 2 credits.
- POST/mediamarkt/v1/search
- POST/mediamarkt/v1/category
- POST/mediamarkt/v1/product/detail
What MediaMarkt endpoints does ReefAPI ship?
3 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
MediaMarkt API
3 of 3 endpoints, ready to run
12 products per page from one national storefront: the price a shopper pays now, the struck price and its type, who sells it, online and delivery status, the customer rating on a 5-star scale, EAN and category path.
{ "ok": true, "meta": { "api": "mediamarkt", "endpoint": "search", "mode": "live", "latency_ms": 1192.9, "record_count": 12, "cache_hit": false }, "data": { "results": [ { "product_id": "1249245", "title": "APPLE iPhone 17 Pro Max 256 GB Akıllı Telefon Gümüş MFYM4TU/A", "brand": "APPLE", "url": "https://www.mediamarkt.com.tr/tr/product/_apple-mfym4tua-iphone-17-pro-max-256gb-akilli-telefon-gumus-1249245.html", "image": "https://assets.mmsrg.com/isr/166325/c1/-/ASSET_MMS_161686159", "ean": "0195950638851", "currency": "TRY", "price": 129999, "was_price": null, "was_price_type": null, "discount_amount": null, "discount_percent": null, "app_price": null, "member_price": null, "installment": null, "vat_rate": 0.2, "seller": { "type": "retailer", "id": null, "name": "MediaMarkt", "rating": null, "rating_scale": null }, "rating": 4.56, "review_count": 124, "rating_scale": 5, "category": "iPhone 17 Pro Max", "breadcrumb": [ "Telefon", "Cep Telefonları", "iPhone" ], "availability": { "online_status": "available", "buyable_online": true, "delivery_available": true, "pickup_available": false, "delivery_status": "available", "delivery_earliest": "2026-09-18T05:00:00.000Z", "delivery_latest": "2026-09-19T15:00:00.000Z", "shipped_from_store": false, "shipping_cost": 0, "pickup_status": "partially_available", "release_date": "2025-09-19T00:00:00.000Z" }, "energy_efficiency": null, "badges": [ "5000 TL Ek Destek !" ], "key_features": [ { "name": "Ekran boyutu cm / inç", "value": "11.9 cm / 6.9 inç" }, { "name": "Bellek Kapasitesi", "value": "256 GB" }, { "name": "İşletim Sistemi", "value": "iOS" } ], "refurbished": false, "sponsored": false, "position": 1 }, { "product_id": "1244800", "title": "APPLE iPhone 16e 8/128 GB Akıllı Telefon Beyaz MD1R4TU/A", "brand": "APPLE", "url": "https://www.mediamarkt.com.tr/tr/product/_apple-md1r4tua-iphone-16e-128gb-akilli-telefon-beyaz-1244800.html", "image": "https://assets.mmsrg.com/isr/166325/c1/-/ASSET_MMS_150495610", "ean": "0195950051223", "currency": "TRY", "price": 43999, "was_price": null, "was_price_type": null, "discount_amount": null, "discount_percent": null, "app_price": null, "member_price": null, "installment": null, "vat_rate": 0.2, "seller": { "type": "retailer", "id": null, "name": "MediaMarkt", "rating": null, "rating_scale": null }, "rating": 4.8, "review_count": 167, "rating_scale": 5, "category": "iPhone 16e", "breadcrumb": [ "Telefon", "Cep Telefonları", "iPhone" ], "availability": { "online_status": "available", "buyable_online": true, "delivery_available": true, "pickup_available": true, "delivery_status": "available", "delivery_earliest": "2026-09-18T05:00:00.000Z", "delivery_latest": "2026-09-19T15:00:00.000Z", "shipped_from_store": false, "shipping_cost": 0, "pickup_status": "partially_available", "release_date": "2025-02-28T00:00:00.000Z" }, "energy_efficiency": null, "badges": [ "4000 TL Ek Destek !" ], "key_features": [ { "name": "Ekran boyutu cm / inç", "value": "11.9 cm / 6.1 inç" }, { "name": "Bellek Kapasitesi", "value": "128 GB" }, { "name": "İşletim Sistemi", "value": "iOS" } ], "refurbished": true, "sponsored": false, "position": 2 }, { "product_id": "1244798", "title": "APPLE iPhone 16e 8/128 GB Akıllı Telefon Siyah MD1Q4TU/A", "brand": "APPLE", "url": "https://www.mediamarkt.com.tr/tr/product/_apple-md1q4tua-iphone-16e-128gb-akilli-telefon-siyah-1244798.html", "image": "https://assets.mmsrg.com/isr/166325/c1/-/ASSET_MMS_150495364", "ean": "0195950051148", "currency": "TRY", "price": 43999, "was_price": null, "was_price_type": null, "discount_amount": null, "discount_percent": null, "app_price": null, "member_price": null, "installment": null, "vat_rate": 0.2, "seller": { "type": "retailer", "id": null, "name": "MediaMarkt", "rating": null, "rating_scale": null }, "rating": 4.8, "review_count": 167, "rating_scale": 5, "category": "iPhone 16e", "breadcrumb": [ "Telefon", "Cep Telefonları", "iPhone" ], "availability": { "online_status": "available", "buyable_online": true, "delivery_available": true, "pickup_available": false, "delivery_status": "available", "delivery_earliest": "2026-09-18T05:00:00.000Z", "delivery_latest": "2026-09-19T15:00:00.000Z", "shipped_from_store": false, "shipping_cost": 0, "pickup_status": "partially_available", "release_date": "2025-02-28T00:00:00.000Z" }, "energy_efficiency": null, "badges": [ "4000 TL Ek Destek !" ], "key_features": [ { "name": "Ekran boyutu cm / inç", "value": "11.9 cm / 6.1 inç" }, { "name": "Bellek Kapasitesi", "value": "128 GB" }, { "name": "İşletim Sistemi", "value": "iOS" } ], "refurbished": false, "sponsored": false, "position": 3 } ], "count": 12, "total_results": 13622, "page": 1, "page_count": 1136, "max_page": 30, "search_mode": "keyword", "resolved_url": null, "category": null, "query": "iphone", "country": "tr", "store": "mediamarkt", "language": "tr", "currency": "TRY" } }
How the MediaMarkt API works
MediaMarkt is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 252 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Find a product in one country, then read everything MediaMarkt publishes about it
The search row already tells you the price, the struck price and who sells it. The detail call is where the other sellers, the variants and the specification are.
{"query": "kaffeevollautomat", "country": "de", "sort": "price_asc"}12 products, cheapest first. Take results[].product_id. Every row says whether MediaMarkt or a marketplace trader sells it, and was_price comes with was_price_type so a list price is not read as a former price.
{"product_id": "2387112", "country": "de"}The full record: 46 specification rows, the colour variants with their own price, four marketplace offers including refurbished ones with their condition, the rating distribution and the first 10 reviews.
{"query": "kaffeevollautomat", "country": "at"}The same question on the Austrian storefront - one parameter changes the country, and the currency and ids follow it.
One keyword, one product record and a cross-border comparison, in three calls against the same schema.
curl -X POST https://api.reefapi.com/mediamarkt/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone","country":"tr"}'{
"ok": true,
"data": { … },
"meta": {
"api": "mediamarkt",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}Which storefront, which currency, which language
One platform, one parameter. The id is the number at the end of a product URL and is specific to its storefront - the same physical product has a different id in each country. Measured live on 2026-09-15: every storefront below returned a search and two product records in the same run.
| country | storefront | currency | language |
|---|---|---|---|
| de | mediamarkt.de (store=saturn: saturn.de) | EUR | de |
| tr | mediamarkt.com.tr | TRY | tr |
| at | mediamarkt.at | EUR | de |
| ch | mediamarkt.ch | CHF | de, fr, it |
| nl | mediamarkt.nl | EUR | nl |
| be | mediamarkt.be | EUR | nl, fr |
| es | mediamarkt.es | EUR | es |
| it | mediaworld.it | EUR | it |
| pl | mediamarkt.pl | PLN | pl |
| hu | mediamarkt.hu | HUF | hu |
Not covered, and why: mediamarkt.pt now redirects to darty.pt and mediamarkt.gr to public.gr - different retailers on different systems - and there is no Luxembourg storefront on this platform. A product or category URL sets the country from its own host; passing a country that contradicts the URL is rejected rather than silently overridden.
Which country, which id, which price, and what MediaMarkt does not publish
Ten national storefronts on one platform plus Saturn Germany. Measured on 2026-09-15: 56 live checks across every storefront, 23 distinct products in 18 categories counted field by field, and 10 products compared against the product page's own structured data. Four of these lines go against us.
country picks the storefront: de, tr, at, ch, nl, be, es, it (MediaWorld), pl, hu; store=saturn reads saturn.de. The currency follows the country - TRY, CHF, PLN, HUF, EUR - and Switzerland (de, fr, it) and Belgium (nl, fr) also take a language, which changes titles, specifications and category names but not prices or ids. Unknown countries, Saturn outside Germany and a language the storefront does not offer are all rejected with the accepted values spelled out.
A product id is the number at the end of the URL (…-1249245.html) and belongs to that storefront - the same physical product has a different id in each country, while the EAN stays the same, so join across countries on ean. Pass a full product or category URL and its host sets the country; a country that contradicts the URL is rejected. A dead id returns NOT_FOUND - the store itself answers a dead id with a normal-looking page, and the engine checks that the product it read is the one you asked for.
price is the website price for a logged-out visitor. Club and app-only prices come back separately and only when they differ. was_price always travels with was_price_type: RRP is the manufacturer's recommended price, not a former MediaMarkt price; LOP and XOP are returned exactly as the site codes them. A list price the site keeps on file but does not show struck through is not returned at all. The monthly financing offer is in installment with its effective interest rate, never in price.
seller.type is retailer when MediaMarkt, Saturn or MediaWorld sells the product and marketplace when a third-party trader does, with the trader's id, name and 5-star shop rating. Other traders offering the same product - including refurbished units with their condition - are listed in marketplace_offers on product/detail and never change the product's own price. Sponsored products in a listing are flagged.
A second extractor read each product page's own structured data with no engine code. On 10 products across 8 countries plus Saturn - phones, laptops, a coffee machine, headphones, a TV, washing machines, a Saturn product and a marketplace-only laptop - title, EAN, price, currency and availability agreed on 10 of 10, and the rating agreed on all 8 pages that publish one. On the 23 products of the live run, title, brand, EAN, price, images, specification and category path were filled 23 of 23.
The storefront serves 12 products per page and no page beyond 30, so one query reaches at most 360 products even when total_results says 13,664. Page 31 is rejected rather than quietly returning page 30. To go deeper, narrow the query - a category URL, a brand or a minimum rating, each checked to actually reduce the result set.
MediaMarkt answers some keywords with an editorial or brand page instead of results - koptelefoon on the Belgian store, dyson on the Austrian one. The engine then asks for the exact phrase, which returns the normal result grid, and reports search_mode phrase so you know it happened; on the Turkish store the phrase and the plain keyword returned 13,663 and 13,664 products. Such a search takes two page loads and is slower.
MediaMarkt publishes stock as statuses, not quantities - available, mp_offer, release_product - plus delivery and pickup flags and a delivery window, so there is no count to return. There is no price history on the product. product/detail returns the first page of reviews with the full rating distribution and the total count; older reviews are not included.
Of 23 verified products, 7 had no reviews yet (rating null, review_count 0 - never 0.0), 16 had no strike price, and 18 had no EU energy label because phones and headphones carry none; washing machines and TVs return the class with the label and product-sheet links. One Belgian washer-and-dryer bundle carries no review statistics at all, so its review_count is null rather than an invented 0.
Portugal and Greece are no longer MediaMarkt storefronts - the addresses redirect to Darty and Public, different retailers on different systems - and there is no Luxembourg storefront on this platform. MediaMarkt's campaign pages are editorial and carry no product grid, so there is no deals action; a sorted category or the was_price field on search rows covers the same need.
What people build with MediaMarkt
The jobs this data is most often used for.
endpoints
credits per call
European and Turkish price-monitoring teams track MediaMarkt prices per EAN across ten countries, with the strike price and its type so list-price 'discounts' are not counted as real ones.
Brands and distributors watch which marketplace traders offer their products on MediaMarkt next to MediaMarkt's own price, with each trader's shop rating and delivery dates.
Assortment and availability teams read online_status, delivery window and pickup status per product per country instead of checking eleven storefronts by hand.
Catalog and comparison sites pull the EAN, the full specification table, images and the EU energy class to enrich their own product records.
What MediaMarkt data costs
The cheapest call here is 2 credits, so $15/mo (Pro) buys 5,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 252 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/mediamarkt/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone","country":"tr"}'import requests
r = requests.post(
"https://api.reefapi.com/mediamarkt/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "iphone",
"country": "tr"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up MediaMarkt.
Get a free key →Is was_price the price MediaMarkt charged before?▾
Not necessarily - read was_price_type next to it. MediaMarkt publishes a type code with every struck price: RRP is the manufacturer's recommended retail price (a list price, which the shop may never have charged), and the site also uses LOP and XOP, which are returned exactly as published because the site does not publish a label for them. On 23 verified products 7 carried a strike price: 3 RRP, 2 XOP, 2 LOP. And where the site keeps a list price on file but does not show it struck through, was_price is null - publishing it would invent a discount the shopper never sees.
Does price include club or app-only discounts?▾
No. price is what a logged-out shopper pays on the website. MediaMarkt can run a separate price for its app and for club members; those come back as app_price and member_price, and only when they differ from price, so they can never be mistaken for it. The monthly financing offer (for example 25.46 EUR over 60 months) is returned in installment with its effective interest rate, never as the price.
How do I tell MediaMarkt's own offer from a marketplace seller's?▾
Every row carries seller.type. retailer means MediaMarkt, Saturn or MediaWorld sells it itself; marketplace means a third-party trader does, with the trader's id, name and 5-star shop rating. A product MediaMarkt sells can ALSO have other traders offering it - on one verified iPhone MediaMarkt asked 129,999 TRY and a marketplace trader 141,299 - and those go into marketplace_offers on product/detail, never into the product's own price. Refurbished offers appear there too with their condition (good, very_good, excellent).
Why does search_mode sometimes say phrase?▾
Because MediaMarkt answers some keywords with an editorial or brand page that has no products on it at all - koptelefoon on mediamarkt.be, dyson on the Austrian store. When that happens the engine asks again for the exact phrase, which returns the normal result grid (on the Turkish store the phrase and the plain keyword returned 13,663 and 13,664 products), and says so with search_mode phrase. resolved means the store answered with one of its category or brand pages that does have products, and resolved_url tells you which.
How far can I page, and how big is a page?▾
12 products per page, and the storefront itself stops at page 30 - 360 products per query - whatever total_results says, so page 31 and above is rejected rather than returning page 30 again. To go deeper, narrow the query: use category with a category URL, a brand filter or a minimum rating. Both filters were checked to bite: on a Turkish headphones search of 1,621 products, brand APPLE returned 68 and a 4-star minimum returned 359.
Is there a stock count?▾
No - MediaMarkt publishes stock as statuses, not quantities, so there is no number to return. What comes back is online_status (available, mp_offer for marketplace-only products, release_product for pre-release items and others), whether delivery and store pickup are possible, the delivery status with its earliest and latest delivery date, the shipping cost, and a pickup status that stays generic because no store has been chosen.
Has the data been checked against the product page itself?▾
Yes, by a second extractor that reads the product page's own structured data with no engine code: on 10 products across 8 countries plus Saturn the title, EAN, price, currency and availability matched on 10 of 10, and the rating matched on all 8 products whose page publishes one. On the Turkish store the product page's structured data carries no rating at all while the page state does; the rating we return there matches the one the Turkish search page publishes for the same product.
What does MediaMarkt NOT publish?▾
A stock quantity, a price history, per-store stock without a chosen store, reviews beyond the first page on the product page (the total count is returned in review_count), a human label for the LOP and XOP strike types, and an energy class on products that have no EU label - phones and headphones return energy_efficiency null, washing machines and TVs return the class with its label and product-sheet links (5 of 23 verified products). A product with no reviews returns rating null and review_count 0, never 0.0.
What is the MediaMarkt API?▾
MediaMarkt API is a ReefAPI endpoint group for mediamarkt and saturn in 10 countries: prices, strike prices, stock status and marketplace sellers. It returns live JSON through POST requests under /mediamarkt/v1.
Is the MediaMarkt API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. MediaMarkt calls use the same shared credit balance as every other ReefAPI engine.
Do I need a MediaMarkt login or account?▾
No login to MediaMarkt is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the MediaMarkt data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the MediaMarkt API use?▾
MediaMarkt actions currently cost 2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call MediaMarkt from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call mediamarkt actions with the same key, credit pool and JSON envelope used by normal REST requests.
91 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling MediaMarkt, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 251 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-15.