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.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | optional | What to scrape. |
searchQueries | array | optional | Keywords to search (mode=search). Example: smartphone, sepatu lari, kopi arabika. |
searchUrls | array | optional | Tokopedia search or /find/ URLs. Filters and sort already in the URL are applied. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | optional | What to scrape. |
searchQueries | array | optional | Keywords to search (mode=search). Example: smartphone, sepatu lari, kopi arabika. |
searchUrls | array | optional | Tokopedia search or /find/ URLs. Filters and sort already in the URL are applied. |
categoryUrls | array | optional | Tokopedia category URLs such as https://www.tokopedia.com/p/handphone-tablet/handphone. |
categoryIds | array | optional | Numeric Tokopedia category IDs, for example 24 for Handphone. |
productUrls | array | optional | Tokopedia product page URLs. Numeric IDs alone are not supported. |
sortBy | string | optional | Result order. |
priceMin | integer | optional | Minimum price in Indonesian Rupiah. |
priceMax | integer | optional | Maximum price in Indonesian Rupiah. |
condition | string | optional | Filter by product condition. |
shopType | string | optional | Filter by Tokopedia shop type. |
minRating | string | optional | Only show products rated 4 or higher. |
city | string | optional | Filter by a common seller location. Leave Any for all of Indonesia. |
cityId | string | optional | Exact Tokopedia city ID(s), comma-separated. Overrides the location dropdown. |
latestProductDays | string | optional | Only show products added recently. |
discountOnly | boolean | optional | Only show products currently on discount. |
codOnly | boolean | optional | Only show products that offer cash on delivery. |
freeShippingOnly | boolean | optional | Only show products with the free-shipping offer. |
preorder | string | optional | Filter by ready stock or preorder. |
includeDetails | boolean | optional | Add condition, stock, variants, description, and rating breakdown to search and category results. Slower and makes one extra request per product. |
maxItems | integer | optional | Maximum 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.
| Field | Type | Required | Description |
|---|---|---|---|
products | string | optional | Dataset 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
priceDroppedflag. 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
includeDetailsto 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.
Source build 0xhqWRRyaZ3YnEnaW. Documentation is regenerated from the default published build; private drafts are not included.