L logiover
ecommerce · May 31, 2026 · 5 min read

How to Scrape Tokopedia Product Data in 2026

Extract Tokopedia product listings via its GraphQL search API — prices, discounts, ratings, reviews, sellers and categories — with parallel HTTP-only scraping up to 60,000+ products.

Tokopedia is Indonesia’s largest e-commerce marketplace and one of the biggest in Southeast Asia. Its product search runs on a GraphQL API, which — once you know how to query it — returns clean, structured JSON without ever rendering a page. That means no headless browser, fast parallel scraping, and the ability to walk deep result sets (60,000+ products) cheaply. This guide covers what Tokopedia exposes, how the GraphQL-backed HTTP scraping works, the 25-plus-field product schema, and the pitfalls specific to pulling data from a marketplace this size.

What’s worth extracting

Tokopedia returns 25+ attributes per product:

  • Identity — product ID, title, URL.
  • Pricing — display price string and numeric price, discount details (original price, discount percentage), all in IDR.
  • Reputation — rating and review count.
  • Demand — sales volume / units sold.
  • Classification — category taxonomy.
  • Seller / store — store name, store city, official-store flag, merchant badges (Power Merchant, etc.).
  • Logistics & promotion — shipping labels (free shipping) and promotional labels.

The store-city field is a quietly powerful one: because Tokopedia surfaces where each seller ships from, you can map supply geographically across the Indonesian archipelago — useful for logistics and sourcing analysis you can’t easily do on marketplaces that hide seller location.

GraphQL-backed, HTTP-only, parallel

Tokopedia’s search is powered by a GraphQL endpoint. The scraper talks to it over plain HTTP — no browser — by issuing the search query directly, which is why it’s both fast and cheap:

  • Parallel query processing with configurable concurrency — fire many GraphQL queries at once to walk deep result sets quickly.
  • Smart deduplication across queries — the same product appears under multiple searches, filters, and category pages; dedup by product ID keeps each item single.
  • Marketplace filters — price range, item condition (new/used), official-stores-only, free-shipping-only, and sort orders.
  • Automatic retry/backoff for transient errors, so rate-limit blips don’t drop rows.
  • Residential proxy rotation support — Tokopedia’s anti-bot is heavier than some regional marketplaces, so residential IPs are available when datacenter IPs start getting throttled on large or frequent runs.

You target by search query or category, layer on filters, and the scraper paginates through — capable of pulling 60,000+ products in a single deep sweep.

Conceptually the GraphQL search call carries your query and filters as variables:

POST https://gql.tokopedia.com/graphql/SearchProductQuery
{
  "variables": {
    "params": "q=sepatu&ob=5&official=true&page=1&rows=60"
  }
}

(ob is the sort order; official=true restricts to official stores.)

Run the Tokopedia Product Scraper — GraphQL-backed HTTP scraping, 25+ fields per product, parallel queries up to 60,000+ products. Filters for price, condition, official stores and free shipping; dedup and retry built in. No browser needed.

Schema design for downstream use

A clean per-product row:

{
  "product_id": "8821094471",
  "title": "Sepatu Sneakers Pria Original",
  "url": "https://www.tokopedia.com/...",
  "price_idr": 459000,
  "original_price_idr": 599000,
  "discount_pct": 23,
  "rating": 4.8,
  "review_count": 1204,
  "units_sold": 5300,
  "category": "Fashion Pria",
  "store_name": "Nike Official Store",
  "store_city": "Jakarta Pusat",
  "is_official_store": true,
  "merchant_badges": ["Power Merchant Pro"],
  "labels": ["Bebas Ongkir"],
  "scraped_at": "2026-05-31T09:00:00Z"
}

Choices worth making early:

  • Keep store_city. It’s the field that lets you map supply geography — don’t discard it.
  • Store both price_idr and original_price_idr. Discounting is constant on Tokopedia; list price is what makes markdown depth measurable.
  • Preserve is_official_store and merchant_badges. Trust tier drives both conversion and brand-monitoring analysis.
  • Keep units_sold. Like other SE-Asia marketplaces, units-sold is a stronger demand signal than rating count — use it to estimate revenue.
  • Stamp scraped_at. Prices and stock change continuously.

Typical use cases

  • Market research and price-trend tracking across Indonesian product categories over time.
  • Competitor analysis — monitor a rival’s pricing, discount cadence, and seller strategy.
  • Automated price monitoring for retail or procurement — alert on price moves within a watched category.
  • E-commerce analytics — ratings, reviews, and sales-volume distributions by category to find gaps and breakouts.
  • Lead generation — discover top-performing sellers and official stores as B2B prospects or partnership targets.
  • Product sourcing — surface trending products and reliable suppliers by sorting on best-selling within a category.
  • Academic research — study Indonesian e-commerce dynamics with repeatable, structured pulls.

The value is depth plus the demand and geography signals: a single product is trivia, but a category’s full price/sales/seller-city distribution refreshed weekly is market infrastructure.

Cost math

This actor is pay-per-event with per-result pricing set to zero — you pay the small per-run start fee (about $0.00005) plus Apify compute, and nothing per product. Because it’s HTTP-only GraphQL rather than a browser, the compute stays light even on a 60,000-product sweep, so cost is dominated by modest compute time rather than row count. If a heavy or frequent run requires residential proxy rotation, that bandwidth is the main variable to watch — but for datacenter-friendly runs the cost floor is very low. Against building your own GraphQL crawler with concurrency control, dedup, retry/backoff, and proxy rotation on a VPS, you skip the build week and the ongoing maintenance.

Common pitfalls

  • Prices are in IDR — big numbers. A 459,000 IDR item is ~$28; don’t truncate or mistake the magnitude.
  • GraphQL queries break when the schema shifts. Tokopedia changes its GraphQL variables and field names periodically; a managed actor absorbs those updates, whereas a hand-rolled query silently returns empties when it drifts.
  • Dedup across queries and filters. Heavy overlap between searches and categories means product-ID dedup is mandatory to avoid double-counting sales aggregates.
  • Tune concurrency to the proxy tier. Datacenter IPs handle moderate concurrency; push too hard and you’ll trip anti-bot — switch to residential rotation rather than just cranking workers.
  • units_sold is cumulative. It ranks demand well but isn’t a recency signal unless you diff snapshots over time.
  • Official-store vs reseller matters. Always check is_official_store before drawing brand conclusions — the same brand sells through many merchants.

Wrapping up

Tokopedia is a deep, data-rich target, and its GraphQL API makes browser-free scraping possible at serious scale — but the GraphQL query construction, concurrency tuning, dedup, retry/backoff, and proxy escalation are exactly the moving parts that break a DIY scraper. A managed HTTP-only actor handles all of them and stays green through Tokopedia’s schema changes. If you need fresh Indonesian marketplace data with seller-geography and sales-volume signals, run the actor and focus on the analysis.

Open the Tokopedia Product Scraper on Apify — 25+ fields, GraphQL-backed, parallel up to 60,000+ products, full marketplace filters. Per-result pricing is zero. Start with Apify’s free monthly credit.

Related guides