MAOMAO Scraper - Asian Grocery Products & Prices avatar

MAOMAO Scraper - Asian Grocery Products & Prices

Pricing

from $10.00 / 1,000 catalogue searches

Go to Apify Store
MAOMAO Scraper - Asian Grocery Products & Prices

MAOMAO Scraper - Asian Grocery Products & Prices

Scrape the MAOMAO (mao-mao.de) catalogue: Asian grocery products with prices, EAN codes, brands, stock status and unit prices. Clean JSON, no code needed.

Pricing

from $10.00 / 1,000 catalogue searches

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

MAOMAO Scraper 🍜 Asian Grocery Products, Prices & EAN Codes

SIÁN Agency Store Kleinanzeigen Scraper Douglas Product Scraper Tesco Product Scraper

🎉 The whole MAOMAO catalogue in about 25 seconds — 2,728 products, prices, brands, stock and EAN codes

Built for price monitors, sourcing teams and anyone tracking what Germany actually buys from Asia


🔎 What is the MAOMAO Scraper — and when should you use it?

The MAOMAO Scraper turns the public MAOMAO storefront at mao-mao.de, one of Germany's larger online Asian grocers, 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 category, stock read per variant, article number, shipping weight, the German product copy and every published photo. Product Detail adds two fields the catalogue page never carries. One is the EAN barcode, which lets a row be matched to the same article at another retailer. The other is the price per litre or kilo that German price labelling requires.

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: the 2,728 products MAOMAO publishes at mao-mao.de. 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/mao-mao-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 MAOMAO sells at mao-mao.de and what it costs using the Apify Actor `sian.agency/mao-mao-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 category, stock read per variant, article number, shipping weight, the German product copy and every published photo. Product Detail adds two fields the catalogue page never carries. One is the EAN barcode, which lets a row be matched to the same article at another retailer. The other is the price per litre or kilo that German price labelling requires.
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 walk the shop. `searchTerms` is a list of words matched against the product name, brand, category, tags and the German description, combined with OR, and an empty list returns the whole catalogue. `category` narrows the run to one of the shop's own shelves — snacks, instant noodles, sauces, drinks, frozen, rice and flour, canned goods or deli — and `Any` leaves it off. `collectionUrls` points the run at specific collection pages instead of the whole shop, which is much faster. `inStockOnly` drops products where every variant is sold out, worth knowing because more than half the catalogue is sold out at any moment. `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 and the unit price.
Start with this input:
{
"operation": "search",
"searchTerms": [
"ramen"
],
"category": "Instant Noodles",
"inStockOnly": true,
"maxItems": 100
}
Ask me what I am looking for, whether sold-out products should be included, 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:

  • Find every Samyang product MAOMAO has in stock and tell me which ones are discounted right now.
  • Pull the whole drinks shelf and rank it by price per litre.
  • 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/mao-mao-product-scraper.md.

📋 Overview

MAOMAO is one of Germany's larger online Asian grocers. 2,728 products, 547 brands, more than 138,000 orders shipped. This actor reads the whole storefront and hands you the catalogue as clean JSON.

Why people use it:

  • The complete shop, not a sample: all 2,728 products in eleven calls, about 25 seconds end to end
  • 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. 1,531 of 2,728 products were sold out when we last counted
  • 💰 $0.90 per 1,000 products: below every German grocery scraper we measured, which sit between $2.00 and $5.00
  • 💎 EAN barcodes and unit prices: the two fields that let you match a row to the same article at another retailer, then compare per litre instead of per pack
  • Sale detection that means something: the crossed-out price is only reported when it is genuinely higher than today's price, so your discount alerts stay honest

✨ Features

  • 🔍 Keyword search across the whole shop: terms match the product name, brand, category, tags and the German description
  • 🗂️ Category filter: pick one of the shop's own shelves. Snacks, instant noodles, sauces, drinks, frozen, rice and flour, canned goods, deli.
  • 🧺 Collection targeting: paste collection addresses to read only those pages instead of walking the catalogue
  • In-stock filter: drop everything that is sold out, so you only pay for products people can actually buy
  • 📦 Full variant detail: every size and flavour with its own SKU, price, weight and stock, inside the product row
  • 📇 EAN barcodes: the join key for matching MAOMAO prices against Amazon, Rewe or your own catalogue
  • ⚖️ Unit prices: price per litre or per kilo, the way German price labelling requires
  • 🖼️ Product images: every photo the shop publishes, at full resolution
  • 📝 German product copy: descriptions, storage notes and preparation instructions as plain text
  • 📄 Run report: an HTML summary in your key-value store showing what came back and what to fix

🎬 Quick Start

Pick an operation, give it a search term or a product address, press Start. Results land in your dataset as JSON, CSV or Excel. A first run with the defaults returns about a hundred products and takes under half a minute.

curl -X POST "https://api.apify.com/v2/acts/sian.agency~mao-mao-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 browse or filter the shop. Switch to Product Detail when you have specific product addresses and want EAN codes.

Step 2: Narrow it down

Add search terms, pick a category, or paste collection 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, category, SKU and per-variant stock
  • An HTML run report showing exactly what came back

📥 Input Configuration

FieldTypeRequiredDescription
operationstringNosearch or productDetail. Defaults to search.
searchTermsarrayNoWords to look for. Empty returns the whole shop.
categorystringNoOne of the shop's shelves, or Any.
collectionUrlsarrayNoCollection addresses to read instead of the whole shop.
inStockOnlybooleanNoSkip products where every variant is sold out.
maxItemsintegerNoStop after this many products. Defaults to 100.
productUrlsarrayNoProduct addresses for the productDetail operation.

Example — search one shelf:

{
"operation": "search",
"searchTerms": ["ramen"],
"category": "Instant Noodles",
"inStockOnly": true,
"maxItems": 100
}

Example — the whole shop:

{
"operation": "search",
"searchTerms": [],
"category": "Any",
"maxItems": 5000
}

Example — product detail with EAN codes:

{
"operation": "productDetail",
"productUrls": [
"https://mao-mao.de/products/heng-shun-schwarzer-essig-chinkiang-550-ml",
"https://mao-mao.de/products/lotte-milchis-fot-getrank-250ml"
]
}

📤 Output

Results are saved to the Apify dataset with 25+ fields including:

FieldTypeDescription
productNamestringProduct name as the shop writes it
pricenumberCurrent price in euros
compareAtPricenumberThe crossed-out was-price, only when it is genuinely higher
onSalebooleanTrue when a real was-price exists
inStockbooleanTrue when at least one variant can be bought
brandstringManufacturer, from Samyang and Nong Shim to the shop's own MAOMAO label
categorystringThe shop's own shelf name, in German
skustringThe shop's article number
barcodestringEAN or GTIN. Product Detail only, and not every product has one.
unitPriceTextstringPrice per litre or kilo, for example €7.98 / l. Product Detail only.
weightGramsintegerShipping weight
variantCountintegerHow many sizes or flavours this product has
variantsarrayEach variant with its own SKU, price, stock and weight
imageUrlstringFirst product photo
imagesarrayEvery photo the shop publishes
descriptionTextstringThe German product copy as plain text
productUrlstringLink back to the product page
productIdintegerThe shop's own product ID

Example:

{
"productId": 8195808723212,
"productName": "HENG SHUN schwarzer Essig (Chinkiang) 550ml",
"handle": "heng-shun-schwarzer-essig-chinkiang-550-ml",
"productUrl": "https://mao-mao.de/products/heng-shun-schwarzer-essig-chinkiang-550-ml",
"brand": "Heng Shun",
"category": "Saucen, Öle, Essig, Gewürze & Pasten",
"price": 4.39,
"compareAtPrice": null,
"onSale": false,
"currency": "EUR",
"inStock": true,
"sku": "1001512",
"barcode": "6902007505264",
"unitPriceText": "€7.98 / l",
"weightGrams": 780,
"variantCount": 1,
"imageUrl": "https://cdn.shopify.com/s/files/1/0609/7610/3610/files/HENG-SHUN-schwarzer-Essig.jpg",
"imageCount": 1,
"tags": ["Glas"],
"descriptionText": "Chinkiang-Essig ist ein traditioneller chinesischer Essig...",
"shop": "MAOMAO"
}

💼 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 with maxItems: 5000 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: 2,728 products across 20 shop categories and 547 brands Use: Rank brands by shelf presence, find the gaps in your own range, shortlist suppliers

3. Cross-Retailer Price Comparison

A comparison site matches MAOMAO against Amazon and Rewe on the same physical article.

Input: Product Detail with the product addresses you care about Output: EAN barcode plus price per litre or per kilo for each one Use: Join on the EAN, compare on unit price rather than pack size, 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. Food Trend Tracking

A trend researcher tracks which Korean and Japanese products reach German shelves first.

Input: Collection addresses for the shop's bestseller and new-arrival 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 category, one run per shelf Output: Category-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/mao-mao-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 ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/mao-mao-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~mao-mao-product-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "productDetail", "productUrls": ["https://mao-mao.de/products/heng-shun-schwarzer-essig-chinkiang-550-ml"]}'

Automation Workflows (N8N / Zapier / Make)

  1. Trigger: a daily schedule, or a webhook from your own system
  2. HTTP Request: call the actor API with your input
  3. Process: compare today's prices against yesterday's rows
  4. 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
  • Unlimited products per run — the whole 2,728-product shop in one go
  • No delays between pages
  • Pay per product returned: a search 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.

🔗 View current pricing


❓ Frequently Asked Questions

Q: How many products are there? A: 2,728 when we last counted, across 20 shop categories and 547 brands. About 1,216 had at least one variant in stock.

Q: Do I need an API key or a shop login? A: No. Paste a search term or a product address and press Start.

Q: Which fields need Product Detail rather than Catalogue Search? A: The EAN barcode and the unit price. Everything else — price, brand, category, images, stock, SKU, weight, description — comes straight from a search row.

Q: Are sold-out products included? A: Yes by default, with inStock set to false, because a sold-out product still tells you what the shop carries. Switch on In stock only to drop them.

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: Why do some rows have a category like "Pfand" or "NOTONSALE"? A: Those are the shop's own internal category names, reported unchanged rather than guessed at. "Pfand" is a deposit item and "TK" means frozen. The category dropdown offers only the real product shelves.

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 248 of every 250 products have only one variant anyway.

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".
  • Widen the category to Any.
  • Switch off In stock only. More than half the catalogue is sold out at any moment.

A product address returns "no longer in the shop"

  • The shop has dropped that handle. Run Catalogue Search for the product name to find what replaced it.
  • Check you pasted a product address, not a collection 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.

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.

MAOMAO and mao-mao.de are trademarks of their respective owner. This actor is not affiliated with, endorsed by, or sponsored by MAOMAO.


🤝 Support

Telegram Support

Join our active support community


Built by SIÁN Agency | More Tools