Dataspryva

Tokopedia Search, Category & Price Drop Scraper

Search Tokopedia by keyword, browse a category or top-sellers list, or look up specific product URLs, and get price, discount, rating, and seller details for each Indonesian marketplace listing.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringoptionalWhat to scrape.
searchQueriesarrayoptionalKeywords to search (mode=search). Example: smartphone, sepatu lari, kopi arabika.
searchUrlsarrayoptionalTokopedia search or /find/ URLs. Filters and sort already in the URL are applied.
Show all input fields
FieldTypeRequiredDescription
modestringoptionalWhat to scrape.
searchQueriesarrayoptionalKeywords to search (mode=search). Example: smartphone, sepatu lari, kopi arabika.
searchUrlsarrayoptionalTokopedia search or /find/ URLs. Filters and sort already in the URL are applied.
categoryUrlsarrayoptionalTokopedia category URLs such as https://www.tokopedia.com/p/handphone-tablet/handphone.
categoryIdsarrayoptionalNumeric Tokopedia category IDs, for example 24 for Handphone.
productUrlsarrayoptionalTokopedia product page URLs. Numeric IDs alone are not supported.
sortBystringoptionalResult order.
priceMinintegeroptionalMinimum price in Indonesian Rupiah.
priceMaxintegeroptionalMaximum price in Indonesian Rupiah.
conditionstringoptionalFilter by product condition.
shopTypestringoptionalFilter by Tokopedia shop type.
minRatingstringoptionalOnly show products rated 4 or higher.
citystringoptionalFilter by a common seller location. Leave Any for all of Indonesia.
cityIdstringoptionalExact Tokopedia city ID(s), comma-separated. Overrides the location dropdown.
latestProductDaysstringoptionalOnly show products added recently.
discountOnlybooleanoptionalOnly show products currently on discount.
codOnlybooleanoptionalOnly show products that offer cash on delivery.
freeShippingOnlybooleanoptionalOnly show products with the free-shipping offer.
preorderstringoptionalFilter by ready stock or preorder.
includeDetailsbooleanoptionalAdd condition, stock, variants, description, and rating breakdown to search and category results. Slower and makes one extra request per product.
maxItemsintegeroptionalMaximum number of products to return.

Download the published input schema

View complete JSON
{
  "description": "Search Tokopedia, browse categories, or fetch product details.",
  "properties": {
    "categoryIds": {
      "default": [],
      "description": "Numeric Tokopedia category IDs, for example 24 for Handphone.",
      "editor": "stringList",
      "title": "Category IDs (mode=categoryBrowse)",
      "type": "array"
    },
    "categoryUrls": {
      "default": [],
      "description": "Tokopedia category URLs such as https://www.tokopedia.com/p/handphone-tablet/handphone.",
      "editor": "stringList",
      "title": "Category URLs (mode=categoryBrowse)",
      "type": "array"
    },
    "city": {
      "default": "any",
      "description": "Filter by a common seller location. Leave Any for all of Indonesia.",
      "editor": "select",
      "enum": [
        "any",
        "DKI Jakarta",
        "Jabodetabek",
        "Bandung",
        "Medan",
        "Surabaya",
        "Bali",
        "Banten",
        "D.I. Yogyakarta",
        "Semarang",
        "Makassar",
        "Palembang",
        "Denpasar",
        "Bekasi",
        "Tangerang",
        "Depok",
        "Bogor",
        "Jakarta Pusat",
        "Jakarta Selatan",
        "Jakarta Barat",
        "Jakarta Utara",
        "Jakarta Timur"
      ],
      "enumTitles": [
        "Any location",
        "DKI Jakarta",
        "Jabodetabek",
        "Bandung",
        "Medan",
        "Surabaya",
        "Bali",
        "Banten",
        "Yogyakarta",
        "Semarang",
        "Makassar",
        "Palembang",
        "Denpasar",
        "Bekasi",
        "Tangerang",
        "Depok",
        "Bogor",
        "Jakarta Pusat",
        "Jakarta Selatan",
        "Jakarta Barat",
        "Jakarta Utara",
        "Jakarta Timur"
      ],
      "prefill": "any",
      "title": "Seller location",
      "type": "string"
    },
    "cityId": {
      "description": "Exact Tokopedia city ID(s), comma-separated. Overrides the location dropdown.",
      "editor": "textfield",
      "title": "City ID (advanced)",
      "type": "string"
    },
    "codOnly": {
      "default": false,
      "description": "Only show products that offer cash on delivery.",
      "prefill": false,
      "title": "Cash on delivery only",
      "type": "boolean"
    },
    "condition": {
      "default": "any",
      "description": "Filter by product condition.",
      "editor": "select",
      "enumSuggestedValues": [
        "any",
        "new",
        "used",
        "1",
        "2"
      ],
      "enumTitles": [
        "Any condition",
        "New",
        "Used",
        "New (legacy code 1)",
        "Used (legacy code 2)"
      ],
      "prefill": "any",
      "title": "Condition",
      "type": "string"
    },
    "discountOnly": {
      "default": false,
      "description": "Only show products currently on discount.",
      "prefill": false,
      "title": "Discounted products only",
      "type": "boolean"
    },
    "freeShippingOnly": {
      "default": false,
      "description": "Only show products with the free-shipping offer.",
      "prefill": false,
      "title": "Extra free shipping only",
      "type": "boolean"
    },
    "includeDetails": {
      "default": false,
      "description": "Add condition, stock, variants, description, and rating breakdown to search and category results. Slower and makes one extra request per product.",
      "prefill": false,
      "title": "Include product details",
      "type": "boolean"
    },
    "latestProductDays": {
      "default": "any",
      "description": "Only show products added recently.",
      "editor": "select",
      "enum": [
        "any",
        "7",
        "14",
        "30",
        "90"
      ],
      "enumTitles": [
        "Any time",
        "Last 7 days",
        "Last 14 days",
        "Last 30 days",
        "Last 90 days"
      ],
      "prefill": "any",
      "title": "Listed within",
      "type": "string"
    },
    "maxItems": {
      "default": 100,
      "description": "Maximum number of products to return.",
      "maximum": 6000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max items",
      "type": "integer"
    },
    "minRating": {
      "default": "any",
      "description": "Only show products rated 4 or higher.",
      "editor": "select",
      "enumSuggestedValues": [
        "any",
        "4",
        "4.5",
        "4,5",
        "3"
      ],
      "enumTitles": [
        "Any rating",
        "4 stars and up",
        "4.5 stars (legacy)",
        "4+ (legacy library value)",
        "3 stars (legacy, not supported)"
      ],
      "prefill": "any",
      "title": "Minimum rating",
      "type": "string"
    },
    "mode": {
      "description": "What to scrape.",
      "editor": "select",
      "enumSuggestedValues": [
        "search",
        "categoryBrowse",
        "productDetails",
        "topProducts"
      ],
      "enumTitles": [
        "Search products",
        "Browse a category",
        "Get product details by URL",
        "Top products (legacy)"
      ],
      "prefill": "search",
      "title": "Mode",
      "type": "string"
    },
    "preorder": {
      "default": "any",
      "description": "Filter by ready stock or preorder.",
      "editor": "select",
      "enumSuggestedValues": [
        "any",
        "ready_stock",
        "preorder",
        "true",
        "false"
      ],
      "enumTitles": [
        "Any availability",
        "Ready stock",
        "Preorder",
        "Preorder (legacy)",
        "Ready stock (legacy)"
      ],
      "prefill": "any",
      "title": "Availability",
      "type": "string"
    },
    "priceMax": {
      "description": "Maximum price in Indonesian Rupiah.",
      "maximum": 1000000000,
      "minimum": 0,
      "title": "Max price (IDR)",
      "type": "integer"
    },
    "priceMin": {
      "description": "Minimum price in Indonesian Rupiah.",
      "maximum": 1000000000,
      "minimum": 0,
      "title": "Min price (IDR)",
      "type": "integer"
    },
    "productUrls": {
      "default": [],
      "description": "Tokopedia product page URLs. Numeric IDs alone are not supported.",
      "editor": "stringList",
      "title": "Product URLs (mode=productDetails)",
      "type": "array"
    },
    "searchQueries": {
      "default": [],
      "description": "Keywords to search (mode=search). Example: smartphone, sepatu lari, kopi arabika.",
      "editor": "stringList",
      "prefill": [
        "smartphone"
      ],
      "title": "Search queries",
      "type": "array"
    },
    "searchUrls": {
      "default": [],
      "description": "Tokopedia search or /find/ URLs. Filters and sort already in the URL are applied.",
      "editor": "stringList",
      "title": "Search URLs (mode=search)",
      "type": "array"
    },
    "shopType": {
      "default": "any",
      "description": "Filter by Tokopedia shop type.",
      "editor": "select",
      "enumSuggestedValues": [
        "any",
        "mall",
        "power_shop",
        "2",
        "3"
      ],
      "enumTitles": [
        "Any shop",
        "Mall",
        "Power Shop",
        "Mall (legacy code 2)",
        "Power Shop (legacy code 3)"
      ],
      "prefill": "any",
      "title": "Shop type",
      "type": "string"
    },
    "sortBy": {
      "default": "relevance",
      "description": "Result order.",
      "editor": "select",
      "enumSuggestedValues": [
        "relevance",
        "newest",
        "price_low",
        "price_high",
        "most_reviewed",
        "best_seller",
        "price_asc",
        "price_desc"
      ],
      "enumTitles": [
        "Most relevant",
        "Newest",
        "Price: low to high",
        "Price: high to low",
        "Most reviewed",
        "Best seller (legacy)",
        "Price ascending (legacy)",
        "Price descending (legacy)"
      ],
      "prefill": "relevance",
      "title": "Sort by",
      "type": "string"
    }
  },
  "schemaVersion": 1,
  "title": "Tokopedia Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
productsstringoptionalDataset containing all scraped Tokopedia products.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "One record per Tokopedia product from keyword search, category browse, or product-detail URLs, with pricing, discount, rating, sold count, shop, condition, stock, variants, and images.",
  "properties": {
    "products": {
      "description": "Dataset containing all scraped Tokopedia products.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Tokopedia products",
      "type": "string"
    }
  },
  "title": "Tokopedia Search, Category & Price Drop Scraper Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Tokopedia Products",
      "transformation": {
        "fields": [
          "name",
          "price",
          "originalPrice",
          "discountPercent",
          "shop",
          "shopLocation",
          "rating",
          "sold",
          "condition",
          "productUrl"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Tokopedia Search, Category & Price Drop Scraper

Tokopedia is Indonesia's largest marketplace, and this actor turns its public product pages into a clean dataset. Search by keyword or search URL, browse a category, or paste product URLs to collect prices in Rupiah, discounts, ratings, sold counts, seller details, condition, stock, variants, and images. No account, login, or proxy setup is needed.

What this actor does

  • Search products by keyword or a Tokopedia search/find URL, with Tokopedia's real filters and five real sort orders.
  • Browse categories from a /p/... URL or a numeric category ID.
  • Fetch product details from Tokopedia product URLs: condition, stock, weight, minimum order, variants and child SKUs, description, rating breakdown, and campaign dates.
  • Price-drop view: every record exposes the current price, original price, discount percentage, discount amount, and a priceDropped flag. Tokopedia does not publish historical prices, so this is a current-snapshot view rather than a price history.
  • Overview or detail: keep search results fast, or enable includeDetails to enrich each row with the full product page.
  • Empty fields are omitted from each record instead of being returned as null or blank.

Output per product

Field Description
productId Tokopedia product ID
name Product name
productUrl Direct product page URL
price, priceText Current price in IDR, numeric and as displayed
originalPrice, originalPriceText Pre-discount price when shown
discountPercent, discountAmount Current discount
priceDropped True when the original price is above the current price
currency Always IDR
rating, reviewCount Rating and, in detail mode, review count
sold, soldText Units sold, parsed into a number plus the source label
shop, shopId, shopUrl, shopLocation Seller identity and location
shopTier mall, power_shop, or regular when known
imageUrl, imageUrlOriginal Main image plus the signed source URL. Most normalized links are durable; a minority stay on a signed host and expire.
categoryId, categoryName, categoryPath Category identity and breadcrumb path
labels Promotional and service labels shown on the card
badge Official/Power/Mall badge when one is visible
preorder Whether the listing is a preorder
condition, conditionText NEW/USED and its local display text (detail)
status Product status such as ACTIVE (detail)
stock, minOrder, maxOrder Availability and order limits (detail)
weight, weightUnit Shipping weight (detail)
isVariant, variants, variantChildren Variation axes and child SKUs with their prices and stock (detail)
description Seller description (detail)
specifications Best-effort key/value specifications parsed from the description (detail)
ratingBreakdown Per-star rating counts and percentages (detail)
imageUrls Full gallery of image URLs (detail; mostly durable)
categoryBreadcrumb Category path with names and URLs (detail)
campaignType, campaignEndsAt, campaignDiscountPercent, campaignStockSoldPercent Active campaign details when present (detail)
mode, searchQuery, position, scrapedAt Provenance: mode, query, result position, and scrape time

Input

Field Type Default Description
mode string – search, categoryBrowse, or productDetails
searchQueries array [] (prefill ["smartphone"]) Keywords to search (mode=search)
searchUrls array [] Tokopedia search or /find/ URLs (mode=search)
categoryUrls array [] Tokopedia category URLs (mode=categoryBrowse)
categoryIds array [] Numeric category IDs (mode=categoryBrowse)
productUrls array [] Product page URLs (mode=productDetails)
sortBy string relevance relevance, newest, price_low, price_high, most_reviewed
priceMin, priceMax integer – Price range in IDR
condition string any any, new, used
shopType string any any, mall, power_shop
minRating string any any or 4
city string any Common seller locations, or any
cityId string – Exact Tokopedia city ID(s), comma-separated
latestProductDays string any any, 7, 14, 30, 90
discountOnly boolean false Only discounted products
codOnly boolean false Only cash-on-delivery products
freeShippingOnly boolean false Only products with the free-shipping offer
preorder string any any, ready_stock, preorder
includeDetails boolean false Enrich search/category rows from each product page
maxItems integer 100 Maximum products, 1–6000

Example: search with filters

{
  "mode": "search",
  "searchQueries": ["sepatu lari"],
  "sortBy": "price_low",
  "priceMin": 100000,
  "priceMax": 500000,
  "shopType": "mall",
  "minRating": "4",
  "maxItems": 50
}

Example: browse a category

{
  "mode": "categoryBrowse",
  "categoryUrls": ["https://www.tokopedia.com/p/handphone-tablet/handphone"],
  "sortBy": "newest",
  "maxItems": 100
}

Example: full product details

{
  "mode": "productDetails",
  "productUrls": [
    "https://www.tokopedia.com/pxofficialindonesia/kabel-data-usb-type-c-ultra-fast-charging-pd240w-charger-nylon-braided-laptop-tablet-smartphone-samsung-oppo-huawei-vivo-px-fcc-2m-1736805261334316721"
  ]
}

Use cases

  • Price and discount monitoring — compare current prices, discounts, and campaign end dates across a category or keyword.
  • Seller intelligence — compare shop type, location, sold counts, and ratings across merchants.
  • Assortment planning — browse a category to see the current product mix and pricing ladder.
  • Product research — collect variants, child SKUs, stock, weight, condition, and descriptions for a shortlist.
  • Marketplace analytics — feed clean product records into dashboards, spreadsheets, or a database.

FAQ

Do I need a Tokopedia account or login? No. The actor reads public product, search, and category pages.

What currency are prices in? Indonesian Rupiah (IDR), returned as integers.

What does "price drop" mean here? It means the product currently has a lower price than its displayed original price. Tokopedia does not publish a historical price series, so the actor cannot show a true past price. Run it on a schedule and compare price values to build your own history.

Why are some fields missing? Tokopedia does not show every field on every listing. A product without a discount has no originalPrice; a listing without a description spec block has no specifications. The actor omits missing fields instead of guessing.

Why do some product URLs fail? The actor needs the normal Tokopedia product URL (/{shop}/{product-slug}-{id}). Numeric product IDs alone do not resolve through the public site.

How many products can I get per search? Up to 6,000 products per search slice. Tokopedia caps pagination at that point. For larger sets, split the work by keyword, category, price range, or location.

Can I filter by seller city? Yes. Use the location dropdown for common cities, or cityId for an exact Tokopedia city ID from a Tokopedia search URL.

Are image links permanent? The actor returns a normalized image URL and keeps the original signed URL in imageUrlOriginal. Most normalized links are durable, but a minority remain on Tokopedia's signed host; those expire within hours. Use imageUrlOriginal promptly or re-run the actor to refresh them.

Is this affiliated with Tokopedia? No. This is an independent third-party actor that reads publicly available Tokopedia pages and is not operated by or affiliated with Tokopedia.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build 0xhqWRRyaZ3YnEnaW. Documentation is regenerated from the default published build; private drafts are not included.