{
  "openapi": "3.0.1",
  "info": {
    "title": "Tokopedia Scraper · Products, Shops & Reviews",
    "description": "Scrape Tokopedia products from keywords, search URLs, categories, shops or product links. Get IDR prices, discounts, exact sold counts, ratings, specs, every variant with its own price and stock, reviews, seller stats and TikTok Shop IDs. Monitor mode returns only price changes.",
    "version": "0.1",
    "x-build-id": "z9YIyepbgc1ehDBby"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~tokopedia-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-tokopedia-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/memo23~tokopedia-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-tokopedia-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/memo23~tokopedia-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-tokopedia-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "outputMode": {
            "title": "What each row is",
            "enum": [
              "products",
              "reviews"
            ],
            "type": "string",
            "description": "Products: one row per product, with optional details, nested reviews and shop stats. Reviews: one row per written review with the product it belongs to; a shop URL gives the shop's reviews across all its products. Review filters and sort apply, and each row is billed as a review.",
            "default": "products"
          },
          "keywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "One search per line, typed as you would in Tokopedia's search bar. Indonesian terms return the most results (sepatu, tas wanita, laptop gaming).",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Tokopedia URLs",
            "type": "array",
            "description": "Any mix of search results (tokopedia.com/search?q=...), category pages (tokopedia.com/p/...), shops (tokopedia.com/shop-name, including its /product and /etalase/... tabs), single products (tokopedia.com/shop-name/product-name) and bare product ids such as 11869486942. Filters already in a URL are kept.",
            "items": {
              "type": "string"
            }
          },
          "scrapeDetails": {
            "title": "Scrape full product details",
            "type": "boolean",
            "description": "Open each product page for the description, specifications, all images and videos, every variant with its own price and stock, exact sold count, per-star rating breakdown, weight, condition, stock, wholesale tiers and flash-sale campaign. Billed as a product-detail event on top of the product. Product URLs always get full details.",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Reviews per product",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Written reviews to attach to each product (text, star rating, variant bought, date, photos, seller reply). 0 turns reviews off. Each review is billed as a review event. In review-rows mode 0 means 100 per product.",
            "default": 0
          },
          "reviewSort": {
            "title": "Review order",
            "enum": [
              "newest",
              "most_helpful",
              "highest_rating",
              "lowest_rating"
            ],
            "type": "string",
            "description": "Which reviews come first when reviews are on. Lowest rating first is the quickest way to collect complaints.",
            "default": "newest"
          },
          "reviewStars": {
            "title": "Only reviews with these stars",
            "type": "array",
            "description": "Keep only reviews with these star ratings, e.g. 1 and 2 for complaints. Leave empty for all ratings. Allowed values: 1, 2, 3, 4, 5.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ]
            }
          },
          "reviewsWithMediaOnly": {
            "title": "Only reviews with photos or video",
            "type": "boolean",
            "description": "Keep only reviews that include buyer photos or videos.",
            "default": false
          },
          "includeShopInfo": {
            "title": "Add shop stats",
            "type": "boolean",
            "description": "Add the seller's followers, active products, total items sold, completed transactions, open-since date, district and shop rating with its per-star breakdown. Looked up once per shop and not billed separately.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "reviews",
              "newest",
              "price_high",
              "price_low"
            ],
            "type": "string",
            "description": "Tokopedia's sort order for search and category results. Tokopedia no longer offers a best-selling sort; most reviews brings the best sellers to the top.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Minimum price (IDR)",
            "minimum": 0,
            "type": "integer",
            "description": "Only products at or above this price in rupiah."
          },
          "maxPrice": {
            "title": "Maximum price (IDR)",
            "minimum": 0,
            "type": "integer",
            "description": "Only products at or below this price in rupiah."
          },
          "ratingFourPlus": {
            "title": "Rated 4 stars and up",
            "type": "boolean",
            "description": "Tokopedia's rating filter: only products rated 4 or higher.",
            "default": false
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "any",
              "new",
              "used"
            ],
            "type": "string",
            "description": "New or used items.",
            "default": "any"
          },
          "shopType": {
            "title": "Seller type",
            "enum": [
              "any",
              "official_store",
              "power_shop"
            ],
            "type": "string",
            "description": "Limit results to Official Stores (brand and authorised sellers) or Power Shop sellers.",
            "default": "any"
          },
          "codOnly": {
            "title": "Cash on delivery only",
            "type": "boolean",
            "description": "Only products that can be paid on delivery (COD).",
            "default": false
          },
          "discountedOnly": {
            "title": "Discounted only",
            "type": "boolean",
            "description": "Only products with a price cut.",
            "default": false
          },
          "deliveryType": {
            "title": "Delivery speed",
            "enum": [
              "any",
              "instant",
              "same_day"
            ],
            "type": "string",
            "description": "Tokopedia's delivery-speed filter: products that can arrive instantly or the same day (as seen from central Jakarta).",
            "default": "any"
          },
          "minRating": {
            "title": "Minimum rating",
            "enum": [
              "0",
              "3",
              "3.5",
              "4",
              "4.5",
              "4.8"
            ],
            "type": "string",
            "description": "Drop products rated below this. Finer than Tokopedia's own 4-star filter; applied after the search, so products without a rating are dropped too.",
            "default": "0"
          },
          "stockType": {
            "title": "Stock",
            "enum": [
              "any",
              "ready_stock",
              "preorder"
            ],
            "type": "string",
            "description": "Ready-stock items or pre-order items.",
            "default": "any"
          },
          "listedWithinDays": {
            "title": "Listed within",
            "enum": [
              "any",
              "7",
              "14",
              "30",
              "90"
            ],
            "type": "string",
            "description": "Only products added recently.",
            "default": "any"
          },
          "locations": {
            "title": "Seller location",
            "type": "array",
            "description": "Only sellers shipping from these areas: Jakarta, Jabodetabek, Bandung, Medan, Surabaya or any province. Pick several to combine them.",
            "items": {
              "type": "string",
              "enum": [
                "DKI Jakarta",
                "Jabodetabek",
                "Bandung",
                "Medan",
                "Surabaya",
                "Bali",
                "Banten",
                "Bengkulu",
                "D.I. Aceh",
                "D.I. Yogyakarta",
                "Gorontalo",
                "Jambi",
                "Jawa Barat",
                "Jawa Tengah",
                "Jawa Timur",
                "Kalimantan Barat",
                "Kalimantan Selatan",
                "Kalimantan Tengah",
                "Kalimantan Timur",
                "Kalimantan Utara",
                "Kepulauan Bangka Belitung",
                "Kepulauan Riau",
                "Lampung",
                "Maluku",
                "Maluku Utara",
                "Nusa Tenggara Barat",
                "Nusa Tenggara Timur",
                "Papua",
                "Papua Barat",
                "Riau",
                "Sulawesi Barat",
                "Sulawesi Selatan",
                "Sulawesi Tengah",
                "Sulawesi Tenggara",
                "Sulawesi Utara",
                "Sumatera Barat",
                "Sumatera Selatan",
                "Sumatera Utara"
              ]
            }
          },
          "cityIds": {
            "title": "Seller city ids (advanced)",
            "type": "string",
            "description": "Tokopedia city ids for cities not in the list above, comma separated. Apply a city filter on tokopedia.com and copy the fcity value from the address bar."
          },
          "categoryId": {
            "title": "Category id (advanced)",
            "type": "string",
            "description": "Narrow keyword searches to one Tokopedia category: the number after sc= in a filtered search URL. To scrape a whole category, paste its /p/... URL above instead."
          },
          "convertToCurrency": {
            "title": "Also show prices in",
            "enum": [
              "none",
              "USD",
              "EUR",
              "GBP",
              "SGD",
              "MYR",
              "AUD",
              "JPY",
              "CNY",
              "KRW",
              "HKD",
              "INR",
              "THB",
              "PHP",
              "CAD",
              "CHF"
            ],
            "type": "string",
            "description": "Add convertedPrice and convertedOriginalPrice in this currency, using the day's European Central Bank rate. Rupiah prices stay in price and originalPrice.",
            "default": "none"
          },
          "monitorMode": {
            "title": "Monitor mode",
            "enum": [
              "off",
              "price-changes",
              "all-changes",
              "new-only"
            ],
            "type": "string",
            "description": "The first run returns everything and saves it as the baseline. Later runs with the same monitor name return only new products and products whose watched fields changed, with the previous values and the price difference. \"New products only\" ignores changes. Stock and exact sales need full product details on.",
            "default": "off"
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of the baseline to compare against. Keep it the same on every scheduled run of the same watch. Left empty, a name is made from your keywords, URLs and filters, so changing any of them starts a new baseline."
          },
          "emitRemoved": {
            "title": "Report removed products",
            "type": "boolean",
            "description": "Also return one row (changeType \"removed\") for each tracked product that a later run no longer finds: delisted, sold out of the results, or no longer matching your filters. Only runs that read every keyword and URL to the end report removals; a run stopped by Maximum products, a per-source cap or Tokopedia's 6,000-result limit does not.",
            "default": false
          },
          "webhookUrl": {
            "title": "Webhook URL for changes",
            "type": "string",
            "description": "Optional. After each monitor run that found changes (never the first run), the changed products are POSTed here as JSON: Slack, Zapier, Make or your own endpoint."
          },
          "maxItems": {
            "title": "Maximum products",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many products across all keywords and URLs (review rows in review-rows mode). Tokopedia serves up to 6,000 results per search; split a large search by price range or location to go further.",
            "default": 100
          },
          "maxItemsPerSource": {
            "title": "Maximum products per keyword or URL",
            "minimum": 1,
            "type": "integer",
            "description": "Optional cap for each keyword or URL, so one broad search cannot use up the whole run. Leave empty for no per-source cap."
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Requests in flight at once. The default is fast and safe; lower it if you see retries in the log.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify's default datacenter proxy works for Tokopedia and costs nothing extra. Switch to RESIDENTIAL only if runs start seeing retries.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}