# TikTok Shop Scraper (No Login) - Sales & Stock in 10 Countries (`headply/tiktok-shop-scraper`) Actor

Scrape TikTok Shop products without an account in the US, UK, Singapore, Malaysia, Thailand, Philippines, Vietnam, Indonesia, Mexico and Japan: price, units sold, stock per variant, ratings, reviews, shipping and shop stats. By product URL, keyword or category, with a scheduled 'what changed' mode.

- **URL**: https://apify.com/headply/tiktok-shop-scraper.md
- **Developed by:** [Mayowa Ogedengbe](https://apify.com/headply) (community)
- **Categories:** E-commerce, Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.75 / 1,000 products

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

## TikTok Shop Scraper: products, units sold, stock and prices in 10 countries

See what is actually selling on TikTok Shop. Get the price, **units sold**, **stock for every variant**, rating,
reviews, shipping and shop stats for any TikTok Shop product in the **US, UK, Singapore, Malaysia, Thailand,
Philippines, Vietnam, Indonesia, Mexico and Japan**. Find products by keyword or category, or paste product links.
No TikTok account, no login, no cookies.

#### ▶ Watch the full walkthrough (4 min)

[![TikTok Shop Scraper: full walkthrough](https://i.ytimg.com/vi/qEDIx_48414/hqdefault.jpg)](https://youtu.be/qEDIx_48414)

Built for **product research, competitor tracking and sales monitoring**: run it once to size up a niche, or put it
on a schedule and get only the products whose sales, stock or price changed since the last run.

### What you get for every product

| | |
|---|---|
| **Sales** | Units sold (TikTok Shop's own counter), rating, number of reviews, reviews per star |
| **Price** | Current price, original price and discount, highest variant price, currency |
| **Stock** | Stock for every variant (color, size, model...), total stock, in-stock flag, purchase limit |
| **Product** | Title, images, description (text and description images), specifications, category path, brand |
| **Shop** | Shop name and link, shop rating, shop units sold, shop reviews, number of products, followers |
| **Shipping** | Shipping fee, free-shipping flag, delivery days and estimated delivery dates |
| **Reviews** | Up to 5 recent reviews: rating, text, date, variant bought, verified purchase, photos |
| **Promotion** | For keyword results: the TikTok video promoting the product (creator, plays, likes) |

### Countries

| Country | Product links / IDs | Keywords | Categories | Currency |
|---|---|---|---|---|
| 🇺🇸 United States | ✅ | ✅ | ✅ | USD |
| 🇬🇧 United Kingdom | ✅ | — | ✅ | GBP |
| 🇸🇬 Singapore | ✅ | — | ✅ | SGD |
| 🇲🇾 Malaysia | ✅ | — | ✅ | MYR |
| 🇹🇭 Thailand | ✅ | — | ✅ | THB |
| 🇵🇭 Philippines | ✅ | — | ✅ | PHP |
| 🇻🇳 Vietnam | ✅ | — | ✅ | VND |
| 🇮🇩 Indonesia (Shop | Tokopedia) | ✅ | — | ✅ | IDR |
| 🇲🇽 Mexico | ✅ | — | ✅ | MXN |
| 🇯🇵 Japan | ✅ | — | ✅ | JPY |

**Coming in the next version:** Germany, France, Spain, Italy, Ireland and Brazil.

Keyword search uses TikTok Shop's US keyword pages; for other countries, use categories or product links.

### TikTok Shop scraper by country

The same Actor covers every country below: pick the country in the input (or paste a product link from that country) and the results come back in the local currency, with units sold, stock per variant, prices, ratings, reviews, shipping and shop stats. No login in any country.

#### TikTok Shop US scraper

Scrape TikTok Shop United States products without logging in: keywords such as `stanley cup`, categories, or product links. Prices in USD.

```json
{"region": "us", "keywords": ["stanley cup"], "maxProductsPerSource": 25}
```

#### TikTok Shop UK scraper

Scrape TikTok Shop United Kingdom products without logging in: UK categories or product links (`shop.tiktok.com/gb/pdp/...`). Prices in GBP.

```json
{"region": "gb", "categories": ["Beauty & Personal Care"], "maxProductsPerSource": 50}
```

#### TikTok Shop Malaysia scraper

Scrape TikTok Shop Malaysia products without logging in: Malaysian categories or product links (`shop.tiktok.com/my/pdp/...`). Prices in MYR.

```json
{"region": "my", "categories": ["Phones & Electronics"], "maxProductsPerSource": 50}
```

#### TikTok Shop Indonesia scraper

Scrape TikTok Shop Indonesia (Shop | Tokopedia) products without logging in: Indonesian categories or product links (`shop-id.tokopedia.com/pdp/...`). Prices in IDR.

```json
{"region": "id", "categories": ["Beauty & Personal Care"], "maxProductsPerSource": 50}
```

#### TikTok Shop Philippines scraper

Scrape TikTok Shop Philippines products without logging in: Philippine categories or product links (`shop.tiktok.com/ph/pdp/...`). Prices in PHP.

```json
{"region": "ph", "categories": ["Womenswear & Underwear"], "maxProductsPerSource": 50}
```

#### TikTok Shop Thailand scraper

Scrape TikTok Shop Thailand products without logging in: Thai categories or product links (`shop.tiktok.com/th/pdp/...`). Prices in THB.

```json
{"region": "th", "categories": ["Beauty & Personal Care"], "maxProductsPerSource": 50}
```

#### TikTok Shop Vietnam scraper

Scrape TikTok Shop Vietnam products without logging in: Vietnamese categories or product links (`shop.tiktok.com/vn/pdp/...`). Prices in VND.

```json
{"region": "vn", "categories": ["Beauty & Personal Care"], "maxProductsPerSource": 50}
```

#### TikTok Shop Singapore scraper

Scrape TikTok Shop Singapore products without logging in: Singapore categories or product links (`shop.tiktok.com/sg/pdp/...`). Prices in SGD.

```json
{"region": "sg", "categories": ["Home Supplies"], "maxProductsPerSource": 50}
```

#### TikTok Shop Mexico scraper

Scrape TikTok Shop Mexico products without logging in: Mexican categories or product links (`shop.tiktok.com/mx/pdp/...`). Prices in MXN.

```json
{"region": "mx", "categories": ["Beauty & Personal Care"], "maxProductsPerSource": 50}
```

#### TikTok Shop Japan scraper

Scrape TikTok Shop Japan products without logging in: Japanese categories or product links (`shop.tiktok.com/jp/pdp/...`). Prices in JPY.

```json
{"region": "jp", "categories": ["Beauty & Personal Care"], "maxProductsPerSource": 50}
```

### How to use it (step by step)

**1. Open the Actor and pick a country.** The country is used for keywords, categories and bare product IDs.
Product links always use the country in the link.

![Country selector with the 10 TikTok Shop countries](https://api.apify.com/v2/key-value-stores/IQ2Afx4n4jiqjVvuD/records/tiktok-shop-scraper-1-country.png)

**2. Tell it what to scrape.** Fill in any mix of:

- **Product URLs or IDs**, e.g. `https://shop.tiktok.com/us/pdp/1729488565791527807` or `https://shop.tiktok.com/gb/pdp/...`
- **Keywords (US)**, e.g. `stanley cup`, `phone cases`, `magnetic eyelashes`
- **Categories**, e.g. `Beauty & Personal Care` or a category link such as `https://shop.tiktok.com/th/c/phones-electronics/601739`

![A product link and the keyword "stanley cup" in the input](https://api.apify.com/v2/key-value-stores/IQ2Afx4n4jiqjVvuD/records/tiktok-shop-scraper-2-what-to-scrape.png)

**3. Choose the options.** Max products per keyword or category, full details on or off, subcategories, and the
"only new or changed products" mode for schedules.

![Options: max products per keyword or category, full product details](https://api.apify.com/v2/key-value-stores/IQ2Afx4n4jiqjVvuD/records/tiktok-shop-scraper-3-options.png)

**4. Press Start.** A keyword with 25 products typically finishes in about 30 seconds.

**5. Open the results.** Use the **Overview** tab (one row per product) or the **Variants** tab (one row per
variant with its own price and stock).

![Overview: one row per product with price, units sold and stock](https://api.apify.com/v2/key-value-stores/IQ2Afx4n4jiqjVvuD/records/tiktok-shop-scraper-4-results-overview.png)

![Variants: one row per variant with its own price and stock](https://api.apify.com/v2/key-value-stores/IQ2Afx4n4jiqjVvuD/records/tiktok-shop-scraper-5-results-variants.png)

**6. Export.** Download as Excel, CSV, JSON or HTML, or use the API (examples below). For Excel and CSV, export the
**Overview** or **Variants** view: products can have hundreds of variants, and spreadsheet exports of the full
nested data are limited to 2,000 columns.

![Export dialog with the Overview view and Excel selected](https://api.apify.com/v2/key-value-stores/IQ2Afx4n4jiqjVvuD/records/tiktok-shop-scraper-6-export.png)

### Input

| Field | What it does | Default |
|---|---|---|
| `region` | Country for keywords, categories and bare IDs: `us`, `gb`, `sg`, `my`, `th`, `ph`, `vn`, `id`, `mx`, `jp` | `us` |
| `products` | Product links or IDs from any of the 10 countries | — |
| `keywords` | US keyword phrases | — |
| `categories` | Category names or links (any of the 10 countries) | — |
| `includeSubcategories` | Also sample the category's subcategories, for wider coverage | off |
| `maxProductsPerSource` | Upper limit for each keyword and each category (1-1000) | 30 |
| `includeDetails` | On: full product data. Off: list data only (title, price, units sold, rating, shop), cheaper and faster | on |
| `monitorChanges` | Return only products that are new or whose units sold, stock, rating, reviews or price changed | off |
| `monitorName` | Separate memory per schedule (e.g. `competitors`, `beauty-uk`) | `default` |

Example input:

```json
{
  "region": "us",
  "keywords": ["stanley cup"],
  "categories": ["https://shop.tiktok.com/gb/c/beauty-personal-care/601450"],
  "products": ["https://shop.tiktok.com/sg/pdp/1732445553395664013"],
  "maxProductsPerSource": 25
}
```

With no input at all, the Actor returns a small live sample (5 US products) so you can see the output.

### Output example

A real product from a "stanley cup" run (lists shortened):

```json
{
  "type": "product",
  "detailLevel": "full",
  "productId": "1732523111833375729",
  "region": "us",
  "url": "https://shop.tiktok.com/us/pdp/stanley-h2-0-flowstate-quencher-tumbler-40oz-bpa-free/1732523111833375729",
  "title": "Stanley Stainless Steel H2.0 FlowState Quencher Tumbler",
  "currency": "USD",
  "price": 49.39,
  "originalPrice": null,
  "discountPercent": null,
  "priceMax": 49.39,
  "soldCount": 2520,
  "rating": 4.7,
  "reviewCount": 305,
  "ratingBreakdown": {
    "five": 266,
    "four": 13,
    "three": 11,
    "two": 10,
    "one": 5
  },
  "stockTotal": 10,
  "inStock": true,
  "skuCount": 4,
  "skus": [
    {
      "skuId": "1732576223633118193",
      "options": {
        "Color": "Tan",
        "Number of items": "1"
      },
      "optionsText": "Color: Tan / Number of items: 1",
      "price": 49.39,
      "originalPrice": null,
      "stock": 0,
      "purchaseLimit": 200,
      "available": false
    },
    {
      "skuId": "1732523120838611953",
      "options": {
        "Color": "White",
        "Number of items": "1"
      },
      "optionsText": "Color: White / Number of items: 1",
      "price": 49.39,
      "originalPrice": null,
      "stock": 4,
      "purchaseLimit": 200,
      "available": true
    }
  ],
  "images": [
    "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/bcbe4fb7d175499c818e41d18833c73b~tplv-fhlh96nyum-crop-webp:800:800.webp"
  ],
  "description": "•90% recycled 18/8 stainless steel\n•BPA-free\n•Double-wall vacuum insulation\n•Reusable straw\n•Comfort-grip handle\n•Fits most car cup holders\n•Dishwasher safe\nDes...",
  "descriptionImages": [],
  "specifications": [
    {
      "name": "Quantity per pack",
      "value": "1"
    },
    {
      "name": "Volume",
      "value": "N/A"
    },
    {
      "name": "Dangerous goods or hazardous materials",
      "value": "No"
    }
  ],
  "categories": [
    {
      "id": "600024",
      "name": "Kitchenware",
      "level": 1
    },
    {
      "id": "859400",
      "name": "Drinkware",
      "level": 2
    },
    {
      "id": "600036",
      "name": "Glasses",
      "level": 3
    }
  ],
  "brand": null,
  "seller": {
    "sellerId": "7495340484689890289",
    "shopName": "Bullseye Deals",
    "shopUrl": "https://shop.tiktok.com/us/store/bullseye-deals/7495340484689890289",
    "shopRating": 4.6,
    "shopSoldCount": 1800603,
    "shopReviewCount": 225980,
    "shopProductCount": 4481,
    "shopFollowers": 276899
  },
  "shipping": {
    "fee": 0,
    "currency": "USD",
    "freeShipping": true,
    "minDays": 4,
    "maxDays": 7,
    "service": "Standard shipping",
    "estimatedDelivery": "Oct 21 - Oct 24"
  },
  "reviews": [
    {
      "reviewId": "7688852477116385037",
      "rating": 5,
      "text": "Nice very cute 🥰",
      "createdAt": "2026-09-23T21:54:41Z",
      "variant": "Blue",
      "reviewerName": "R**4",
      "verifiedPurchase": true,
      "incentivized": false,
      "images": [
        "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/2644f088052649c8912e21af545cf3ca~tplv-fhlh96nyum-crop-webp:300:300.webp"
      ],
      "country": "US"
    }
  ],
  "promoVideo": null,
  "source": {
    "type": "keyword",
    "value": "stanley-cup"
  },
  "changes": null,
  "scrapedAt": "2026-10-17T15:32:36.059Z"
}
```

Fields that a product does not have are `null` (or an empty list), so every row has the same columns.

### Track sales and stock over time (scheduled runs)

1. Turn on **Only new or changed products** and give the monitor a name.

   ![Only new or changed products, with a monitor name](https://api.apify.com/v2/key-value-stores/IQ2Afx4n4jiqjVvuD/records/tiktok-shop-scraper-7-monitor.png)

2. Click **Schedule** and choose daily (or hourly, weekly...).

3. Every run returns only the products that are new or whose units sold, stock, rating, reviews or price moved,
   with a `changes` field:

```json
"changes": {"isNew": false, "since": "2026-10-17T14:07:05Z", "soldDelta": 37, "stockDelta": -41,
            "priceBefore": null, "ratingBefore": null, "reviewCountDelta": 4}
```

`soldDelta` over a day is that product's daily sales; multiply by the price for an estimate of daily revenue.
Unchanged products are not returned and **not billed**.

### Pricing

Pay only for results (Apify pay-per-event):

| Event | Price |
|---|---|
| Product with full details | **$2.50 per 1,000** on the Free plan, down to **$1.75 per 1,000** on Gold |
| Product, list data only (`includeDetails` off) | $0.80 per 1,000 |
| Country listing access (once per run, per non-US country whose categories you browse) | $0.01 |
| Run start | $0.001 |

Examples:

- 100 US products from a keyword, full details: about **$0.25**.
- 100 products from a UK category: about **$0.26** ($0.25 + $0.01 for UK listing access).
- Daily monitor of 500 products where 60 changed today: about **$0.15** that day.

Product links never trigger the country listing access charge. Products that do not exist, duplicates and
unchanged products (monitor mode) are never billed. You can cap any run with Apify's maximum cost setting; the run
then stops cleanly with what it has.

**Free Apify plan:** runs started on Apify's free plan return up to **10 products per run**. Any paid Apify plan
removes this limit.

### Use it from code or automation

**API (cURL)**, run and get the products in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/headply~tiktok-shop-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["stanley cup"], "maxProductsPerSource": 25}'
```

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("headply/tiktok-shop-scraper").call(run_input={
    "region": "gb",
    "categories": ["Beauty & Personal Care"],
    "maxProductsPerSource": 50,
})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(product["title"], product["soldCount"], product["price"], product["currency"])
```

**JavaScript**

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

const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('headply/tiktok-shop-scraper').call({ products: ['https://shop.tiktok.com/us/pdp/1729488565791527807'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].soldCount, items[0].stockTotal);
```

**n8n / Make / Zapier:** use the Apify node, action *Run an Actor and get dataset items*, Actor
`headply/tiktok-shop-scraper`, and the same JSON input. A daily schedule + Google Sheets node gives you a sales log
per product.

### Ideas

- **Product research:** which products in a niche sell, at what price, with how many reviews.
- **Competitor tracking:** follow competitors' units sold, stock and prices every day.
- **Stock alerts:** catch products and variants about to sell out (`stockTotal`, `skus[].stock`).
- **Creator and affiliate research:** keyword results include the TikTok video promoting each product.
- **Cross-country comparison:** the same category in the US, UK, Southeast Asia, Mexico and Japan.

### FAQ

**Do I need a TikTok account or cookies?** No. The Actor reads public TikTok Shop pages, as any visitor sees them.

**Is "units sold" an estimate?** No, it is the sold counter TikTok Shop shows on the product. Revenue is not shown
by TikTok; `soldCount × price` (or `soldDelta × price` in monitor mode) gives you an estimate.

**Why can the same product show slightly different prices in two runs?** TikTok Shop shows different visitors
slightly different promotional prices on many products (we measured differences of up to about 12% within
minutes). The Actor reports the price a new visitor sees at that moment. Units sold, stock and ratings are not
affected. In monitor mode, price moves of 15% or less don't count as a change, so this doesn't flood your results.

**Why did a category return fewer products than my maximum?** Category pages show a rotating selection of the
category's products. The Actor keeps collecting until it reaches your maximum or stops finding new products. Turn on
**Include subcategories** for wider coverage.

**A keyword returned nothing. Why?** TikTok Shop has keyword pages for common shopping phrases. For rare phrases there
is no page; the run summary says so and nothing is charged. Try a shorter or more common phrase, or a category.

**Which countries are supported?** The 10 above. Germany, France, Spain, Italy, Ireland and Brazil are coming in the
next version; links from those countries are skipped with a clear message (not billed).

**What happens with a product that no longer exists?** It is listed in the run summary as not found and not billed.

**Where is the run summary?** In the run's key-value store, record `SUMMARY`: products delivered, products not
found, skipped inputs with the reason, and per-keyword/category counts.

**Can I get more than 10 products per run?** Yes, on any paid Apify plan. The free plan is limited to 10 products
per run.

**Is it legal?** The Actor collects publicly available product information. You are responsible for how you use the
data; check TikTok's terms and the laws that apply to you, and do not collect personal data you have no basis to use.

### Related Actors

- [TikTok Profile Scraper](https://apify.com/headply/tiktok-profile-scraper): creators' followers, likes and videos.
- [TikTok Video Scraper](https://apify.com/headply/tiktok-video-scraper): full stats for any TikTok video.
- [TikTok Trending Scraper](https://apify.com/headply/tiktok-trending-scraper): what's trending by category.
- [TikTok Transcript Scraper](https://apify.com/headply/tiktok-transcript-scraper): the words spoken in TikTok videos.

Questions or a country you need? Open an issue on the Actor's Issues tab.

# Actor input Schema

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

Which TikTok Shop country to use for keywords, categories and bare product IDs. Product URLs always use the country in the URL.

## `products` (type: `array`):

TikTok Shop product links from any of the 10 countries (for example https://shop.tiktok.com/us/pdp/1729488565791527807) or bare product IDs.

## `keywords` (type: `array`):

Phrases such as 'phone cases' or 'stanley cup'. Returns TikTok Shop's product list for that phrase (up to 30 products). US storefront only; phrases TikTok Shop has no list for are reported in the run summary and not billed.

## `categories` (type: `array`):

Category names (for example 'Beauty & Personal Care') or category links from any of the 10 countries. Each category returns a sample of its current products.

## `includeSubcategories` (type: `boolean`):

Also sample the category's subcategories, for wider coverage.

## `maxProductsPerSource` (type: `integer`):

Upper limit for each keyword and each category.

## `includeDetails` (type: `boolean`):

On: every product with variants and stock, shipping, description, reviews and shop stats. Off: only the list data (title, price, units sold, rating) - cheaper and faster. Product URLs always return full details.

## `monitorChanges` (type: `boolean`):

Remembers every product between runs and returns only products that are new or whose units sold, stock, rating, reviews or price changed, with the change in a 'changes' field. Unchanged products are not billed.

## `monitorName` (type: `string`):

Keep separate memories for different schedules (for example 'competitors').

## Actor input object example

```json
{
  "region": "us",
  "products": [
    "https://shop.tiktok.com/us/pdp/1729488565791527807"
  ],
  "includeSubcategories": false,
  "maxProductsPerSource": 30,
  "includeDetails": true,
  "monitorChanges": false,
  "monitorName": "default"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {
    "products": [
        "https://shop.tiktok.com/us/pdp/1729488565791527807"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("headply/tiktok-shop-scraper").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 = { "products": ["https://shop.tiktok.com/us/pdp/1729488565791527807"] }

# Run the Actor and wait for it to finish
run = client.actor("headply/tiktok-shop-scraper").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 '{
  "products": [
    "https://shop.tiktok.com/us/pdp/1729488565791527807"
  ]
}' |
apify call headply/tiktok-shop-scraper --silent --output-dataset

```

## MCP server setup

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

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/JiF8ZFSWGEtdi4xfM/builds/UeTfPVd9HzRdwZaCE/openapi.json
