# TikTok Shop Product Details Scraper: Price, Sold & Reviews (`serenido/tiktok-shop-product-details`) Actor

Full TikTok Shop product data from links or ids: price range, sold count, rating and review count, every variant with price and stock, shipping fee and delivery days, shop rating and followers, seller business. No login.

- **URL**: https://apify.com/serenido/tiktok-shop-product-details.md
- **Developed by:** [Serenido](https://apify.com/serenido) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 1,000 product saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

> ⭐ If this tool saves you time, please leave a quick review on this page. It helps other people find it. Found a problem? Open an issue in the Issues tab and we'll fix it fast.

### What does TikTok Shop Product Details Scraper do?

Paste TikTok Shop product links (or just product ids) and get one clean row per product: price range, original price, sold count, rating and review count, every variant with its own price and stock, shipping fee and delivery days, shop rating and followers, the seller's business name and address, specifications, images and video. Download as Excel, CSV or JSON, or use the API.

No login, no browser, no cookies from you.

### Why this one?

- **Every variant.** Each SKU with its options (Color, Size...), price, original price, discount, stock and why it cannot be bought ("This item is out of stock"). Checked by hand against the real page: the sizes and colors the page greys out are the ones marked unavailable here.
- **Shop and seller facts.** Shop name, rating, followers, total sold, number of products, plus the business name and address TikTok Shop shows under "Seller information".
- **Shipping as the page shows it.** Free shipping, the fee and the fee before discount, delivery days, the delivery date window and the shipping method.
- **Free rows for problems.** Products that are not for sale, not sold in the country, bad links and pages that could not be loaded come back as rows with a `status` and a message. **They are not charged.**
- **Fast and light.** It reads TikTok Shop's light phone page by default. Turn on reviews only when you need them.
- **Tested.** 157 links in one run: 98 products saved, 59 free rows (not for sale, not available in the US, or blocked), 0 wrong rows, in about 4 minutes.

### What data do you get?

| Group | Fields |
|---|---|
| Product | productId, url, region, title, images, video, description, descriptionImages, specifications, categories, categoryId |
| Price | priceMin, priceMax, priceText, originalPriceMin, currency |
| Demand | soldCount, rating, reviewCount, ratingBreakdown (with reviews on) |
| Stock | availability (on sale, sold out), inStock, totalStock, skuCount, inStockSkus |
| Variants (`skus`) | skuId, name, options, price, originalPrice, discountPct, stock, available, unavailableReason, purchaseLimit, image |
| Variant names (`variantProperties`) | every option (Color, Size...) with its values and images |
| Shipping | freeShipping, shippingFee, shippingFeeBeforeDiscount, deliveryDaysMin, deliveryDaysMax, estimatedDelivery, shippingMethod, shippingNote |
| Shop | shopName, shopId, shopUrl, shopRating, shopFollowers, shopSoldCount, shopProductCount, shopReviewCount, businessName, businessAddress |
| Extras | promotionLabels and recentReviews (rating, text, date, variant, verified purchase, country, images; reviewer names left out), both with reviews on |

### How much does it cost?

You pay per product saved with `status: "ok"`. Check the **Pricing** tab for the current price. Proxies and platform costs are included. Problem rows are free.

### How to use it

1. Paste product links or ids into **Product links or ids**, one per line. Links from the TikTok app or website (`www.tiktok.com/shop/pdp/...`, `shop.tiktok.com/us/pdp/...`, `shop.tiktok.com/view/product/...`) all work.
2. Pick the **Country for product ids** (United States or United Kingdom). Links with `/us/` or `/gb/` keep their own country.
3. Optional: turn on **Add recent reviews and star breakdown**.
4. Click **Start**. Download the results or connect them to Google Sheets, Make, Zapier or your app.

### Input example

```json
{
  "productUrls": [
    "https://www.tiktok.com/shop/pdp/goli-ashwagandha-gummies-with-vitamin-d-ksm-66-vegan-non-gmo/1729587769570529799",
    "1729403106419642622"
  ],
  "region": "US",
  "includeReviews": false
}
```

### Output example

Shortened: real rows carry every variant, image and specification.

```json
{
  "status": "ok",
  "productId": "1729403106419642622",
  "url": "https://shop.tiktok.com/us/pdp/1729403106419642622",
  "region": "US",
  "title": "SHOWITTY Womens High Waisted Tummy Control 1/3 Pack Leggings with Pockets",
  "priceMin": 27.3,
  "priceMax": 52,
  "priceText": "$27.30 - 52.00",
  "originalPriceMin": 31.19,
  "currency": "USD",
  "soldCount": 183508,
  "rating": 4.6,
  "reviewCount": 21177,
  "availability": "on sale",
  "inStock": true,
  "totalStock": 2874,
  "skuCount": 140,
  "inStockSkus": 55,
  "skus": [
    {"skuId": "1732753894022025470", "name": "Black/ Black/ Black (Soft Touch) / S/M",
     "options": {"Color": "Black/ Black/ Black (Soft Touch)", "Size": "S/M"},
     "price": 44.2, "originalPrice": 58.5, "discountPct": 24, "stock": 487, "available": true}
  ],
  "freeShipping": true,
  "shippingFee": 0,
  "shippingFeeBeforeDiscount": 5.99,
  "deliveryDaysMin": 4,
  "deliveryDaysMax": 7,
  "estimatedDelivery": "Nov 1 - Nov 4",
  "shopName": "Showitty",
  "shopRating": 4.6,
  "shopFollowers": 77975,
  "shopSoldCount": 1109384,
  "businessName": "Nayun Technology Co., Ltd",
  "businessAddress": "Colorado,United States",
  "categories": ["Womenswear & Underwear", "Women's Bottoms", "Leggings"],
  "scrapedAt": "2026-10-28T17:25:40Z"
}
```

A product TikTok Shop does not sell in the chosen country looks like this, and costs nothing:

```json
{"status": "unavailable_in_region", "productId": "1731049374377153248", "region": "US", "message": "TikTok Shop says this product is not available in US (said so 1 time in 8 tries on different connections, never showed the product). It may be sold only in another country or taken down."}
```

### Status values

| status | Meaning | Charged |
|---|---|---|
| ok | Full product data (on sale or sold out) | Yes |
| not_for_sale | TikTok Shop shows the product but it cannot be bought or shipped to the country right now. The row still has the product data | No |
| unavailable_in_region | TikTok Shop says the product is not available in the country | No |
| invalid_link | Not a TikTok Shop product link or id | No |
| failed | TikTok Shop showed a security check on every try. Run it again later | No |

### Good to know

- **Prices can differ between visits.** Some sellers' prices change from one visit to the next, even minutes apart. Each row shows the price one visitor saw at `scrapedAt`.
- **Price range:** `priceMin` and `priceMax` are the range shown at the top of the page. Each variant's own price is in `skus`; on a few products one variant costs a little less than the range shown.
- **Sold count:** TikTok Shop's own number: items sold since the product was listed, without returned items.
- **Delivery days** are TikTok Shop's estimate for the visitor's location, so they can differ by a day or two between runs.
- **Star breakdown:** the five star counts are TikTok Shop's review summary and can add up to a little more than `reviewCount`.
- **Countries:** United States and United Kingdom. Prices come in the shop's currency (USD or GBP).
- **Image and video links** come from TikTok's servers and can stop working after a while. Download them if you need to keep them.
- **Proxy:** keep the default. Residential IPs from the shop's country are used automatically.

### Use cases

- **Product research:** sold counts, ratings and prices of winning TikTok Shop products.
- **Price and stock monitoring:** schedule runs to follow prices, discounts and stock per variant.
- **Competitor and seller checks:** shop rating, followers, total sales and the seller's business details.
- **Dropshipping and sourcing:** compare TikTok Shop prices with AliExpress or 1688 costs.
- **Listings and AI:** titles, specs, images and variant tables ready for your store or an AI pipeline.

### Is it legal?

It collects only public product information that TikTok Shop shows to any logged-out visitor. It does not log in, solve captchas or collect personal data (reviewer names are left out). Check that your use follows TikTok's terms and the law where you are.

### More tools for sellers and dropshippers

- **[AliExpress Product Details Scraper](https://apify.com/serenido/aliexpress-product-details)**: the same kind of row for AliExpress products, with shipping cost to your country.
- **[1688 Product Details Scraper](https://apify.com/serenido/1688-product-details)**: factory prices on 1688.com, the Chinese wholesale site: price tiers, every variant with stock, and supplier facts, in English with USD prices.
- **[AliExpress Search Scraper](https://apify.com/serenido/aliexpress-search-reliable)**: search AliExpress by keyword and get price, discount and exact order count for every result.

# Actor input Schema

## `productUrls` (type: `array`):

One per line. Any TikTok Shop product link (www.tiktok.com/shop/pdp/..., shop.tiktok.com/us/pdp/..., shop.tiktok.com/view/product/...) or just the product id, for example 1729587769570529799.

## `region` (type: `string`):

The TikTok Shop country used for bare product ids and links without a country. Links with /us/ or /gb/ keep their own country.

## `includeReviews` (type: `boolean`):

Adds the recent reviews shown on the product page (rating, text, date, variant, verified purchase; reviewer names are left out), the number of 1 to 5 star reviews and promotion labels. Loads the full desktop page, so runs take longer.

## `maxItems` (type: `integer`):

Stop after this many products from the list.

## `maxConcurrency` (type: `integer`):

How many products load at the same time.

## `proxy` (type: `object`):

Keep the default: residential IPs from the shop's country are used automatically.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.tiktok.com/shop/pdp/goli-ashwagandha-gummies-with-vitamin-d-ksm-66-vegan-non-gmo/1729587769570529799",
    "1729403106419642622"
  ],
  "region": "US",
  "includeReviews": false,
  "maxItems": 1000,
  "maxConcurrency": 8,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `products` (type: `string`):

No description

## `all` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "productUrls": [
        "https://www.tiktok.com/shop/pdp/goli-ashwagandha-gummies-with-vitamin-d-ksm-66-vegan-non-gmo/1729587769570529799",
        "1729403106419642622"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("serenido/tiktok-shop-product-details").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "productUrls": [
        "https://www.tiktok.com/shop/pdp/goli-ashwagandha-gummies-with-vitamin-d-ksm-66-vegan-non-gmo/1729587769570529799",
        "1729403106419642622",
    ],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("serenido/tiktok-shop-product-details").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "productUrls": [
    "https://www.tiktok.com/shop/pdp/goli-ashwagandha-gummies-with-vitamin-d-ksm-66-vegan-non-gmo/1729587769570529799",
    "1729403106419642622"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call serenido/tiktok-shop-product-details --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,serenido/tiktok-shop-product-details"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/femyLwJjOfMxnfdWj/builds/h9KgBCfZTrhCB5brV/openapi.json
