# TikTok Sound Scraper: Videos, Creators & Stats by Sound (`parseforge/tiktok-sound-scraper`) Actor

Scrape every TikTok video that uses a sound or song: plays, likes, saves, creator stats, hashtags, sound metadata and download links. Export CSV, Excel, JSON, XML.

- **URL**: https://apify.com/parseforge/tiktok-sound-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Social media, Videos, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🎵 TikTok Sound Scraper

> 🚀 **Export every TikTok video that uses a sound in seconds.** Paste a sound link and get the videos behind it, 30 per page and as deep as the sound goes: 46 columns per video, with plays, likes, comments, shares, saves, the creator's follower count, hashtags, download links and the sound's own metadata. A 63,000-video sound answered its first 5 videos in 75 seconds in our verification run.

TikTok Sound Scraper turns a sound page (`https://www.tiktok.com/music/<name>-<id>`) into a flat dataset of the videos that use it. It reads the same list TikTok shows logged-out visitors on the sound page, so no login, cookie or API key is needed, and it keeps paging until you have the number of videos you asked for. One or many sounds per run, each identified by its URL, its numeric id or the `Name-<id>` slug.

Every video comes back with 46 fields: the cover image, id and link, caption, posting date as ISO time, the creator (username, nickname, id, verified flag, followers, following, total likes, video count, bio, avatar, private flag, profile link), five engagement counters plus reposts, duration and dimensions, ad and slideshow flags, caption language, play and download links, and the sound itself (id, title, author, original flag, length, video count as an integer, page link, audio link and cover). Hashtags and mentions are parsed into arrays.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Music labels and artists | Track how a release spreads on TikTok: who used it, when, and how far each video went |
| Brand and social teams | Measure a branded sound or a campaign audio by the videos and creators it attracted |
| Influencer marketers | Find creators who already use a sound, ranked by followers, plays or saves |
| Trend researchers | Watch a trending sound day by day with the date filter, newest first |
| Data scientists | Build datasets of videos sharing one audio, with captions, stats and creator data |

### 📋 What the TikTok Sound Scraper does

1. Reads each sound you give it (URL, id or `Name-<id>` slug) and opens its public TikTok page.
2. Collects the sound's videos in TikTok's order, newest first, 30 per page, until it reaches `maxVideosPerSound` or the end of the list.
3. Applies your filters as the videos come in: date range, minimum plays or likes, skip ads. With a filter or a sort on, it looks up to four times deeper so the rows you keep are worth it.
4. Writes one row per video with 46 fields, the sound's header (title, creator, total video count) on every row, and `error: null`.
5. A sound that does not exist, or an input that is not a sound, becomes its own error row with the reason, and is never billed.

> 💡 **Why it matters:** a sound is the one thing on TikTok that ties a trend, a song release or a campaign together across creators who never mention each other. The sound page lists those videos, but only 30 at a time and only inside the app or the browser. This Actor exports the list with the creator and engagement numbers you need to rank, contact or chart them.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

One row per video. Values TikTok can withhold read `Not Disclosed`; values that do not apply read `N/A`; flags read `Yes` or `No`.

| Field | Description |
|---|---|
| 🖼 `imageUrl` | Cover image of the video |
| 🆔 `id` | TikTok video id |
| 🔗 `url` | Public video link |
| 📝 `description` | Caption text |
| 📅 `createdAt` | Posting time, ISO 8601 |
| 👤 `authorUsername`, `authorNickname`, `authorId` | The creator |
| ✅ `authorVerified`, `authorPrivate` | Yes or No |
| 👥 `authorFollowers`, `authorFollowing`, `authorLikes`, `authorVideoCount` | Creator stats |
| 🗒 `authorBio`, `authorAvatarUrl`, `authorUrl` | Bio, avatar and profile link |
| ▶️ `playCount`, `likeCount`, `commentCount`, `shareCount`, `saveCount`, `repostCount` | Engagement counters |
| ⏱ `durationSeconds`, `width`, `height`, `definition` | Video format |
| 📣 `isAd`, `isSlideshow`, `textLanguage` | Paid promotion flag, photo-post flag, caption language |
| ⬇️ `videoPlayUrl`, `videoDownloadUrl` | Signed media links, valid for hours |
| 🎵 `soundId`, `soundTitle`, `soundAuthor`, `soundOriginal`, `soundDurationSeconds` | The sound the video uses |
| 🎬 `soundVideoCount` | Total videos on the sound page, as an integer (TikTok rounds it, e.g. 63,000) |
| 🎧 `soundUrl`, `soundPlayUrl`, `soundCoverUrl` | Sound page, audio file and cover |
| #️⃣ `hashtags`, `mentions` | Arrays parsed from the caption and TikTok's tags |
| 📥 `soundInput` | The sound as you entered it |
| 🕒 `scrapedAt` | When the row was collected |
| ❌ `error` | `null` on a data row; the reason on an error row |

Three rows from the verification run of September 25, 2026 on the sound "a negroni sbagliato w prosecco l hbo max" (signed media links shortened):

```json
[
  {
    "imageUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/64de96b40c20460183d240fb90ff2d32_1664628182~tpl...",
    "id": "7149523510589754670",
    "url": "https://www.tiktok.com/@hbomax/video/7149523510589754670",
    "description": "I'll take one of each. #houseofthedragon",
    "createdAt": "2022-10-01T12:43:01.000Z",
    "authorUsername": "hbomax",
    "authorNickname": "HBO Max",
    "authorId": "6803724582765200389",
    "authorVerified": "Yes",
    "authorFollowers": 6400000,
    "authorFollowing": 171,
    "authorLikes": 420400000,
    "authorVideoCount": 8538,
    "authorBio": "aspiring athletic director",
    "authorAvatarUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/6e7dfb4965d253595ea44dc3dfa56e22~tplv-tiktokx...",
    "authorPrivate": "No",
    "authorUrl": "https://www.tiktok.com/@hbomax",
    "playCount": 35700000,
    "likeCount": 2400000,
    "commentCount": 10800,
    "shareCount": 158200,
    "saveCount": 255332,
    "repostCount": 0,
    "durationSeconds": 20,
    "width": 576,
    "height": 1024,
    "definition": "540p",
    "isAd": "Yes",
    "isSlideshow": "No",
    "textLanguage": "en",
    "videoPlayUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c002-tx/d5284541dfbe4eeaacc31c4555...",
    "videoDownloadUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c004-tx/666628a00725404ba2aae370d3...",
    "soundId": "7149523537730997035",
    "soundTitle": "a negroni sbagliato w prosecco l hbo max",
    "soundAuthor": "HBO Max",
    "soundOriginal": "Yes",
    "soundDurationSeconds": 20,
    "soundVideoCount": 63000,
    "soundUrl": "https://www.tiktok.com/music/sound-7149523537730997035",
    "soundPlayUrl": "https://v16m.tiktokcdn-us.com/57b78b4ae5e47750fe3e8742bc51cb66/6ab73c39/video/tos/useast5/tos-useast5-v-27dcd7...",
    "soundCoverUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/6e7dfb4965d253595ea44dc3dfa56e22~tplv-tiktokx...",
    "hashtags": ["houseofthedragon", "drinkofchoice"],
    "mentions": [],
    "soundInput": "https://www.tiktok.com/music/a-negroni-sbagliato-w-prosecco-l-hbo-max-7149523537730997035",
    "scrapedAt": "2026-09-25T21:29:43.598Z",
    "error": null
  },
  {
    "imageUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/f48cc6a8f6ec42a7af356e91133d2690~tplv-tiktokx-o...",
    "id": "7228030565738450219",
    "url": "https://www.tiktok.com/@bilalahy/video/7228030565738450219",
    "description": "heavy on the last one",
    "createdAt": "2023-05-01T02:10:22.000Z",
    "authorUsername": "bilalahy",
    "authorNickname": "bilal",
    "authorId": "6810464949421425670",
    "authorVerified": "No",
    "authorFollowers": 4400000,
    "authorFollowing": 1220,
    "authorLikes": 442700000,
    "authorVideoCount": 1257,
    "authorBio": "Code: BLOL | Lucid\n•\nlivelovelarp\n•\nbiz: bilalahycollabs@gmail.com",
    "authorAvatarUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/335534855fc364e359adb1bcd38983ba~tplv-tiktokx...",
    "authorPrivate": "No",
    "authorUrl": "https://www.tiktok.com/@bilalahy",
    "playCount": 9200000,
    "likeCount": 2100000,
    "commentCount": 6152,
    "shareCount": 153700,
    "saveCount": 238324,
    "repostCount": 0,
    "durationSeconds": 7,
    "width": 720,
    "height": 1280,
    "definition": "720p",
    "isAd": "No",
    "isSlideshow": "No",
    "textLanguage": "en",
    "videoPlayUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c002-tx/ogzkppye4AlJNRwngI8iTHSnAb...",
    "videoDownloadUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c003-tx/os68IEB7h1RSUyGAibJzeRx9kf...",
    "soundId": "7149523537730997035",
    "soundTitle": "a negroni sbagliato w prosecco l hbo max",
    "soundAuthor": "HBO Max",
    "soundOriginal": "Yes",
    "soundDurationSeconds": 20,
    "soundVideoCount": 63000,
    "soundUrl": "https://www.tiktok.com/music/sound-7149523537730997035",
    "soundPlayUrl": "https://v16m.tiktokcdn-us.com/57b78b4ae5e47750fe3e8742bc51cb66/6ab73c39/video/tos/useast5/tos-useast5-v-27dcd7...",
    "soundCoverUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/6e7dfb4965d253595ea44dc3dfa56e22~tplv-tiktokx...",
    "hashtags": [],
    "mentions": [],
    "soundInput": "https://www.tiktok.com/music/a-negroni-sbagliato-w-prosecco-l-hbo-max-7149523537730997035",
    "scrapedAt": "2026-09-25T21:29:43.994Z",
    "error": null
  },
  {
    "imageUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast2a-p-0037-aiso/oQrJQC2Mk8D4D6j3BWeDQUnCENARH3eQIPbjPy~tplv-...",
    "id": "7221281216073420059",
    "url": "https://www.tiktok.com/@liv_gibby10/video/7221281216073420059",
    "description": "marriage #fyp #foryou ",
    "createdAt": "2023-04-12T21:39:26.000Z",
    "authorUsername": "liv_gibby10",
    "authorNickname": "Olivia Gibson",
    "authorId": "6744059330226635781",
    "authorVerified": "No",
    "authorFollowers": 335000,
    "authorFollowing": 5397,
    "authorLikes": 103100000,
    "authorVideoCount": 6122,
    "authorBio": "22\nIreland 🇮🇪 -> Missouri 🇺🇸\n👻olivia-gibson2\n📩 oliviagibson2014@gmail.com\nInsta- olivia_gibson312",
    "authorAvatarUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-maliva-avt-0068/b959ea523c3e04d270cb5180128856ad~tplv-tiktokx-cro...",
    "authorPrivate": "No",
    "authorUrl": "https://www.tiktok.com/@liv_gibby10",
    "playCount": 8500000,
    "likeCount": 1900000,
    "commentCount": 5508,
    "shareCount": 148900,
    "saveCount": 202774,
    "repostCount": 0,
    "durationSeconds": 7,
    "width": 576,
    "height": 1024,
    "definition": "540p",
    "isAd": "No",
    "isSlideshow": "No",
    "textLanguage": "en",
    "videoPlayUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast2a/tos-useast2a-ve-68c810-euttp/oUNbJ5BnGAhfxEGIQExGLBA...",
    "videoDownloadUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/no1a/tos-no1a-ve-68c710-no/o0yPPenuREDevIKCDuDQrUBASgjQiWCjNk...",
    "soundId": "7149523537730997035",
    "soundTitle": "a negroni sbagliato w prosecco l hbo max",
    "soundAuthor": "HBO Max",
    "soundOriginal": "Yes",
    "soundDurationSeconds": 20,
    "soundVideoCount": 63000,
    "soundUrl": "https://www.tiktok.com/music/sound-7149523537730997035",
    "soundPlayUrl": "https://v16m.tiktokcdn-us.com/57b78b4ae5e47750fe3e8742bc51cb66/6ab73c39/video/tos/useast5/tos-useast5-v-27dcd7...",
    "soundCoverUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/6e7dfb4965d253595ea44dc3dfa56e22~tplv-tiktokx...",
    "hashtags": ["fyp", "foryou"],
    "mentions": [],
    "soundInput": "https://www.tiktok.com/music/a-negroni-sbagliato-w-prosecco-l-hbo-max-7149523537730997035",
    "scrapedAt": "2026-09-25T21:29:44.095Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

- **Saves and reposts, not just likes.** `saveCount` and `repostCount` come with every video, next to plays, likes, comments and shares. Saves are the counter that best predicts a sound's second wave.
- **The sound's own numbers on every row.** Title, author, original-sound flag, length, cover, audio link and the page's total video count as an integer, so a CSV of several sounds sorts and pivots without cleanup.
- **Filters and sorting built in.** Date range (exact dates or "7 days"), minimum plays and likes, skip ads, and sort by newest, oldest, plays, likes, comments or shares. Sounds list newest first, so a date floor stops the paging early and keeps scheduled runs cheap.
- **Any way you name the sound.** The sound URL, the bare id or the `Name-<id>` slug, one per line, several per run.
- **Honest errors.** A sound that does not exist comes back as its own row with the reason and is never billed.
- **No account, no cookies.** It reads what TikTok shows logged-out visitors, from Apify's own connection by default, and steps up to Apify Proxy on its own if TikTok pushes back.

### 📈 How it compares to alternatives

The three rivals below also list a sound's videos. The table states only what their own Store listings and input forms show, checked on September 25, 2026.

| Feature | ParseForge TikTok Sound Scraper | clockworks/tiktok-sound-scraper | apidojo/tiktok-music-scraper | novi/tiktok-sound-api |
|---|---|---|---|---|
| Input | Sound URL, id or slug | Sound URL or slug | Sound query | Sound URL |
| Videos per sound | Up to 100,000, paged 30 at a time | `resultsPerPage` | Per listing | Per listing |
| Save and repost counts | Included | Not in its sample output | Not in its listing | Not in its listing |
| Sound video count | Integer on every row | Text ("80.3K") | Not in its listing | Not in its listing |
| Date, plays and likes filters, sorting | Included | Not in its input form | Not in its listing | Not in its listing |
| Media download to a store | Links only | Add-on | Not in its listing | Not in its listing |
| Transcript | Not offered; use a transcript Actor | Add-on, per minute | Not in its listing | Not in its listing |

Ceiling to know: TikTok's sound page serves 30 videos per request and lists them newest first. We paged past 390 videos of one sound without hitting a limit; the total shown on the page (`soundVideoCount`) is TikTok's rounded figure, not an exact count.

### 🚀 How to use

1. [Create a free Apify account](https://console.apify.com/sign-up?fpr=vmoqkp) and get $5 of monthly credit.
2. Open the TikTok Sound Scraper in the Apify Store.
3. Paste one or more sound links into **TikTok sound URLs or IDs**. To find one, open any video, tap the spinning record or the sound name at the bottom, and copy the link.
4. Set **Max videos per sound**, add a date or engagement filter if you want, and click **Start**.
5. Download the dataset as CSV, Excel, JSON or XML, or schedule the run to follow the sound over time.

A run that tracks one sound's last week, most played first:

```json
{ "soundUrls": ["https://www.tiktok.com/music/a-negroni-sbagliato-w-prosecco-l-hbo-max-7149523537730997035"], "publishedAfter": "7 days", "sortBy": "most-played", "maxVideosPerSound": 200 }
```

### 💼 Business use cases

#### 🎧 Music marketing and A\&R

A label seeds a song on TikTok and wants to know if it caught. Run the sound daily with `publishedAfter: "1 day"` and chart new videos, plays and saves per day; `authorFollowers` shows whether the users are fans or creators with reach.

#### 📣 Branded sound campaigns

A brand launches a campaign audio. Export every video that used it, filter `isAd` to separate paid placements from organic use, and hand the creator list with follower counts to the partnerships team.

#### 🤝 Creator sourcing

An agency needs creators for a niche. Take the sounds that dominate that niche, sort by `authorFollowers` or `saveCount`, and shortlist creators who already perform on that audio, with their bio and profile link ready for outreach.

#### 📊 Trend and competitor monitoring

A social team watches rival campaigns. Each rival sound becomes one row set with `soundVideoCount` on every row, so a weekly pivot shows which audio is growing and which is fading.

### 🔌 Automating TikTok Sound Scraper

- **Make and Zapier:** start a run when a sound link lands in a form or a sheet, then push the rows to a Google Sheet or a CRM.
- **Slack:** post the day's new videos for a tracked sound to a channel with the Apify Slack integration.
- **Airbyte:** load the dataset into your warehouse on a schedule.
- **GitHub and Google Drive:** archive each run's CSV next to your campaign files.
- **Apify API and clients:** call the Actor from JavaScript or Python with the [ApifyClient](https://docs.apify.com/api/client/js?fpr=vmoqkp) and read the dataset directly.

### 🌟 Beyond business use cases

- **Research:** study how a piece of audio spreads across creators, languages (`textLanguage`) and time.
- **Personal:** keep a list of every video made with a sound you love, with links you can play.
- **Non-profit:** track an awareness campaign's audio and the reach it earned.
- **Experimentation:** feed captions and stats to a model and test what predicts a sound's second wave.

### 🤖 Ask an AI assistant about this scraper

Copy this into ChatGPT, Claude or Cursor:

```
Use the Apify Actor "parseforge/tiktok-sound-scraper" to collect the TikTok videos that use a sound. Input: { "soundUrls": ["<sound url or id>"], "maxVideosPerSound": <n>, "publishedAfter": "<7 days>", "sortBy": "<most-played|newest|most-liked>" }. Each row has the video's stats, the creator's followers, hashtags and the sound's metadata. Summarize which creators drove the most plays and saves.
```

### ❓ Frequently Asked Questions

#### 🔑 Do I need a TikTok account or API key?

No. The Actor reads what TikTok shows logged-out visitors on the sound page.

#### 🔗 What counts as a sound link?

The page you land on when you tap a sound in the app: `https://www.tiktok.com/music/<name>-<id>`. The numeric id alone or the `Name-<id>` slug also work.

#### 🔢 How many videos can I get from one sound?

As many as TikTok pages out: 30 per request, newest first, with no depth limit found in our tests (390+ videos of one sound). Set `maxVideosPerSound` to what you need.

#### 📅 Can I get only recent videos?

Yes. `publishedAfter` accepts a date or a relative span like "7 days". Sounds list newest first, so the Actor stops paging once it passes your floor.

#### 🎯 Can I filter by engagement?

Yes: `minPlays`, `minLikes` and `excludeAds`. With a filter on, the Actor scans up to four times more videos than you asked for so the kept rows fill your quota.

#### 🎬 What is `soundVideoCount`?

The total TikTok shows on the sound page, turned into an integer (63,000 for "63K"). TikTok rounds it, so treat it as a size, not an exact count.

#### ⬇️ Does it download the videos?

It returns the video's play and download links and the sound's audio link. They are signed by TikTok and expire within hours, so fetch the files soon after the run.

#### 🌍 Where was each video posted from?

The sound list does not carry the posting country. Pass the video links to a TikTok video scraper that reads each video's own page if you need it.

#### 🧭 Does it need a proxy?

Usually not. If TikTok holds back the list, the Actor retries on Apify datacenter and then residential proxies by itself. You can also set the proxy in the input.

#### ❌ What happens with a wrong link?

An input that is not a sound, or a sound TikTok does not know, becomes an error row with the reason. Error rows are never billed.

#### 📦 How many results per run?

Free plan: 10 videos as a preview. Paid plans: up to 1,000,000 videos per run.

#### ⚖️ Is this an official TikTok product?

No. It is an independent tool that reads only public TikTok data.

### 🔌 Integrate with any app

Run it through the [Apify API](https://docs.apify.com/api/v2?fpr=vmoqkp), the JavaScript and Python [ApifyClient](https://docs.apify.com/api/client/js?fpr=vmoqkp), or Apify's integrations with Make, Zapier, Slack, Airbyte, GitHub and Google Drive. Webhooks can start a workflow the moment a run finishes.

### 🔗 Recommended Actors

- [TikTok Profile Scraper](https://apify.com/parseforge/tiktok-profile-scraper?fpr=vmoqkp): creator profiles with followers, likes, bio and recent videos.
- [TikTok Comments Scraper](https://apify.com/parseforge/tiktok-comments-scraper?fpr=vmoqkp): every comment on a video, replies included.
- [TikTok Hashtag Analytics Scraper](https://apify.com/parseforge/tiktok-hashtag-analytics-scraper?fpr=vmoqkp): views and video counts for hashtags with their top videos.
- [TikTok Shop Product Scraper](https://apify.com/parseforge/tiktok-shop-scraper?fpr=vmoqkp): products, prices and units sold on TikTok Shop.
- [TikTok Creative Center Top Ads Scraper](https://apify.com/parseforge/tiktok-creative-center-top-ads-scraper?fpr=vmoqkp): the top ads TikTok showcases, by region and industry.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more social media and video scrapers.

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA) with your run ID, your input and what you expected.

> **⚠️ Disclaimer:** this is an independent tool, not affiliated with, endorsed by or sponsored by TikTok or ByteDance. It collects only publicly available data. You are responsible for using the data in compliance with TikTok's terms and applicable laws.

# Actor input Schema

## `soundUrls` (type: `array`):

One sound per line: the URL of a sound page (https://www.tiktok.com/music/<name>-<id>), its numeric id (7149523537730997035) or the slug-id form (Oh-No-Instrumental-6889520563052645121). Open any video, tap the spinning record or the sound name, and copy the link.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `maxVideosPerSound` (type: `integer`):

How many videos to collect from each sound, newest first. TikTok serves them 30 per page and keeps paging as far as the sound goes.

## `publishedAfter` (type: `string`):

Keep only videos posted on or after this date: YYYY-MM-DD, or relative like "7 days", "2 weeks", "3 months". Sounds list newest first, so this also stops paging early.

## `publishedBefore` (type: `string`):

Keep only videos posted on or before this date (YYYY-MM-DD).

## `minPlays` (type: `integer`):

Skip videos with fewer plays than this.

## `minLikes` (type: `integer`):

Skip videos with fewer likes than this.

## `excludeAds` (type: `boolean`):

Drop videos TikTok flags as paid promotion.

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

Order of the rows in the dataset. "default" keeps TikTok's order (newest first).

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

Off by default. If TikTok blocks the connection the Actor steps up to Apify datacenter and then Residential proxies on its own.

## Actor input object example

```json
{
  "soundUrls": [
    "https://www.tiktok.com/music/a-negroni-sbagliato-w-prosecco-l-hbo-max-7149523537730997035"
  ],
  "maxItems": 10,
  "maxVideosPerSound": 100,
  "excludeAds": false,
  "sortBy": "default",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields: cover, creator, caption, plays, likes, date, sound

## `fullData` (type: `string`):

Complete dataset with all 46 fields

# 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 = {
    "soundUrls": [
        "https://www.tiktok.com/music/a-negroni-sbagliato-w-prosecco-l-hbo-max-7149523537730997035"
    ],
    "maxItems": 10,
    "maxVideosPerSound": 100,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/tiktok-sound-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 = {
    "soundUrls": ["https://www.tiktok.com/music/a-negroni-sbagliato-w-prosecco-l-hbo-max-7149523537730997035"],
    "maxItems": 10,
    "maxVideosPerSound": 100,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/tiktok-sound-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 '{
  "soundUrls": [
    "https://www.tiktok.com/music/a-negroni-sbagliato-w-prosecco-l-hbo-max-7149523537730997035"
  ],
  "maxItems": 10,
  "maxVideosPerSound": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call parseforge/tiktok-sound-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/tiktok-sound-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/PQaOGaTVn8kAMoDta/builds/Me0BreO9eMvg7vUaR/openapi.json
