Tokopedia Scraper — Product Search, Prices & Sold Counts
Pricing
from $1.50 / 1,000 results
Tokopedia Scraper — Product Search, Prices & Sold Counts
Scrape Tokopedia product search results by keyword or URL. Extract product name, IDR price, rating, review count, sold count, discount, shop details, category breadcrumb, and images. Fast HTTP extraction for market research, price monitoring, and lead generation.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
3
Monthly active users
a day ago
Last modified
Categories
Features
Share
Tokopedia Scraper — Product Search, Prices, Sold Count & Shop Data
Extract product search results from Tokopedia, Indonesia's #1 e-commerce marketplace, in seconds — no login, no coding, and no browser overhead. This Tokopedia scraper pulls complete product listings — product title, price in Indonesian Rupiah (price & numeric priceRaw), original pre-discount price, discount percentage, star rating, customer review count, units sold (soldCount & soldCountLabel), cash-on-delivery availability (isCOD), category breadcrumb, product images/videos, and full seller shop details (shopName, shopCity, shopUrl, Official Store & Power Badge status). Give it one or more keywords like iphone 15 or sepatu nike, or paste any Tokopedia search URL, and scrape Tokopedia product data at scale.
Export every result to JSON, CSV, Excel, or API.
Built for Southeast Asia e-commerce analysts, brand protection and MAP-monitoring teams, price-comparison platforms, dropshippers, B2B seller lead-generation workflows, and market researchers who need fast, reliable Tokopedia data.
⚡ At a glance
| Feature | Details |
|---|---|
| Target marketplace | Tokopedia (tokopedia.com — Indonesia) |
| Input modes | Keyword list (searchKeywords) and/or filtered Tokopedia search URLs (startUrls) |
| Sort options | Relevance (23), Newest (5), Top sales / Best sellers (8), Price low→high (11), Price high→low (10), Highest rating (9) |
| Core product fields | id, name, url, price, priceRaw (IDR), originalPrice, discountPercentage, ratingAverage, countReview, soldCount, soldCountLabel, isCOD, imageUrl, videoUrl, categoryBreadcrumb |
| Shop & seller fields | shopId, shopName, shopUrl, shopCity, shopIsOfficial, shopIsPowerBadge |
| Pagination & scale | 60 products per page request (rowsPerPage: 60) with automatic deep pagination — supports 1,000+ products per keyword and multi-keyword runs with global de-duplication |
| Authentication & proxy | No login or API key required; runs out-of-the-box without expensive residential proxies |
| Export formats | JSON, CSV, Excel (XLSX), HTML, XML, RSS, and Apify REST API |
🔎 Why scrape Tokopedia?
Tokopedia is the flagship e-commerce marketplace in Indonesia — Southeast Asia's largest digital economy and the fourth most populous nation in the world — hosting hundreds of millions of active SKUs across consumer electronics, fashion, beauty, automotive, groceries, and home goods. Its search results provide a live, quantitative pulse of Indonesian retail demand: exact prices in Indonesian Rupiah (IDR), promotional discount depth, customer ratings, review velocity, verified units sold (terjual), and the merchants behind every listing.
Collecting this intelligence manually is slow and fragile. Search queries span hundreds of pages, pricing and stock change daily, and browser-based scrapers are slow and costly. Copy-pasting product cards into a spreadsheet does not scale.
This Tokopedia data extractor automates the entire workflow over lightweight HTTP requests. It walks page after page of 60 products per request, normalizes prices and sold-count badges into clean numbers, de-duplicates across pages and keywords by id, and delivers analysis-ready records in seconds — turning Tokopedia into a programmable Tokopedia API.
Common reasons teams scrape Tokopedia:
- Price monitoring & dynamic repricing — track competitor prices (
priceRaw) and discount percentages (discountPercentage) across your category on a daily or hourly schedule. - Demand & sales-velocity research — sort by Top Sales (
sortOrder: "8") and analyzesoldCount(100+ terjual,1rb+ terjual) to identify best-selling SKUs and revenue leaders. - Brand protection & unauthorized seller detection — search your brand name to audit every listing, verify
shopIsOfficialvs. third-party resellers, and flag grey-market discounting. - B2B merchant & supplier lead generation — compile lists of active Indonesian sellers with
shopName,shopUrl,shopCity,shopIsOfficial, andshopIsPowerBadgefor wholesale outreach or marketplace onboarding. - Assortment & category analytics — map category trees (
categoryBreadcrumb), COD adoption (isCOD), and regional seller distribution (shopCity) across thousands of products.
✨ What this Tokopedia scraper does
- ✅ Multi-keyword & URL search — pass any number of
searchKeywords(["iphone 15", "sepatu nike", "kursi kantor"]) or paste pre-filtered Tokopedia search URLs intostartUrls. Leave both empty and the actor automatically collects a diverse 100-item sample across 8 popular Indonesian product categories. - ✅ Unlocked 1,000+ deep pagination — fetches up to 60 products per request (
rowsPerPage: 60) and automatically paginates page-by-page without restrictive ceilings. SetmaxItemsPerSearch: 0(unlimited) andmaxTotalItems: 1000+ to extract 1,000+ unique products in a single run. - ✅ Parsed units-sold demand signal — extracts Tokopedia's Bahasa Indonesia sales badges (
"100+ terjual","5 terjual") into both a clean integer floor (soldCount) and the original badge string (soldCountLabel). - ✅ Dual price formatting & auto-computed discounts — provides both formatted Rupiah strings (
"Rp451.440") and clean integers (451440) forpriceRawandoriginalPriceRaw, and automatically computesdiscountPercentagewhenever a pre-discount price exists. - ✅ Complete seller & shop intelligence — every product record includes
shopId,shopName,shopUrl,shopCity(e.g."Jakarta Barat","Surabaya","Bandung"),shopIsOfficial(Official Store badge), andshopIsPowerBadge(Power Merchant status). - ✅ 6 native sort orders — sort results by Relevance (
23), Newest arrivals (5), Top sales / Best sellers (8), Price low to high (11), Price high to low (10), or Highest customer rating (9). - ✅ Global de-duplication — tracks every product by its unique Tokopedia
idacross all pages and keywords so overlapping searches never produce duplicate rows. - ✅ Ultra-fast, low-cost HTTP execution — runs without a headless browser, pulling 100–500+ products in ~5–15 seconds on minimal memory (512 MB).
🎯 Use cases
| Team / Role | How they use Tokopedia data |
|---|---|
| E-Commerce & Marketplace Managers | Benchmark SKU pricing, discount depth, and review counts against competing Official Stores (shopIsOfficial: true) on Tokopedia. |
| CPG & Consumer Electronics Brands | Monitor Minimum Advertised Price (MAP) compliance and identify unauthorized sellers across Jakarta, Surabaya, Medan, and Bandung (shopCity). |
| Product Sourcing & Dropshippers | Combine sortOrder: "8" (Top sales) with soldCount and ratingAverage to discover high-velocity, high-margin products. |
| B2B Lead Generation & Logistics Sales | Build targeted prospect lists of high-volume Power Merchants (shopIsPowerBadge: true) and Official Stores by category and city. |
| Venture Capital & Market Researchers | Quantify category market share, price elasticity, and regional merchant density across Indonesia's digital retail landscape. |
📥 Input
Provide one or more search keywords or start URLs. All fields are optional and prefilled so you can click Start immediately.
| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
searchKeywords | array<string> | Prefill: ["iphone 15"] | Product keywords to search on Tokopedia (e.g. ["iphone 15", "laptop asus", "sepatu nike"]). Leave empty for a built-in multi-category sample. |
sortOrder | string (select) | "23" | Sort order: "23" Relevance, "5" Newest, "8" Top sales / Best sellers, "11" Price low→high, "10" Price high→low, "9" Highest rating. |
maxItemsPerSearch | integer | Default: 0 (Prefill: 100) | Max products to collect per keyword. 0 = auto/unlimited (governed by maxTotalItems). |
maxTotalItems | integer | 0 | Overall cap across all keywords combined. 0 = unlimited. Set 1000+ for bulk multi-page extraction. |
rowsPerPage | integer | 60 | Products fetched per page request (1–60). Keep at 60 for maximum speed and fewest requests. |
startUrls | array<string> | [] | Optional. Full Tokopedia search URLs (e.g. https://www.tokopedia.com/search?q=laptop&pmin=5000000). Preserves URL query filters. |
proxyConfiguration | object | { "useApifyProxy": false } | Proxy settings. Default works out of the box; optional Apify Proxy can be enabled for massive crawls. |
Sort order reference
sortOrder value | Tokopedia sorting | Best for |
|---|---|---|
"23" | Relevance (best match) | General product & brand search (default) |
"8" | Top sales / best sellers | Finding highest-volume winners (soldCount) |
"5" | Newest arrivals | Tracking newly listed products & trends |
"11" | Price: low to high | Finding cheapest suppliers & wholesale offers |
"10" | Price: high to low | Auditing premium SKUs & bundles |
"9" | Highest customer rating | Sourcing top-rated products & reputable shops |
Example input — fast single-keyword search
{"searchKeywords": ["iphone 15"],"sortOrder": "23","maxItemsPerSearch": 100,"maxTotalItems": 0,"rowsPerPage": 60,"proxyConfiguration": { "useApifyProxy": false }}
Example input — 1,000+ products deep category extraction
{"searchKeywords": ["iphone 15", "samsung galaxy s24", "xiaomi redmi", "laptop asus"],"sortOrder": "8","maxItemsPerSearch": 0,"maxTotalItems": 1200,"rowsPerPage": 60,"proxyConfiguration": { "useApifyProxy": false }}
📤 Output
Each scraped product is stored as one structured JSON object in the Apify Dataset (with both Overview and Full detail table views). Here is a real record from a verified run:
{"id": "11611885554","name": "SUPCASE Case Compatible for iPhone 15 Pro Max 15 Pro UB Unicorn Beetle MagPro SP","url": "https://www.tokopedia.com/supcaseofficial/case-compatible-for-iphone-15-pro-max-15-pro-supcase-ub-unicorn-beetle-magpro-sp-1729866394374277081","price": "Rp451.440","priceRaw": 451440,"originalPrice": "Rp570.000","originalPriceRaw": 570000,"discountPercentage": 21,"priceRange": null,"rating": null,"ratingAverage": 5,"countReview": 0,"soldCount": 5,"soldCountLabel": "5 terjual","isCOD": true,"wishlist": false,"imageUrl": "https://p16-images-sign-sg.tokopedia-static.net/.../white-pad-v1:200:200.jpeg","videoUrl": "https://vod-stream.tokopedia.net/view/ttvideo?source=QeEaKL&ttvid=v10c21g...","categoryId": 65,"categoryName": null,"categoryBreadcrumb": "handphone-tablet/aksesoris-handphone/hard-case-handphone","shopId": "8357431","shopName": "Supcase Official ID","shopUrl": "https://www.tokopedia.com/supcaseofficial","shopCity": "Jakarta Barat","shopIsOfficial": true,"shopIsPowerBadge": false,"gaKey": "handphone-tablet/aksesoris-handphone/hard-case-handphone","sourceEngine": null,"searchKeyword": "iphone 15","searchUrl": "https://www.tokopedia.com/search?q=iphone+15&ob=23&source=search","scrapedAt": "2026-11-01T23:58:32.387Z"}
📋 Output fields & coverage reference
📦 Product Identity, Media & Category
| Field | Type | Coverage | Description |
|---|---|---|---|
id | string | 🟢 High (100%) | Unique Tokopedia product ID (used for global de-duplication). |
name | string | 🟢 High (100%) | Full product listing title. |
url | string | 🟢 High (100%) | Canonical product page URL on tokopedia.com. |
imageUrl | string | 🟢 High (100%) | Primary product thumbnail/image URL. |
videoUrl | string / null | 🟡 Conditional (~25%) | Product video stream URL when the seller has uploaded a video. |
categoryId | integer / null | 🟢 High (100%) | Tokopedia numeric department/category ID. |
categoryBreadcrumb | string / null | 🟢 High (99%+) | Full hierarchical category slug path (e.g. handphone-tablet/aksesoris-handphone/hard-case-handphone). |
categoryName | string / null | 🟡 Conditional | Legacy category name field (use categoryBreadcrumb for reliable taxonomy). |
gaKey | string / null | 🟢 High (99%+) | Analytics category path identifier. |
💰 Pricing & Discounts (IDR)
| Field | Type | Coverage | Description |
|---|---|---|---|
price | string | 🟢 High (100%) | Formatted display price in Indonesian Rupiah (e.g. "Rp451.440"). |
priceRaw | integer | 🟢 High (100%) | Clean numeric price in IDR (e.g. 451440) ready for sorting and math. |
originalPrice | string / null | 🟡 Conditional (~40%) | Formatted pre-discount price string when the item is on sale. |
originalPriceRaw | integer / null | 🟡 Conditional (~40%) | Numeric pre-discount price in IDR when discounted. |
discountPercentage | integer / null | 🟡 Conditional (~40%) | Discount percentage (1–99), provided by Tokopedia or computed from priceRaw / originalPriceRaw. |
priceRange | string / null | 🟡 Conditional (~5%) | Price range string when a multi-variant listing displays a span. |
isCOD | boolean | 🟢 High (100%) | true if Cash on Delivery ("Bisa COD") is supported on the listing. |
⭐ Demand, Ratings & Reviews
| Field | Type | Coverage | Description |
|---|---|---|---|
soldCount | integer / null | 🟢 High (~85%) | Numeric units-sold floor parsed from the badge (e.g. 100 for "100+ terjual"). |
soldCountLabel | string / null | 🟢 High (~85%) | Raw Bahasa Indonesia units-sold badge string (e.g. "100+ terjual", "5 terjual"). |
ratingAverage | number / null | 🟢 High (~82%) | Average customer star rating (1.0–5.0) once the product has been rated. |
countReview | integer | 🟢 High (100%) | Number of customer reviews (0 on unreviewed listings). |
rating | number / null | 🟡 Conditional | Legacy numeric rating field (prefer ratingAverage). |
wishlist | boolean | 🟢 High (100%) | Wishlist flag (false for anonymous search sessions). |
🏪 Seller & Shop Information
| Field | Type | Coverage | Description |
|---|---|---|---|
shopId | string | 🟢 High (100%) | Unique Tokopedia seller shop ID. |
shopName | string | 🟢 High (100%) | Seller storefront name. |
shopUrl | string | 🟢 High (100%) | Direct URL to the seller's shop on tokopedia.com. |
shopCity | string | 🟢 High (100%) | Seller city/regency in Indonesia (e.g. "Jakarta Barat", "Kota Surabaya"). |
shopIsOfficial | boolean | 🟢 High (100%) | true if the seller is a verified Official Store (Mall). |
shopIsPowerBadge | boolean | 🟢 High (100%) | true if the seller holds Power Merchant / Power Badge status. |
searchKeyword | string | 🟢 High (100%) | The search keyword that returned this product. |
searchUrl | string | 🟢 High (100%) | Full Tokopedia search URL for provenance. |
scrapedAt | string | 🟢 High (100%) | ISO 8601 timestamp of extraction. |
🔁 Pagination & 1,000+ products scale
The Tokopedia scraper handles multi-page pagination automatically:
- 60 products per page: Each request fetches up to
rowsPerPage: 60listings usingpage=Nandstart=(N-1)*60. - Unlocked 1,000+ pagination per keyword & across keywords: By default,
maxItemsPerSearchis0(auto/unlimited, governed bymaxTotalItems), with no artificial 100-item ceiling. A single broad keyword (e.g."iphone 15"or"sepatu pria") can paginate across dozens of pages to collect 1,000+ unique products, or you can combine multiple keywords withmaxTotalItems: 2000+. - Cross-search de-duplication: Every product ID is tracked in a global
Setacross the entire run, ensuring 0 duplicates even when two keywords ("iphone 15"and"iphone 15 pro") surface overlapping listings. - Empty-run protection: If you start the actor with no keywords and no URLs (and
maxTotalItems: 0), it automatically runs 8 popular Indonesian search terms and caps the demo sample at 100 items so empty runs finish in seconds. If you explicitly setmaxTotalItems: 1000even on an empty run, it honors your1000target across the default terms.
⚙️ How to use
- Open the actor in Apify Console and enter your Search keywords (
searchKeywords). - Pick a sort order: Keep
"23"for relevance or choose"8"for Top sales / Best sellers. - Set your target volume: Leave the prefill (
maxItemsPerSearch: 100) for a quick 5-second run, or setmaxItemsPerSearch: 0andmaxTotalItems: 1000for a 1,000-product bulk extraction. - Click Start and watch products populate the dataset.
- Download or integrate: Export JSON, CSV, or Excel, or connect the run to Google Sheets, Make, Zapier, n8n, BigQuery, Snowflake, or webhooks.
Calling via Python SDK
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run_input = {"searchKeywords": ["iphone 15", "sepatu nike"],"sortOrder": "8", # Top sales / best sellers"maxItemsPerSearch": 500,"maxTotalItems": 1000,"rowsPerPage": 60,}run = client.actor("haketa/tokopedia-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['name']} | {item['price']} | Sold: {item['soldCount']} | Shop: {item['shopName']} ({item['shopCity']})")
Calling via JavaScript / Node.js SDK
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/tokopedia-scraper').call({searchKeywords: ['laptop asus', 'kursi kantor'],sortOrder: '23',maxItemsPerSearch: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Collected ${items.length} unique Tokopedia products.`);
Calling via cURL (REST API)
curl -X POST "https://api.apify.com/v2/acts/haketa~tokopedia-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchKeywords": ["iphone 15", "sepatu nike", "kursi kantor"],"sortOrder": "8","maxItemsPerSearch": 300,"maxTotalItems": 900,"rowsPerPage": 60}'
📊 Dataset views & popular Indonesian search categories
The actor includes two ready-made dataset views in Apify Console:
| Dataset View | Included Columns | Best For |
|---|---|---|
| Product Search Results (Overview) | id, name, url, price, priceRaw, originalPrice, discountPercentage, ratingAverage, countReview, soldCount, soldCountLabel, imageUrl, categoryBreadcrumb, shopName, shopUrl, shopCity, shopIsOfficial, shopIsPowerBadge, isCOD, searchKeyword, scrapedAt | Quick spreadsheet exports, price comparisons, and demand sorting |
| Full detail | All 32 output fields including videoUrl, priceRange, categoryId, shopId, gaKey, searchUrl, and wishlist | Data warehouses, BI pipelines, and complete catalog audits |
High-volume Bahasa Indonesia keyword ideas
| Category | Sample searchKeywords |
|---|---|
| Smartphones & Gadgets | "iphone 15", "samsung galaxy s24", "xiaomi redmi note", "tws bluetooth", "powerbank fast charging" |
| Computers & Office | "laptop asus", "macbook air m3", "monitor gaming", "keyboard mechanical", "kursi kantor ergonomis" |
| Fashion & Footwear | "sepatu nike", "sepatu lari pria", "kaos pria oversize", "tas wanita import", "jam tangan pria" |
| Beauty & Personal Care | "sunscreen wajah", "serum vitamin c", "parfum wanita tahan lama", "lip tint" |
| FMCG & Groceries | "kopi arabika", "minyak goreng", "susu uht", "madu murni", "vitamin c" |
💡 Pro tips for best results
- Use Bahasa Indonesia keywords for local categories: Global brand names (
iphone 15,macbook air,sony wh-1000xm5) work as-is, while generic categories yield 10× more listings in Indonesian (sepatu lari,tas wanita,kursi kerja,kopi arabika,skincare wajah). - Pass advanced URL filters via
startUrls: If you want to filter by minimum/maximum price (pmin/pmax), minimum rating (rt=4,5), or condition (condition=1for new,2for used), apply those filters ontokopedia.com/searchand paste the URL intostartUrls. - Keep
rowsPerPage: 60: Fetching 60 items per page minimizes HTTP round-trips and lets the actor collect 600 products in just 10 page requests (~8 seconds).
⚠️ Honest limitations
- Search-level fields only: This actor extracts the rich product card data returned by Tokopedia's search engine (which already includes price, discount, rating, review count, sold count, category breadcrumb, and shop details). Full long-form HTML product descriptions and per-variant stock counts require visiting individual product detail pages and are not part of this fast search scraper.
- Sold count granularity: Tokopedia reports
terjualbadges in rounded tiers on high-volume listings (e.g."100+ terjual","250+ terjual","1rb+ terjual"), sosoldCountrepresents the verified minimum floor.
❓ FAQ
Do I need a Tokopedia account, cookies, or API key? No. The actor works anonymously out of the box with zero authentication.
Do I need expensive residential proxies to scrape Tokopedia? No. Unlike browser scrapers that get blocked by Akamai on desktop pages, this actor uses lightweight mobile API headers that work reliably without residential proxy costs.
How fast is a 1,000-product run? At 60 products per page, 1,000 products require only ~17 page requests and typically finish in 15–30 seconds.
Why are originalPrice and discountPercentage null on some items?
They are populated only when the seller is running an active strike-through discount (~40% of listings). Non-discounted items have price and priceRaw at 100% fill rate.
Can I filter Official Stores vs. regular sellers?
Yes — every record includes shopIsOfficial (true/false) and shopIsPowerBadge (true/false), making it trivial to filter in Excel, SQL, or Python.
🔗 Related Asian & global e-commerce scrapers
Explore our other high-speed marketplace scrapers:
- Tiki.vn Scraper — Vietnam #1 Marketplace Products, Prices & Sold Volume
- Rakuten Ichiba Scraper — Japan #1 Marketplace Product Search & Reviews
- Mercari Japan Scraper — C2C Marketplace Listings & Sold Comps
- Shopify Store Scraper — Full Catalog, Variants & Pricing
- Lelong.my Scraper — Malaysia E-Commerce Product Listings
- Flipp Scraper — North America Grocery Flyer & Online Deals
📋 Changelog
- v1.2 (2026-11) — Unlocked 1,000+ deep pagination by setting
maxItemsPerSearchdefault to0(auto/unlimited governed bymaxTotalItems), lifting page ceilings to 500 pages per keyword, and enforcing global cross-keyword product ID de-duplication; expanded README documentation. - v1.1 (2026-11) — Added
soldCount,soldCountLabel(terjualparser), andisCOD(Bisa CODparser) fromlabelGroups; verified 500-item benchmark in ~10s with 0 duplicates. - v1.0 (2026-08) — Initial pure-HTTP GraphQL (
SearchProductQueryV4) release with iOS device header rotation and automatic discount calculation.