TikTok Shop Product Data Scraper

Enrich public TikTok Shop product URLs and IDs with prices, variants, stock, sellers, ratings, sales signals and media.

Data fields

FieldTypeDescription
productIdstringValue exported as productId.
productUrlstringValue exported as productUrl.
titlestringValue exported as title.
descriptionstring | nullValue exported as description.
categorystring | nullValue exported as category.
brandNamestring | nullValue exported as brandName.
pricenumber | nullValue exported as price.
originalPricenumber | nullValue exported as originalPrice.

Input preview

productUrlsTikTok Shop product URLs
productIdsTikTok Shop product IDs
regionStorefront market
maxItemsMaximum products
proxyConfigurationProxy configuration

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Enrich public TikTok Shop product URLs or IDs with current US prices, variants, availability signals, seller metadata, media, ratings, and visible sales signals. Built for marketplace sellers, ecommerce analysts, affiliate teams, and product-monitoring workflows.

Who is it for?

  • Marketplace sellers tracking price, stock, and seller changes across a known catalog.
  • Ecommerce analysts comparing normalized product and variant attributes.
  • Affiliate teams screening known public products without private creator analytics.
  • Developers and agencies loading public product details into databases, dashboards, and automations.

Common use cases

  1. Refresh a product shortlist before a merchandising review.
  2. Compare SKU prices and public availability across affiliate candidates.
  3. Monitor seller and visible sales signals for selected products.
  4. Enrich product IDs discovered by the separate TikTok Shop Search Scraper.

Input

{
  "productUrls": ["https://shop.tiktok.com/us/pdp/1732526446300467962"],
  "productIds": ["1732600742000628072"],
  "region": "US",
  "maxItems": 20
}
Setting Description Default
productUrls Public TikTok Shop product pages []
productIds Numeric product IDs when URLs are unavailable []
region Verified storefront market (US) US
maxItems Maximum unique records saved (1–500) Number of unique inputs
proxyConfiguration Optional region-matched Apify Proxy settings US residential

Provide at least one URL or ID. Inputs are deduplicated by region and product ID. A URL whose market differs from region is rejected rather than silently rewritten.

Output

Each successful target produces one analysis-ready record:

{
  "productId": "1732526446300467962",
  "productUrl": "https://shop.tiktok.com/us/pdp/1732526446300467962",
  "title": "Public product title",
  "price": 16.99,
  "originalPrice": 22.99,
  "currency": "USD",
  "variants": [{"skuId":"1732526500000000000","name":"Blue","stock":42,"price":16.99,"currency":"USD"}],
  "sellerName": "Public shop name",
  "rating": null,
  "reviewCount": null,
  "soldCount": 1200,
  "requestedInput": "1732526446300467962",
  "region": "US",
  "scrapedAt": "2026-09-29T12:00:00Z",
  "warnings": ["Public source did not expose review count."]
}

Available fields include description, category hierarchy, images, videos, variant properties and stock, shipping estimates, seller rating/followers/sold signals, and product rating/review signals when publicly exposed. On current product pages, soldCount represents the product’s visible sales and sellerSoldCount represents sales across the shop. Out-of-stock variants retain their public prices and a stock value of zero. Temporary access challenges receive a small, bounded number of retries.

Missing optional values remain null and are described in warnings; the Actor never invents unavailable data.

Behavior and limits

  • Uses public anonymous TikTok Shop product pages with a first-party public JSON fallback.
  • Verifies the returned product ID and USD market before saving a record.
  • Continues a batch when one product is inaccessible; inaccessible products are reported in the run summary and are not fabricated.
  • Stops at maxItems, removes duplicate IDs deterministically, and preserves completed IDs for run recovery.
  • Supports public US storefront data only in this release. No login, buyer/order data, Seller Center analytics, review-author profiles, inferred GMV, or CAPTCHA bypass.

Example inputs

One product URL

{"productUrls":["https://shop.tiktok.com/us/pdp/1732526446300467962"],"region":"US","maxItems":1}

A deduplicated ID shortlist

{"productIds":["1732526446300467962","1732600742000628072"],"region":"US","maxItems":2}

For recurring monitoring, save a stable list as an Apify Task and schedule it. Products unavailable in the selected storefront are reported without fabricated rows.

Input recipes

  • Enrich one product: provide one productUrls or productIds value, set region to US, and use maxItems: 1.
  • Monitor a product catalog: provide a stable list of known product URLs or IDs, set a matching maxItems, and save the input as your own private Apify Task for scheduled refreshes.
  • Compare affiliate products: submit a bounded candidate list and export the normalized dataset for side-by-side analysis.

Replace the example IDs or URLs with your own public TikTok Shop products. Saved tasks are private unless you explicitly publish them, so this README does not link to private task pages.

API usage

cURL

curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~tiktok-shop-product-data-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"productIds":["1732526446300467962"],"region":"US","maxItems":1}'

JavaScript

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/tiktok-shop-product-data-scraper').call({
  productIds: ['1732526446300467962'], region: 'US', maxItems: 1,
});

Python

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/tiktok-shop-product-data-scraper').call(run_input={
    'productIds': ['1732526446300467962'],
    'region': 'US',
    'maxItems': 1,
})
print(run['defaultDatasetId'])

Integrations and exports

Download the dataset as JSON, CSV, Excel, XML, or RSS, or consume it through the Apify API. Use webhooks to notify a downstream workflow after each run. Dataset rows are flat for common analytics columns while variants, images, videos, and warnings retain structured arrays.

Use from MCP at https://mcp.apify.com/?tools=fetch_cat/tiktok-shop-product-data-scraper.

Support

Open an issue on the Actor page with the input, expected behavior, and run link. Never include passwords, cookies, or private account data.

Common questions

Questions and answers reused from the canonical actor README.

Does it require a TikTok account?

No. It uses public anonymous product surfaces and does not accept login credentials.

Can it discover products by keyword?

No. Use the related US TikTok Shop Search Scraper for discovery, then pass known URLs or IDs here for detail enrichment.

Why is a field null or listed in warnings?

Public fields vary by product and session. The Actor returns only what the ID-bound source exposes and records important omissions instead of guessing.

What happens when one product is unavailable?

The Actor continues the remaining bounded batch. It does not save a fabricated row for the unavailable target. If every target fails, the run fails with a concise diagnostic.

Can I use API, MCP, schedules, or webhooks?

Yes. Call it with the Apify API clients or MCP, save the input as a Task for schedules, and connect run completion through webhooks.