# Tokopedia Product Scraper (`sian.agency/tokopedia-product-scraper`) Actor

Scrape Tokopedia — Indonesia's #1 marketplace — for prices (IDR), ratings, per-star reviews, sold counts, full specs, variants & child SKUs, images & seller data. Keyword, URL or category search; fast overview or full detail. Clean JSON/CSV/Excel, no code, no API key.

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

## Pricing

from $2.60 / 1,000 overview product extracteds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Tokopedia Product Scraper – Prices (IDR), Specs, Variants & Reviews 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Taobao Tmall Product Scraper](https://img.shields.io/badge/Store-Taobao%20Tmall%20Product%20Scraper-FF4F00)](https://apify.com/sian.agency/taobao-tmall-product-scraper?fpr=sian) [![AliExpress Product Scraper](https://img.shields.io/badge/Store-AliExpress%20Product%20Scraper-FF4747)](https://apify.com/sian.agency/aliexpress-product-scraper?fpr=sian) [![TikTok Shop Scraper](https://img.shields.io/badge/Store-TikTok%20Shop%20Scraper-25F4EE)](https://apify.com/sian.agency/tiktok-shop-scraper?fpr=sian)

#### 🎉 Export live Tokopedia product data — prices in Rupiah (IDR), star ratings, sold counts, full specs and product variants — from Indonesia's #1 marketplace, no code and no API key required.
##### Perfect for price-monitoring teams, e-commerce analysts, brand managers, and market researchers who need clean, structured Indonesia e-commerce data on demand.

---

### 📋 Overview

**The Tokopedia Product Scraper turns Indonesia's largest online marketplace into a clean data feed.** Search by keyword, category, or URL and get structured product records — across electronics, fashion, home, beauty, and every other Tokopedia vertical — ready for Excel, BigQuery, or your pricing dashboard.

**Why thousands of professionals choose us:**
- ✅ **No Account, No API Key**: Just type a search term and click Run — nothing to configure, nothing to log in to
- ⚡ **Two Speeds, One Actor**: Fast Overview mode for bulk price sweeps, or Detail mode for full specs, variants and shop data
- 🎯 **30+ Data Fields**: Price, discount %, star rating, sold count, specifications, variants and shop data — per product
- 💰 **Pay Per Result**: You're only charged for products successfully scraped — no wasted spend
- 💎 **Indonesia-Native Data**: Prices in Indonesian Rupiah (IDR), local seller cities, and sold counts, straight from Tokopedia.com
- ✨ **NEW**: Colour & size variants with their own child SKUs — price, stock and option captured for every variant

### ✨ Features

- 🔎 **Keyword, Category & URL Search**: Scrape any Tokopedia search — paste a keyword, a category id, or a full tokopedia.com/search URL with your filters already applied
- 💸 **Complete Pricing Data**: Current price, original strikethrough price, discount percentage and formatted Rupiah values (`Rp169.322`)
- ⭐ **Ratings & Sold Counts**: Star rating, review count, units-sold count, and a per-star rating breakdown for demand signals
- 🧩 **Full Specifications Table**: Every product attribute Tokopedia lists — condition, category, minimum order, weight, and more
- 🎨 **Variants with Child SKUs**: Every colour and size variant with its own product id, price, stock and option — track a full product family
- 🏬 **Shop Intelligence**: Store name, seller city, Official Store flag and Power Merchant flag for each listing
- 🧭 **Category & Breadcrumbs**: Full category path so you always know exactly where a product sits
- 🖼️ **Full Image Gallery**: Main image plus the complete high-resolution photo set for every product
- 📦 **Stock, Condition & Weight**: Availability, product condition, shipping weight, and the rich product description
- 📤 **Clean Exports**: Download every run as JSON, CSV, or Excel in one click

### 🎬 Quick Start

Type a search term, pick a mode, and click Run — results stream into your dataset in seconds. Prefer the API? One call gets you going:

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~tokopedia-product-scraper/runs?token=YOUR_TOKEN \
-H 'Content-Type: application/json' \
-d '{"keywords": ["sepatu"], "scrapeMode": "overview", "maxResults": 100}'
````

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Enter Your Search

Type one or more search keywords (one per line), paste a Tokopedia category id, or drop in full tokopedia.com/search URLs with your filters already set.

#### Step 2: Pick a Mode and Run

Choose **Overview** for a fast price-and-rating sweep, or **Detail** for full specs, variants, shop data and description. Set your sort order and price range, then click Run.

#### Step 3: Download Your Results

Export clean, structured product data as JSON, CSV, or Excel — ready for your dashboard, spreadsheet, or database.

**That's it! In under a minute, you'll have:**

- Live Tokopedia prices in Rupiah (IDR) with discount percentages
- Star ratings, sold counts, and per-star rating breakdowns
- Full specification tables and product variants with child SKUs
- The complete image gallery for every product
- Export-ready data for pricing, catalog, and market research

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| keywords | array | No | Tokopedia search terms, one per line (e.g. `sepatu`, `iphone 15`) |
| scrapeMode | string | No | `overview` (fast search) or `detail` (full specs, variants & description) |
| sort | string | No | `relevance`, `newest`, `best_selling`, `price_low`, or `price_high` |
| minPrice | integer | No | Only return products at or above this price (IDR) |
| maxPrice | integer | No | Only return products at or below this price (IDR) |
| minRating | string | No | Minimum star rating: `4.5`, `4`, or `3` |
| category | string | No | Tokopedia category id (the `sc` value in a search URL) |
| city | string | No | Tokopedia city id(s), comma-separated (the `fcity` value in a search URL) |
| officialOnly | boolean | No | Restrict results to Tokopedia Official Store sellers only |
| urls | array | No | Advanced — full tokopedia.com/search URLs (your filters are preserved) |
| maxResults | integer | No | Maximum products to return across all searches (default `100`) |

**Example — keyword search in Detail mode:**

```json
{
  "keywords": ["sepatu", "iphone 15"],
  "scrapeMode": "detail",
  "sort": "best_selling",
  "minPrice": 50000,
  "maxPrice": 5000000,
  "officialOnly": true,
  "maxResults": 100
}
```

**Example — paste Tokopedia URLs (advanced):**

```json
{
  "urls": [
    "https://www.tokopedia.com/search?q=laptop",
    "https://www.tokopedia.com/search?q=sepatu&sc=1845"
  ],
  "scrapeMode": "overview"
}
```

### 📤 Output

Every product is saved to your Apify dataset with **30+ fields**. Overview mode returns the core commerce fields below; Detail mode adds specifications, variants, category breadcrumbs, and shop intelligence.

| Field | Type | Description |
|-------|------|-------------|
| product\_id | string | Tokopedia product id |
| name | string | Full product name |
| price | number | Current selling price (IDR) |
| price\_fmt | string | Formatted Rupiah price (e.g. `Rp169.322`) |
| original\_price\_fmt | string | Original strikethrough price *(Detail)* |
| discount\_percentage | number | Discount percentage, when on sale *(Detail)* |
| rating | number | Average star rating |
| review\_count | number | Number of written reviews |
| sold\_count | number | Units sold — a sales-velocity signal |
| rating\_breakdown | array | Per-star rating breakdown (5★ → 1★) *(Detail)* |
| shop\_name | string | Seller / store name |
| shop\_location | string | Seller city |
| is\_official\_store | boolean | Tokopedia Official Store flag *(Detail)* |
| is\_power\_merchant | boolean | Power Merchant seller flag |
| category\_name | string | Product category *(Detail)* |
| breadcrumbs | array | Full category path *(Detail)* |
| condition | string | Product condition (e.g. `NEW`) *(Detail)* |
| weight | number | Shipping weight *(Detail)* |
| stock | number | Units in stock *(Detail)* |
| specs | object | Full specifications table *(Detail)* |
| variants | array | Colour / size variants with child SKUs (price, stock, option) *(Detail)* |
| labels | array | Promo / badge labels shown on the listing |
| description | string | Rich product description *(Detail)* |
| images | array | Full high-resolution image gallery |
| image\_count | number | Number of images |
| url | string | Product page URL |

**Example (Detail mode, trimmed):**

```json
{
  "product_id": "13420722053",
  "name": "Ando Official Sepatu Sneakers Radial Pria Dewasa - Hitam/Putih - 41",
  "url": "https://www.tokopedia.com/ando-official-store/ando-official-sepatu-sneakers-radial-pria-dewasa-hitam-putih-41-e27f2",
  "source": "detail",
  "price": 169322,
  "price_fmt": "Rp169.322",
  "original_price_fmt": "Rp229.900",
  "discount_percentage": 26,
  "rating": 5.0,
  "review_count": 11,
  "sold_count": 16,
  "rating_breakdown": [
    { "star": 5, "count": 11, "percentage": 100.0 },
    { "star": 4, "count": 0, "percentage": 0.0 }
  ],
  "shop_id": "7203791",
  "shop_name": "Ando Official Store",
  "shop_location": "Kab. Tangerang",
  "is_official_store": true,
  "is_power_merchant": true,
  "category_name": "Sneakers Pria",
  "breadcrumbs": ["Fashion Pria", "Sepatu Pria", "Sneakers Pria"],
  "condition": "NEW",
  "min_order": 1,
  "weight": 0.637,
  "weight_unit": "KILOGRAM",
  "stock": 1,
  "specs": {
    "Kondisi": "Baru",
    "Pemesanan Minimum": "1 Buah",
    "Kategori": "Sneakers Pria",
    "Etalase": "Semua Etalase"
  },
  "variants": [
    {
      "product_id": "13420722049",
      "name": "Ando Official Sepatu Sneakers Radial Pria Dewasa - Hitam/Putih - 42",
      "option_names": ["42"],
      "price": 169322,
      "price_fmt": "Rp169.322",
      "discount_percentage": "26%",
      "stock": 0,
      "is_buyable": true,
      "url": "https://www.tokopedia.com/ando-official-store/ando-official-sepatu-sneakers-radial-pria-dewasa-hitam-putih-42-bbd3e"
    }
  ],
  "labels": ["Beli Lokal", "Hemat s.d 15% Pakai Bonus"],
  "image": "https://images.tokopedia.net/img/cache/700/hDjmkQ/2024/5/16/694ae683-b97d-4f8c-a484-99ce35f38d06.jpg",
  "images": [
    "https://images.tokopedia.net/img/cache/700/hDjmkQ/2024/5/16/694ae683-b97d-4f8c-a484-99ce35f38d06.jpg",
    "https://images.tokopedia.net/img/cache/700/hDjmkQ/2024/5/16/836c57cd-af30-4818-aca3-48123fa4ca2c.jpg"
  ],
  "image_count": 4
}
```

### 💼 Use Cases & Examples

#### 1. Price & Promo Monitoring

**Retailers and analysts tracking how Tokopedia prices and discounts move over time.**

**Input:** Your product keywords or category ids, scheduled daily in Overview mode
**Output:** Current price, original price, and discount % in Rupiah (IDR) for every listing
**Use:** Trigger repricing, spot flash sales, and build price-history charts.

#### 2. Competitor Pricing Intelligence (Indonesia Market)

**Brands and marketplaces benchmarking rivals selling into Indonesia.**

**Input:** Competitor keywords or category ids, sorted by best selling
**Output:** Price, shop, rating, sold count, and stock for every competing listing
**Use:** Understand where you sit on price and demand against the Indonesian market.

#### 3. Catalog & Assortment Research

**Category managers mapping what's actually sold on Tokopedia.**

**Input:** Category ids across the verticals you care about
**Output:** Full product lists with names, prices, variants, and images
**Use:** Find assortment gaps, trending products, and new-product opportunities.

#### 4. Product-Spec Extraction for Feeds

**Feed and PIM teams that need clean structured attributes.**

**Input:** Keywords or Tokopedia URLs in Detail mode
**Output:** A full specifications table, variants with child SKUs, and the image gallery
**Use:** Populate product feeds, comparison sites, and marketplace listings.

#### 5. Seller & Merchant Benchmarking

**Marketplace and brand teams watching who sells what, and from where.**

**Input:** Broad keyword or category searches in Detail mode
**Output:** Shop names, seller cities, Official Store and Power Merchant flags per listing
**Use:** Detect unauthorized sellers and map the merchant landscape by city.

#### 6. Market & Demand Research (Indonesia / SE Asia)

**Analysts sizing demand across Indonesian e-commerce categories.**

**Input:** Broad category or keyword searches sorted by best selling or newest
**Output:** Ratings, review counts, and sold counts as demand signals
**Use:** Rank products by popularity and spot rising categories early.

#### 7. Deal & Discount Tracking

**Bargain hunters and affiliate teams surfacing the best live discounts.**

**Input:** Category ids or keywords sorted by best selling, with a price band
**Output:** Discount %, original vs current price, and promo labels for every product
**Use:** Publish deal roundups and catch the steepest Tokopedia markdowns as they drop.

### 🔗 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/tokopedia-product-scraper').call({
  keywords: ['sepatu'],
  scrapeMode: 'detail',
  sort: 'best_selling',
  maxResults: 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/tokopedia-product-scraper').call(
    run_input={
        'keywords': ['sepatu'],
        'scrapeMode': 'detail',
        'sort': 'best_selling',
        'maxResults': 100
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~tokopedia-product-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"keywords": ["sepatu"], "scrapeMode": "detail", "maxResults": 100}'
```

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

1. **Trigger**: Schedule a daily run or fire from a webhook
2. **HTTP Request**: Call the actor API with your keywords
3. **Process**: Handle the JSON product records
4. **Action**: Save to your database, update a dashboard, or send a price-drop alert

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- Up to **25 products per run** — full feature access, same data quality
- No credit card required
- Perfect for testing and small projects

#### PAID Tier (Production Ready)

- **Unlimited** products per run
- Faster, uninterrupted large-scale scraping
- Pay-per-result: you're only charged for products successfully scraped

💰 **Transparent pay-per-result pricing** — no monthly minimums. Overview results are the cheapest per-result event, so bulk price sweeps stay affordable; switch to Detail only when you need the full spec-and-variant enrichment.

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

### ❓ Frequently Asked Questions

**Q: How many products can I scrape?**
A: FREE tier: up to 25 products per run. PAID tier: unlimited, capped only by your `maxResults`.

**Q: Do I need a Tokopedia account or API key?**
A: No. Just enter a search term and click Run — there's nothing to log in to.

**Q: What's the difference between Overview and Detail mode?**
A: Overview is a fast search sweep (id, name, price, rating, sold count, shop, images). Detail also opens each product page for full specifications, variants with child SKUs, category breadcrumbs, shop data, and the description.

**Q: What currency are the prices in?**
A: Indonesian Rupiah (IDR / Rp), exactly as shown on Tokopedia.com.

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

**Q: Can I filter by price, rating, category, or city?**
A: Yes. Set a min/max price in IDR, a minimum star rating, a category id, or a seller city id — or restrict to Official Stores, or paste a full Tokopedia URL with your filters already applied.

**Q: Is this legal?**
A: Yes — the actor only collects publicly available data. See the [legal section](#️-is-it-legal-to-scrape-data) below.

### 🐛 Troubleshooting

**No results returned**

- Check your keyword spelling — Tokopedia is an Indonesian-language site (e.g. `sepatu`, not `shoes`)
- Widen your min/max price range or remove the category/city filter
- Confirm the search returns products when you open it on tokopedia.com

**Missing specs, variants, or breadcrumbs**

- Those fields are only populated in **Detail** mode — switch `scrapeMode` to `detail`
- Some products genuinely have no reviews or variants yet, so those fields stay empty

**Run stops early**

- FREE tier caps each run at 25 products — upgrade to PAID for unlimited results
- Raise `maxResults` if you set it lower than the number of products you need

**Pasted URL scraped the wrong products**

- Make sure the URL is a Tokopedia search or category page, with your filters already applied in the browser

### ⚖️ 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 has been 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/).

### 🛍️ More SIÁN E-Commerce Scrapers

Building a multi-marketplace price feed? Pair Tokopedia with our other product scrapers:

- 🛒 [Taobao Tmall Product Scraper](https://apify.com/sian.agency/taobao-tmall-product-scraper?fpr=sian)
- 🌏 [AliExpress Product Scraper](https://apify.com/sian.agency/aliexpress-product-scraper?fpr=sian)
- 🎵 [TikTok Shop Scraper](https://apify.com/sian.agency/tiktok-shop-scraper?fpr=sian)
- 🏭 [1688 Wholesale Scraper](https://apify.com/sian.agency/alibaba-1688-wholesale-scraper?fpr=sian)
- 📦 [JD.com Product Scraper](https://apify.com/sian.agency/jd-com-product-scraper?fpr=sian)
- 🛍️ [Wildberries Product Scraper](https://apify.com/sian.agency/wildberries-product-scraper?fpr=sian)

**Browse all SIÁN actors → https://apify.com/sian.agency?fpr=sian**

⭐ **Enjoying the actor?** Leave us a 5-star review on the Apify Store — it helps other teams find it and helps us keep shipping improvements.

### 📜 Trademark & Legal Disclaimer

Tokopedia is a trademark of PT Tokopedia and its respective owners. This actor is an **independent tool** and is **not affiliated with, endorsed by, or sponsored by** Tokopedia or PT Tokopedia. All product names, brand names, logos, and trademarks referenced belong to their respective owners and are used for identification purposes only. This tool collects **only publicly available data** and does not access private accounts, private user information, or any content behind a login. Please scrape responsibly and only public data.

### 🤝 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

## `keywords` (type: `array`):

🔍 **KEYWORD SEARCH:** Free-text Tokopedia searches — exactly what you'd type into the site's search bar (Indonesian terms work best).

📝 **EXAMPLES:** `sepatu` · `iphone 15` · `tas wanita` · `laptop gaming` · `skincare`

💡 **TIP:** Add one keyword per line — each runs as its own search and all results land in the same dataset.

🖊️ **BULK EDIT:** Click "Bulk edit" to paste many keywords at once (one per line).

✅ **IMPORTANT:** Provide either keywords OR Tokopedia search URLs (at least one is needed to have something to scrape).

## `scrapeMode` (type: `string`):

⚙️ **SCRAPE DEPTH:** Choose how much data to pull per product.

⚡ **Overview (fast):** Search results only — product id, title, price (current / original / discount %), rating, review & sold counts, image thumbnail, seller name & location, Official Store flag, badges/labels and product URL. Fastest and cheapest path.

🔬 **Detail (full enrichment):** Everything in Overview PLUS the full specifications table, colour/size variants with child SKUs, per-star rating breakdown, rich product description, category breadcrumbs, condition, stock, weight, minimum order and seller store info.

💡 **TIP:** Start with Overview to scope the catalog, then switch to Detail when you need the complete spec sheet for feeds or comparisons.

## `sort` (type: `string`):

🔃 **RESULT ORDERING:** Order search results using Tokopedia's own native sort keys — so you get the same ranking real shoppers see.

🎯 **Relevance** is Tokopedia's default score · 🆕 **Newest** prioritizes the latest arrivals · 🏆 **Best selling** surfaces the most popular products first · 💲 **Price** sorts ascending or descending.

## `maxResults` (type: `integer`):

🔢 **RESULT CAP:** Maximum number of products to return across all keywords and URLs combined.

🎁 **TIER-BASED LIMITS:**

- **FREE users:** Up to 25 products per run
- **PAID users:** Unlimited — scrape entire catalogs in a single run

💡 **TIP:** Keep this low while you dial in your keywords, then raise it once the output looks right.

## `minPrice` (type: `integer`):

💵 **MINIMUM PRICE:** Only return products at or above this price, in Indonesian Rupiah (IDR / Rp). Leave blank for no lower bound.

## `maxPrice` (type: `integer`):

💰 **MAXIMUM PRICE:** Only return products at or below this price, in Indonesian Rupiah (IDR / Rp). Leave blank for no upper bound.

## `minRating` (type: `string`):

⭐ **MINIMUM RATING:** Only return products at or above this star rating. Choose `Any` to include every product regardless of rating.

## `city` (type: `string`):

🏙️ **CITY FILTER (Advanced):** Restrict results to one or more Tokopedia cities, using Tokopedia's own city id(s).

🔧 **HOW TO GET IT:** Open a Tokopedia search page, apply a city filter, and copy the numeric `fcity` value(s) from the URL.

🖊️ **MULTIPLE CITIES:** Comma-separate ids, e.g. `174,175`.

💡 **TIP:** Leave blank to include sellers nationwide.

## `category` (type: `string`):

🧭 **CATEGORY BROWSING (Advanced):** Narrow results to a Tokopedia category using Tokopedia's own category id (`sc`).

🔧 **HOW TO GET IT:** Open any Tokopedia category or search page and copy the numeric `sc` value from the URL.

💡 **TIP:** Leave blank if you're only using keywords — this is purely an advanced filter.

## `officialOnly` (type: `boolean`):

🏬 **OFFICIAL STORE ONLY:** When enabled, return only products sold by Tokopedia **Official Store** sellers (verified brands and authorized retailers) — filtering out third-party merchants.

💡 **TIP:** Leave off to include every seller.

## `urls` (type: `array`):

🔗 **PASTE SEARCH-PAGE URLs:** Paste full tokopedia.com/search URLs to scrape them verbatim — the filters and sorting you already set in the URL are preserved.

📝 **EXAMPLE:** `https://www.tokopedia.com/search?q=sepatu`

🖊️ **BULK EDIT:** Add one URL per line to sweep several searches in a single run.

## Actor input object example

```json
{
  "keywords": [
    "sepatu"
  ],
  "scrapeMode": "overview",
  "sort": "relevance",
  "maxResults": 100,
  "minRating": "",
  "officialOnly": false
}
```

# Actor output Schema

## `tokopediaProducts` (type: `string`):

Scraped Tokopedia products with prices, ratings, sold counts, rating breakdown, full specifications, variants & child SKUs, images and seller store info.

# 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 = {
    "keywords": [
        "sepatu"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/tokopedia-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 = { "keywords": ["sepatu"] }

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

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "sepatu"
  ]
}' |
apify call sian.agency/tokopedia-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=sian.agency/tokopedia-product-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tokopedia Product Scraper",
        "description": "Scrape Tokopedia — Indonesia's #1 marketplace — for prices (IDR), ratings, per-star reviews, sold counts, full specs, variants & child SKUs, images & seller data. Keyword, URL or category search; fast overview or full detail. Clean JSON/CSV/Excel, no code, no API key.",
        "version": "1.0",
        "x-build-id": "jde7wSA8WLIrZmZ2X"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~tokopedia-product-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-tokopedia-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/sian.agency~tokopedia-product-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-tokopedia-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/sian.agency~tokopedia-product-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-tokopedia-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keywords": {
                        "title": "🔍 Search Keywords",
                        "type": "array",
                        "description": "🔍 **KEYWORD SEARCH:** Free-text Tokopedia searches — exactly what you'd type into the site's search bar (Indonesian terms work best).\n\n📝 **EXAMPLES:** `sepatu` · `iphone 15` · `tas wanita` · `laptop gaming` · `skincare`\n\n💡 **TIP:** Add one keyword per line — each runs as its own search and all results land in the same dataset.\n\n🖊️ **BULK EDIT:** Click \"Bulk edit\" to paste many keywords at once (one per line).\n\n✅ **IMPORTANT:** Provide either keywords OR Tokopedia search URLs (at least one is needed to have something to scrape).",
                        "default": [
                            "sepatu"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "scrapeMode": {
                        "title": "⚙️ Scrape Mode",
                        "enum": [
                            "overview",
                            "detail"
                        ],
                        "type": "string",
                        "description": "⚙️ **SCRAPE DEPTH:** Choose how much data to pull per product.\n\n⚡ **Overview (fast):** Search results only — product id, title, price (current / original / discount %), rating, review & sold counts, image thumbnail, seller name & location, Official Store flag, badges/labels and product URL. Fastest and cheapest path.\n\n🔬 **Detail (full enrichment):** Everything in Overview PLUS the full specifications table, colour/size variants with child SKUs, per-star rating breakdown, rich product description, category breadcrumbs, condition, stock, weight, minimum order and seller store info.\n\n💡 **TIP:** Start with Overview to scope the catalog, then switch to Detail when you need the complete spec sheet for feeds or comparisons.",
                        "default": "overview"
                    },
                    "sort": {
                        "title": "🔃 Sort Order",
                        "enum": [
                            "relevance",
                            "newest",
                            "best_selling",
                            "price_low",
                            "price_high"
                        ],
                        "type": "string",
                        "description": "🔃 **RESULT ORDERING:** Order search results using Tokopedia's own native sort keys — so you get the same ranking real shoppers see.\n\n🎯 **Relevance** is Tokopedia's default score · 🆕 **Newest** prioritizes the latest arrivals · 🏆 **Best selling** surfaces the most popular products first · 💲 **Price** sorts ascending or descending.",
                        "default": "relevance"
                    },
                    "maxResults": {
                        "title": "🔢 Max Results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "🔢 **RESULT CAP:** Maximum number of products to return across all keywords and URLs combined.\n\n🎁 **TIER-BASED LIMITS:**\n- **FREE users:** Up to 25 products per run\n- **PAID users:** Unlimited — scrape entire catalogs in a single run\n\n💡 **TIP:** Keep this low while you dial in your keywords, then raise it once the output looks right.",
                        "default": 100
                    },
                    "minPrice": {
                        "title": "💵 Min Price (IDR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "💵 **MINIMUM PRICE:** Only return products at or above this price, in Indonesian Rupiah (IDR / Rp). Leave blank for no lower bound."
                    },
                    "maxPrice": {
                        "title": "💰 Max Price (IDR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "💰 **MAXIMUM PRICE:** Only return products at or below this price, in Indonesian Rupiah (IDR / Rp). Leave blank for no upper bound."
                    },
                    "minRating": {
                        "title": "⭐ Minimum Rating",
                        "enum": [
                            "",
                            "4.5",
                            "4",
                            "3"
                        ],
                        "type": "string",
                        "description": "⭐ **MINIMUM RATING:** Only return products at or above this star rating. Choose `Any` to include every product regardless of rating.",
                        "default": ""
                    },
                    "city": {
                        "title": "🏙️ City ID (Advanced)",
                        "type": "string",
                        "description": "🏙️ **CITY FILTER (Advanced):** Restrict results to one or more Tokopedia cities, using Tokopedia's own city id(s).\n\n🔧 **HOW TO GET IT:** Open a Tokopedia search page, apply a city filter, and copy the numeric `fcity` value(s) from the URL.\n\n🖊️ **MULTIPLE CITIES:** Comma-separate ids, e.g. `174,175`.\n\n💡 **TIP:** Leave blank to include sellers nationwide."
                    },
                    "category": {
                        "title": "🧭 Category ID (Advanced)",
                        "type": "string",
                        "description": "🧭 **CATEGORY BROWSING (Advanced):** Narrow results to a Tokopedia category using Tokopedia's own category id (`sc`).\n\n🔧 **HOW TO GET IT:** Open any Tokopedia category or search page and copy the numeric `sc` value from the URL.\n\n💡 **TIP:** Leave blank if you're only using keywords — this is purely an advanced filter."
                    },
                    "officialOnly": {
                        "title": "🏬 Official Stores Only",
                        "type": "boolean",
                        "description": "🏬 **OFFICIAL STORE ONLY:** When enabled, return only products sold by Tokopedia **Official Store** sellers (verified brands and authorized retailers) — filtering out third-party merchants.\n\n💡 **TIP:** Leave off to include every seller.",
                        "default": false
                    },
                    "urls": {
                        "title": "🔗 Tokopedia Search URLs (Advanced)",
                        "type": "array",
                        "description": "🔗 **PASTE SEARCH-PAGE URLs:** Paste full tokopedia.com/search URLs to scrape them verbatim — the filters and sorting you already set in the URL are preserved.\n\n📝 **EXAMPLE:** `https://www.tokopedia.com/search?q=sepatu`\n\n🖊️ **BULK EDIT:** Add one URL per line to sweep several searches in a single run.",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
