# Tokopedia Scraper – Products, Prices, Sellers & Variants (`abotapi/tokopedia-scraper`) Actor

Extract product data from Tokopedia, Indonesia’s largest marketplace. Search by keyword with sorting and filters, or use product/result URLs. Returns price, discount, rating, sold count, seller, category, images, and optional details like description, videos, variants, and wholesale tiers.

- **URL**: https://apify.com/abotapi/tokopedia-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 product scrapeds

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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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 Scraper: Products, Prices, Variants, Sellers

Extract structured product data from **Tokopedia**, Indonesia's largest online
marketplace. Search by keyword with sorting and filters, or paste product and
result-page URLs. Every record carries the price, discount, rating, sold count,
seller, category, images and (with detail fetching on) the full description,
all images and videos, variants and wholesale tiers.

### What it does

- **Search mode**: give one or more keywords with your sort and filters.
- **URL mode**: paste product URLs (full detail records) or search-result URLs
  (their listed products).
- **Detail enrichment**: turn on *Fetch full product details* to add the full
  description, every image and video, product variants, wholesale price tiers,
  live stock, sold count, minimum order, weight and seller flags.

### Output fields

Each product includes (among others):

| Group | Fields |
|---|---|
| Identity | `productId`, `name`, `url`, `productKey`, `categoryName`, `categoryBreadcrumb` |
| Pricing | `price`, `priceText`, `originalPrice`, `discountPercentage`, `wholesale[]` |
| Ratings & sales | `rating`, `reviewCount`, `soldCount`, `soldText` |
| Media | `image`, `image300`, `gallery[]`, `videos[]` |
| Inventory | `stock`, `stockText`, `condition`, `minOrder`, `weight`, `isPreorder` |
| Seller | `shopName`, `shopCity`, `shopTier`, `shopUrl`, `isOfficialStore`, `isPowerMerchant`, `badgeTitle` |
| Detail | `description`, `variants[]`, `etalase`, `isCashOnDelivery`, `freeShipping` |
| Context | `searchQuery`, `searchPage`, `searchPosition`, `platform`, `scrapedAt` |

### Input

| Field | Description |
|---|---|
| **Mode** | `search` (keyword + filters) or `url` (paste URLs). |
| **Search keywords** | One or more keywords (search mode). |
| **Sort by** | Best match, Newest, Most reviewed, Price low→high, Price high→low. |
| **Min / Max price (IDR)** | Keep products in a price band, in Rupiah. |
| **Condition** | Any, New, or Used. |
| **Minimum rating** | Keep products rated at or above a value (1-5). |
| **Seller type** | Any seller, Official store, or Power merchant. |
| **Free shipping only** | Keep only free-shipping-eligible products. |
| **Discounted products only** | Keep only products with an active discount. |
| **Product or result URLs** | Paste URLs (URL mode). |
| **Fetch full product details** | Add the full description, all media, variants and more. |
| **Max pages per search** | Safety bound on result pages per keyword. Empty/0 = unlimited; does not cap items. |
| **Max items** | The single cap on how many products a run returns. `0` = unlimited. |

### Example input

```json
{
  "mode": "search",
  "searchTerms": ["sepatu"],
  "sortBy": "price_asc",
  "minPrice": 100000,
  "condition": "new",
  "fetchDetails": true,
  "maxItems": 50
}
````

### Send results into your apps (MCP connectors)

Optionally push each scraped product into your connected apps (Notion, Airtable,
Linear, Apify) in addition to the dataset. Pick the connectors under *Export to
your apps*; leave empty to write only to the dataset.

### Plan Requirement

Runs on any Apify plan. Keep Apify Proxy enabled for the most complete results.
On a restricted plan without Apify Proxy access, results may be limited. Enable
Apify Proxy for your run.

### Notes

- Prices are in Indonesian Rupiah (IDR).
- Use *Max items* as the primary cap; *Max pages per search* is only a safety
  bound and does not cap the number of products.

# Actor input Schema

## `mode` (type: `string`):

Choose Search to build queries from keywords and filters, or URL to scrape pasted product or result-page URLs directly.

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

One or more keywords to search for, e.g. "sepatu", "laptop", "iphone".

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

Result ordering.

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

Only keep products at or above this price, in Indonesian Rupiah.

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

Only keep products at or below this price, in Indonesian Rupiah.

## `condition` (type: `string`):

Keep only products that match this condition.

## `minRating` (type: `integer`):

Only keep products with an average rating at or above this value (1-5).

## `shopTier` (type: `string`):

Keep only products from this type of seller.

## `freeShippingOnly` (type: `boolean`):

Keep only products eligible for free shipping.

## `discountOnly` (type: `boolean`):

Keep only products with an active discount.

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

Paste product URLs or search-result URLs. Filter fields are ignored in this mode.

## `fetchDetails` (type: `boolean`):

Adds the full description, every image and video, variants, wholesale tiers, stock, sold and review counts, weight, condition and seller flags. Without it, runs already return name, price, image, rating, seller and category.

## `maxPages` (type: `integer`):

Safety bound on result pages walked per keyword. Leave empty or 0 for unlimited. This does NOT cap the number of products; the run still stops at Max items.

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

Maximum number of products to return across the whole run. The single finite cap. Set 0 for unlimited.

## `proxy` (type: `object`):

Keep Apify Proxy enabled for the most complete results.

## `mcpConnectors` (type: `array`):

Optional. Pick connected apps (Notion, Airtable, Linear, Apify) to also push each scraped product to, in addition to the dataset.

## `notionParentPageUrl` (type: `string`):

Optional. When a Notion connector is selected, create one page per product under this parent page.

## `maxNotifyItems` (type: `integer`):

Optional cap on how many products are pushed to the selected MCP connectors.

## Actor input object example

```json
{
  "mode": "search",
  "searchTerms": [
    "sepatu"
  ],
  "sortBy": "relevance",
  "condition": "any",
  "shopTier": "any",
  "freeShippingOnly": false,
  "discountOnly": false,
  "urls": [
    "https://www.tokopedia.com/search?q=sepatu"
  ],
  "fetchDetails": false,
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true
  },
  "mcpConnectors": []
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "mode": "search",
    "searchTerms": [
        "sepatu"
    ],
    "urls": [
        "https://www.tokopedia.com/search?q=sepatu"
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/tokopedia-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 = {
    "mode": "search",
    "searchTerms": ["sepatu"],
    "urls": ["https://www.tokopedia.com/search?q=sepatu"],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/tokopedia-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 '{
  "mode": "search",
  "searchTerms": [
    "sepatu"
  ],
  "urls": [
    "https://www.tokopedia.com/search?q=sepatu"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call abotapi/tokopedia-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tokopedia Scraper – Products, Prices, Sellers & Variants",
        "description": "Extract product data from Tokopedia, Indonesia’s largest marketplace. Search by keyword with sorting and filters, or use product/result URLs. Returns price, discount, rating, sold count, seller, category, images, and optional details like description, videos, variants, and wholesale tiers.",
        "version": "1.0",
        "x-build-id": "dGTjbtKVvUeeWGIfq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~tokopedia-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-tokopedia-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/abotapi~tokopedia-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-tokopedia-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/abotapi~tokopedia-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-tokopedia-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "url"
                        ],
                        "type": "string",
                        "description": "Choose Search to build queries from keywords and filters, or URL to scrape pasted product or result-page URLs directly.",
                        "default": "search"
                    },
                    "searchTerms": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "One or more keywords to search for, e.g. \"sepatu\", \"laptop\", \"iphone\".",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "relevance",
                            "newest",
                            "most_reviewed",
                            "price_asc",
                            "price_desc"
                        ],
                        "type": "string",
                        "description": "Result ordering.",
                        "default": "relevance"
                    },
                    "minPrice": {
                        "title": "Minimum price (IDR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only keep products at or above this price, in Indonesian Rupiah."
                    },
                    "maxPrice": {
                        "title": "Maximum price (IDR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only keep products at or below this price, in Indonesian Rupiah."
                    },
                    "condition": {
                        "title": "Condition",
                        "enum": [
                            "any",
                            "new",
                            "used"
                        ],
                        "type": "string",
                        "description": "Keep only products that match this condition.",
                        "default": "any"
                    },
                    "minRating": {
                        "title": "Minimum rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only keep products with an average rating at or above this value (1-5)."
                    },
                    "shopTier": {
                        "title": "Seller type",
                        "enum": [
                            "any",
                            "official_store",
                            "power_merchant"
                        ],
                        "type": "string",
                        "description": "Keep only products from this type of seller.",
                        "default": "any"
                    },
                    "freeShippingOnly": {
                        "title": "Free shipping only",
                        "type": "boolean",
                        "description": "Keep only products eligible for free shipping.",
                        "default": false
                    },
                    "discountOnly": {
                        "title": "Discounted products only",
                        "type": "boolean",
                        "description": "Keep only products with an active discount.",
                        "default": false
                    },
                    "urls": {
                        "title": "Product or result URLs",
                        "type": "array",
                        "description": "Paste product URLs or search-result URLs. Filter fields are ignored in this mode.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "fetchDetails": {
                        "title": "Fetch full product details",
                        "type": "boolean",
                        "description": "Adds the full description, every image and video, variants, wholesale tiers, stock, sold and review counts, weight, condition and seller flags. Without it, runs already return name, price, image, rating, seller and category.",
                        "default": false
                    },
                    "maxPages": {
                        "title": "Max pages per search",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Safety bound on result pages walked per keyword. Leave empty or 0 for unlimited. This does NOT cap the number of products; the run still stops at Max items."
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of products to return across the whole run. The single finite cap. Set 0 for unlimited.",
                        "default": 20
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Keep Apify Proxy enabled for the most complete results.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "mcpConnectors": {
                        "title": "Export to your apps (MCP)",
                        "type": "array",
                        "description": "Optional. Pick connected apps (Notion, Airtable, Linear, Apify) to also push each scraped product to, in addition to the dataset.",
                        "default": []
                    },
                    "notionParentPageUrl": {
                        "title": "Notion parent page URL",
                        "type": "string",
                        "description": "Optional. When a Notion connector is selected, create one page per product under this parent page."
                    },
                    "maxNotifyItems": {
                        "title": "Max items to export",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional cap on how many products are pushed to the selected MCP connectors."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
