Operated by Sourcelane✓ verified
Track competitors' TikTok ads on a schedule and get only new ads each run: video creatives, ad copy, run dates and audience reach, with built-in dedupe.
A monitoring connector that continuously scans the public TikTok ad library to surface newly launched TikTok ads for specified advertisers and keywords. It deduplicates across runs, classifies ads by novelty (new launches, initial baseline captures, or previously seen), and returns per-ad records containing creative assets (video URL, cover image, additional images), ad copy text, advertiser identity and stable advertiser ID, public ad library link, first/last run dates, and disclosed audience metrics (audience band, impressions, spend where available). The connector maintains per-monitor memory of recent ad IDs (up to thousands per target) to detect only ads that launched since monitoring began, and it produces run-level summaries with counts of targets checked, ads scanned, and new ads found per advertiser or keyword. Data is sourced from the public TikTok ad library and is intended for repeated runs to track ad launches over time.
Verified Oct 25, 10:11 PM
$0.01
per new ad
Up to 100 per call. Only pay for results returned; failed calls are refunded.
Competitor ad monitoring
Get alerted the day a rival launches a new TikTok campaign
Creative swipe file
Automatically collect every new TikTok ad creative in a niche
Messaging and offer tracking
Spot new promotions, product launches and positioning shifts
Agency client reporting
Run one monitor per client and send each a regular list of new competitor ads
Market and trend research
Watch a keyword to see every new advertiser entering a category
Advertiser or brand names to watch, one per line, e.g.
Phrases to watch across all advertisers' ads, one per line, e.g.
Name for this monitor's memory of already-seen ads.
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-ads-monitor","params":{"advertisers":["Gymshark","Duolingo"],"maxItems":5},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
advertisers | array | optional | Advertiser or brand names to watch, one per line, e.g. 'Gymshark'. To lock onto one exact advertiser, add its ID from the TikTok ad library 'See all ads' link after a pipe: 'GYMSHARK LTD | 7647240890083328016'. |
keywords | array | optional | Phrases to watch across all advertisers' ads, one per line, e.g. 'protein powder'. Every advertiser running a matching ad is covered. |
onlyNew | boolean | optional | When on (recommended for scheduled runs), each run outputs only ads that are new since monitoring started and have not been output before. When off, every ad found is output with an isNew flag. |
skipBaselineOutput | boolean | optional | The first run for each advertiser or keyword records the ads currently live as a baseline. Turn this on to record the baseline silently (no rows, no per-ad charge) so you only ever receive ads that launch afterwards. |
monitorId | string | optional | Name for this monitor's memory of already-seen ads. Use a different ID for each separate monitor (e.g. one per client) so they track new ads independently. Change it to start over with a fresh baseline. |
maxAdsPerTarget | integer | optional | Upper limit on ads checked per advertiser or keyword in one run (new ads when 'Only output new ads' is on). Also sizes the first-run baseline. Set 0 for no limit. |
maxItems | integer | optional | Upper limit on rows output across all advertisers and keywords in one run. Ads not output because of this limit are kept unseen and output on the next run. Set 0 for no limit. Capped at 100 per call. |
Each result contains
| Field | Type | Description |
|---|---|---|
monitorId | string | — |
target | string | Target |
targetType | string | — |
status | string | Status |
isNew | boolean | — |
detectedAt | string | Detected |
adId | string | Ad ID |
adLibraryUrl | string | Ad Library |
advertiser | string | Advertiser |
resolvedAdvertiserName | string | — |
advBizId | string | — |
adText | string | Ad Text |
imageUrl | string | — |
videoUrl | string | Video |
coverImageUrl | string | Cover |
images | array | — |
adFormat | string | — |
auditStatus | string | — |
estimatedAudience | string | Audience Reach |
impressions | integer | — |
spend | null | — |
firstShownAt | string | First Shown |
lastShownAt | string | Last Shown |
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-ads-monitor","params":{"advertisers":["Gymshark","Duolingo"],"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-ads-monitor",
"params": {"advertisers":["Gymshark","Duolingo"],"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…