TikTok Ad Library
2 endpoints.
GET /v1/tiktok/ads_ad
Ad Library Ad
Fetches one TikTok ad by ID or URL. It first checks Creative Center Top Ads (ads.tiktok.com), then TikTok's public transparency Ads Library (library.tiktok.com) when the ID is not a Top Ads material. Both sources return the same response shape. Fields TikTok does not expose for a public Ads Library ad are null, empty, or false as appropriate.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
ad_id required | query | string | Creative Center Top Ads material ID or URL, or a public Ads Library ad ID or library.tiktok.com detail URL. |
Request
curl "https://api.scrapall.bipsport.com/scapi/v1/tiktok/ads_ad?ad_id=1869335220395266" \
-H "X-Scapi-Key: YOUR_API_KEY"const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/tiktok/ads_ad?ad_id=1869335220395266", {
headers: { "X-Scapi-Key": "YOUR_API_KEY" }
});
const data = await res.json();import requests
r = requests.get(
"https://api.scrapall.bipsport.com/scapi/v1/tiktok/ads_ad?ad_id=1869335220395266",
headers={"X-Scapi-Key": "YOUR_API_KEY"},
)
print(r.json())Response 200 (sample)
{
"ad_title": "I thought this was a gimmick until I tried it! A wrinkled shirt, one button, and a few minutes later... ready to wear. Tap the link in bio and see why everyo...",
"brand_name": "",
"comment": 1,
"cost": 1,
"country_code": [
"TR"
],
"ctr": 0.5,
"favorite": false,
"has_summary": false,
"highlight_text": "",
"id": "7646829987799334920",
"industry_key": "label_22108000000",
"is_search": false,
"keyword_list": null,
"landing_page": "https://www.amazon.com/dp/B0DRTC8XBW?ref=cm_sw_r_cso_wa_apin_dp_71W8F02XC4M4QZRQ5RQN&ref_=cm_sw_r_cso_wa_apin_dp_71W8F02XC4M4QZRQ5RQN&social_share=cm_sw_r_cs...",
"like": 92,
"objective_key": "campaign_objective_reach",
"objectives": [
{
"label": "campaign_objective_reach",
"value": 5
}
],
"pattern_label": [],
"share": 1,
"source_key": 73,
"video_info": {
"vid": "v12044gd0000d8erq07og65h1cq991gg",
"duration": 89.767,
"cover": "https://p16-common-sign.tiktokcdn.com/tos-maliva-p-0068c799-us/oIbqBdvfEAiFpgvAOgrQHCF5R0mkDDLiEfvQDS~tplv-noop.image?dr=18692&refresh_token=2cdb79e2&x-expir...",
"video_url": {
"540p": "https://v16m-default.tiktokcdn.com/3e7ec770348dbc627fc02ea1e8417c25/6a2b7108/video/tos/maliva/tos-maliva-ve-0068c799-us/oIN2GPIRgHAUBHOeNfLk2HBSERoJeIALGC3jA...",
"720p": "https://v16m-default.tiktokcdn.com/9f16ea869602069b9fdad27dc113cb48/6a2b7108/video/tos/maliva/tos-maliva-ve-0068c799-us/ooEipQa9HbhJ4ChzASIngUPhBAdXiABIvxU2E..."
},
"width": 720,
"height": 1280
},
"voice_over": false,
"creative_center_url": "https://ads.tiktok.com/business/creativecenter/topads/7646829987799334920/pc/en",
"detail_analysis": null,
"interactive_time_analysis": {
"ctr": {
"metric": "retain_ctr",
"analysis": [
{
"second": 0,
"value": 0.048321828136158054
}
],
"duration": 91,
"highlight": [
1
],
"percentile": 0.99
},
"cvr": {
"metric": "retain_cvr",
"analysis": [
{
"second": 0,
"value": 0
}
],
"duration": 91,
"highlight": [],
"percentile": 0.99
},
"clicks": {
"metric": "click_cnt",
"analysis": [
{
"second": 0,
"value": 0.2631578947368421
}
],
"duration": 91,
"highlight": [
1
],
"percentile": 0.99
},
"conversion": {
"metric": "convert_cnt",
"analysis": [
{
"second": 0,
"value": 0
}
],
"duration": 91,
"highlight": [],
"percentile": 0.99
},
"remain": {
"metric": "play_retain_cnt",
"analysis": [
{
"second": 0,
"value": 1
}
],
"duration": 91,
"highlight": [],
"percentile": 0.99
}
},
"...": "1 more fields"
}GET /v1/tiktok/ads_search
Ad Library Search
Searches TikTok's public Ads Library using either query for a general search or advertiser_name for advertiser-specific results. Advertiser-name searches resolve the name through TikTok's advertiser typeahead first, then search the selected advertiser entity and return adv_biz_ids on each ad. You can pass adv_biz_ids with advertiser_name to pin the exact advertiser shown in TikTok's See all ads link. TikTok requires the name with the ID and ignores an ID-only search, so provide exactly one of query or advertiser_name. If TikTok has no matching advertiser entity, the API falls back to TikTok's name search. Results are global, sorted by the latest shown date, support cursor pagination, and include a public TikTok Ads Library URL for each ad.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
query | query | string | General ad search. Provide either query or advertiser_name, not both. |
advertiser_name | query | string | Advertiser name to resolve through TikTok's typeahead and search by advertiser entity. Falls back to TikTok's name search when no entity matches. Provide either advertiser_name or query, not both. |
adv_biz_ids | query | string | TikTok advertiser business ID from a See all ads link. Use it with advertiser_name to pin the exact advertiser. Required companion: advertiser_name; ID-only searches return 400 because TikTok ignores the ID without the name. |
next_cursor | query | string | Opaque cursor returned from the previous response. |
Request
curl "https://api.scrapall.bipsport.com/scapi/v1/tiktok/ads_search" \
-H "X-Scapi-Key: YOUR_API_KEY"const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/tiktok/ads_search", {
headers: { "X-Scapi-Key": "YOUR_API_KEY" }
});
const data = await res.json();import requests
r = requests.get(
"https://api.scrapall.bipsport.com/scapi/v1/tiktok/ads_search",
headers={"X-Scapi-Key": "YOUR_API_KEY"},
)
print(r.json())Response 200 (sample)
{
"advertiser_name": "Gymshark",
"resolved_advertiser_name": "GYMSHARK LTD",
"advertiser_matches": [
{
"name": "GYMSHARK LTD",
"ids": "7078923208527618049"
}
],
"ads": [
{
"id": "1871655924410641",
"url": "https://library.tiktok.com/ads/detail/?ad_id=1871655924410641",
"name": "GYMSHARK LTD",
"adv_biz_ids": "7078923208527618049",
"audit_status": "1",
"type": "2",
"first_shown_date": 1784937600000,
"last_shown_date": 1785024000000,
"videos": [
{
"video_url": "https://library.tiktok.com/api/v1/cdn/...",
"cover_img": "https://p16-common-sign.tiktokcdn.com/..."
}
],
"estimated_audience": "1K-10K",
"spent": "",
"impression": 0,
"show_mode": 1,
"image_urls": [],
"rejection_info": null,
"sor_audit_status": "1"
}
],
"total": 62344,
"has_more": true,
"next_cursor": "opaque cursor for the next page"
}