Tokopedia Product Scraper avatar

Tokopedia Product Scraper

Under maintenance

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Tokopedia Product Scraper

Tokopedia Product Scraper

Under maintenance

Efficiently scrape product data from Tokopedia search results including prices, shop details, sales metrics, and more.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Coding Frontned

Coding Frontned

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Extracts source-backed products from public Tokopedia search pages with a rendered browser. Output includes the canonical product URL, visible pricing and commerce metadata, shop details, image, query/sort/page provenance, and capture time. Empty optional values and thin records are not stored.

{
"searchQuery": "wireless headphones",
"sortBy": "relevance",
"maxItems": 10,
"maxPages": 1,
"proxyConfiguration": { "useApifyProxy": false }
}

Direct access is the default. Configure Apify Proxy or custom proxy URLs only when required. maxItems and maxPages are hard bounds; navigation is sequential and duplicates are removed by canonical product URL. CAPTCHA, access-denied, and rate-limit pages fail the run instead of becoming data.

Searches rendered Tokopedia product results and emits only rich, source-backed product records.

Input

FieldRequiredDescription
searchQueryYesProduct keyword for Tokopedia search.
sortByNorelevance, price_asc, price_desc, newest, or most_reviewed; defaults to relevance.
maxItemsNoUnique record cap from 1 to 600; defaults to 60.
maxPagesNoBounded search-page count from 1 to 20; defaults to 10.
proxyConfigurationNoApify Proxy settings, custom HTTP(S) proxy URLs, or { "useApifyProxy": false } for explicit direct mode. Direct access is the default everywhere.

The input is a strict JSON object. Unknown keys, missing queries, invalid sort modes, and invalid limits/proxy settings are rejected.

Output

Every item includes name, canonical url, source, sourcePageUrl, searchQuery, sequential position, and scrapedAt. A record is pushed only when it has at least three additional visible product/shop fields. Depending on the rendered card, these include price, original price, discount, rating, sold text, shop name, city, badge, and image URL.

Fields are omitted when unavailable; the actor never invents numeric zeroes, currency, product IDs, URLs, city, badges, or prices. Product URLs are canonicalized/deduplicated, pagination is bounded, and challenge/blocked/zero-result runs fail rather than silently succeeding.

Structure

  • src/main.js owns only Apify lifecycle and input/proxy setup.
  • src/crawl.js owns the bounded Playwright crawl and pagination.
  • src/extract.js owns rendered-card extraction and challenge detection.
  • src/normalize.js owns canonicalization, sanitation, and rich-record validation.
  • src/schema/input.js owns input validation and URL construction.
  • test/input.test.js covers input validation and URL normalization.

Example input

{
"searchQuery": "wireless headphones",
"sortBy": "relevance",
"maxItems": 2,
"maxPages": 2
}

Example output

{
"name": "Example Wireless Headphones",
"url": "https://www.tokopedia.com/example-shop/example-wireless-headphones",
"price": "Rp799.000",
"originalPrice": "Rp999.000",
"discount": "20%",
"rating": "4.8",
"sold": "100+ terjual",
"shopName": "Example Shop",
"shopCity": "Jakarta",
"badge": "Official Store",
"imageUrl": "https://images.tokopedia.net/example.jpg",
"source": "tokopedia.com",
"sourcePageUrl": "https://www.tokopedia.com/search?st=product&q=wireless%20headphones",
"searchQuery": "wireless headphones",
"sortBy": "relevance",
"page": 1,
"pagePosition": 1,
"position": 1,
"scrapedAt": "2026-08-18T12:00:00.000Z"
}