# Asia Foodstore Scraper - Asian Grocery Prices & EANs (`sian.agency/asia-foodstore-product-scraper`) Actor

Exportiere den Asia-Foodstore-Katalog: Preise, Grundpreis pro Kilo, EAN-Codes, Lagerbestand, Zutaten, Nährwerte und Herkunft für 7.400 Asia-Lebensmittel.

- **URL**: https://apify.com/sian.agency/asia-foodstore-product-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 catalogues

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Asia Foodstore Scraper — Asian Grocery Prices, EANs & Nutrition 🥡

[![Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Store](https://img.shields.io/badge/Store-Tesco%20Products-00539F)](https://apify.com/sian.agency/tesco-product-scraper?fpr=sian) [![Store](https://img.shields.io/badge/Store-BAUHAUS%20Products-1AE392)](https://apify.com/sian.agency/bauhaus-product-scraper?fpr=sian) [![Store](https://img.shields.io/badge/Store-Google%20Shopping%20Prices-4285F4)](https://apify.com/sian.agency/google-shopping-price-scraper?fpr=sian)

#### 🎉 About 7,500 Asian groceries, with the EAN barcode on 85% of rows and the legal price per kilo on 96%

##### For price monitors, importers, dietary apps and anyone joining a German Asian assortment to their own catalogue

***

### 🔎 What is the Asia Foodstore Scraper — and when should you use it?

The **Asia Foodstore Scraper** turns the public catalogue of asia-foodstore.de, a German Asian grocery of about 7,500 articles, 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:** Asian grocery products as rows: product name, brand, the shop's article number, the EAN barcode, the current euro price, the published price per kilo or litre, in-stock state and the product image. Detail mode adds the ingredient list and the allergen line. It also carries the full nutrition table with its per-100g or per-100ml basis, country of origin, the EU importer's address, storage instructions, the printed best-before date, article weight and pack content.

**Use something else when:** you need a different retailer. Use [Tesco Product Scraper](https://apify.com/sian.agency/tesco-product-scraper?fpr=sian) for a mainstream UK supermarket, with the same price-and-availability row shape. Use [Google Shopping Price Tracker](https://apify.com/sian.agency/google-shopping-price-scraper?fpr=sian) for finding who else sells the same barcode, and for how much. This actor reads one shop. It reports what Asia Foodstore charges and stocks today; it does not compare that against other retailers, and it does not keep price history unless you run it on a schedule and keep the datasets.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/asia-foodstore-product-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — 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:

```text
I want Asian grocery products with prices, barcodes and nutrition data using the Apify Actor `sian.agency/asia-foodstore-product-scraper`.

Use it when I need: Asian grocery products as rows: product name, brand, the shop's article number, the EAN barcode, the current euro price, the published price per kilo or litre, in-stock state and the product image. Detail mode adds the ingredient list and the allergen line. It also carries the full nutrition table with its per-100g or per-100ml basis, country of origin, the EU importer's address, storage instructions, the printed best-before date, article weight and pack content.

Don't use it when: you need a different retailer — use tesco-product-scraper or google-shopping-price-scraper instead.

How to call it: the `operation` field picks the mode. `catalog` takes `searchTerms` (German words such as kimchi or sojasauce) and/or `categoryUrls` (department links from the shop menu) and returns one row per product, a hundred per request; leaving both empty walks all seven departments. `productDetail` takes `productUrls` and returns one row per product page with ingredients, allergens, nutrition and origin. `availability` keeps all products, only what is in stock, or only what is sold out, and anything the filter removes is never saved and never billed. `sortBy` orders listings cheapest first, most expensive first, or by name. `maxItems` caps the run and therefore the bill.

Start with this input:
{
  "operation": "catalog",
  "searchTerms": [
    "kimchi",
    "sojasauce"
  ],
  "availability": "all",
  "sortBy": "priceAsc",
  "maxItems": 100
}

Ask me which products or departments you care about and how many rows you want, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Every soy sauce this shop stocks, with the price per litre, so I can see which bottle is actually cheapest.*
- *Pull the whole instant-noodle department and tell me which lines are sold out right now.*
- *Find every product whose allergen line mentions peanut, and give me the EAN barcodes.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/asia-foodstore-product-scraper.md](https://apify.com/sian.agency/asia-foodstore-product-scraper.md).

### 📋 Overview

**Asian groceries are a blind spot in retail data.** Mainstream supermarket scrapers cover Tesco, REWE and Edeka; the Asian-grocery ones that exist all cover North America. This one reads a German Asian grocery with about 7,500 articles across eight departments, and it returns the two fields that make grocery rows genuinely useful — the EAN barcode and the price per kilo.

**What you get:**

- ✅ **About 7,500 products**: counted by walking every page of every department, not estimated. The seven product departments hold 7,401 unique articles; a further 115 sit outside them and are reachable by product link.
- 🏷️ **EAN barcodes on 85% of rows**, straight off the listing. No detail call needed, no fuzzy name matching, and neither Asian-grocery comparable on the Store publishes them at all.
- ⚖️ **The published price per kilo or litre on 96% of rows.** German law requires the shop to print it. It is the only honest way to compare a 132 ml bottle against a 1 litre one.
- 🥗 **Label-grade food data**: ingredient list, allergen line, the full nutrition table with its per-100g or per-100ml basis, country of origin, the EU importer's address and the printed best-before date.
- 📦 **Availability that is actually right.** The rule was checked against 140 product pages before it was trusted, so a promotional badge never gets mistaken for a sold-out line.
- 💶 **Pay per product returned.** A search that matches nothing, a product the filter leaves out and a duplicate the run skips all cost nothing.

***

### ✨ Features

- 🛒 **Catalogue mode**: search the shop in German, or take whole departments, a hundred products per request.
- 🔬 **Detail mode**: read named product pages for ingredients, allergens, nutrition, origin, importer, storage and best-before.
- 🗂️ **Whole-shop export**: leave the search and the department fields empty and the run walks all seven departments.
- ♻️ **Automatic de-duplication**: the shop files the same goods under a cuisine cross-cut as well as a department. You are never charged twice for one product.
- 📦 **Availability filter**: all products, in-stock only, or sold-out only. Filtered products are never billed.
- ↕️ **Four sort orders that work**: cheapest first, most expensive first, and both name orders. Every one was verified against live listings.
- 💶 **Price change tracking**: sale prices carry the date the offer ends, so you can see what is about to revert.
- 📊 **HTML run report**: a per-run summary with the numbers, a copy-paste EAN list and an itemised charge statement.

***

### 🎬 Quick Start

Pick catalogue mode, give it a German search word or a department link, and set how many products you want. Rows land in the dataset with prices, barcodes and stock state. Feed the product links from those rows back into detail mode when you need ingredients and nutrition.

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~asia-foodstore-product-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "catalog", "searchTerms": ["kimchi"], "maxItems": 50}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose the mode

Leave **Operation** on catalogue for prices, barcodes and stock. Switch it to product detail when you need ingredients and nutrition.

#### Step 2: Say what to take

Type German search words, paste department links, or leave both empty to walk the whole shop.

#### Step 3: Set the ceiling

**Maximum products** caps the run and therefore the bill. Raise it to 7500 for a complete export.

**That's it. In about a minute, you'll have:**

- A table of products with prices, EAN barcodes and the price per kilo
- A clear split of what is in stock and what is sold out
- A JSON or CSV export, and an HTML report of the run

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `catalog` (default) or `productDetail` |
| `searchTerms` | array | No | German search words, one per line. Catalogue mode. |
| `categoryUrls` | array | No | Department links such as `https://asia-foodstore.de/lebensmittel`. Catalogue mode. |
| `sortBy` | string | No | `shopDefault`, `priceAsc`, `priceDesc`, `nameAsc`, `nameDesc` |
| `availability` | string | No | `all` (default), `inStock`, `outOfStock` |
| `productUrls` | array | No | Product page links. Required for `productDetail`. |
| `maxItems` | integer | No | Upper bound on products returned, 1–8000. Default 25. |

**Example — search the shop:**

```json
{
  "operation": "catalog",
  "searchTerms": ["kimchi", "sojasauce"],
  "sortBy": "priceAsc",
  "maxItems": 100
}
```

**Example — take a whole department, in stock only:**

```json
{
  "operation": "catalog",
  "categoryUrls": ["https://asia-foodstore.de/instantnudeln_1"],
  "availability": "inStock",
  "maxItems": 1000
}
```

**Example — ingredients and nutrition for named products:**

```json
{
  "operation": "productDetail",
  "productUrls": [
    "https://asia-foodstore.de/doenjang",
    "https://asia-foodstore.de/abc-ketjap-manis-suesse-sojsauce-132ml"
  ]
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **43 fields**. The most useful ones:

| Field | Type | Description |
|-------|------|-------------|
| `productName` | string | Product name as the shop lists it |
| `productUrl` | string | Link to the product page |
| `sku` | string | The shop's own article number |
| `ean` | string | EAN barcode (GTIN-13), on 85% of products |
| `brand` | string | Brand or manufacturer |
| `price` | number | Current price in euros, including German VAT |
| `unitPrice` | number | Published price per kilo or litre |
| `unitPriceBasis` | string | What the unit price refers to, e.g. `1 kg` |
| `inStock` | boolean | Whether the line can be ordered today |
| `ingredients` | string | Full ingredient list (detail mode) |
| `allergens` | string | Allergen line (detail mode) |
| `nutrition` | array | Nutrient and value pairs (detail mode) |
| `originCountry` | string | Country of origin (detail mode) |
| `bestBefore` | string | Printed best-before date (detail mode) |

**Example row (catalogue mode):**

```json
{
  "sku": "15143",
  "ean": "8994907002347",
  "productId": "24164",
  "productName": "ABC Ketjap Manis Süsse Sojsauce 132ml",
  "productUrl": "https://asia-foodstore.de/abc-ketjap-manis-suesse-sojsauce-132ml",
  "brand": "ABC",
  "imageUrl": "https://asia-foodstore.de/media/image/product/24164/md/abc-ketjap-manis-suesse-sojsauce-132ml.jpg",
  "price": 1.49,
  "priceIsPublished": true,
  "currency": "EUR",
  "unitPrice": 11.29,
  "unitPriceBasis": "1 l",
  "availability": "InStock",
  "inStock": true,
  "labels": ["Auf Lager"],
  "listingPosition": 1,
  "searchTerm": "sojasauce",
  "operation": "catalog",
  "status": "success",
  "scrapedAt": "2026-09-10T12:00:00.000Z"
}
```

***

### 💼 Use Cases & Examples

#### 1. Price monitoring for an Asian food importer

**An importer tracks what a competing retailer charges for the lines they distribute.**

**Input:** the departments they sell into, on a daily schedule
**Output:** price, price per kilo, sale end date and stock state for every article
**Use:** spot undercutting the day it starts, and see which of your lines are sold out at retail

#### 2. Catalogue matching on EAN barcodes

**A marketplace seller joins this assortment to their own product list.**

**Input:** the whole shop, maximum raised to 7500
**Output:** 6,300+ rows carrying a GTIN-13 barcode
**Use:** match on the barcode instead of guessing at product names in two languages

#### 3. Allergen and ingredient screening

**A dietary app needs ingredient lists for Asian pantry staples.**

**Input:** product links from a catalogue run, in detail mode
**Output:** ingredient text, allergen line, nutrition values and their basis, country of origin
**Use:** flag products containing soy, wheat, peanut or sulphite without reading labels by hand

#### 4. Assortment and delisting analysis

**A category manager watches which lines disappear.**

**Input:** the whole shop weekly, availability left on all products
**Output:** a full snapshot including the roughly one third that is sold out
**Use:** diff two weeks to see what went out of stock, what came back, and what never returned

#### 5. Clearance and best-before hunting

**A discount buyer works the shop's clearance shelf.**

**Input:** the MHD-Ware department, sorted cheapest first
**Output:** prices, price per kilo and the printed best-before date from the product page
**Use:** decide what is worth buying in bulk before the date

#### 6. Cuisine and range research

**A researcher maps how a German Asian grocery segments its range.**

**Input:** the Länderküche department link
**Output:** the same goods filed by Chinese, Korean, Thai, Vietnamese, Japanese and Indian kitchens
**Use:** a ready-made view of the assortment by cuisine rather than by shelf

#### 7. Feeding a shopping or recipe agent

**An AI agent answers "what is the cheapest gochujang here, per kilo?"**

**Input:** a search term, sorted cheapest first, small maximum
**Output:** a handful of rows with price, price per kilo and stock state
**Use:** grounded answers instead of guesses, over MCP

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/asia-foodstore-product-scraper').call({
  operation: 'catalog',
  searchTerms: ['kimchi'],
  maxItems: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/asia-foodstore-product-scraper').call(
    run_input={'operation': 'catalog', 'searchTerms': ['kimchi'], 'maxItems': 100}
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['productName'], item['price'], item.get('ean'))
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~asia-foodstore-product-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "catalog", "categoryUrls": ["https://asia-foodstore.de/lebensmittel"], "maxItems": 500}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: a daily or weekly schedule
2. **HTTP Request**: call the Actor API with your departments
3. **Process**: compare today's prices against yesterday's dataset
4. **Action**: write to a sheet, a database, or a price-drop alert

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 products** per run — every field, same quality
- No credit card required
- Enough to check the fields against your own catalogue before committing

#### PAID Tier (Production Ready)

- **Up to 8,000 products** per run, which covers the entire shop
- A hundred products per request, so a full export is under a hundred requests
- Pay per product returned: errors, filtered products and duplicates are never charged

💰 **Priced for volume.** This catalogue is roughly five times larger than any Asian-grocery scraper on the Store, and it publishes two fields none of them do.

🔗 [View current pricing](https://apify.com/sian.agency/asia-foodstore-product-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How many products are there?**
A: About 7,500. The seven product departments hold 7,401 unique articles and a further 115 sit in no department. Clear the search and department fields, raise the maximum to 7500, and you get a complete export.

**Q: Do I get EAN barcodes?**
A: Yes, on 85% of products, and they come off the listing itself. You never have to pay for a detail call to get one. The rest carry the shop's own article number.

**Q: Is the price per kilo included?**
A: Yes, on 96% of products. It is the shop's own published figure rather than something this tool divided out — German grocery law requires it to be printed.

**Q: Are sold-out products included?**
A: Yes, by default. Roughly a third of this catalogue is sold out at any moment, and that is usually the thing an assortment report is looking for. Switch the availability filter to in-stock only if you want just what can be ordered today.

**Q: Can I sort by cheapest first?**
A: Yes. Cheapest first, most expensive first and both name orders were each checked against live listings. The shop offers seven more orderings that it quietly ignores on a search, and none of those is offered here.

**Q: Does it need a proxy?**
A: No. There is nothing to configure and no residential-traffic bill.

**Q: What happens if a search finds nothing?**
A: You get an honest empty result, not an error and not a charge.

**Q: What output formats are available?**
A: JSON, CSV and Excel, exported straight from the Apify dataset.

***

### 🐛 Troubleshooting

**A search returns nothing**

- The shop is German. "sojasauce" finds 354 products where "soy sauce" finds none.
- Try the head noun rather than a phrase: "kimchi", "mochi", "reispapier", "curry".

**A department link returns nothing**

- Pick the link from the shop's own menu. A brand page or an article page is not a department.
- The whole shop is easier: clear both fields and raise the maximum.

**Detail mode says a link is not a product page**

- Paste a product link, not a department link. Every catalogue row carries one in `productUrl`.

**Fewer rows than expected**

- Products are de-duplicated across everything you name. The Länderküche department files 6,646 of its products a second time, so adding it to a full export adds almost nothing.
- On the FREE tier the run stops at 25 rows.

**The price is empty on a row**

- One article in the shop publishes no price at all. It is reported as `null` with `priceIsPublished: false`, never as 0.00, so your dashboard is not silently wrong.

***

### ⚖️ 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](https://blog.apify.com/is-web-scraping-legal/).

Asia Foodstore and Tiger & Dragon's are trademarks of their owner. This tool is not affiliated with, endorsed by or sponsored by Asia Foodstore, and reads only information the shop publishes for shoppers.

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `operation` (type: `string`):

Catalogue searches the shop for your keywords, or walks the departments you name, and returns one row per product with price, price per kilo, EAN barcode, brand, article number, image and in-stock state. Product detail reads named product pages and adds ingredients, allergens, the full nutrition table, country of origin, the importer, storage, the best-before date, weight and reviews. Catalogue rows carry the product link, so a catalogue run feeds a detail run directly.

## `searchTerms` (type: `array`):

German search words, one per line. The shop is German, so German words find the most: kimchi returned 119 products and sojasauce returned 354. A word the shop does not stock returns an honest empty result rather than an error. Leave this empty and name departments instead to take whole shelves; leave both empty to walk the shop's seven departments and export everything.

## `categoryUrls` (type: `array`):

Optional. Paste department links such as https://asia-foodstore.de/lebensmittel (4,954 products) or https://asia-foodstore.de/instantnudeln\_1 (912) to take whole shelves instead of searching. Sub-shelves work too. https://asia-foodstore.de/laenderkueche is a cuisine cross-cut, not a separate shelf: 6,646 of its 6,675 products already sit in the other seven departments. Rows are de-duplicated across everything you name, so an overlap is never charged twice.

## `sortBy` (type: `string`):

The order the shop returns products in, which decides what you get when the maximum cuts the run short. Every option here was checked against real listings on both search results and departments before it was offered. The shop's own dropdown lists seven more - GTIN, newest, article number, weight, release date, bestseller, ratings - and every one of them is accepted and then ignored on a search, so none is offered here. Ignored in product detail mode.

## `availability` (type: `string`):

All products by default, on purpose. 4,717 of the 7,401 products were in stock when this was built and 2,684 were not, so hiding the sold-out ones would drop more than a third of a live grocery catalogue - and a sold-out line is exactly what an assortment or availability report is looking for. Choose in-stock only when you want what can be ordered today, or sold-out only to watch what has gone missing. Products the filter removes are never charged.

## `productUrls` (type: `array`):

Product page links to read in detail. Required when the operation is product detail, ignored otherwise. Each link returns one row carrying the ingredient list, the allergen line and the full nutrition table with its basis. It also carries country of origin, the EU importer, storage instructions, the printed best-before date, article weight, pack content, the delivery window, the description, the gallery and the reviews.

## `maxItems` (type: `integer`):

Upper bound on the products a run returns, and therefore on what it can charge. The shop's seven departments hold 7,401 products, so raise this to 7500 for a complete export and clear both the search terms and the department links. Reached, the run stops and reports the cap in the run report.

## Actor input object example

```json
{
  "operation": "catalog",
  "searchTerms": [
    "kimchi",
    "sojasauce",
    "ramen"
  ],
  "categoryUrls": [
    "https://asia-foodstore.de/lebensmittel",
    "https://asia-foodstore.de/instantnudeln_1"
  ],
  "sortBy": "shopDefault",
  "availability": "all",
  "productUrls": [
    "https://asia-foodstore.de/doenjang",
    "https://asia-foodstore.de/abc-ketjap-manis-suesse-sojsauce-132ml"
  ],
  "maxItems": 25
}
```

# Actor output Schema

## `asiaFoodstoreDeProduct` (type: `string`):

Every product this run returned.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "operation": "catalog",
    "searchTerms": [
        "kimchi"
    ],
    "categoryUrls": [],
    "sortBy": "shopDefault",
    "availability": "all",
    "productUrls": [
        "https://asia-foodstore.de/doenjang"
    ],
    "maxItems": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/asia-foodstore-product-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "operation": "catalog",
    "searchTerms": ["kimchi"],
    "categoryUrls": [],
    "sortBy": "shopDefault",
    "availability": "all",
    "productUrls": ["https://asia-foodstore.de/doenjang"],
    "maxItems": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/asia-foodstore-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "operation": "catalog",
  "searchTerms": [
    "kimchi"
  ],
  "categoryUrls": [],
  "sortBy": "shopDefault",
  "availability": "all",
  "productUrls": [
    "https://asia-foodstore.de/doenjang"
  ],
  "maxItems": 25
}' |
apify call sian.agency/asia-foodstore-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/asia-foodstore-product-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Y3Tz6ElzZ5lCbmaik/builds/hnKBUWh5BdY68GCo5/openapi.json
