MediaMarkt API & Scraper
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.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
A country parameter picks the storefront and the currency follows it (TRY, CHF, PLN, HUF, EUR); Switzerland and Belgium also take a language. search and category return 12 products per page with the price a shopper pays now, the struck-through price together with its type (a manufacturer's list price is labelled RRP and is not a former MediaMarkt price), the discount, the financing offer kept apart from the price, whether MediaMarkt itself or a marketplace trader sells it, the online and delivery status with the delivery window, the customer rating on the published 5-star scale, the EAN, the category path, the EU energy class where there is one, and a sponsored flag. product/detail adds the full image gallery, the complete specification grouped as the site groups it, the description, colour and size variants with their own price and status, the other marketplace sellers' offers with condition and delivery dates, the 5-bucket rating distribution and the first page of reviews. Verified on 2026-09-15: 56 of 56 live checks as expected over all eleven storefronts, and on 23 distinct products in 18 categories title, brand, EAN, price, images, specs and category path were filled on 23 of 23. No MediaMarkt account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.
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.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/mediamarkt/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "iphone",
"country": "tr"
}
}{
"ok": true,
"meta": {
"api": "mediamarkt",
"endpoint": "search",
"mode": "live",
"latency_ms": 1771.7,
"record_count": 12,
"bytes": 1926566,
"cache_hit": false,
"pagination": {
"page": 1,
"has_more": true,
"page_size": 12,
"total": 13622
}
},
"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": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"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": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"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": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
},
{
"name": "[trimmed-depth]",
"value": "[trimmed-depth]"
}
],
"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"
}
}What the MediaMarkt API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search one national MediaMarkt storefront by keyword and get 12 products per page with the price a shopper pays now, the struck-through price and its type, discount, financing offer, who sells it (MediaMarkt or a marketplace seller), online and delivery status with the delivery window, customer rating on a 5-star scale, EAN, category path, energy class and key features. Sort by price, rating, bestseller or newest; filter by brand and minimum rating. | Pricing teams call search to search one national MediaMarkt storefront by keyword and get 12 products per page with the pr…. | query, country, store, language, page, ... |
| category | List the products of one MediaMarkt category page (from the site navigation or a product breadcrumb), 12 per page, with the same product fields as search. Sort and brand/rating filters work the same way. | Marketplace operators call category to list the products of one MediaMarkt category page (from the site navigation or a product brea…. | category, page, sort, brand, min_rating, ... |
| product/detail | The full MediaMarkt product record by id or URL: title, brand, EAN, price with strike price, discount, app-only and club prices when they differ, financing, seller, online / delivery / pickup status with the delivery window and shipping cost, image gallery, complete technical specification grouped as on the site, description, colour and size variants with their own price and status, other marketplace sellers' offers, rating with its 5-star distribution, and the first page of customer reviews. | Catalog enrichment teams call product/detail to get the full MediaMarkt product record by id or URL. | product_id, country, store, language, max_rotations |
Call search from your stack
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"])const res = await fetch("https://api.reefapi.com/mediamarkt/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "iphone",
"country": "tr"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.mediamarkt.search with {"query":"iphone","country":"tr"}.Who uses this API and why
- 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.
Questions developers ask before integrating
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.