MediaMarkt Scraper [$1.50/1K💰] | DE Prices | Saturn Data avatar

MediaMarkt Scraper [$1.50/1K💰] | DE Prices | Saturn Data

Pricing

from $1.40 / 1,000 results

Go to Apify Store
MediaMarkt Scraper [$1.50/1K💰] | DE Prices | Saturn Data

MediaMarkt Scraper [$1.50/1K💰] | DE Prices | Saturn Data

Scrape mediamarkt.de and saturn.de product data: price, promo price, discount, EAN, brand, availability, seller and full specs. Ideal for German electronics price monitoring and price comparison.

Pricing

from $1.40 / 1,000 results

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

MediaMarkt Scraper: German Electronics Prices & Saturn Data

Scrape product data from mediamarkt.de and saturn.de (MediaMarktSaturn, Europe's largest consumer-electronics retailer) and export title, brand, EAN, MPN, price, promo price, strike price, discount, availability, seller, ratings, category, rank and full specs as clean structured JSON. A single actor covers both German storefronts, and no browser is needed.

Built for EU price-monitoring teams, MAP-enforcement, electronics resellers and market-research firms who need reliable German electronics price data.

Main use cases

  • Price monitoring and preisvergleich: track MediaMarkt and Saturn prices, promos and discounts across a product catalogue.
  • MAP and pricing-intelligence: detect promo prices, strike prices and discount percentages for brand and channel enforcement.
  • Electronics product data / produktdaten: build a structured catalogue with EAN, MPN, brand and full specification sheets.
  • Competitor and assortment analysis: compare prices, availability and seller (first-party vs marketplace) across both storefronts.
  • Reseller and marketplace research: monitor third-party marketplace offers, seller ratings and shipping costs.
  • Price-drop alerting: schedule runs and detect new discounts and availability changes over time.

How it works

Both sites are server-rendered and embed the entire Apollo GraphQL cache into every page as a JavaScript blob:

window.__PRELOADED_STATE__ = { reduxInitialStore, apolloState, ... }

The apolloState object is the normalized Apollo cache and contains everything the actor needs: product record (title, EAN, manufacturer, breadcrumbs, URL), price features (price, promo price, strike price, shipping cost, currency), online-status features (availability, delivery and pickup flags), marketplace offer (seller, rating, shipping), the full specification map, the review rating distribution, and search/category result lists in ranking order. The blob is JavaScript rather than strict JSON (it can contain undefined/NaN literals), so the parser sanitizes those tokens before JSON.parse.

Search result pages are fetched from the site's own internal JSON API (the same one the storefront calls): one request returns roughly 330 KB of JSON in well under a second, carrying products plus price, availability, EAN, rating and review count. Product detail pages are parsed from HTML. If the JSON call fails for any reason, the crawler automatically falls back to the HTML path, so an internal change costs speed, never results. No browser and no DOM scraping are used.

Scrape MediaMarkt & Saturn Prices Without An Official API

MediaMarkt/Saturn sit behind Cloudflare bot management, which blocks on two layers:

  1. IP reputation: datacenter IPs (including Apify's) get a hard 403 at the edge, even with a perfect fingerprint. Requests therefore run through the Apify residential proxy by default (proxy input, groups: ["RESIDENTIAL"]), so every request leaves from a real residential IP.
  2. TLS fingerprint (JA3/JA4): plain HTTP clients such as got-scraping and undici are rejected, while browser-grade TLS passes. Pages are fetched with apify-node-curl-impersonate, presenting a coherent Chrome fingerprint (headers and sec-ch-ua included).

Occasional managed challenges (Just a moment...) still surface; each retry gets a fresh proxy session/IP, so they clear within one or two attempts. All requests share one sticky residential session and a shared cookie jar, so Cloudflare sees a single continuing browser session instead of a new visitor per request; a new session/IP is only drawn on a retry.

Known limitations

  • The full spec sheet (specs beyond the highlighted features) and mpn are available when enrichProductDetails is enabled, since they live on the product detail page. EAN, rating, review count, price and availability are included in listing-only runs too.
  • mpn is extracted from the "Hersteller-Nr." spec feature; not every product exposes it.
  • Prices are in EUR and reflect the German storefront (de-DE).
  • MediaMarkt and Saturn are fully contingent on their embedded page state; if the site changes the state format, the parser's single sanitize-and-parse layer is the place to update.

Input Parameters

FieldTypeRequiredDefaultNotes
searchQueriesarray (stringList)No["iphone 15"]Search terms to look up on each marketplace, e.g. iphone 15, playstation 5, samsung tv.
marketplacesarray (enum)No["mediamarkt.de", "saturn.de"]Which sites to run the search queries on. Allowed: mediamarkt.de, saturn.de.
startUrlsarray (requestListSources)Noone product URLProduct, category or search URLs to scrape directly. Product URLs are parsed in full; category/search URLs are treated as listings.
maxItemsintegerNo50Maximum products to output (hard cap 500). Listing pages are crawled automatically until this many products are collected.
enrichProductDetailsbooleanNotrueFetch each product's detail page for EAN, specs and ratings. Disable for a cheaper listing-only run (title, price, availability, seller, ranking only).
proxyobject (proxy)NoApify proxy, RESIDENTIAL groupMediaMarkt/Saturn block datacenter IPs, so requests go through the Apify residential proxy by default. Switch to a custom proxy URL or disable it to test direct access.

Output Fields

One dataset item per product. The default overview view shows Title, Price, Promo, Availability, Rating, Ratings and URL.

FieldTypeDescription
urlstringAbsolute URL of the product page.
productIdstringMediaMarkt/Saturn internal product ID (SKU).
skustringAlias of productId.
titlestringFull product title.
brandstringBrand / manufacturer name.
manufacturerstringManufacturer name.
eanstringEuropean Article Number (GTIN-13) of the product.
mpnstringManufacturer Part Number (Hersteller-Nr.) when available.
pricenumberCurrent price in EUR.
currencystringCurrency code (EUR).
promoPricenumberPromotional price in EUR (null when no promo is active).
strikePricenumberOriginal/strike-through price in EUR (null when no discount).
discountPercentagenumberComputed discount percentage when a promo price is lower than the regular price.
availabilitystringOnline status: AVAILABLE, MP_OFFER, NOT_AVAILABLE, etc.
availableForDeliverybooleanWhether the product can be delivered.
availableForPickupbooleanWhether the product can be picked up in store.
shippingCostnumberShipping cost in EUR.
sellerstringSeller name (MediaMarkt/Saturn for first-party, marketplace seller name otherwise).
sellerRatingnumberMarketplace seller rating (0-5).
sellerReviewsCountnumberNumber of visible reviews for the marketplace seller.
ratingnumberAverage customer rating (0-5), computed from the rating distribution.
ratingCountnumberTotal number of customer ratings.
categoryPatharrayBreadcrumb category path, e.g. ["Smartphone & Tarife", "Apple iPhone"].
categorystringLeaf category name from the breadcrumb.
ranknumberPosition of the product in the search/category listing (1-based).
categoryRankingstringHuman-readable ranking, e.g. #3 in /de/search.html.
specsobjectKey/value map of product specifications (Produkttyp, Betriebssystem, Speicherkapazität, ...).
marketplaceOfferobjectBest third-party marketplace offer details (offerId, price, seller, shipping) when present.
sourcestringSource site URL.
scrapedAtstringISO timestamp of when the product was scraped.

Example Input And Output

Input

{
"searchQueries": ["iphone 15", "playstation 5"],
"marketplaces": ["mediamarkt.de", "saturn.de"],
"maxItems": 50,
"enrichProductDetails": true
}

Output (one dataset row)

{
"url": "https://www.mediamarkt.de/de/product/_apple-iphone-15-128gb-2959931.html",
"productId": "2959931",
"sku": "2959931",
"title": "Apple iPhone 15 128 GB Schwarz",
"brand": "Apple",
"manufacturer": "Apple",
"ean": "0194253441610",
"mpn": "MTP03ZD/A",
"price": 849.0,
"currency": "EUR",
"promoPrice": 799.0,
"strikePrice": 899.0,
"discountPercentage": 11,
"availability": "AVAILABLE",
"availableForDelivery": true,
"availableForPickup": true,
"shippingCost": 0,
"seller": "MediaMarkt",
"sellerRating": null,
"sellerReviewsCount": null,
"rating": 4.6,
"ratingCount": 3214,
"categoryPath": ["Smartphone & Tarife", "Apple iPhone"],
"category": "Apple iPhone",
"rank": 3,
"categoryRanking": "#3 in /de/search.html",
"specs": { "Produkttyp": "Smartphone", "Betriebssystem": "iOS", "Speicherkapazität": "128 GB" },
"marketplaceOffer": null,
"source": "https://www.mediamarkt.de",
"scrapedAt": "2026-10-11T09:00:00.000Z"
}

Integrations & Automation

Every Apify actor is reachable through the Apify API, and this one plugs into webhooks, Zapier and Make so results can flow into a Google Sheet, Airtable base, database or price-comparison tool. For price monitoring, run it on a schedule: a daily or weekly snapshot of your target products or categories is enough to catch promo prices, discounts and availability changes, and recurring runs also improve the actor's Store recommendation signals.

FAQ

Is there an official MediaMarkt API?

No public product API is documented. MediaMarkt and Saturn are server-rendered and embed their full Apollo GraphQL state (window.__PRELOADED_STATE__) into each page. This actor reads that state directly (plus the storefront's internal JSON search API), so you get structured product data without an API key.

What are the alternatives to this actor / this data source?

For German price data you can combine this with Geizhals, Idealo or Amazon.de scrapers. MediaMarkt and Saturn are the leading consumer-electronics retailers in Germany, so they are worth having alongside comparison portals to capture first-party and marketplace prices.

How do I monitor MediaMarkt and Saturn prices over time?

Schedule this actor against your target searchQueries or startUrls, keeping enrichProductDetails on, and store each run's dataset. Comparing runs over time surfaces new promo prices, discounts and availability changes without manual checks.

Does a run need the proxy?

Yes for reliable results: MediaMarkt and Saturn return 403 to datacenter IPs. The actor uses the Apify residential proxy by default, plus browser-grade TLS impersonation to pass Cloudflare. Disabling the proxy makes requests return 403.

Why are specs and mpn missing on some rows?

The full specification sheet and mpn live on the product detail page and are returned only when enrichProductDetails is enabled. EAN, rating, review count, price and availability are included even in listing-only runs.

Can the same run cover both MediaMarkt and Saturn?

Yes. Set marketplaces to ["mediamarkt.de", "saturn.de"] (the default) and each search query is run on both storefronts in one run.

SEO Keywords

mediamarkt, media markt, saturn, mediamarkt scraper, mediamarkt preise, saturn preise, preisvergleich, produktdaten, elektronik preise, price monitoring, e-commerce daten, mediamarkt api, online preise vergleichen, elektronikprodukte daten, mediamarkt alternative, saturn scraper, german electronics prices, mediamarkt products, saturn products, price comparison germany

For AI Agents & LLM Apps

Purpose: return one structured product row per MediaMarkt/Saturn product for a given search query and marketplace set.

Minimal working input:

{ "searchQueries": ["iphone 15"], "marketplaces": ["mediamarkt.de"], "maxItems": 20 }

Variant input (scrape specific product/category URLs):

{ "startUrls": [{ "url": "https://www.mediamarkt.de/de/product/_apple-iphone-18-pro-256gb-burgundy-3071600.html" }], "maxItems": 1 }

Output fields: url, productId, sku, title, brand, manufacturer, ean, mpn, price, currency, promoPrice, strikePrice, discountPercentage, availability, availableForDelivery, availableForPickup, shippingCost, seller, sellerRating, sellerReviewsCount, rating, ratingCount, categoryPath, category, rank, categoryRanking, specs, marketplaceOffer, source, scrapedAt.

Behaviors an agent should know:

  • Provide either searchQueries (run on each entry in marketplaces) or startUrls (product, category or search URLs).
  • marketplaces defaults to both mediamarkt.de and saturn.de. Allowed values are exactly those two.
  • maxItems defaults to 50, hard cap 500; listing pages are paginated automatically until reached.
  • enrichProductDetails defaults to true and is what enables ean, mpn and the full specs; setting it to false returns listing-only rows (title, price, availability, seller, ranking) more cheaply.
  • Prices are in EUR and reflect the German (de-DE) storefront.
  • The residential proxy is on by default and should stay on; without it requests return 403.
  • mpn and some specs can be absent per product; do not treat that as a failure.

Billing: pay-per-event: $0.0015 per result ($1.50 / 1,000 products) plus a $0.00005 actor-start event.

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by MediaMarktSaturn Retail Group, MediaMarkt or Saturn. It accesses only publicly available MediaMarkt/Saturn product pages and internal JSON surfaces; it does not log in, bypass authentication, or solve CAPTCHAs on anyone's behalf. Users are responsible for ensuring their use complies with the sites' Terms of Service and with applicable data-protection law.