# TikTok Trends Scraper (Top Ads, Hashtags & Videos) (`locaihost/tiktok-trends`) Actor

Scrape TikTok Creative Center trends by country: top ads with landing page, budget and CTR percentile, trending hashtags with posts, views and 7-day popularity, and trending videos with views and engagement. Each row shows its rank change since your last run. No login. $1 per 1,000 items.

- **URL**: https://apify.com/locaihost/tiktok-trends.md
- **Developed by:** [locaihost data](https://apify.com/locaihost) (community)
- **Categories:** Social media, E-commerce, Marketing
- **Stats:** 1 total users, 1 monthly users, 97.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.55 / 1,000 trend items

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 Trends Scraper (Top Ads, Hashtags & Videos)

Get TikTok's trends by country from TikTok Creative Center: top ads with their landing pages, trending hashtags and trending videos, one clean row per item with its rank change since your last run, as JSON, CSV or Excel. No login, no cookies.

- **Find winning ad creatives:** see the top ads in a country, what they promote, where they send people and which countries they run in.
- **Spot rising hashtags early:** posts, views and a 7-day popularity curve for each trending hashtag, by country and industry.
- **Plan content around what's working:** trending videos with views, engagement rate and 6-second view rate.
- **Track a market daily:** schedule it, and get only what's new to each ranking plus how every item's rank moved.

### Quick start

Paste this into the **JSON** tab of the input and click **Start**:

```json
{"modes": ["hashtags", "videos", "topAds"], "countries": ["US"]}
```

You get 11 rows (3 hashtags, 4 trending videos, 4 top ads) in about 30 seconds. Add countries, industries or video categories for more: each combination is its own ranking.

### What data can I get?

Every row has a `type`: `top-ad`, `hashtag` or `video`.

| Group | Fields |
|---|---|
| Ranking (every row) | `rank`, `previousRank`, `rankChange` (positive = moved up), `isNewToRanking`, `previousRunAt`, `id` (TikTok's stable id), `country`, `countryName`, `periodDays`, `filterIndustry`, `filterCategory`, `sortBy`, `sourceUrl`, `listKey`, `scrapedAt` |
| Top ads | `title` (ad text), `brand`, `industry`, `objective`, `likes`, `ctrTopPercent` (CTR percentile, e.g. 26 = top 26%), `budget` (Low / Medium / High), `durationSec`, `videoUrl`, `coverUrl`, `width`, `height`, `detailsUrl` |
| Top ad details | `details.landingPage`, `details.landingDomain`, `details.runsInCountries`, `details.comments`, `details.shares`, `details.keywords`, `details.source` |
| Hashtags | `hashtag`, `hashtagName`, `hashtagUrl`, `posts`, `views`, `popularity` (daily 0 to 100 over 7 days), `trend` (`up` / `down` / `flat`), `industries`, `topCreators` (public handle, display name, followers) |
| Trending videos | `videoUrl`, `title` (caption), `createdAt`, `coverUrl`, `categories`, `author` (handle, display name, followers), `views`, `organicViews`, `engagementRate`, `sixSecondViewRate`, each also as `...Lifetime` |

One real row (US, last 7 days, run on 2026-10-18, shortened):

```json
{
  "type": "top-ad",
  "rank": 1,
  "previousRank": 1,
  "rankChange": 0,
  "isNewToRanking": false,
  "id": "7686735943021379602",
  "title": "Limited time flash discount! Save 10%-20% on trendy sunglasses ,Free shipping on 2+ pairs",
  "industry": "Clothing Accessories",
  "objective": "Conversions",
  "likes": 7,
  "ctrTopPercent": 26,
  "budget": "Low",
  "durationSec": 13.834,
  "detailsUrl": "https://ads.tiktok.com/business/creativecenter/topads/7686735943021379602/pc/en?countryCode=US&period=7",
  "details": {
    "shares": 17,
    "landingDomain": "goodsee.shop",
    "runsInCountries": ["US", "GB", "CA", "IT", "AU", "FR", "DE", "ES"],
    "source": "TikTok Ads Manager"
  },
  "country": "US",
  "periodDays": 7,
  "sortBy": "for_you"
}
```

The dataset has four views (**Overview**, **Top ads**, **Hashtags**, **Videos**) and exports to JSON, CSV, Excel or HTML. The run's `SUMMARY` record lists the rankings read, empty and failed, and the proxy tier used.

### How much does it cost?

You pay per item returned. There is no charge for Apify platform usage on top, and proxies, the browser and ad landing pages are included.

| Row | Free and Starter | Scale | Business |
|---|---|---|---|
| Trend item (a top ad, hashtag or trending video) | $1 per 1,000 | $0.75 per 1,000 | $0.55 per 1,000 |

Plus $0.00005 per run start. **Apify's free $5 monthly credit covers about 5,000 items.** Free-plan runs stop at 100 items each; any paid Apify plan removes the cap. A full US run of all three charts (11 items) costs about $0.01.

**What's free:** empty rankings, items skipped by `onlyNew`, rankings that failed, and countries a chart doesn't cover (skipped and named in the status message). Bad input ends the run with a message saying what to change, and nothing is charged. To cap a run's spend, set `maxItems` or **Maximum cost per run** in the run options: the run stops cleanly when it's reached.

### Limits, stated up front

The Actor reads only what TikTok shows a visitor who is **not logged in**. Since TikTok's 2025 redesign that is:

| Chart | Per ranking | Countries | Periods | Filters |
|---|---|---|---|---|
| Top ads | 4 ads (the ones shown publicly) | 28 | 7, 30, 180 days | 21 industries, 5 sort orders |
| Trending hashtags | top 3 | 27 | 7, 30, 90 days | 15 industries |
| Trending videos | top 4 | US, JP, VN, TH, ID | 7, 30 days | 5 categories, 3 sort orders |

- **More rankings, not deeper ones.** Only page 1 of each ranking is public. To cover more, ask for more rankings: all 27 hashtag countries × 15 industries is 405 rankings, up to 1,215 hashtags, in one run.
- **Periods are per chart.** Each chart uses its nearest own period to the one you pick; `periodDays` on every row says which.
- **Songs and creators aren't offered.** TikTok removed the public song chart, and the creator chart says "Coming soon" to logged-out visitors.
- **Media links expire.** `videoUrl` and `coverUrl` are TikTok CDN links that stop working after a few days. Download what you need to keep.
- **The same item can appear in several rankings** (for example a hashtag in two industries) and is a row, and an item, in each.
- **Personal data:** only what the charts show publicly. Creator handles, display names and follower counts are kept; bios, avatars and TikTok's internal user ids are not.

### Only new since last run, and schedules

Save your input as a task and schedule it daily under **Schedules** in Apify Console. Turn on `onlyNew` and each run returns only the items that ranking hasn't returned before, so you pay for new top ads and new trends, not the same ones again; skipped items cost nothing. Rank change is kept per task and per ranking either way: `previousRank`, `rankChange` and `isNewToRanking` compare with your previous run of that same ranking.

### Integrations: API, n8n, Make and AI agents

**API.** Run it and get the rows back in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/locaihost~tiktok-trends/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"modes": ["hashtags", "topAds"], "countries": ["US", "GB"]}'
```

Apify's API clients for Python and JavaScript work the same way.

**n8n, Make, Zapier, Google Sheets, Slack, webhooks.** Apify's built-in integrations send each run's dataset wherever you need it, for example a daily Slack message with the new top ads.

**AI agents (MCP).** Add this Actor to Claude, Cursor or any MCP client with `https://mcp.apify.com/?tools=locaihost/tiktok-trends`, then ask something like *"Which hashtags are trending in the UK beauty industry this week, and which top ads are running there?"*

### FAQ

#### How much does it cost to scrape TikTok trends?

$1 per 1,000 items on the Free and Starter plans, less on Scale and Business. Ad landing pages and proxies are included. Apify's free $5 monthly credit covers about 5,000 items.

#### Can I use it through the API or from Python?

Yes. Use the `run-sync-get-dataset-items` call above, or Apify's Python and JavaScript clients. Every run's data is also available as JSON, CSV or Excel from its dataset.

#### Can I use it from an AI agent?

Yes. Through the Apify MCP server (`https://mcp.apify.com/?tools=locaihost/tiktok-trends`) any MCP client can call it with charts and countries and read the rows back.

#### Is it legal to scrape TikTok Creative Center?

The Actor reads public Creative Center pages and the same public data calls those pages make for a visitor who isn't logged in. It never logs in, uses no account or cookies of its own, and returns no contact details of individuals. TikTok's terms restrict automated access, so check that your use fits them and the privacy rules that apply to you. Ad creatives are the advertisers' work: use them for research and inspiration, not republication. You are responsible for how you use the results.

#### Why are some fields empty?

`brand` is empty when the advertiser didn't give one, and `details` is null when `includeAdDetails` is off or the ad's detail page had no data. `previousRank`, `rankChange` and `isNewToRanking` are null on the first run of a ranking (there is nothing to compare with yet). Hashtags TikTok doesn't file under an industry have an empty `industries` list.

#### Why only 4 top ads per country?

That is what TikTok shows a logged-out visitor on each top-ads ranking. Pick industries and sort orders to read more rankings: each one adds up to 4 different ads.

### More from locaihost data

- [TikTok Creator Vetting](https://apify.com/locaihost/tiktok-creators): engagement rate, posting cadence and brand-deal share for the creators behind a trend.
- [TikTok Shop Product Scraper](https://apify.com/locaihost/tiktok-shop): products, prices and sales from TikTok Shop searches and categories.
- [Google Trends Scraper](https://apify.com/locaihost/google-trends): check whether a TikTok trend is also growing in search.
- [Website Traffic Checker](https://apify.com/locaihost/website-traffic): size up the landing domains the top ads send people to.

### Did it help?

If this saved you time, a quick rating on the Store helps other people find it.

### Support

Something not working, or a field you need? Open an issue on the **Issues** tab: we answer issues within 24 hours.

# Changelog

This Actor's version history is a separate document: https://apify.com/locaihost/tiktok-trends/changelog.md

# Actor input Schema

## `modes` (type: `array`):

Which Creative Center rankings to read. Top ads: the 4 shown publicly per country and filter, with landing page details. Trending hashtags: the top 3 per country, period and industry. Trending videos: the top 4 per country, period and category (US, Japan, Vietnam, Thailand, Indonesia only). Songs and creators are not offered: TikTok no longer shows them to logged-out visitors.

## `countries` (type: `array`):

One ranking is read per country (and per industry or category, if you pick any). Each chart covers its own set of countries, shown in brackets; a country a chart lacks is skipped for that chart and named in the status message.

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

Days the ranking covers. Each chart has its own periods (top ads 7/30/180, hashtags 7/30/90, videos 7/30); the nearest one is used and every row says which in periodDays.

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

Stop after this many rows. Leave empty for no limit (your maximum cost per run still applies).

## `industries` (type: `array`):

Leave empty for all industries together. Each industry picked becomes its own ranking per country. The hashtag chart has 15 of these industries; the others apply to top ads only.

## `videoCategories` (type: `array`):

Leave empty for all categories together. Each category picked becomes its own ranking per country.

## `topAdsSortBy` (type: `string`):

The order Creative Center ranks top ads in.

## `videosSortBy` (type: `string`):

The metric the video chart ranks by.

## `includeAdDetails` (type: `boolean`):

Open each top ad public detail page for its landing page, the countries it runs in, comments and shares. Included in the price; turn off for faster runs.

## `onlyNew` (type: `boolean`):

For daily schedules: return (and charge for) only items this saved task has not returned before in the same ranking. Rank change since your last run is filled in either way.

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

Apify Proxy by default: datacenter first, residential only if TikTok blocks (included in the price).

## Actor input object example

```json
{
  "modes": [
    "hashtags",
    "videos",
    "topAds"
  ],
  "countries": [
    "US"
  ],
  "period": "7",
  "industries": [],
  "videoCategories": [],
  "topAdsSortBy": "for-you",
  "videosSortBy": "views",
  "includeAdDetails": true,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `trends` (type: `string`):

Every ranked item: type, rank, rank change since your last run, the item's public data, and the country, period and filter of its ranking.

## `topAds` (type: `string`):

Top-ad rows with title, brand, industry, objective, likes, CTR percentile, budget level, landing page and the countries each ad runs in.

## `summary` (type: `string`):

Rankings read, empty and failed, items by type, proxy tier used, field-drift check and measured cost.

# 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 = {
    "modes": [
        "hashtags",
        "videos",
        "topAds"
    ],
    "countries": [
        "US"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("locaihost/tiktok-trends").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 = {
    "modes": [
        "hashtags",
        "videos",
        "topAds",
    ],
    "countries": ["US"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("locaihost/tiktok-trends").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 '{
  "modes": [
    "hashtags",
    "videos",
    "topAds"
  ],
  "countries": [
    "US"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call locaihost/tiktok-trends --silent --output-dataset

```

## MCP server setup

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

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/HxfjcAZ3boy4X9B82/builds/faYIFZUKSW9J1kv0y/openapi.json
