# TikTok Shop Videos Scraper (`lergassy/tiktok-shop-videos-scraper`) Actor

Scrape TikTok Shop shoppable videos that sell: revenue (GMV), views, ad ROAS, likes, shares, comments, ad and AI-generated flags in 15 markets. Find them by keyword, category, product, creator or shop. Optional daily revenue, CPA and GPM. JSON, CSV, API.

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

## Pricing

from $2.10 / 1,000 videos

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 Videos Scraper** finds the **shoppable TikTok videos that sell**: **revenue (GMV), views, ad ROAS, likes, shares, comments, whether the video runs as an ad and whether it is AI-generated**, for the last day, 7 days, 30 days or any past month in 15 markets. Search by keyword, category, product, creator or shop. Turn on **📈 Video analytics** for units sold, GPM, ad CPA, days advertised and duration.

**$3 per 1,000 videos** ($0.003 per row, down to $0.0021 on higher Apify plans); with analytics **$40 per 1,000** from 22 October 2026. No login.

### What is TikTok Shop Videos Scraper?

A creative-research tool: the videos that drive TikTok Shop sales, so you can copy what works.

- **Which videos sell my product (or my competitor's)?** All shoppable videos for a product link, ranked by revenue.
- **Which ads pay off?** Ad ROAS, ad share of views and revenue, CPA.
- **Does AI content sell?** TikTok's AI-generated flag on every video, filter to include or exclude.

### What data can it extract?

| Field | Meaning |
|---|---|
| `videoId`, `url`, `title`, `creatorUsername`, `creatorId`, `publishedAt` | The video |
| `revenue`, `views`, `revenueGrowthPercent`, `likes`, `shares`, `comments` | Revenue (USD) and engagement in the period |
| `isAd`, `adsRoas`, `adRevenueSharePercent`, `adViewSharePercent`, `isAiVideo` | Paid promotion and AI flag |
| `unitsSold`, `gpm`, `adViews`, `adCpa`, `adDays`, `durationSec`, `productCount` | Analytics option |
| `rank`, `country`, `period`, `source`, `sourceInput`, `category` | Position in the list and which input found the video |

### How much does it cost?

Pay per event:

| Event | Free plan | Bronze | Silver | Gold and up |
|---|---|---|---|---|
| Video row | $0.003 | $0.0027 | $0.0024 | $0.0021 |
| Video row with analytics | $0.02 | $0.019 | $0.018 | $0.017 |

From **22 October 2026**: a **run start fee of $0.005**, and a row with analytics costs **$0.04 / $0.038 / $0.036 / $0.035** (the price covers the paid data call behind each such row).

- Rows with analytics are **paused until 22 October 2026**: with the option on, rows are delivered and charged as plain rows.
- Each row is charged once: as a plain video or, with the option on, as a video with analytics.
- Notices (an input with no results), duplicates across inputs and errors are **never billed**.
- Set **Max cost per run** in the run options and the run stops by itself at that amount, with every delivered row paid for.
- **Free Apify plan:** a preview of up to 20 rows from each of the first 2 inputs, without the analytics option (Apify does not pay out free-plan runs, while every row costs us a licensed data call). Any paid Apify plan removes these limits.

### How to scrape TikTok Shop videos

1. Leave the inputs empty for the overall top of a country, or add **🔍 Keywords**, **🗂️ Categories**, **🛍️ Products**, **👤 Creators** or **🏪 Shops**.
2. Pick **🌍 Country**, **📅 Period** and **↕️ Sort by** (revenue, views, growth, ad ROAS). Optionally filter by revenue, creator followers and AI-generated videos.
3. Press **Start** and export JSON, CSV or Excel.

Sorting by ad ROAS puts small, highly efficient ads first; add a minimum revenue to see big winners.

### ⬇️ Input

```json
{
  "productIds": ["https://shop.tiktok.com/us/pdp/x/1729448464509734958"],
  "creators": ["@creator_name"],
  "country": "US",
  "period": "last30Day",
  "sortBy": "revenue",
  "maxResultsPerSource": 100,
  "aiVideos": "all",
  "addAnalytics": true
}
```

### ⬆️ Output

A video row with analytics (real run of 8 October 2026):

```json
{
  "type": "video",
  "rank": 1,
  "videoId": "7681836945202269470",
  "title": "Replying to @vevi El tipo de magnesio que tomas importa más de lo que crees! 🙏🙏 #tiktokshopcreatorpicks #womenshealth #magnesium #magnesiumcomplex ",
  "url": "https://www.tiktok.com/@trendtoksetter31/video/7681836945202269470",
  "creatorId": "7067789157960680495",
  "creatorUsername": "trendtoksetter31",
  "revenue": 47037.7,
  "views": 2261043,
  "revenueGrowthPercent": -196.4,
  "adsRoas": 0,
  "likes": 63602,
  "shares": 12760,
  "comments": 474,
  "isAd": false,
  "isAiVideo": false,
  "adRevenueSharePercent": 0,
  "adViewSharePercent": 0,
  "publishedAt": "2026-09-04 20:10:52",
  "country": "US",
  "period": "last30Day",
  "currency": "USD",
  "source": "product",
  "sourceInput": "https://shop.tiktok.com/us/pdp/x/1729448464509734958",
  "scrapedAt": "2026-10-08T14:09:50.110Z",
  "unitsSold": 3003,
  "gpm": 20.8,
  "adViews": 0,
  "adCpa": 0,
  "adDays": 0,
  "durationSec": 86.35,
  "productCount": 1,
  "analytics": true
}
```

### Use cases

#### Creative research for ads and UGC

The 100 best-selling videos of your category this month, with hooks (captions), ad ROAS and AI flag.

#### Competitor product teardown

Every video selling a competitor's product, with revenue per video and the creators behind them.

#### Creator vetting

A creator's selling videos, revenue and views before you sign them.

#### AI agents and pipelines

Ask an agent "which TikTok videos sell this product best" through the Apify MCP server.

### Integrations

Apify API (`POST /v2/acts/lergassy~tiktok-shop-videos-scraper/run-sync-get-dataset-items`), Python and JavaScript clients, n8n, Make, Zapier, Google Sheets, webhooks and schedules, and the Apify MCP server.

### Troubleshooting

- **A notice "Stopped here"**: the inputs before it returned almost no matching rows, so the run ended instead of reading on; nothing is charged for inputs that were not read. Use broader keywords or categories.
- **A notice row "Creator was not found"**: check the username; it must be the TikTok handle.
- **Videos with tiny revenue on top**: you sorted by ad ROAS; add a minimum revenue.
- **Empty captions**: some videos have no caption.

### ❓ FAQ

#### Where do the revenue numbers come from?

From licensed TikTok Shop analytics data: the same kind of figures sales-analytics dashboards show. TikTok does not publish revenue, so revenue, units sold and the video / live split are **estimates** built from public sales counters, prices and content. Use them to compare and rank, not as accounting figures.

#### Which markets are covered?

The US, UK, Indonesia, Thailand, Vietnam, the Philippines, Malaysia, Singapore, Japan, Mexico, Germany, Italy, France, Spain and Brazil. Revenue is in US dollars for every market.

#### Does it need a TikTok account, cookies or an API key?

No. Nothing to log in to and no key to bring.

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

The Actor returns aggregated sales analytics and public profile information. Check that your use complies with TikTok's terms and with data-protection law in your country (GDPR, CCPA), especially before contacting creators.

### Your feedback

Found a bug or need a field? Open an issue on the Actor's **Issues** tab. If the Actor saved you time, a short review helps other buyers find it.

### You might also like

| Actor | What it does |
|---|---|
| [TikTok Shop Scraper](https://apify.com/lergassy/tiktok-shop-scraper) | Live product pages: price, stock per variant, shipping, shop stats and up to 25,000 reviews per product |
| [TikTok Shop Top Products Scraper](https://apify.com/lergassy/tiktok-shop-top-products-scraper) | Best-selling products with revenue, units sold and the video / live split in 15 markets |
| [TikTok Shop Creators Scraper](https://apify.com/lergassy/tiktok-shop-creators-scraper) | Selling creators with revenue, followers and contact e-mails |
| [TikTok Shop Videos Scraper](https://apify.com/lergassy/tiktok-shop-videos-scraper) | Shoppable videos with revenue, views, ad ROAS and the AI-video flag |
| [TikTok Shop Shops & Live Scraper](https://apify.com/lergassy/tiktok-shop-shops-live-scraper) | Top shops with the affiliate / own-account split, and top live streams with revenue and views |
| [TikTok Shop Reviews Scraper](https://apify.com/lergassy/tiktok-shop-reviews-scraper) | Every buyer review of US and UK products, or only the new ones since a date |
| [TikTok Influencer Scraper](https://apify.com/lergassy/tiktok-influencer-scraper) | Followers, engagement rate and average views for any list of TikTok creators |

# Changelog

This Actor's version history is a separate document: https://apify.com/lergassy/tiktok-shop-videos-scraper/changelog.md

# Actor input Schema

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

Give this or another input below — or leave all empty for the overall top videos of the chosen country. Videos matching each keyword: <b>air fryer</b>, <b>lip gloss</b>, <b>protein</b>.

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

Optional. TikTok Shop category names — <b>Beauty & Personal Care</b>, <b>Phones & Electronics</b>, <b>Skincare</b>, <b>Air Fryers</b>. Each one is a separate list of top videos; the matched category is in the row.

## `productIds` (type: `array`):

Optional. TikTok Shop product links or IDs (<code>shop.tiktok.com/us/pdp/…/1729…</code>): the videos selling each product.

## `creators` (type: `array`):

Optional. TikTok usernames (<code>@name</code>), profile links or creator IDs: the videos of each creator.

## `shopIds` (type: `array`):

Optional. TikTok Shop shop IDs or store links (<code>shop.tiktok.com/us/store/…/7495…</code>): the videos of each shop.

## `country` (type: `string`):

TikTok Shop market. Revenue is in US dollars for every market.

## `period` (type: `string`):

Sales window for revenue, units sold and growth.

## `month` (type: `string`):

Optional, overrides Period: a past month as <code>2026-09</code>.

## `sortBy` (type: `string`):

Order of the list, highest first.

## `maxResultsPerSource` (type: `integer`):

Upper limit of videos from each keyword, category, product, creator or shop (or from the overall top list). Duplicates across inputs are skipped and not charged. Free Apify plan: up to 20 from each of the first 2 inputs.

## `addAnalytics` (type: `boolean`):

<b>Paused until 22 October 2026</b> (rows come as plain rows at the plain price); from then $0.04 per row. Not on the free Apify plan. Adds to each video: units sold, GPM, ad views, ad CPA, days advertised, duration, number of products. Each such row is charged as a video with analytics instead of a plain video.

## `minRevenue` (type: `integer`):

Only rows with at least this revenue in the period. 0 = no floor.

## `maxRevenue` (type: `integer`):

0 = no ceiling.

## `minFollowers` (type: `integer`):

0 = no floor.

## `maxFollowers` (type: `integer`):

0 = no ceiling.

## `aiVideos` (type: `string`):

Filter by TikTok's AI-generated video flag.

## `ascending` (type: `boolean`):

Reverse the order: lowest values first.

## Actor input object example

```json
{
  "country": "US",
  "period": "last30Day",
  "sortBy": "revenue",
  "maxResultsPerSource": 20,
  "addAnalytics": false,
  "minRevenue": 0,
  "maxRevenue": 0,
  "minFollowers": 0,
  "maxFollowers": 0,
  "aiVideos": "all",
  "ascending": false
}
```

# Actor output Schema

## `videos` (type: `string`):

One row per video: revenue, units sold and the rest of the fields, in rank order.

## `allRows` (type: `string`):

Every row of the run, including notices; the type field tells them apart.

## `runStats` (type: `string`):

Counters for the run: rows, inputs, duplicates, errors.

# 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 = {
    "maxResultsPerSource": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/tiktok-shop-videos-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 = { "maxResultsPerSource": 20 }

# Run the Actor and wait for it to finish
run = client.actor("lergassy/tiktok-shop-videos-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 '{
  "maxResultsPerSource": 20
}' |
apify call lergassy/tiktok-shop-videos-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lergassy/tiktok-shop-videos-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/hbA9uoDIhoMiMLUBF/builds/nKMREIaJcKvESQaFF/openapi.json
