# TikTok Trending Hashtags Scraper (`memo23/tiktok-trending-hashtags-scraper`) Actor

Scrape trending TikTok hashtags from the official Creative Center — rank, view count, post count, 7-point popularity curve and top creators, for 27 countries and 7/30/120-day windows. No login, no token.

- **URL**: https://apify.com/memo23/tiktok-trending-hashtags-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media
- **Stats:** 13 total users, 13 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.50 / 1,000 trending hashtags

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/platform/actors/running/actors-in-store#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 Trending Hashtags Scraper — Rank, Views, Post Count & Popularity Curve

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-tiktok-trending.png" alt="TikTok Trending Hashtags Scraper" width="760">
</p>

**What is trending on TikTok right now, as data.** This Actor pulls the trending-hashtag rankings straight from TikTok's own **Creative Center** — the ranking TikTok publishes for advertisers — and returns them as structured rows: rank, total views, how many posts use the hashtag, a **7-point popularity curve**, and the top creators driving it.

> **No login. No cookies. No API token. Nothing to configure — press Start.**

| You pick | You get back |
|---|---|
| A country (or all 27) | That market's trending hashtags, ranked |
| A 7 / 30 / 120-day window | What is breaking now, or what has staying power |

### Why use it

- **Straight from TikTok.** The source is `ads.tiktok.com` Creative Center — TikTok's own trend ranking, not a third-party guess or a reposted list.
- **The popularity curve, not just a number.** Every hashtag carries a normalised time-series so you can see whether it is climbing or already cooling off.
- **Views *and* post count.** Both sides of the ratio, so you can spot hashtags with huge reach but little competition.
- **Top creators per hashtag.** Who is actually driving the trend, with creator id, nickname and avatar — an instant influencer shortlist.
- **27 markets in one run.** Leave the country empty and the Actor sweeps every market TikTok publishes, so you can compare trends across countries in one dataset.
- **Zero setup.** No TikTok account, no Creative Center login, no verification token.

### How it works

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-tiktok-trending.png" alt="How it works" width="820">
</p>

1. TikTok's Creative Center is a Remix app whose hashtag page is hydrated by a server-side data loader returning clean JSON.
2. The Actor calls that loader directly for each `(country × window)` pair — no browser, no verification token, so runs are fast and cheap.
3. Rows are normalised (views, post counts and curve values coerced to numbers) and pushed to the dataset.
4. If a run somehow returns nothing, it **fails loudly** instead of finishing green with an empty dataset — you are never billed for a silent empty run.

### ⬇️ Input

Two fields matter. Everything else has a sane default.

| Field | Type | Required | Notes |
|---|---|---|---|
| `country` | string | no | Two-letter code. **Leave empty to sweep all 27 supported markets.** Default `US`. |
| `days` | string | no | `7`, `30` or `120`. Default `7`. |
| `resultsLimit` | integer | no | Hard cap for the whole run. Default `100`. |
| `proxy` | object | no | Optional override; the Actor already routes through its own proxy. |

#### Supported countries

Argentina, Australia, Brazil, Canada, Colombia, Egypt, France, Germany, Indonesia, Israel, Italy, Japan, Malaysia, Mexico, Philippines, Saudi Arabia, Singapore, South Africa, South Korea, Spain, Taiwan, Thailand, Türkiye, United Arab Emirates, United Kingdom, United States, Vietnam.

These are the markets TikTok itself publishes trending hashtags for. **The country you pick is the country you get** — pick Indonesia and you get Indonesian trends, not a silent fallback to the US.

#### Examples

One market, what is hot this week:

```json
{
  "country": "US",
  "days": "7"
}
```

Every market at once, with a longer window — a cross-country trend comparison in a single dataset:

```json
{
  "country": "",
  "days": "30",
  "resultsLimit": 100
}
```

### Output

One row per trending hashtag. Real result, abridged:

```jsonc
{
  "type": "hashtag_trend",
  "hashtagId": "17843",
  "hashtagName": "tiktokshopbacktoschool",
  "rank": 1,
  "country": "US",
  "period": 7,
  "publishCount": 535798,
  "views": 300100000,
  "industryIds": [24],
  "popularityCurve": [
    { "timestamp": 1754006400, "value": 71 },
    { "timestamp": 1754092800, "value": 78 },
    { "timestamp": 1754179200, "value": 84 },
    { "timestamp": 1754265600, "value": 90 },
    { "timestamp": 1754352000, "value": 95 },
    { "timestamp": 1754438400, "value": 98 },
    { "timestamp": 1754524800, "value": 100 }
  ],
  "topCreators": [
    { "creatorId": "7012...", "nickname": "…", "avatarUrl": "https://p16-sign.tiktokcdn.com/…" }
  ],
  "link": "https://ads.tiktok.com/business/creativecenter/hashtag/tiktokshopbacktoschool/pc/en?countryCode=US&period=7",
  "scrapedAt": "2026-08-11T07:31:00.000Z"
}
```

#### Key fields

| Field | Description |
|---|---|
| `hashtagName` | The hashtag, without the `#`. |
| `rank` | Its position in TikTok's ranking for that country and window. |
| `views` | Total views across posts using the hashtag. |
| `publishCount` | How many posts use it — pair with `views` to find low-competition reach. |
| `popularityCurve[]` | Normalised 0–100 series over the window. Rising = still climbing. |
| `topCreators[]` | Creators driving the hashtag: `creatorId`, `nickname`, `avatarUrl`. |
| `industryIds` | TikTok's own industry classification for the hashtag. |
| `link` | The hashtag's Creative Center page, for a human to open. |

### Pricing

Pay-per-result. You pay for hashtags returned, nothing else. A run that returns nothing fails rather than billing you for an empty dataset.

### Notes & limitations

- **TikTok publishes the top 3 hashtags per country and window on this surface**, so a single-country run returns up to 3 rows and a full 27-country sweep returns up to 81. Sweep the countries, or vary the window, for volume.

  This is TikTok's own cap, and it is worth being precise about it, because several actors in this category advertise "top 100". TikTok's response says otherwise in its own words — the page asks for 20 records and the server answers:

  ```json
  { "pagination": { "hasMore": false, "limit": 3, "page": 1, "totalCount": 3 } }
  ```

  `totalCount: 3`, `hasMore: false`. There is no page 2 to fetch and no parameter that raises the limit for a caller who is not logged in. An Actor advertising 100 public trending hashtags will not return 100. This one tells you the real number up front and prices accordingly.

- **The 27 countries are TikTok's list, not ours.** They are read from the same response TikTok uses to build its own country dropdown, so a country you pick is a country that has data — you will never silently get US results back after asking for Indonesia.

- There is no worldwide aggregate, and industry-filtered rankings are not available to logged-out callers.

- `topCreators` and `industryIds` are populated by TikTok for most but not every hashtag.

- The Actor does not log in and does not touch any private or non-public TikTok surface.

### FAQ

**Do I need a TikTok or TikTok Ads account?** No. Nothing to log into, no token to paste.

**Is this the same data as the Creative Center website?** Yes — it is the exact ranking that page renders, read from the same data loader, just structured for you.

**Can I get more than 3 hashtags per country?** Not from the public surface — TikTok's own response reports `totalCount: 3, hasMore: false`, so there is nothing further to fetch. Run multiple countries and multiple windows to build a bigger picture: 27 countries × 3 windows = up to 243 rows.

**Other actors say "top 100" — who is right?** Their own documentation agrees with this one; one leading actor's README states that TikTok "controls how many unauthenticated public Trends records are available", and ships several advertised fields as `null`. The "100" is a maximum setting, not a quantity you receive.

**I want ad creatives, not hashtags.** Use [TikTok Ad Library & Top Ads Scraper](https://apify.com/memo23/tiktok-ads-scraper-cheerio) instead — same maintainer, same codebase.

### 🤖 For AI Agents & LLM Apps

- **Purpose:** return TikTok's official trending-hashtag ranking as structured rows with reach, competition and momentum signals.
- **Minimal input:** `{ "country": "US", "days": "7" }` — no auth.
- **Sweep input:** `{ "country": "", "days": "7" }` — all 27 markets.
- **Output fields:** `type, hashtagId, hashtagName, rank, country, period, publishCount, views, industryIds, popularityCurve[], topCreators[], link, scrapedAt`.
- **Billing:** pay-per-result; `resultsLimit` bounds cost. Up to 3 rows per country × window.
- **Do not** expect more than 3 hashtags per country/window — that is TikTok's public cap.

### ⚠️ Disclaimer

This Actor collects only publicly available information that TikTok publishes on its Creative Center for advertisers, without logging in or bypassing any access control. Use it in compliance with TikTok's Terms of Service and applicable law, including data-protection rules. You are responsible for how you use the data. This tool is not affiliated with or endorsed by TikTok or ByteDance Ltd.

### SEO Keywords

TikTok trending hashtags scraper, TikTok trends API, trending hashtags TikTok, TikTok Creative Center scraper, TikTok hashtag data, scrape TikTok trends, TikTok trending topics, hashtag popularity curve, TikTok hashtag views, TikTok viral hashtags, TikTok trend tracking, social media trend data, TikTok marketing research, TikTok hashtag analytics, trending hashtags by country.

# Actor input Schema

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

Which market's trending hashtags to collect. <b>Leave empty to scrape all 27 supported countries</b> in a single run. TikTok publishes trending hashtags only for the countries listed here — any other market has no data on this surface.

## `days` (type: `string`):

Look-back period the hashtag ranking is computed over. <b>7 days</b> catches what is breaking right now; <b>120 days</b> shows what has staying power.

## `resultsLimit` (type: `integer`):

Hard cap on the number of hashtags pushed to the dataset, across the whole run. A full 27-country sweep returns up to 81 hashtags, so the default covers it.

## `maxConcurrency` (type: `integer`):

Upper bound on parallel requests. Lower it if you see rate limiting.

## `minConcurrency` (type: `integer`):

Lower bound on parallel requests.

## `maxRequestRetries` (type: `integer`):

How many times a failed request is retried before it is given up on.

## `proxy` (type: `object`):

Leave empty — the actor routes all traffic through its built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies.

## Actor input object example

```json
{
  "country": "US",
  "days": "7",
  "resultsLimit": 100,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 3
}
```

# 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 = {
    "country": "US",
    "days": "7"
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/tiktok-trending-hashtags-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 = {
    "country": "US",
    "days": "7",
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/tiktok-trending-hashtags-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 '{
  "country": "US",
  "days": "7"
}' |
apify call memo23/tiktok-trending-hashtags-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/tiktok-trending-hashtags-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/x9r8D60K5GhNxrbNf/builds/hHNwKkdTK8g6Bmm5X/openapi.json
