# TikTok Sound & Music Scraper - Videos by Song (`logiover/tiktok-sound-video-scraper`) Actor

Scrape TikTok videos by song. A TikTok sound scraper and API alternative to export music data to CSV/JSON. No login or API key.

- **URL**: https://apify.com/logiover/tiktok-sound-video-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Social media, Marketing
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Sound & Music Scraper - Videos by Song

Scrape every TikTok video that uses a given sound or song and track how a track spreads across TikTok. This TikTok sound scraper and music video crawler takes a music page URL or music id and returns all the videos riding it — with engagement stats, authors and the sound's own metadata. No login, no cookies, no API key.

One sound can power thousands of videos, making this the go-to tool for understanding how a track is catching on and who is driving it.

![No login required](https://img.shields.io/badge/%E2%9C%93_No_login-no_cookies-2ea44f?style=for-the-badge)
![Music marketing](https://img.shields.io/badge/Built_for-music_marketing-1f6feb?style=for-the-badge)
![Export](https://img.shields.io/badge/Export-JSON%C2%B7CSV%C2%B7Excel%C2%B7API-f59e0b?style=for-the-badge)
![Account safe](https://img.shields.io/badge/0%25-account_ban_risk-9333ea?style=for-the-badge)

---

### What you get

Each video using the sound is saved as one row, plus the sound's metadata:

- **videoId** and **url** — the direct link to the video.
- **description** — the full caption text.
- **postedAt** and **durationSec** — post date and clip length.
- **playCount** (views), **likeCount**, **commentCount**, **shareCount**, **saveCount** — complete engagement metrics, overflow-safe in the millions.
- **hashtags** — every hashtag on the video.
- **author** — `username`, `nickname` and `verified` flag.
- **soundId**, **soundTitle**, **soundAuthor**, **soundUrl** — the sound's id, title, artist and music-page link.
- **scrapedAt** — capture timestamp.

Export to **CSV, JSON, Excel or HTML**, or pull it through the **Apify API and webhooks**.

---

### Use cases

- **Music marketing & promotion** — measure how a track is being used and by whom.
- **Label A&R & sync** — spot songs gaining organic traction early.
- **Trend tracking** — follow a sound's growth curve over days or weeks on a schedule.
- **Creator discovery** — find the influencers powering a sound's spread.
- **Rights & royalties research** — audit usage of a track across TikTok.

---

### How to use

1. Add **sounds** — TikTok music page URLs or numeric music ids.
2. Set **maxVideosPerSound** to control how many videos to collect per sound.
3. (Optional) Set a global **maxResults** cap.
4. Click **Start** and export.

#### How to find a sound's URL or id

Open any TikTok video, tap the spinning **sound disc** (bottom-right) to open the music page. Its URL ends with the numeric **music id** — `.../music/original-sound-7608483104361122593`. Paste the full URL or just the id.

#### Example input

```json
{
  "sounds": [
    "https://www.tiktok.com/music/original-sound-7608483104361122593",
    "7608483104361122593"
  ],
  "maxVideosPerSound": 300
}
````

#### Example output

```json
{
  "videoId": "7600000000000000000",
  "url": "https://www.tiktok.com/@amelietjer/video/7600000000000000000",
  "description": "#yachting #superyacht #stewardess",
  "postedAt": "2026-02-18T14:05:00.000Z",
  "durationSec": 18,
  "playCount": 4600000,
  "likeCount": 211600,
  "commentCount": 1900,
  "shareCount": 7400,
  "saveCount": 22300,
  "hashtags": ["yachting", "superyacht", "stewardess"],
  "author": { "username": "amelietjer", "nickname": "Amélie", "verified": false },
  "soundId": "7608483104361122593",
  "soundTitle": "original sound",
  "soundAuthor": "Way Of House",
  "soundUrl": "https://www.tiktok.com/music/original-sound-7608483104361122593",
  "scrapedAt": "2026-06-03T18:00:00.000Z"
}
```

***

### FAQ

#### Does this need a TikTok login or API key?

No. The actor reads only public video data through residential proxies — no account, no cookies, no API key, and zero ban risk.

#### What counts as a "sound"?

Any TikTok music page — original sounds, licensed songs or remixes. Pass its URL or numeric id.

#### Will I get every video using the sound?

You'll get up to `maxVideosPerSound`; raise it for more. TikTok's reported total is included in the sound metadata and logs.

#### Can I track several sounds at once?

Yes. Add multiple URLs or ids to `sounds` in one run — results are de-duplicated across them.

#### Is this a TikTok API alternative for sound data?

Yes. It works as an unofficial TikTok sound API alternative — you get videos-by-song and engagement metrics without applying for TikTok's official API, keys or login.

#### How do I export TikTok sound data to CSV or JSON?

Run the scraper, then download the dataset as CSV, JSON, Excel or HTML, or pull it through the Apify API and webhooks. Every video using the sound is one row.

#### Can I scrape TikTok videos by song without an API or login?

Yes. This is a no-login TikTok music scraper: pass a music page URL or id and it extracts all videos using that song through residential proxies, no API key required.

***

### Pairs well with

- **TikTok Hashtag & Keyword Video Scraper** — find trending sounds, then drill in here.
- **TikTok Creator Lead Finder** — turn the creators using a sound into leads.

***

> **Responsible use.** This actor collects publicly available video data only. You are responsible for complying with TikTok's Terms and music-licensing rules when reusing data.

### Changelog

#### 2026-06-07

- Docs: added coverage for using this as a TikTok API alternative, exporting TikTok sound data to CSV/JSON, and scraping videos by song without an API or login.

#### 2026-06-05

- Reliability fix: results are no longer dropped by strict output validation — runs now complete cleanly even at high volume (thousands of results).
- Stability & performance hardening; fresh rebuild.

#### 2026-06-04

- Verified live & refreshed build — reliability/maintenance pass.

# Actor input Schema

## `sounds` (type: `array`):

TikTok music page URLs or music ids. Examples: 'https://www.tiktok.com/music/original-sound-7608483104361122593' or '7608483104361122593'.

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

How many videos to collect per sound.

## `maxResults` (type: `integer`):

Global cap on videos saved across all sounds. 0 = unlimited.

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

TikTok requires residential proxies. Leave the default (Apify Proxy · RESIDENTIAL group).

## Actor input object example

```json
{
  "sounds": [
    "7608483104361122593"
  ],
  "maxVideosPerSound": 30,
  "maxResults": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `soundTitle` (type: `string`):

Sound title

## `description` (type: `string`):

Video caption

## `playCount` (type: `string`):

Play count

## `likeCount` (type: `string`):

Like count

## `postedAt` (type: `string`):

Post date

## `url` (type: `string`):

Video URL

# 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 = {
    "sounds": [
        "https://www.tiktok.com/music/original-sound-7608483104361122593"
    ],
    "maxVideosPerSound": 30,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/tiktok-sound-video-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 = {
    "sounds": ["https://www.tiktok.com/music/original-sound-7608483104361122593"],
    "maxVideosPerSound": 30,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/tiktok-sound-video-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sounds": [
    "https://www.tiktok.com/music/original-sound-7608483104361122593"
  ],
  "maxVideosPerSound": 30,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call logiover/tiktok-sound-video-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=logiover/tiktok-sound-video-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Sound & Music Scraper - Videos by Song",
        "description": "Scrape TikTok videos by song. A TikTok sound scraper and API alternative to export music data to CSV/JSON. No login or API key.",
        "version": "1.0",
        "x-build-id": "8Wavx4G7n3CcMpI1M"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~tiktok-sound-video-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-tiktok-sound-video-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/logiover~tiktok-sound-video-scraper/runs": {
            "post": {
                "operationId": "runs-sync-logiover-tiktok-sound-video-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/logiover~tiktok-sound-video-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-tiktok-sound-video-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "sounds"
                ],
                "properties": {
                    "sounds": {
                        "title": "Sounds / music",
                        "type": "array",
                        "description": "TikTok music page URLs or music ids. Examples: 'https://www.tiktok.com/music/original-sound-7608483104361122593' or '7608483104361122593'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxVideosPerSound": {
                        "title": "Max videos per sound",
                        "minimum": 1,
                        "type": "integer",
                        "description": "How many videos to collect per sound.",
                        "default": 200
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Global cap on videos saved across all sounds. 0 = unlimited.",
                        "default": 0
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "TikTok requires residential proxies. Leave the default (Apify Proxy · RESIDENTIAL group).",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
