Tokopedia Scraper — Product Search, Prices & Sold Counts avatar

Tokopedia Scraper — Product Search, Prices & Sold Counts

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Tokopedia Scraper — Product Search, Prices & Sold Counts

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

Haketa

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

3

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

Tokopedia Scraper — Product Search, Prices, Sold Count & Shop Data

Apify Actor Marketplace

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

FeatureDetails
Target marketplaceTokopedia (tokopedia.com — Indonesia)
Input modesKeyword list (searchKeywords) and/or filtered Tokopedia search URLs (startUrls)
Sort optionsRelevance (23), Newest (5), Top sales / Best sellers (8), Price low→high (11), Price high→low (10), Highest rating (9)
Core product fieldsid, name, url, price, priceRaw (IDR), originalPrice, discountPercentage, ratingAverage, countReview, soldCount, soldCountLabel, isCOD, imageUrl, videoUrl, categoryBreadcrumb
Shop & seller fieldsshopId, shopName, shopUrl, shopCity, shopIsOfficial, shopIsPowerBadge
Pagination & scale60 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 & proxyNo login or API key required; runs out-of-the-box without expensive residential proxies
Export formatsJSON, 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 analyze soldCount (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 shopIsOfficial vs. third-party resellers, and flag grey-market discounting.
  • B2B merchant & supplier lead generation — compile lists of active Indonesian sellers with shopName, shopUrl, shopCity, shopIsOfficial, and shopIsPowerBadge for 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 into startUrls. 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. Set maxItemsPerSearch: 0 (unlimited) and maxTotalItems: 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) for priceRaw and originalPriceRaw, and automatically computes discountPercentage whenever 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), and shopIsPowerBadge (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 id across 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 / RoleHow they use Tokopedia data
E-Commerce & Marketplace ManagersBenchmark SKU pricing, discount depth, and review counts against competing Official Stores (shopIsOfficial: true) on Tokopedia.
CPG & Consumer Electronics BrandsMonitor Minimum Advertised Price (MAP) compliance and identify unauthorized sellers across Jakarta, Surabaya, Medan, and Bandung (shopCity).
Product Sourcing & DropshippersCombine sortOrder: "8" (Top sales) with soldCount and ratingAverage to discover high-velocity, high-margin products.
B2B Lead Generation & Logistics SalesBuild targeted prospect lists of high-volume Power Merchants (shopIsPowerBadge: true) and Official Stores by category and city.
Venture Capital & Market ResearchersQuantify 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.

ParameterTypeDefault / PrefillDescription
searchKeywordsarray<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.
sortOrderstring (select)"23"Sort order: "23" Relevance, "5" Newest, "8" Top sales / Best sellers, "11" Price low→high, "10" Price high→low, "9" Highest rating.
maxItemsPerSearchintegerDefault: 0 (Prefill: 100)Max products to collect per keyword. 0 = auto/unlimited (governed by maxTotalItems).
maxTotalItemsinteger0Overall cap across all keywords combined. 0 = unlimited. Set 1000+ for bulk multi-page extraction.
rowsPerPageinteger60Products fetched per page request (1–60). Keep at 60 for maximum speed and fewest requests.
startUrlsarray<string>[]Optional. Full Tokopedia search URLs (e.g. https://www.tokopedia.com/search?q=laptop&pmin=5000000). Preserves URL query filters.
proxyConfigurationobject{ "useApifyProxy": false }Proxy settings. Default works out of the box; optional Apify Proxy can be enabled for massive crawls.

Sort order reference

sortOrder valueTokopedia sortingBest for
"23"Relevance (best match)General product & brand search (default)
"8"Top sales / best sellersFinding highest-volume winners (soldCount)
"5"Newest arrivalsTracking newly listed products & trends
"11"Price: low to highFinding cheapest suppliers & wholesale offers
"10"Price: high to lowAuditing premium SKUs & bundles
"9"Highest customer ratingSourcing top-rated products & reputable shops
{
"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

FieldTypeCoverageDescription
idstring🟢 High (100%)Unique Tokopedia product ID (used for global de-duplication).
namestring🟢 High (100%)Full product listing title.
urlstring🟢 High (100%)Canonical product page URL on tokopedia.com.
imageUrlstring🟢 High (100%)Primary product thumbnail/image URL.
videoUrlstring / null🟡 Conditional (~25%)Product video stream URL when the seller has uploaded a video.
categoryIdinteger / null🟢 High (100%)Tokopedia numeric department/category ID.
categoryBreadcrumbstring / null🟢 High (99%+)Full hierarchical category slug path (e.g. handphone-tablet/aksesoris-handphone/hard-case-handphone).
categoryNamestring / null🟡 ConditionalLegacy category name field (use categoryBreadcrumb for reliable taxonomy).
gaKeystring / null🟢 High (99%+)Analytics category path identifier.

💰 Pricing & Discounts (IDR)

FieldTypeCoverageDescription
pricestring🟢 High (100%)Formatted display price in Indonesian Rupiah (e.g. "Rp451.440").
priceRawinteger🟢 High (100%)Clean numeric price in IDR (e.g. 451440) ready for sorting and math.
originalPricestring / null🟡 Conditional (~40%)Formatted pre-discount price string when the item is on sale.
originalPriceRawinteger / null🟡 Conditional (~40%)Numeric pre-discount price in IDR when discounted.
discountPercentageinteger / null🟡 Conditional (~40%)Discount percentage (1–99), provided by Tokopedia or computed from priceRaw / originalPriceRaw.
priceRangestring / null🟡 Conditional (~5%)Price range string when a multi-variant listing displays a span.
isCODboolean🟢 High (100%)true if Cash on Delivery ("Bisa COD") is supported on the listing.

⭐ Demand, Ratings & Reviews

FieldTypeCoverageDescription
soldCountinteger / null🟢 High (~85%)Numeric units-sold floor parsed from the badge (e.g. 100 for "100+ terjual").
soldCountLabelstring / null🟢 High (~85%)Raw Bahasa Indonesia units-sold badge string (e.g. "100+ terjual", "5 terjual").
ratingAveragenumber / null🟢 High (~82%)Average customer star rating (1.0–5.0) once the product has been rated.
countReviewinteger🟢 High (100%)Number of customer reviews (0 on unreviewed listings).
ratingnumber / null🟡 ConditionalLegacy numeric rating field (prefer ratingAverage).
wishlistboolean🟢 High (100%)Wishlist flag (false for anonymous search sessions).

🏪 Seller & Shop Information

FieldTypeCoverageDescription
shopIdstring🟢 High (100%)Unique Tokopedia seller shop ID.
shopNamestring🟢 High (100%)Seller storefront name.
shopUrlstring🟢 High (100%)Direct URL to the seller's shop on tokopedia.com.
shopCitystring🟢 High (100%)Seller city/regency in Indonesia (e.g. "Jakarta Barat", "Kota Surabaya").
shopIsOfficialboolean🟢 High (100%)true if the seller is a verified Official Store (Mall).
shopIsPowerBadgeboolean🟢 High (100%)true if the seller holds Power Merchant / Power Badge status.
searchKeywordstring🟢 High (100%)The search keyword that returned this product.
searchUrlstring🟢 High (100%)Full Tokopedia search URL for provenance.
scrapedAtstring🟢 High (100%)ISO 8601 timestamp of extraction.

🔁 Pagination & 1,000+ products scale

The Tokopedia scraper handles multi-page pagination automatically:

  1. 60 products per page: Each request fetches up to rowsPerPage: 60 listings using page=N and start=(N-1)*60.
  2. Unlocked 1,000+ pagination per keyword & across keywords: By default, maxItemsPerSearch is 0 (auto/unlimited, governed by maxTotalItems), 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 with maxTotalItems: 2000+.
  3. Cross-search de-duplication: Every product ID is tracked in a global Set across the entire run, ensuring 0 duplicates even when two keywords ("iphone 15" and "iphone 15 pro") surface overlapping listings.
  4. 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 set maxTotalItems: 1000 even on an empty run, it honors your 1000 target across the default terms.

⚙️ How to use

  1. Open the actor in Apify Console and enter your Search keywords (searchKeywords).
  2. Pick a sort order: Keep "23" for relevance or choose "8" for Top sales / Best sellers.
  3. Set your target volume: Leave the prefill (maxItemsPerSearch: 100) for a quick 5-second run, or set maxItemsPerSearch: 0 and maxTotalItems: 1000 for a 1,000-product bulk extraction.
  4. Click Start and watch products populate the dataset.
  5. 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 ApifyClient
client = 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
}'

The actor includes two ready-made dataset views in Apify Console:

Dataset ViewIncluded ColumnsBest 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, scrapedAtQuick spreadsheet exports, price comparisons, and demand sorting
Full detailAll 32 output fields including videoUrl, priceRange, categoryId, shopId, gaKey, searchUrl, and wishlistData warehouses, BI pipelines, and complete catalog audits

High-volume Bahasa Indonesia keyword ideas

CategorySample 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=1 for new, 2 for used), apply those filters on tokopedia.com/search and paste the URL into startUrls.
  • 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 terjual badges in rounded tiers on high-volume listings (e.g. "100+ terjual", "250+ terjual", "1rb+ terjual"), so soldCount represents 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.


Explore our other high-speed marketplace scrapers:


📋 Changelog

  • v1.2 (2026-11) — Unlocked 1,000+ deep pagination by setting maxItemsPerSearch default to 0 (auto/unlimited governed by maxTotalItems), 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 (terjual parser), and isCOD (Bisa COD parser) from labelGroups; 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.
⌂ 换网址