MAM Shop Scraper - Asian Grocery Products & Prices
Pricing
from $10.00 / 1,000 catalogue searches
MAM Shop Scraper - Asian Grocery Products & Prices
Produkte von mam-shop.de als sauberes JSON: Preise, Marken, Regale, Lagerbestand, Varianten und EAN-Codes. Ohne Code, ohne Login.
Pricing
from $10.00 / 1,000 catalogue searches
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
MAM Shop Scraper 🛒 Asian Grocery Products, Prices & EAN Codes
🎉 A whole MAM shelf in one call: prices, brands, stock, variants and EAN codes
Built for price monitors, sourcing teams and anyone tracking what Germany buys from Asia
🔎 What is the MAM Shop Scraper — and when should you use it?
The MAM Shop Scraper turns the public MAM storefront at mam-shop.de, the online shop of Modern Asia Market, the German-Austrian Asian grocery chain, into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.
Use it when you need: German Asian-grocery products as rows: name, euro price, the crossed-out was-price where a real discount exists, brand, the shop's own shelf, stock read per variant, article number, shipping weight, the German product copy and every published photo. Product Detail adds the EAN barcode, which the catalogue page never carries and which lets a row be matched to the same article at another retailer.
Use something else when: you want a different retailer. Use Tesco Product Scraper for UK grocery shelves, with the same price-and-stock row shape. Use Kleinanzeigen Scraper for Germany's biggest classifieds site, for second-hand prices on the same goods. Use Douglas Product Scraper for the German beauty catalogue, prices and stock included. This actor covers one shop and nothing else: what MAM publishes at mam-shop.de. The Austrian storefront at mam-shop.at is a separate catalogue and its addresses are rejected rather than read against the German shop. It reads the storefront a visitor sees. Order history, customer reviews and anything behind a login are not published by the shop and are not part of it.
🤖 Use with AI agents
Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/mam-shop-product-scraper
Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.
Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want to track what MAM sells at mam-shop.de and what it costs using the Apify Actor `sian.agency/mam-shop-product-scraper`.Use it when I need: German Asian-grocery products as rows: name, euro price, the crossed-out was-price where a real discount exists, brand, the shop's own shelf, stock read per variant, article number, shipping weight, the German product copy and every published photo. Product Detail adds the EAN barcode, which the catalogue page never carries and which lets a row be matched to the same article at another retailer.Don't use it when: you want a different retailer — use tesco-product-scraper or kleinanzeigen-scraper or douglas-product-scraper instead.How to call it: leave `operation` on `search` to read the shop. `category` picks one of the shop's own shelves (instant noodles, snacks, drinks, sauces, mochis, tea and more), and that shelf has its own page, so it is one call instead of twenty. `Any` reads the full product feed instead, which also holds discontinued articles. `searchTerms` is a list of words matched against the product name, brand, shelf tags and the German description, combined with OR, and an empty list returns everything in the chosen scope. `collectionUrls` points the run at any other shop page, including brand and seasonal shelves. `inStockOnly` is on by default and drops articles where every variant is sold out. Worth leaving on, because only 781 of the 4,812 products in the feed have stock. `maxItems` caps the run and therefore the spend. Switch `operation` to `productDetail` and pass product addresses in `productUrls` to get one row each with the EAN barcode.Start with this input:{"operation": "search","searchTerms": ["ramen"],"category": "instant-noodles","inStockOnly": true,"maxItems": 100}Ask me what I am looking for, which shelf it sits on, and how many products I want back, then run the Actor and summarise the results as a table.
Things you can ask your agent for:
- List every Samyang Buldak product MAM has in stock, with price and pack size.
- Pull the whole drinks shelf and tell me which items are discounted right now.
- Get the EAN codes for these twelve product links so I can match them against my own catalogue.
Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/mam-shop-product-scraper.md.
📋 Overview
MAM (Modern Asia Market) is a German-Austrian Asian grocery chain with stores in Vienna, Hamburg and Oberhausen and an online shop at mam-shop.de. The product feed held 4,812 articles across 968 brands when it was counted on 2026-09-10. This actor reads the storefront and hands you the catalogue as clean JSON.
Why people use it:
- ✅ Shelves, not a raw dump: pick one of the shop's own shelves and get what it actually sells today. Every shelf sampled was 99–100% in stock
- ⚡ Fast because it stays out of the browser: no page rendering, no waiting on scripts. Roughly a second per 250 products
- 🎯 Stock you can trust: availability is read per variant rather than guessed from a page. Only 781 of the 4,812 articles in the full feed had stock, so the in-stock filter is on by default and you do not pay for rows nobody can buy
- 💰 $0.90 per 1,000 products: below every German grocery scraper we measured, which sit between $2.00 and $5.00
- 💎 EAN barcodes: the field that lets a row be matched to the same article at Amazon, Rewe or your own catalogue. The shop's own SKU cannot do it, because all 4,750 are internal 21xxxxxxxxxxx codes
- ✨ Sale detection that means something: 2,305 variants carry a crossed-out price but only 1,277 are genuinely above today's price. Only those are reported as a discount
✨ Features
- 🗂️ Shelf picker: 16 of the shop's own shelves, from instant noodles and chips to mochis, tea, soju and sauces. Each has its own page, so a shelf is one call rather than twenty
- 🔍 Keyword search: terms match the product name, brand, shelf tags and the German description, combined with OR
- 🧺 Shelf addresses: paste any of the shop's 121 collection pages, including brand shelves like Samyang Buldak and Nongshim, and seasonal ones
- ✅ In-stock filter: on by default. Switch it off to get the archive of discontinued articles as well
- 📦 Full variant detail: every size and flavour with its own SKU, price, weight and stock, inside the product row
- 📇 EAN barcodes: Product Detail adds the barcode the catalogue never carries
- 🖼️ Product images: every photo the shop publishes, at full resolution
- 📝 German product copy: descriptions, ingredients, nutrition and preparation notes as plain text
- 📄 Run report: an HTML summary in your key-value store showing what came back and what to fix
🎬 Quick Start
Pick a shelf or a search term, press Start. Results land in your dataset as JSON, CSV or Excel. A first run with the defaults returns about a hundred in-stock products.
curl -X POST "https://api.apify.com/v2/acts/sian.agency~mam-shop-product-scraper/runs?token=YOUR_TOKEN" \-H 'Content-Type: application/json' \-d '{"operation": "search", "searchTerms": ["ramen"], "maxItems": 100}'
🚀 Getting Started (3 Simple Steps)
Step 1: Choose what to scrape
Leave the operation on Catalogue Search to read a shelf or filter the shop. Switch to Product Detail when you have specific product addresses and want EAN codes.
Step 2: Narrow it down
Pick a shelf, add search terms, or paste shelf addresses. Set Max products to cap both the run and your spend.
Step 3: Press Start and export
Download the dataset as JSON, CSV or Excel, or pull it straight from the API.
That's it! In under a minute, you'll have:
- Every matching product with its current euro price
- Brand, shelf, SKU and per-variant stock
- An HTML run report showing exactly what came back
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
operation | string | No | search or productDetail. Defaults to search. |
searchTerms | array | No | Words to look for. Empty returns everything in the chosen scope. |
category | string | No | One of the shop's 16 shelf handles, or Any for the full feed. |
collectionUrls | array | No | Shelf addresses to read instead of the shelf picker. |
inStockOnly | boolean | No | Skip articles where every variant is sold out. Defaults to true. |
maxItems | integer | No | Stop after this many products. Defaults to 100. |
productUrls | array | No | Product addresses for the productDetail operation. |
Example: one shelf, keyword-filtered
{"operation": "search","searchTerms": ["ramen"],"category": "instant-noodles","inStockOnly": true,"maxItems": 100}
Example: everything in stock
{"operation": "search","searchTerms": [],"category": "Any","inStockOnly": true,"maxItems": 5000}
Example: product detail with EAN codes
{"operation": "productDetail","productUrls": ["https://mam-shop.de/products/samyang-buldak-hot-chicken-ramen-5x140g","https://mam-shop.de/products/hikari-miso-instant-miso-miso-soup-3-servings-60g"]}
📤 Output
Results are saved to the Apify dataset with 20+ fields including:
| Field | Type | Description |
|---|---|---|
productName | string | Product name as the shop writes it |
price | number | Current price in euros |
compareAtPrice | number | The crossed-out was-price, only when it is genuinely higher |
onSale | boolean | True when a real was-price exists |
inStock | boolean | True when at least one variant can be bought |
brand | string | Manufacturer, from Samyang and Nongshim to the shop's own Modern Asia Market label |
shelf | string | The shop's own shelf name, in German where the shop uses German |
sku | string | The shop's internal article number. Not the EAN. |
barcode | string | EAN or GTIN. Product Detail only, and not every article has one. |
weightGrams | integer | Shipping weight |
variantCount | integer | How many sizes or flavours this product has |
variants | array | Each variant with its own SKU, price, stock and weight |
imageUrl | string | First product photo |
images | array | Every photo the shop publishes |
tags | array | The shop's own shelf tags for this product |
descriptionText | string | The German product copy as plain text |
productUrl | string | Link back to the product page |
productId | integer | The shop's own product ID |
Example:
{"productId": 11237582602582,"productName": "SAMYANG Buldak Hot Chicken Ramen 5x140G","handle": "samyang-buldak-hot-chicken-ramen-5x140g","productUrl": "https://mam-shop.de/products/samyang-buldak-hot-chicken-ramen-5x140g","brand": "SAMYANG","shelf": "Instant Noodles","price": 9.99,"compareAtPrice": null,"onSale": false,"currency": "EUR","inStock": true,"sku": "2100000035359","weightGrams": 700,"variantCount": 1,"imageUrl": "https://cdn.shopify.com/s/files/1/0880/0652/5270/files/8801073140578_1.webp","imageCount": 1,"tags": ["Instant Noodles", "Ramen & Instantnudeln", "backinstock"],"descriptionText": "SAMYANG Buldak Hot Chicken Ramen 5x140G sind extrem scharfe Instant-Nudeln aus Südkorea...","shop": "MAM"}
💼 Use Cases & Examples
1. Price and Stock Monitoring
A price analyst watches a competing grocer daily to catch discounts and restocks the day they happen.
Input: Run Catalogue Search on a schedule, one run per shelf
Output: Every product with today's price, the was-price where a real discount exists, and per-variant stock
Use: Alert on any product whose onSale flips to true, or whose inStock returns after a gap
2. Assortment and Sourcing Research
A buyer at a European food importer maps what actually sells in the German Asian-grocery market.
Input: Catalogue Search with no terms and category: "Any"
Output: Up to 4,812 articles across 968 brands, with the discontinued ones flagged rather than hidden
Use: Rank brands by shelf presence, find the gaps in your own range, shortlist suppliers
3. Cross-Retailer Price Comparison
A comparison site matches MAM against Amazon and Rewe on the same physical article.
Input: Product Detail with the product addresses you care about Output: The EAN barcode for each one, alongside price, weight and pack size Use: Join on the EAN, compare like for like, publish an honest table
4. Product Feed for a Shop or Marketplace
A dropshipper needs names, images, weights and German copy to build listings.
Input: Catalogue Search with inStockOnly: true
Output: Names, descriptions, images, SKUs, weights and prices as clean JSON
Use: Load straight into Shopify, WooCommerce or a marketplace listing tool
5. Korean and Japanese Food Trend Tracking
A trend researcher tracks which Korean and Japanese products reach German shelves first.
Input: Shelf addresses for the Buldak, Nongshim, bestseller and top-deal pages Output: What the shop is pushing right now, with prices and stock Use: Spot a product going viral weeks before supermarkets pick it up
6. Competitive Range Analysis for Retailers
An Asian supermarket chain benchmarks its own range against a large online rival.
Input: Catalogue Search by shelf, one run per shelf Output: Shelf-level product counts, price distributions and brand mix Use: Find the shelves where your range is thin and your prices are off
🔗 Integration Examples
JavaScript/Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/mam-shop-product-scraper').call({operation: 'search',searchTerms: ['ramen'],category: 'instant-noodles',inStockOnly: true,maxItems: 100});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/mam-shop-product-scraper').call(run_input={'operation': 'search','searchTerms': ['ramen'],'category': 'instant-noodles','inStockOnly': True,'maxItems': 100,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item)
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~mam-shop-product-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"operation": "productDetail", "productUrls": ["https://mam-shop.de/products/samyang-buldak-hot-chicken-ramen-5x140g"]}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: a daily schedule, or a webhook from your own system
- HTTP Request: call the actor API with your input
- Process: compare today's prices against yesterday's rows
- Action: write to a sheet, post to Slack, or update your catalogue
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 products per run, with every field the paid tier returns
- No credit card required
- Enough to check the fields, the German copy and the export format
PAID Tier (Production Ready)
- Unlimited products per run: a whole shelf, or the whole feed
- No delays between pages
- Pay per product returned: a shelf that matches nothing costs you nothing
💰 $0.90 per 1,000 products on Catalogue Search. The German grocery scrapers we measured charge $2.00 to $5.00 per 1,000. Product Detail is $2.50 per 1,000 rows, because each lookup is its own call.
❓ Frequently Asked Questions
Q: How many products are there? A: 4,812 in the shop's product feed on 2026-09-10, across 968 brands and 121 shelves. Only 781 of them had a variant in stock. The feed keeps discontinued articles; the shelves do not.
Q: Do I need an API key or a shop login? A: No. Pick a shelf or paste a search term and press Start.
Q: Why does "Any" return so many sold-out products? A: Because "Any" reads the full product feed, which still lists articles the shop has stopped selling. That is why In stock only is on by default. Picking a shelf avoids the problem entirely: every shelf we sampled was 99–100% in stock.
Q: Which fields need Product Detail rather than Catalogue Search? A: The EAN barcode, and the per-variant weight unit. Everything else comes straight from a search row: price, was-price, brand, shelf tags, images, stock, SKU, weight, description and variants.
Q: Why is the SKU not the EAN? A: Because the shop uses its own numbering. All 4,750 SKUs in the feed start 21 and are internal article numbers. The real barcode only appears on the product page, which is what Product Detail reads.
Q: Are prices in euros and do they include VAT? A: Prices are in euros exactly as the shop publishes them, which is the gross price a German shopper pays.
Q: What about mam-shop.at? A: That is the chain's Austrian storefront, a separate catalogue with its own prices. Addresses from it are rejected rather than read against the German shop, so a run never silently mixes the two.
Q: Can I get one row per size instead of one per product?
A: Rows are one per product, which is what you are charged for. Every variant travels inside the row's variants list with its own SKU, price and stock, and the shop measured 1.001 variants per product, so this almost never differs.
Q: What output formats are available? A: JSON, CSV and Excel, exported directly from the Apify dataset.
🐛 Troubleshooting
A search returns nothing
- The shop is German. "nudeln" finds more than "instant noodles".
- Set the shelf back to Any, which searches the full feed.
- Switch off In stock only. The full feed is mostly discontinued articles, and they are hidden by default.
A product address returns "no longer in the shop"
- The shop has taken that article down. Two of every thirty feed addresses we sampled were already gone, and both were sold out. Run Catalogue Search on the shelf to find what replaced it.
- Check you pasted a product address, not a shelf address.
I only got 25 rows
- That is the free-tier cap. Add credits or a payment method in Apify Console to lift it.
The run stopped before Max products
- The shop has fewer matching products than your cap. Check the run report; it says how many were scanned.
The shop is temporarily unavailable
- Every request already retries five times with backoff. Wait a few minutes and run it again.
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
MAM, Modern Asia Market and mam-shop.de are trademarks of their respective owner. This actor is not affiliated with, endorsed by, or sponsored by Modern Asia Market.
🤝 Support
Join our active support community
- For issues or questions, open an issue in the actor's repository
- Check SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools