# TikTok Shop Scraper: Products, Reviews, Sellers & Keyword Rank (`sourabhbgp/tiktok-shop-scraper`) Actor

Track TikTok Shop prices, ratings, reviews, sellers and keyword rank. Paste product URLs, a seller id or keywords and get clean rows back. Five modes in one actor, and keyword results are scored against your keyword before billing, so you never pay for products that do not match.

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

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### TikTok Shop Scraper: Products, Prices, Reviews, Sellers & Keyword Rank

Built for people who sell on TikTok Shop. Track your prices, ratings, reviews and search rank, and your competitors'. No login, no cookies, no proxy setup.

**$4.99 per 1,000 results. $0.005 per run. Five modes in one actor.**

### Why this scraper

- 🎯 **You are never billed for results that do not match your keyword.** TikTok Shop pads keyword searches with unrelated products, even for keywords that match nothing at all. Those rows are dropped before billing, not after.
- 📈 **Every search row carries its rank position**, so running on a schedule gives you keyword rank over time. No other TikTok Shop scraper reports it.
- 📊 **The full star breakdown on every review row**, so you see how many reviews sit at 1, 2, 3, 4 and 5 stars, not just the average.
- 🏪 **Whole seller catalogues**, paged to the end rather than the first page.
- 💸 **The seller funded share of each promotion**, which shows who is discounting out of their own margin.
- 🧾 **Duplicates and dead ids cost nothing.** The same product reached twice bills once, and ids that no longer exist bill zero.
- 📣 **A short run says so**, with the numbers, instead of reporting a bare success.
- 🚀 **No login, no cookies, no proxy setup**, and no browser: a full 80 product shop takes about 15 seconds.

### What data can you extract?

<table>
<tr><td>🏷️ Title &amp; brand</td><td>💵 Price &amp; original price</td><td>📉 Discount percent</td><td>💸 Seller funded discount</td></tr>
<tr><td>⭐ Rating</td><td>💬 Review count</td><td>📦 Units sold</td><td>🎨 Variant count &amp; prices</td></tr>
<tr><td>🏪 Shop name &amp; seller id</td><td>🔖 Card badges</td><td>⏱️ Flash sale end time</td><td>🖼️ Images</td></tr>
<tr><td>📈 Keyword rank position</td><td>🎯 Keyword relevance score</td><td>📝 Review text &amp; photos</td><td>📊 1 to 5 star breakdown</td></tr>
</table>

### Five scraping modes

#### 📦 Products mode

Paste product URLs or bare numeric product ids. One row per product with price, original price, discount, the seller funded portion of that discount, rating, review count, units sold, badges, flash sale end time and variant count.

This is the cheap one to run on a schedule. Everything above comes from a single bulk lookup, so watching 500 products every day costs about $2.50 a day.

The slug in a product URL is decorative, so `https://shop.tiktok.com/us/pdp/x/1731936391511904376` and the bare id `1731936391511904376` both work. Turn on **Include a per variant price breakdown** to add a `skus` array with the price of every size and colour.

#### 🏪 Seller mode

Give it a numeric seller id and get that shop's whole catalogue, paged to the end rather than the first page. Tested against stores from 13 products up to one with 21,702 in its catalogue.

To find your own seller id, run Products mode on one of your listings: the `sellerId` field on the result is what this mode wants.

#### ⭐ Reviews mode

Paste product URLs or ids. One row per review with the text, star rating, photos, the verified purchase flag, the incentivised flag, the variant the reviewer bought, and their country.

Every row also carries the product's **full star breakdown**, so you get how many reviews sit at 1, 2, 3, 4 and 5 stars, not just the average. Filter to a single star rating to read only your 1 star reviews, or sort by most recent.

**Max reviews per product** defaults to 500 so one popular product cannot run away with your bill. Raise it and the walk keeps going: with the cap lifted, a 2,753 review product returns 2,741 of them. The run always tells you when it stopped at your cap and that more exists.

#### 🔍 Search mode

One keyword per line. You get the products TikTok Shop ranks for that keyword, each row carrying its **rank position** and a relevance score. Run it on a schedule and you have your keyword rank over time, which no other TikTok Shop scraper reports.

Rank is the position in TikTok Shop's own result order, counted before anything is filtered out, so it stays true even when padding is dropped. TikTok Shop returns keyword results in one shot with no pagination, so 200 is the deepest available.

Turn on **Also return the results that were filtered out** to see everything TikTok Shop returned with an `isRelevant` flag on each row. Those rows are billed.

#### 🗂️ Category mode

Paste a category page URL. Works for the US and the UK.

TikTok Shop serves a different slice of a category on every page load, so this mode collects across several passes and removes duplicates for you. Set **Max rows** above one page and it keeps going. That also means two runs of the same category will not return the same products, which makes this good for discovering what is in a category and poor for tracking one exact list. Use Products mode for tracking.

### Top use cases

#### Watch your own listings

Run Products mode on every product you sell, once a day. Price, rating, review count and units sold on each row, so you can chart them and catch a price or rating move the day it happens.

#### Track your keyword rank

Run Search mode on the keywords you care about and keep the `searchRank` field over time. This is the daily job for a seller, and it is the surface nobody else in this category covers.

#### Read your bad reviews properly

Pull only the 1 and 2 star reviews for a product and see what buyers actually complain about, with the variant they bought attached. The star breakdown on every row tells you whether a 4.6 average is hiding 131 one star reviews.

#### Watch a competitor's shop

Feed a rival's seller id to Seller mode and diff their catalogue week to week: new products, dropped products, price moves.

#### See who is discounting out of their own margin

`sellerFundedDiscount` is the promotion amount TikTok Shop books against the seller rather than the platform. It is not in any competing scraper's output schema that we could find, and it shows which competitors are buying market share the expensive way.

#### Sweep a category you are considering

Category mode gives you a broad sample of what sells in a niche before you commit stock to it.

### How much does TikTok Shop Scraper cost?

Pay per result: **$4.99 per 1,000 rows**, plus $0.005 per run.

The Apify Free plan gives you $5 in credits a month, about **1,000 rows**. The $29/month Starter plan covers about **5,800 rows**.

What counts as a row:

- One product = one row.
- One review = one row.
- A keyword result that does not match your keyword = **no row and no charge**.
- The same product returned twice in one run = one row.
- A product id or seller id that does not exist = **no row and no charge**.

### Input examples

Monitoring a list of your own products:

```json
{
  "mode": "products",
  "productUrls": [
    "https://shop.tiktok.com/us/pdp/x/1731936391511904376",
    "1732315774273425528"
  ]
}
```

A competitor's whole catalogue:

```json
{
  "mode": "seller",
  "sellerUrls": ["7496252928214665336"]
}
```

Only the 1 star reviews, newest first:

```json
{
  "mode": "reviews",
  "productUrls": ["1731936391511904376"],
  "reviewStarFilter": "1",
  "reviewSort": "recent",
  "maxReviewsPerProduct": 500
}
```

Keyword rank tracking:

```json
{
  "mode": "search",
  "keywords": ["lip serum", "peptide lip balm"],
  "searchDepth": 100,
  "minRelevance": "0.5"
}
```

A UK category:

```json
{
  "mode": "category",
  "region": "gb",
  "categoryUrls": ["https://shop.tiktok.com/gb/c/beauty-personal-care/601450"],
  "maxItems": 100
}
```

### Output examples

Every example below is a real row from a real run, copied unedited. Image URL fields are omitted here for width only; they are present in the data.

#### Products mode

```json
{
  "productId": "1731936391511904376",
  "title": "[ES] SKINTIFIC Hydrating Brightening Lip Serum",
  "url": "https://shop.tiktok.com/us/pdp/skintific-hydrating-brightening-lip-serum-vitamin-c-formula/1731936391511904376",
  "slug": "skintific-hydrating-brightening-lip-serum-vitamin-c-formula",
  "brand": "SKINTIFIC",
  "region": "us",
  "currency": "USD",
  "currencySymbol": "$",
  "price": 39,
  "originalPrice": null,
  "discountPercent": null,
  "savings": null,
  "priceIsFrom": true,
  "sellerFundedDiscount": 24.1,
  "rating": 4.6,
  "reviewCount": 2750,
  "soldCount": 18690,
  "sellerId": "7496252928214665336",
  "shopName": "SKINTIFIC US Store",
  "labels": [
    "Free shipping"
  ],
  "flashSaleEndsAt": null,
  "skuCount": 22,
  "scrapedAt": "2026-09-03T18:24:28.067Z"
}
```

`originalPrice`, `discountPercent` and `savings` are empty when a product is not currently discounted, as above. `priceIsFrom` true means the product has several variants and `price` is the cheapest of them.

#### Search mode

```json
{
  "productId": "1729502209346934379",
  "title": "Dr.Leo Peptide Lip Serum 10g - Lightweight Lip Care Moisturizer to Smooth, Hydrate & Repair Dryness, Lines & Uneven Tone #SohoChic",
  "url": "https://shop.tiktok.com/us/pdp/dr-leo-peptide-lip-serum-for-firming-plumping-hydration/1729502209346934379",
  "slug": "dr-leo-peptide-lip-serum-for-firming-plumping-hydration",
  "brand": "Dr.Leo",
  "region": "us",
  "currency": "USD",
  "currencySymbol": "$",
  "price": 16.9,
  "originalPrice": 29.9,
  "discountPercent": 43,
  "savings": 13,
  "priceIsFrom": true,
  "sellerFundedDiscount": 16,
  "rating": 4.3,
  "reviewCount": 2235,
  "soldCount": 23896,
  "sellerId": "7495840753502947947",
  "shopName": "Dr.Leo-USA",
  "labels": [
    "Free shipping"
  ],
  "flashSaleEndsAt": null,
  "skuCount": 2,
  "scrapedAt": "2026-09-03T18:24:28.766Z",
  "keyword": "lip serum",
  "searchRank": 4,
  "relevanceScore": 1,
  "isRelevant": true
}
```

`searchRank` is the position in TikTok Shop's own result order for that keyword. `relevanceScore` is the share of your keyword terms found in the title and brand.

#### Seller mode

```json
{
  "productId": "1731832307922407544",
  "title": "[HOT] SKINTIFIC Hydrating Brightening Lip Serum with Hyaluronic Acid & Peptide for Radiant Lips Gentle Glossy Korean Beauty Makeup Balm Shea Smooth Moisture with Cooling Metal Roller Applicator",
  "url": "https://shop.tiktok.com/us/pdp/skintific-hydrating-lip-serum-brighten-plump-lips/1731832307922407544",
  "slug": "skintific-hydrating-lip-serum-brighten-plump-lips",
  "brand": "SKINTIFIC",
  "region": "us",
  "currency": "USD",
  "currencySymbol": "$",
  "price": 14.9,
  "originalPrice": 19.9,
  "discountPercent": 25,
  "savings": 5,
  "priceIsFrom": true,
  "sellerFundedDiscount": 5,
  "rating": 4.5,
  "reviewCount": 20739,
  "soldCount": 166572,
  "sellerId": "7496252928214665336",
  "shopName": "SKINTIFIC US Store",
  "labels": [
    "Free shipping"
  ],
  "flashSaleEndsAt": null,
  "skuCount": 64,
  "scrapedAt": "2026-09-03T18:24:29.816Z"
}
```

#### Reviews mode

```json
{
  "reviewId": "7600988372823410462",
  "productId": "1731936391511904376",
  "productTitle": "[ES] SKINTIFIC Hydrating Brightening Lip Serum",
  "skuId": "1732173892159639672",
  "skuSpecification": "04 Pink Berry, 1",
  "rating": 5,
  "reviewText": "You have to pump it a couple of times till the gloss comes out when you first get it, but I love this color so much. It’s so nice and it’s not sticky at all. It goes on so smoothly that it feels very nice on the lips. I got Pink Berry😛😛",
  "reviewedAt": "2026-01-30T03:19:25.020Z",
  "isVerifiedPurchase": true,
  "isIncentivized": false,
  "reviewerId": "6714989801244509189",
  "reviewerName": "n**v",
  "reviewCountry": "US",
  "productRating": 4.5,
  "productReviewCount": 2750,
  "ratingHistogram": {
    "1": 131,
    "2": 69,
    "3": 137,
    "4": 244,
    "5": 2169
  },
  "scrapedAt": "2026-09-03T18:24:34.373Z"
}
```

`ratingHistogram` is the whole product's star breakdown, repeated on every review row so a single review export is self contained.

#### Category mode

```json
{
  "productId": "1732311026571318143",
  "title": "【DR.TUOMA】Odor Control Feminine Wash | Sensitive Skin Safe | DR.TUOMA#TikTokShopDealsforYouDays #SummerWins Daily Intimate Wash,back to school",
  "url": "https://shop.tiktok.com/us/pdp/dr-tuoma-ph-balanced-feminine-wash-gentle-fresh-daily-care/1732311026571318143",
  "slug": "dr-tuoma-ph-balanced-feminine-wash-gentle-fresh-daily-care",
  "brand": "DRTUOMA",
  "region": "us",
  "currency": "USD",
  "currencySymbol": "$",
  "price": 16.98,
  "originalPrice": 29.96,
  "discountPercent": 43,
  "savings": 12.98,
  "priceIsFrom": true,
  "sellerFundedDiscount": 13.18,
  "rating": 4.7,
  "reviewCount": 540,
  "soldCount": 4490,
  "sellerId": "7494363574181136255",
  "shopName": "Dr.tuoma.Official",
  "labels": [
    "Free shipping"
  ],
  "flashSaleEndsAt": null,
  "skuCount": 2,
  "scrapedAt": "2026-09-03T18:24:32.953Z",
  "categoryId": "601450",
  "categoryName": "Beauty & Personal Care"
}
```

### Limitations

- **US storefront, apart from category listings.** Products, sellers, reviews and search cover the US storefront. Category listings also work for the UK. Other countries are not available.
- **Keyword search returns at most 200 results per keyword**, in one shot. There is no deeper paging, because TikTok Shop does not offer any.
- **A category run is a sample, not a fixed list.** TikTok Shop serves a different slice on every page load. Good for discovery, poor for tracking one exact list over time.
- **Video reviews come back without the video.** The photos or video filter includes video reviews, but TikTok Shop never returns the video URL, so those rows arrive with an empty photo list.
- **Stock levels, full product descriptions and product videos are not included.** Those live only on the product page itself, which costs many times more to fetch than everything above.
- **A delisted product returns nothing.** If a product has been removed from TikTok Shop, it is skipped and not billed, and the run says how many ids did not resolve. Your own live listings should all resolve.

### Frequently asked questions

#### Do I need a TikTok account, cookies, or a login?

No. Nothing here asks for credentials and none of the five modes needs them, so your account can never be affected by using this actor.

#### Will I get blocked, or do I need to set up a proxy?

No setup needed. The actor handles bot protection itself and uses the cheapest route by default, moving to a stronger one only if a request is actually refused.

#### How do I find my seller id?

Run Products mode on any one of your products. The `sellerId` field on the result is the id Seller mode wants.

#### What happens if a product or seller does not exist?

The run finishes normally and tells you which entries were not found. It does not fail, and you are not charged for rows you did not get.

#### Does the keyword filter ever drop something I wanted?

It can, and you can check. Turn on **Also return the results that were filtered out** and every row comes back with `isRelevant` and `relevanceScore` so you can judge for yourself, or set **Minimum keyword relevance** to Loose. The default is tuned to protect your bill first.

#### Can I really get all the reviews on a product?

Yes, up to the cap you set. Raise **Max reviews per product** and a 2,753 review product returns 2,741 of them. The default cap of 500 exists so one popular product cannot produce a bill you did not expect, and the run tells you when it stopped there.

#### Does the maximum rows setting actually work?

Exactly. Ask for 17 and you get 17. Filters and sorts are checked to change the result set rather than being accepted and quietly ignored.

#### Is it legal to scrape TikTok Shop?

Scraping public data is generally allowed in the US and most of the EU, as long as you don't collect personal data covered by GDPR or CCPA without a lawful basis. This actor only reads pages TikTok Shop serves publicly to anyone with no login. How you use the output is on you.

Apify's full breakdown: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/).

#### Does it support scheduled runs and integrations?

Yes. Use Apify Schedules for recurring runs. Results push to **Google Sheets, Slack, Zapier, Make, Airbyte** and webhooks.

Full list: [Apify integrations](https://docs.apify.com/platform/integrations).

#### Can I use it with the Apify API?

Yes. Every run is available via the Apify REST API:

```bash
curl -X POST "https://api.apify.com/v2/acts/sourabhbgp~tiktok-shop-scraper/runs?token=APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "search", "keywords": ["lip serum"]}'
```

Docs: [Apify API reference](https://docs.apify.com/api/v2).

#### Can I use it through an MCP Server?

Yes. Apify ships an MCP server that exposes every actor as a tool, so Claude Desktop, Cursor, and any other MCP capable client can call this one. Setup: [Apify MCP docs](https://docs.apify.com/platform/integrations/mcp).

### Your feedback

Bug, missing field, or odd behaviour? Drop a note in the [Issues tab](https://console.apify.com/actors/YNV3RIi6HAacv80PX/issues). Reports go to a human and fixes usually ship the same week.

# Actor input Schema

## `mode` (type: `string`):

Pick one job per run. Products: track price, rating, review count and units sold for a list of products. Seller: pull a shop's whole catalogue. Reviews: pull review text and the star histogram for a product. Search: see which products rank for a keyword. Category: list products in a category.

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

Used by the Products and Reviews modes. Paste TikTok Shop product URLs or bare numeric product ids. The slug in a product URL is decorative, so a bare id works just as well.

## `maxReviewsPerProduct` (type: `integer`):

Reviews mode only. A popular product can carry thousands of reviews, so this cap exists to stop one product id turning into a bill you did not expect. Raise it when you want a complete set. The run log says which products still had more reviews available when the cap was reached.

## `reviewSort` (type: `string`):

Reviews mode only.

## `reviewStarFilter` (type: `string`):

Reviews mode only. Keep it on All unless you want, for example, only the 1 star reviews.

## `reviewsWithMediaOnly` (type: `boolean`):

Reviews mode only. Overrides the star filter when switched on.

## `sellerUrls` (type: `array`):

Seller mode only. A numeric seller id, or any TikTok Shop URL containing one. Every product row carries sellerId, so you can take an id straight from an earlier run.

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

Search mode only. One keyword per line. Each result row carries its rank position for that keyword, so repeated runs give you rank over time.

## `searchDepth` (type: `integer`):

Search mode only. TikTok Shop returns keyword results in a single shot with no pagination, so this is the whole depth available. 200 is the maximum that returns data.

## `minRelevance` (type: `string`):

Search mode only. TikTok Shop pads keyword results with unrelated products, even for keywords that match nothing at all. Each result is scored on how much of your keyword appears in the product title and brand, and anything below this score is dropped and never billed. 0.5 means at least half your keyword terms must appear.

## `includeIrrelevant` (type: `boolean`):

Search mode only. Off by default, so you are not billed for padding. Switch on to see everything TikTok Shop returned, each row flagged with isRelevant and relevanceScore. Note that these rows are billed.

## `categoryUrls` (type: `array`):

Category mode only. A TikTok Shop category page URL (it contains /c/).

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

The US storefront supports every mode. The UK storefront supports the Category mode only.

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

Hard stop on rows delivered and billed. Leave empty for no limit.

## `includeSkus` (type: `boolean`):

Adds a skus array to each product row with the price of every variant. Off by default because it makes rows considerably larger.

## `proxyConfiguration` (type: `object`):

TikTok Shop serves a security check to unproxied requests, so a proxy is required. The default routes through datacenter proxy and escalates to residential automatically if datacenter is refused.

## Actor input object example

```json
{
  "mode": "search",
  "productUrls": [
    "https://shop.tiktok.com/us/pdp/x/1731936391511904376",
    "1729415930935742635"
  ],
  "maxReviewsPerProduct": 500,
  "reviewSort": "recommended",
  "reviewStarFilter": "all",
  "reviewsWithMediaOnly": false,
  "sellerUrls": [
    "7496252928214665336"
  ],
  "keywords": [
    "lip serum"
  ],
  "searchDepth": 20,
  "minRelevance": "0.5",
  "includeIrrelevant": false,
  "categoryUrls": [
    "https://shop.tiktok.com/us/c/beauty-personal-care/601450"
  ],
  "region": "us",
  "includeSkus": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Product or review rows collected by this run.

## `resultsInConsole` (type: `string`):

Browse the rows in the Console.

# 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 = {
    "mode": "search",
    "keywords": [
        "lip serum"
    ],
    "searchDepth": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("sourabhbgp/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 = {
    "mode": "search",
    "keywords": ["lip serum"],
    "searchDepth": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("sourabhbgp/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 '{
  "mode": "search",
  "keywords": [
    "lip serum"
  ],
  "searchDepth": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call sourabhbgp/tiktok-shop-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sourabhbgp/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/YNV3RIi6HAacv80PX/builds/hxMNdgchFVwFhsr9E/openapi.json
