Operated by Sourcelane✓ verified
A TikTok audio discovery and metadata extraction connector that finds trending sounds and songs by keyword, enumerates videos that use a given sound, and returns full sound metadata without requiring a TikTok login or cookies. Operates in three modes: keyword-driven sound discovery (identifies distinct sounds used by videos matching keyword searches and reports sound metadata, platform-wide usage counts, and sample-based performance metrics including the top-performing sample video), video listing for a specific sound (returns per-video metadata and engagement metrics for videos that use a sound, with pagination to continue fetching additional pages), and detailed sound lookup (returns full metadata for one or more sounds, including title, duration, album, commercial/licensing and original-sound flags, artist accounts with handles and verified status, owner account for user-uploaded audio, cover art and audio play URLs, and creation date). Outputs structured audio and video metadata suitable for trend analysis, content strategy, music A&R tracking, influencer research, and sound-level analytics; supports sampling across multiple search pages to surface dozens to hundreds of distinct sounds per keyword search.
Verified Sep 28, 12:10 AM
$0.002
per sound
Up to 100 per call. Only pay for results returned; failed calls are refunded.
| Window | Uptime | Success rate | p50 | p95 | Calls |
|---|---|---|---|---|---|
| 24h | — | — | — | — | 0 |
| 7d | — | — | — | — | 0 |
| 30d | — | — | — | — | 0 |
Call it through Sourcelane's gateway or MCP server. We run the connector, apply your agent's spend guardrails, and bill only the results returned.
Call it via Sourcelane
curl -X POST https://cool-puffin-608.convex.site/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"tiktok-sounds-scraper","params":{"mode":"sounds","maxItems":5},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to scrape. 'Sounds by keyword' finds the distinct sounds/songs used by videos matching your keywords. 'Videos using a sound' lists the videos that use a given sound. 'Sound details' returns full metadata for each sound. |
keywords | array | optional | Search terms to discover sounds for, one per line (e.g. 'lofi beats', 'gym motivation'). Used in 'Sounds by keyword' mode. |
sounds | array | optional | TikTok sound/music page URLs (https://www.tiktok.com/music/-) or bare numeric sound IDs, one per line. Used in 'Videos using a sound' and 'Sound details' modes. |
sortBy | string | optional | How keyword search results are ordered before sounds are aggregated. Only used in 'Sounds by keyword' mode. |
datePosted | string | optional | Only consider videos posted within this window when discovering sounds. Only used in 'Sounds by keyword' mode. |
region | string | optional | Two-letter country code (e.g. US, GB, DE) to localise keyword search results. Leave empty for the default region. Only used in 'Sounds by keyword' mode. |
maxItems | integer | optional | Maximum number of rows to return per run (distinct sounds in 'Sounds by keyword' mode, videos in 'Videos using a sound' mode). Set 0 for no limit. Capped at 100 per call. |
pageId | string | optional | Paste NEXT_PAGE_ID from the previous run's Key-value store to fetch the next page of videos. Only used in 'Videos using a sound' mode with a single sound. |
Each result contains
| Field | Type | Description |
|---|---|---|
soundId | string | Sound Id |
title | string | Title |
author | string | Author |
album | null | Album |
durationSec | integer | Duration Sec |
isOriginalSound | boolean | Is Original Sound |
isCommercialMusic | boolean | Is Commercial Music |
usageCount | integer | Usage Count |
coverUrl | string | Cover Url |
playUrl | string | Play Url |
soundUrl | string | Sound Url |
keyword | string | Keyword |
sampleVideoCount | integer | — |
sampleTotalPlays | integer | — |
sampleTopVideoUrl | string | — |
sampleTopVideoPlays | integer | — |
scrapedAt | string | — |
Pick your tool and connect in under a minute. Then just ask — for example: “What are the top 25 TikTok videos for 'protein coffee' this week, and what hooks do they use?”
Connect Claude
Web, desktop and mobile. Paste one URL.
Adds the Sourcelane MCP server with your key as a header.
claude mcp add --transport http sourcelane https://cool-puffin-608.convex.site/mcp \
--header "Authorization: Bearer sl_live_your_agent_key"Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.
{
"mcpServers": {
"sourcelane": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://cool-puffin-608.convex.site/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer sl_live_your_agent_key"
}
}
}
}Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).
{
"mcpServers": {
"sourcelane": {
"url": "https://cool-puffin-608.convex.site/mcp",
"headers": {
"Authorization": "Bearer sl_live_your_agent_key"
}
}
}
}Save as .vscode/mcp.json. VS Code prompts for your key once.
{
"servers": {
"sourcelane": {
"type": "http",
"url": "https://cool-puffin-608.convex.site/mcp",
"headers": {
"Authorization": "Bearer ${input:sourcelane-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "sourcelane-key",
"description": "Sourcelane agent key",
"password": true
}
]
}Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.
https://sourcelane-amber.vercel.app/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://cool-puffin-608.convex.site/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"tiktok-sounds-scraper","params":{"mode":"sounds","maxItems":5},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://cool-puffin-608.convex.site/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "tiktok-sounds-scraper",
"params": {"mode":"sounds","maxItems":5},
"maxResults": 10,
},
timeout=300,
)
body = res.json()
print(body["receipt"]["chargedMicros"], "micro-USD for", body["receipt"]["results"], "results")
print(body["data"])—
0 reviews
Leave a review
Loading reviews…