Operated by Sourcelane✓ verified
Scrape the best-performing TikTok ads from Creative Center by country, industry and objective - video, likes, CTR rank, budget, landing page and brand.
A scraper that pulls top-performing TikTok ads from TikTok Creative Center across global markets, filtering by industry, campaign objective and language. It extracts ad metadata (title, brand, industry and campaign objective), creative assets (video files in multiple resolutions, cover image, duration and dimensions), performance metrics (likes, comments, shares, click-through rate rank/percentile, spend tier), serving details (markets where the ad ran, landing page, source, voiceover and search-ad flags) and a link to the ad in Creative Center. The connector automatically splits broad searches into industry/objective/language slices and deduplicates results across slices and countries; video and cover URLs are signed and time-limited.
Verified Oct 25, 10:11 PM
$0.002
per ad
Up to 100 per call. Only pay for results returned; failed calls are refunded.
Ad creative research
Identify winning hooks, formats and lengths by industry and market
Competitor analysis
Discover which brands are advertising, what they promote and where they send traffic
Creative briefs and swipe files
Build a library of proven TikTok ads for teams or clients
Market research
Compare ad performance across markets (US, UK, Australia, Germany, Japan, etc.)
UGC and agency prospecting
Find advertisers actively investing in TikTok
Markets to pull top-performing ads from.
Only return ads from these industries or sub-industries.
Only return ads run with these campaign objectives.
Only return ads in these languages.
Optional settings
| 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://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"tiktok-top-ads-scraper","params":{"countries":["US"],"maxItems":5},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
countries | array | required | Markets to pull top-performing ads from. Each country is searched separately and results are de-duplicated. |
period | string | optional | Rank ads by performance over the last 7, 30 or 180 days. |
sortBy | string | optional | Which performance metric ranks the ads within each filter slice. |
industries | array | optional | Only return ads from these industries or sub-industries. Leave empty for all industries. |
objectives | array | optional | Only return ads run with these campaign objectives. Leave empty for all objectives. |
adLanguages | array | optional | Only return ads in these languages. Leave empty for all languages. |
includeDetails | boolean | optional | Also fetch comments, shares, landing page, every country the ad ran in, and the ad source (one extra request per ad). |
maxItems | integer | optional | Maximum number of unique ads to return. 0 = as many as the filters allow. Capped at 100 per call. |
Each result contains
| Field | Type | Description |
|---|---|---|
adId | string | Ad ID |
adTitle | string | Ad title |
brandName | string | Brand |
industry | string | Industry |
industryId | string | — |
parentIndustry | string | — |
objective | string | Objective |
likes | integer | Likes |
comments | integer | Comments |
shares | integer | Shares |
ctrTopPercent | integer | — |
ctrRank | string | CTR rank |
budgetLevel | string | Budget |
videoDurationSec | integer | Duration (s) |
videoWidth | integer | — |
videoHeight | integer | — |
coverUrl | string | Cover |
videoUrl | string | Video |
videoUrls | object | — |
landingPage | null | Landing page |
countriesShown | array | — |
source | string | — |
hasVoiceOver | boolean | — |
isSearchAd | boolean | — |
creativeCenterUrl | string | Creative Center |
country | string | Country |
period | integer | — |
sortBy | string | — |
scrapedAt | string | — |
Pick your tool and connect in under a minute. Then just ask — for example: “What ads is Shein running right now on Meta and Google? Group them by offer.”
Connect Claude
Web, desktop and mobile. One click, then confirm.
Adds the Sourcelane MCP server with your key as a header.
claude mcp add --transport http sourcelane https://api.usesourcelane.com/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://api.usesourcelane.com/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://api.usesourcelane.com/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://api.usesourcelane.com/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://usesourcelane.com/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"tiktok-top-ads-scraper","params":{"countries":["US"],"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://api.usesourcelane.com/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "tiktok-top-ads-scraper",
"params": {"countries":["US"],"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…