MediaMarkt.es Scraper at a glance
MediaMarkt.es Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes product id, ean, product, brand and category, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Ecommerce, Developer Tools, Automation
- Region
- Europe
- Pricing
- $1.80 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 27 options
Scrape MediaMarkt Spain (mediamarkt.es) products: current price, strike-through original price + discount on offers, brand, EAN, category path, availability, image gallery, full spec sheet, other-seller offers, and reviews with ratings. Search keywords or paste links.
What MediaMarkt.es Scraper can do
- Was-price and discount, gated on the site's own signal, never guessed. When a product carries a struck-through original price, both prices are captured plus the discount amount and percentage. A full-price product simply carries originalPrice: null, nothing fabricated.
- Real customer reviews. Average rating, total review count, and each product's most recent reviews with rating, title, full text, date, and a verified-purchaser flag.
- Full spec sheet on demand. The flattened characteristics MediaMarkt itself shows per product (RAM/CPU/display for a laptop, panel type/resolution for a TV, and so on), never hardcoded to one category's fields.
- Marketplace-aware. Distinguishes MediaMarkt's own retail offers from third-party marketplace sellers, including seller name and rating when a listing is a marketplace offer.
- Real site filters and sort. Brand, price range, and MediaMarkt's own sort order (price, rating, topseller, newest, availability), matching the site's own controls, plus a minimum-rating filter.
- Two ways in. Keyword and/or category search, or paste any product, category, or listing link and pagination continues forward automatically.
Choose what to collect
These inputs let you configure MediaMarkt.es Scraper - Prices, Offers & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | 'search' finds products by keyword and/or a MediaMarkt category id, with the site's own brand/price filters and native sort. 'url' scrapes any product, category, or search listing page URL you paste, walking pagination forward automatically. |
searchTermstring | Free-text keyword, e.g. 'portatil' or 'cafetera'. Leave empty if you set a Category id below. With no keyword, no Search keywords and no Category id, the run searches the example keyword portatil instead of returning nothing. |
searchQueriesarray | Several keywords in one run; each is searched in turn and results are de-duplicated. Added to Search keyword when both are set. maxItems caps the whole run. |
categoryIdstring | A MediaMarkt category: the numeric id (153), a pasted category URL (mediamarkt.es/es/category/portatiles-153.html), or a plain category name such as 'portatiles' (a plain name is searched as a keyword when the keyword field is empty). Combine with a keyword to search within a category, or leave the keyword empty to browse the whole category. Search mode only: URL mode reads this from the link you paste. |
urlsarray | Paste one or more MediaMarkt product pages (.../product/_-.html), category pages (.../category/-.html), or search listing pages (.../search.html?query=...). Pagination continues forward automatically from any ?page= already in the URL. Search-mode fields are ignored here. An empty list in URL mode stops the run with an input message. The fields in the Filters section still apply, including to a pasted product URL. |
brandsarray | Only return products from these brands, e.g. 'APPLE', 'LENOVO', 'ASUS', 'HP'. Match the exact brand name as shown on the site. Leave empty for all brands. Applies in BOTH search mode and URL mode: the listing request is rebuilt for a pasted category or search URL, so the filter is sent with it. |
minRatinginteger | Only return products rated at or above this many stars, 1-5. Applies in BOTH search mode and URL mode: the listing request is rebuilt for a pasted category or search URL, so the filter is sent with it. |
Show 20 more inputs
| Input | What it controls |
|---|---|
minPricenumber | Only return products priced at or above this amount, in euros. Applies in BOTH search mode and URL mode: the listing request is rebuilt for a pasted category or search URL, so the filter is sent with it. |
maxPricenumber | Only return products priced at or below this amount, in euros. Applies in BOTH search mode and URL mode: the listing request is rebuilt for a pasted category or search URL, so the filter is sent with it. |
conditionstring | new or refurbished, decided from the product's own offer (its default offer is the refurbished one, as marketplace refurbished units are), falling back to the site's 'reacondicionado' wording in the name or category path. Applied before rows are counted or billed. |
sellerTypestring | MediaMarkt itself or third-party marketplace sellers. Applied before rows are counted or billed. |
sortBystring | MediaMarkt's own sort order, verified live by driving the site's sort dropdown -- reorders the full server-side result set, so it stays correct across pagination. Applies in BOTH search mode and URL mode: the listing request is rebuilt for a pasted category or search URL, so the filter is sent with it. |
sortOrderstring | Alias of Sort order that also accepts lowercase tokens (relevant, price_asc, price_desc, rating, topseller, newest, availability). Sort order wins when both are set. |
fetchDetailsboolean | Adds the full flattened spec sheet (varies per category -- RAM/CPU for a laptop, panel type for a TV), delivery/pickup availability detail, energy efficiency label, promo badges, and marketplace/other-seller offers from the product page. Current price, was-price/discount, rating and main image are already included without this toggle. |
fetchReviewsboolean | Fetch each product's review summary (average rating, total count) and its most recent reviews (rating, title, text, date, verified-purchaser flag). MediaMarkt renders its newest review page server-side; it does not expose a plain paginated route for a product's entire review history, so this returns that first page, capped by 'Max reviews per product'. Products with no reviews simply return an empty list. The detail-enrichment charge is one unit for the product-page read plus one more for every 10 reviews the product carries (see the Pricing tab). |
maxReviewsPerProductinteger | Cap on reviews returned per product when 'Fetch reviews' is on (bounded by what the site's own product page renders, currently up to about 10). 0 = all available on that page. Values above 50 are capped at 50 in code. |
maxPagesinteger | Stop after this many result pages per search/category/URL entry. 0 = unlimited -- walk every page until the site stops returning new products or Max products total is hit. |
maxItemsinteger | Hard cap on total products returned across every search/category/URL entry. 0 = unlimited (still bounded by Max pages per search). |
resumeFromRunIdstring | Paste a previous run id (or its dataset id) to continue that run: products already collected there are skipped, so this run only returns new products (a delta). Leave empty for a normal run. |
incrementalModeboolean | Remember products between runs and emit only what changed: each row gets changeType NEW, UPDATED, REAPPEARED or EXPIRED, plus changedFields (the names of the fields that differ), firstSeenAt and lastSeenAt. Compared fields: everything in the row except the scrape timestamp, the review list (a new review still shows through rating and reviewCount) and the day-relative delivery fields (deliveryStatus, deliveryDisplayStatus, delivery, fulfillmentEarliest, fulfillmentLatest), which move every day without the product changing; isAvailableForDelivery is still compared. Unchanged products are not emitted or billed unless you turn on the next option. EXPIRED (no longer listed) is only reported after a run that walked the whole result list, so combine with Max products total = 0 and Max pages = 0 for full tracking. Off by default: output is unchanged. |
stateKeystring | Optional name for the remembered state. Leave empty to derive it from your search, filters and detail/review options, so a different search never shares a baseline. Set the same key on a task to keep one baseline when you edit its search. With Incremental mode on and your own key, search mode needs a keyword, Search keywords or Category id; otherwise the run stops with an input message. |
emitUnchangedboolean | Emit products that did not change, with changeType UNCHANGED. Off: they are skipped and not billed. |
emitExpiredboolean | After a complete run, emit one EXPIRED row for each previously seen product that is no longer in the results. Each emitted row is a normal result row. |
ignoreFieldsForChangesarray | Field names that must NOT count as a change, for example shippingCost or availabilityStatus. The scrape timestamp, the review list and the day-relative delivery fields (deliveryStatus, deliveryDisplayStatus, delivery, fulfillmentEarliest, fulfillmentLatest) are always ignored. Only used when incremental mode is on. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify -> Settings -> Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
productIdProduct id (text)eanEAN (text)nameProduct (text)brandBrand (text)categoryCategory (text)pricePrice (number)currencyCurrency (text)originalPriceOriginal price (number)discountPercentDiscount % (number)isOnSpecialOn offer (boolean)ratingRating (number)reviewCountReviews (number)Show 28 more fields
onlineAvailableOnline available (boolean)urlURL (link)imageImage (image)skuSKU (text)sellerSeller (text)isMarketplaceMarketplace (boolean)energyClassEnergy class (text)energyLabelEnergy label (object)specsSpecifications (object)highlightsKey features (object)badgesPromo badges (array)installmentInstallment (object)deliveryDelivery (object)deliveryStatusDelivery status (text)isAvailableForDeliveryDelivery available (boolean)refurbishedAvailableRefurbished offer available (boolean)pickupPickup (object)pickupStatusPickup status (text)isAvailableForPickupPickup available (boolean)fulfillmentEarliestEarliest delivery (text)fulfillmentLatestLatest delivery (text)otherOffersOther-seller offers (array)marketplaceSellerMarketplace seller (object)reviewsReviews (rating, count, per-review list) (object)changeTypeChange (text)changedFieldsChanged fields (array)firstSeenAtFirst seen (text)lastSeenAtLast seen (text)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"productId": "9000001",
"sku": "9000001",
"ean": "8400000000158",
"name": "Sample Laptop 15 pulgadas",
"brand": "Sample Brand",
"category": "Portatiles",
"categoryPath": [
"Informatica",
"Portatiles"
],
"url": "https://www.mediamarkt.es/es/product/_sample-laptop-9000001.html",
"price": 549,
"currency": "EUR",
"originalPrice": 649,
"discountAmount": 100,
"discountPercent": 15,
"isOnSpecial": true,
"strikePriceType": "XOP",
"onlineAvailable": true,
"availabilityStatus": "ONLINE",
"isMarketplace": false,
"image": "https://assets.mmsrg.com/isr/sample/ASSET_ONE",
"images": [
"https://assets.mmsrg.com/isr/sample/ASSET_ONE"
],
"rating": 4.2,
"reviewCount": 30,
"reviews": {
"averageRating": 4.2,
"totalReviewCount": 30,
"items": [
{
"rating": 5,
"title": "Sample title",
"text": "Sample review text.",
"reviewerName": "Sample User",
"date": "2026-08-01T10:00:00.000Z",
"isVerifiedPurchaser": true
}
]
}
}Ways to use this data
- Price tracking and comparison: collect current price, strike-through original price and discount percentage across a catalog to power price-history charts and deal alerts.
- Marketplace and reseller research: compare MediaMarkt's own retail offers against third-party marketplace sellers, including seller name and rating, before sourcing or repricing.
- Product research and spec comparison: pull the full flattened spec sheet for laptops, TVs, and appliances to build comparison tables and buying guides.
- Review and reputation analysis: collect ratings, review counts, and individual reviews to track sentiment and flag quality issues per product or brand.
- Assortment and availability monitoring: track online availability, delivery, and pickup status across a category or brand to spot stockouts and restocks.
- Deal hunting: filter by brand, price range, and rating, sorted by the site's own price or topseller order, to surface the current best offers.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does MediaMarkt.es Scraper return?
The documented output for MediaMarkt.es Scraper includes product id, ean, product, brand, category, price, currency and original price. Availability of each field depends on the source page and the selected mode.
How much does MediaMarkt.es Scraper cost?
It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new products on a schedule?
Yes. Turn on Incremental mode (see above) and schedule the actor: each run returns only new, updated, reappeared and (after a full walk) expired products, and unchanged products are not billed. resumeFromRunId is a different tool, for continuing one specific earlier run.
Why did a run finish with fewer products than Max products total when I pasted several links?
Max products total is split evenly across the pasted links up front and is not redistributed afterward, so a link with little supply cannot free up its unused share for another link with plenty. Separately, if the links overlap, products a listing link saw but did not take once its share was used up are skipped by later links too. Paste one non-overlapping link per run, or set Max products total generously, if you need a precise count.
Why might some products be missing after a run is interrupted and automatically resumes?
An automatic recovery after a platform migration or a Resurrect keeps track of every product the run had started on, not only the ones it actually saved. A product still being fetched when the run was interrupted, or a pasted product page that failed to load, is not retried in that continued run and is never billed. If you suspect products are missing, start a new run with resumeFromRunId pointed at the earlier run: it checks the dataset itself and collects only what is genuinely missing. Rerunning the identical input without it also recovers them, but collects and bills everything again.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
