# TikTok Shop Trending Products to Creative Briefs (`kingly_contest_7cb/tiktok-shop-creative-briefs`) Actor

Finds trending TikTok Shop products in your categories, filters out tiny-base spikes and restricted items, and writes a ready-to-shoot ad creative brief for each: hooks, angles, formats, shot list, CTA and Meta/TikTok compliance cautions.

- **URL**: https://apify.com/kingly_contest_7cb/tiktok-shop-creative-briefs.md
- **Developed by:** [Carina Hatton](https://apify.com/kingly_contest_7cb) (community)
- **Categories:** E-commerce, Social media, Marketing
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$500.00 / 1,000 creative brief generateds

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?

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

### What does TikTok Shop Trending Products to Creative Briefs do?

**TikTok Shop Trending Products to Creative Briefs** finds the products that are taking off on TikTok Shop in the categories you choose, throws out the noise, and writes a **ready-to-shoot ad creative brief** for the best ones. Each brief has a target customer, the core problem or desire, 3 scroll-stopping hooks, 2–3 angles, recommended formats for TikTok and Meta, a 30-second shot list, a CTA, and **compliance cautions** for Meta, TikTok and the FTC.

It is built for media buyers, UGC creators, creative strategists and e-commerce brands who want to turn TikTok Shop trend data into ads today, not in a week. Run it on the Apify platform, on a schedule, or through the API.

### Why use it?

- **Skip the spreadsheet.** Growth rankings can be topped by tiny bases: in one test pull, the fastest-growing item showed +74,189% growth on $66.95 of revenue. The Actor applies a minimum revenue and units threshold, then ranks on a blend of revenue, growth and units, so the pick is a real trend.
- **Stay out of ad-account trouble.** A pre-filter removes products that Meta and TikTok don't allow in ads (for example sexual wellness, medical devices, nicotine and weapons) and flags risky claims such as supplements, weight loss and OTC medicines.
- **Briefs grounded in data.** Every hook and format choice is tied to the real sales split (video vs LIVE vs shop window). The model is told never to invent statistics, and every number in the brief comes from the source data or is computed from it in code (for example price per piece).
- **Ready for your team.** One clean JSON record per product, plus a Markdown document you can paste into Notion, Google Docs or ClickUp.

### What data does it give you?

| Section | Fields |
|---|---|
| Product | Clean name, raw title, link, average price, category, country, launch date, listing flags (auction, LIVE-exclusive, bundle) |
| Trend signals | Revenue, units sold, revenue growth, video/LIVE/shop-window revenue and share, primary channel, commission, trend label, seasonality |
| Selection | Why it was picked: thresholds, source rank, rank after filtering, score and formula |
| Brief | Target customer, problem/desire, 3 hooks, angles, formats, shot list, CTA |
| Compliance | Risk level, pre-filter result, platform cautions, banned phrases |

### How to get creative briefs from TikTok Shop trends

1. Open the Actor and enter one or more **categories**, for example `Beauty & Personal Care`.
2. Pick the **country** and **period** (last 7 days works well for spotting trends early).
3. Set how many **briefs per category** you want.
4. Optionally change the **minimum revenue** and **minimum units** thresholds and the **ranking** mode.
5. Click **Start**. When the run finishes, open the **Output** tab for the briefs table, or the Markdown document for a readable version.

### How much will it cost?

This Actor uses **pay per event** pricing. You pay for briefs only:

| Event | When it is charged | Price |
|---|---|---|
| `brief-generated` | Once for each brief that passes validation and is saved to your dataset. Failed or skipped briefs are never charged. | $0.50 |

The **Pricing** tab is always the source of truth for current prices.

**TikTok Shop data.** To fetch fresh product data, this Actor starts a separate paid TikTok Shop scraper from the Apify Store. As far as we can tell, that scraper's per-product charges are billed separately, at the scraper's own price, through your own Apify account. They are not part of the brief price above. At the default of 25 products per category, that is 25 × $0.0027 = $0.0675 per category at the scraper's BRONZE price, plus the scraper's $0.005 start charge per run (about $0.0725 for one category). The scraper's Pricing tab has the current rates for each plan. We are still confirming exactly how Apify bills these nested runs, so check your Apify usage after your first run. Re-using an existing dataset (`sourceDatasetId`) skips the scraper and its charges.

The Actor checks your **maximum cost per run** before it fetches any data or writes anything. If the limit can't cover every brief you asked for, it writes fewer briefs per category. If it can't cover even one brief per category, it stops before anything is charged and tells you the minimum limit to set. It never charges past your limit for briefs.

### Input

| Field | Default | Notes |
|---|---|---|
| `categories` | Beauty & Personal Care | TikTok Shop category names |
| `country` | US | 15 markets supported |
| `period` | last7Day | last7Day, last30Day or lastDay |
| `maxProductsPerCategory` | 25 | Products screened before filtering (25–100; the TikTok Shop scraper returns at least 25) |
| `briefsPerCategory` | 1 | 1–10 |
| `minRevenueUsd` / `minUnitsSold` | 2,000 / 50 | Tiny-base filter |
| `rankingMode` | balanced | balanced, growth or revenue |
| `preFilterMode` | standard | strict also drops likely off-category items |
| `addAnalytics` | false | Adds creator and video counts at a higher source cost |

```json
{
    "categories": ["Beauty & Personal Care", "Health"],
    "country": "US",
    "period": "last7Day",
    "briefsPerCategory": 2
}
```

### Output

You can download the dataset extracted by TikTok Shop Trending Products to Creative Briefs in various formats such as JSON, HTML, CSV, or Excel. A shortened example record:

```json
{
    "product": { "name": "GOPURE Body Gua Sha", "sourceCategory": "Beauty & Personal Care", "listingFlags": [] },
    "trendSignals": { "period": "last7Day", "revenueUsd": 8730, "unitsSold": 291, "revenueGrowthPercent": 14350, "primarySalesChannel": "shop-window", "trendLabel": "breakout" },
    "selection": { "selectionRank": 1, "qualifiedPoolSize": 9, "score": 0.875 },
    "brief": { "hooks": [{ "line": "...", "type": "result-first", "visual": "..." }] },
    "compliance": { "riskLevel": "low", "preFilter": { "status": "pass", "matchedRules": [] } }
}
```

The run also saves `BRIEFS.md` (all briefs as Markdown), `RUN_SUMMARY` (the full ranking per category, token usage and charges) and `EXCLUDED` (products removed by the pre-filter, with the reason) in the key-value store.

### Tips

- Use **Fastest growing** as the source list to catch trends early, and **Top revenue** to find proven sellers to compete with.
- Raise `minRevenueUsd` in big markets such as the US to get only the strongest trends.
- Use **strict** pre-filter mode if you run ads for a single niche.
- Schedule the Actor weekly and send the Markdown to your creative team.

### FAQ, disclaimers and support

**Is the revenue data exact?** No. Revenue and units are estimates from the source data, in US dollars.

**Is the compliance section legal advice?** No. It is a working checklist. Always check the current Meta Advertising Standards and TikTok Advertising Policies before launching.

**Is scraping TikTok Shop legal?** The Actor only uses publicly available product data. It does not collect personal data. If you are unsure about your use case, consult a lawyer.

Found a bug or want a feature? Open an issue in the **Issues** tab. To use the Actor from your own code or automation tools, see the **API** tab.

# Actor input Schema

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

TikTok Shop category names, for example <b>Beauty & Personal Care</b>, <b>Health</b>, <b>Home Supplies</b>. Each category is ranked on its own.

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

TikTok Shop market. Revenue is in US dollars for every market. Briefs are written in English for a US-style audience.

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

Sales window for revenue, units sold and growth.

## `maxProductsPerCategory` (type: `integer`):

How many top products to pull per category before filtering and ranking. More products = better picks but a higher source-data cost. The TikTok Shop scraper returns at least 25 per category.

## `briefsPerCategory` (type: `integer`):

How many of the best-ranked products get a full creative brief in each category.

## `minRevenueUsd` (type: `integer`):

Skip products with less revenue in the period. Stops a $60 product with +70,000% growth from topping the list.

## `minUnitsSold` (type: `integer`):

Skip products that sold fewer units in the period.

## `rankingMode` (type: `string`):

How qualified products are ordered. Balanced = 45% revenue, 35% growth, 20% units (percentile ranks within the category).

## `sourceSortBy` (type: `string`):

Which TikTok Shop top list to screen. Fastest-growing surfaces new trends; top revenue surfaces proven sellers.

## `preFilterMode` (type: `string`):

Standard: drop products in categories Meta/TikTok ads prohibit (sexual wellness, medical devices, nicotine/cannabis, weapons, Rx drugs) and flag risky claims. Strict: also drop likely off-category and sexual-enhancement-adjacent products.

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

Adds creator, video and LIVE counts, reviews and price range from the source. The source charges a much higher per-product price for these rows.

## `dryRun` (type: `boolean`):

Uses placeholder briefs instead of the AI model and charges no brief events. Needs a fixture or an existing dataset; it never starts the paid source scraper.

## `sourceDatasetId` (type: `string`):

ID of a dataset from an earlier lergassy/tiktok-shop-top-products-scraper run. Skips the new source run.

## `fixtureFile` (type: `string`):

Path inside the Actor's fixtures/ folder, e.g. fixtures/test_run_raw.json. For development only.

## `fixtureRunId` (type: `string`):

Source run ID to record in meta.sourceRunId when using a fixture.

## `sourceMemoryMbytes` (type: `integer`):

Memory for the source scraper run. 128 MB was enough for 60 products in testing.

## `sourceMaxTotalChargeUsd` (type: `number`):

Hard cap on what the source scraper run may charge.

## Actor input object example

```json
{
  "categories": [
    "Beauty & Personal Care",
    "Health",
    "Home Supplies"
  ],
  "country": "US",
  "period": "last7Day",
  "maxProductsPerCategory": 25,
  "briefsPerCategory": 1,
  "minRevenueUsd": 2000,
  "minUnitsSold": 50,
  "rankingMode": "balanced",
  "sourceSortBy": "revenueGrowth",
  "preFilterMode": "standard",
  "addAnalytics": false,
  "dryRun": false,
  "sourceMemoryMbytes": 128,
  "sourceMaxTotalChargeUsd": 0.5
}
```

# Actor output Schema

## `briefs` (type: `string`):

No description

## `briefsMarkdown` (type: `string`):

No description

## `runSummary` (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 = {
    "categories": [
        "Beauty & Personal Care",
        "Health",
        "Home Supplies"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kingly_contest_7cb/tiktok-shop-creative-briefs").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 = { "categories": [
        "Beauty & Personal Care",
        "Health",
        "Home Supplies",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("kingly_contest_7cb/tiktok-shop-creative-briefs").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 '{
  "categories": [
    "Beauty & Personal Care",
    "Health",
    "Home Supplies"
  ]
}' |
apify call kingly_contest_7cb/tiktok-shop-creative-briefs --silent --output-dataset

```

## MCP server setup

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

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/GYm4hM1D36PvXycjR/builds/m2vgMBQFfnBIh6DdY/openapi.json
