# TikTok Trending Sounds by Country (`adaptable_wheelhouse/tiktok-trending-sounds-by-country`) Actor

- **URL**: https://apify.com/adaptable_wheelhouse/tiktok-trending-sounds-by-country.md
- **Developed by:** [Mr T](https://apify.com/adaptable_wheelhouse) (community)
- **Categories:** Social media
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 sounds

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

### TikTok Trending Sounds by Country

Find the **sounds and songs trending on TikTok right now, in any country and in any of the 21 Explore categories**. The Actor reads a large sample of the videos TikTok's Explore feed shows in that country (1,000 per category by default) and ranks every sound by **how many of those videos use it**. Each sound comes with the plays and likes of those videos, the newest video, the top video and creators, and whether the sound is **cleared for commercial use**.

```json
{ "countries": ["US", "GB"], "categories": ["All"] }
```

No TikTok login, no cookies to supply, no browser. TikTok shows every country its own feed, so each country is read through IPs in that country: Nigeria gets Nigerian sounds, Germany gets German ones.

#### What you get

Real example, 30 October 2026, category All, 1,000 Explore videos sampled per country:

| country | # | sound | artist / author | videos in sample | plays of those videos | newest video | commercial use |
|---|---|---|---|---|---|---|---|
| US | 2 | Hut Hut Hut | Buyslow | 4 | 1,925,600 | 27 Oct 2026 | no |
| US | 3 | Ramalama (Bang Bang) | Róisín Murphy | 3 | 22,229,000 | 23 Oct 2026 | no |
| GB | 4 | Let Her Go (feat. Ed Sheeran) | Passenger | 5 | 25,513,200 | 25 Oct 2026 | no |
| DE | 4 | lovers rock | lia | 6 | 32,157,700 | 9 Sep 2026 | yes |
| NG | 1 | Loketo | MIK | 6 | 20,767,000 | 25 Oct 2026 | no |
| NG | 2 | Barcadi Via Sgidongo 2.0 | House Of Exclusives | 6 | 4,758,400 | 24 Oct 2026 | yes |

In that run, 15 US sounds, 33 GB sounds, 53 DE sounds and 54 NG sounds were used by 2 or more of the 1,000 videos. The US feed repeats less than smaller countries' feeds.

| Field | Description |
|---|---|
| `country`, `position` | Country of the feed, place in the ranking (most used first, then most creators, then most plays) |
| `musicTitle`, `musicAuthor`, `musicId`, `musicUrl` | The sound or song, its artist (or the creator of an original sound), the sound page on TikTok |
| `videosInSample`, `creatorsInSample`, `sampleShare`, `sampleSize` | How many sampled videos and creators use the sound, its share of the sample in %, how many videos were sampled |
| `samplePlays`, `sampleLikes`, `averagePlays` | Plays and likes of those videos, average plays per video |
| `newestVideoAt`, `newestVideoAgeDays` | When the newest of those videos was posted, to show whether the sound is still fresh |
| `topVideoUrl`, `topVideoPlays`, `topVideoAuthor`, `creators`, `videoUrls` | The most played video with the sound, up to 10 creators and videos using it |
| `musicIsOriginal`, `musicIsCommercial`, `musicIsCopyrighted` | Original sound (recorded by a creator) or a released song; TikTok's commercial-use flag; copyright flag |
| `musicDurationSeconds`, `musicCoverUrl`, `musicAudioUrl` | Length, cover art, TikTok's audio link (it expires within days) |
| `categories` | Explore categories where the sound was found (when several are sampled) |
| `isNew`, `previousPosition`, `scrapedAt` | Not in the previous run of this monitor, its place in the previous run (both empty on the first run), run time |

#### How to use it

1. Add **countries** as two-letter codes (US, GB, DE, BR, NG, PH, ...). Any country works.
2. Choose **Explore categories**: All (every topic) or a niche such as Singing & Dancing, Comedy, Food, Beauty Care, Sports, Fitness & Health, Outfit, Games, Animals or Cars.
3. Optional: **Minimum videos per sound** (2 or more keeps only sounds that are spreading), **Commercial-use sounds only**, **Songs only**, **Only new sounds** for scheduled runs.
4. Run, then download the dataset as CSV, Excel, JSON or HTML. It has two views: **Trending sounds** and **Videos, creators, audio**.

#### Get new trending sounds every day

1. Choose the countries and categories, set **Minimum videos per sound** to 2 and turn on **Only new sounds**.
2. Save as a task and add a schedule, for example every morning.
3. The **first run** returns the ranking and remembers it. **Every later run** returns only sounds that were not in the previous run.

The memory is kept in your account (key-value store `tiktok-trending-sounds`). Use a different **Monitor name** for each task.

#### Pricing

You pay per sound and per 100 videos sampled. There is no subscription.

| Event | Price |
|---|---|
| Sound in the results | $0.003 |
| 100 Explore videos sampled | $0.015 |

A fresh run of one country and category with 1,000 videos and 100 sounds costs $0.45. The first run of the day in a country and category reads the feed; other runs that day reuse that shared sample, and sampled videos are then free. Turn on **Read Explore again now** to sample again.

#### Limits

- The ranking is a sample of the Explore feed TikTok shows in the country, not TikTok's internal chart. A bigger sample (up to 5,000 videos) finds more sounds.
- A country with no residential IPs on Apify is skipped, and so is a feed that TikTok returns empty.
- TikTok's audio links (`musicAudioUrl`) expire within a few days.

# Actor input Schema

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

Two-letter country codes, one per line (US, GB, DE, BR, IN, NG, ZA, PH...). Any country: TikTok shows each country its own Explore feed, so each one is read through residential IPs in that country.

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

Explore feed categories to sample. All is the main feed (every topic). Pick a category to get the sounds trending in a niche, such as Singing & Dancing, Comedy or Food.

## `sampleVideos` (type: `integer`):

How many different Explore videos to read per category and country. Sounds are ranked by how many of them use each sound: a bigger sample finds more sounds. Charged per 100 videos read, unless today's shared sample is reused.

## `maxSounds` (type: `integer`):

The top N sounds per country, most used first.

## `minVideos` (type: `integer`):

Only sounds used by at least this many videos of the sample. 2 or more keeps sounds that are spreading, not one-offs. Empty or 1 keeps every sound.

## `commercialOnly` (type: `boolean`):

Only sounds TikTok marks as cleared for commercial use (the Commercial Music Library), safe for brand and business accounts.

## `excludeOriginalSounds` (type: `boolean`):

Skip "original sound" audio recorded by creators and keep released songs.

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

For scheduled runs. The first run returns the ranking and remembers it; every later run returns only sounds that were not in the previous run.

## `monitorName` (type: `string`):

Name of the memory used by isNew, previousPosition and Only new sounds. Use a different name for each task.

## `forceFresh` (type: `boolean`):

Ignore today's shared sample and read the feed again (charged per 100 videos read).

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

How many country and category feeds are read in parallel.

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

The feed is always read through Apify residential IPs in the chosen country (TikTok gives cloud IPs an empty feed). Your own proxy URLs replace them.

## `debugLog` (type: `boolean`):

Log every refused request.

## Actor input object example

```json
{
  "countries": [
    "US"
  ],
  "categories": [
    "All"
  ],
  "sampleVideos": 1000,
  "maxSounds": 100,
  "commercialOnly": false,
  "excludeOriginalSounds": false,
  "onlyNew": false,
  "monitorName": "default",
  "forceFresh": false,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "debugLog": false
}
```

# Actor output Schema

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

Rows saved to the dataset.

# 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 = {
    "countries": [
        "US"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("adaptable_wheelhouse/tiktok-trending-sounds-by-country").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 = { "countries": ["US"] }

# Run the Actor and wait for it to finish
run = client.actor("adaptable_wheelhouse/tiktok-trending-sounds-by-country").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 '{
  "countries": [
    "US"
  ]
}' |
apify call adaptable_wheelhouse/tiktok-trending-sounds-by-country --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,adaptable_wheelhouse/tiktok-trending-sounds-by-country"
        }
    }
}
```

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/0XSZH2qPauMs0RNKg/builds/tcHXSjYKoCwHtY9u4/openapi.json
