TikToktiktok.creative_center.ads.search
TikTok Creative Center top ads API
Search the Top Ads of TikTok's Creative Center by keyword: the ad's video, caption and brand, for one country over the last 7, 30 or 180 days. With view=full also likes, click-through rate, budget level, objective and industry. A showcase of ads that did well, without run dates.
GEThttps://api.okdata.online/v1/tiktok/creative_center/ads/search
Price
One call costs $0.002 and returns one page of about 20 ads. Collecting 1,000 ads takes about 50 calls, $0.10 in total. Each page is a separate call; failed calls are not charged.
Parameters
| Name | Type | Description |
|---|---|---|
query *required | string | Keywords, as a person would type them into the platform search box. |
country | string | Country as an ISO code; US by default. |
window | string307180 | Look back this many days; 30 by default. |
sort | stringrelevancelikes | Result order. |
cursor | string | Opaque cursor from page.next_cursor of the previous call. Each page is a separate call. |
view | stringcompactstandardfull | How much of each object comes back. full adds platform-specific fields under ext. |
fields | string | Comma-separated fields to keep, to save tokens. |
cursor, view and fields work the same on every endpoint: how requests work.
Returned fields
Each item is a Ad.
| Field | Type | Description |
|---|---|---|
id | string | Ad ID in the library. |
url | string | Link to the ad in the library. |
advertiser | AdvertiserRef | Who runs the ad. |
title | string | null | Headline, where the ad has one. |
text | string | Ad copy as plain text; empty when the ad has none. |
format | string | null | Creative format; dynamic means the platform assembles it per viewer (catalog ads). |
images | string[] | null | Image URLs of the creative. |
videos | string[] | null | Video URLs of the creative. |
landing_url | string | null | Where the ad leads. |
cta | string | null | Call-to-action button text. |
platforms | string[] | null | Where it is delivered, e.g. facebook, instagram. |
active | boolean | null | Whether the ad is still running. |
first_shown_at | string | null | First time or day shown, ISO 8601 in UTC. |
last_shown_at | string | null | Last time or day shown, ISO 8601 in UTC. |
reach | string | null | People reached, as the library publishes it: a bracket such as 1K-10K, or a count (the EU reach of a Meta ad); null where none is published. |
ext | object | Platform-specific extras. Only returned with view=full. |
Request
curl -G "https://api.okdata.online/v1/tiktok/creative_center/ads/search" \
-H "Authorization: Bearer $OKDATA_API_KEY" \
--data-urlencode 'query=coffee'import os
import requests
resp = requests.get(
"https://api.okdata.online/v1/tiktok/creative_center/ads/search",
headers={"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"},
params={"query": "coffee"},
timeout=60,
)
body = resp.json()
if body["code"] != "ok":
raise RuntimeError(f"{body['code']}: {body['message']} (charged: {body['charged']})")
for row in body["data"]["items"]:
print(row["advertiser"]["name"], row["first_shown_at"], row["text"][:60])
print("cost: $" + body["meta"]["billing"]["amount"])const url = new URL('https://api.okdata.online/v1/tiktok/creative_center/ads/search');
url.searchParams.set('query', "coffee");
const res = await fetch(url, {
headers: {
Authorization: `Bearer ${process.env.OKDATA_API_KEY}`,
},
});
const body = await res.json();
if (body.code !== 'ok') throw new Error(`${body.code}: ${body.message}`);
for (const row of body.data.items) {
console.log(row.advertiser.name, row.first_shown_at, row.text.slice(0, 60));
}
console.log('cost: $' + body.meta.billing.amount);{
"name": "call",
"arguments": {
"endpoint": "tiktok.creative_center.ads.search",
"params": {
"query": "coffee"
}
}
}Or ask an agent that has the MCP server connectedUse TikTok Creative Center top ads and sum up what these ads promise, which offers they push and since when.
Response
{
"code": "ok",
"request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
"data": {
"items": [
{
"id": "1879699044062290",
"url": "https://library.tiktok.com/ads/detail/?ad_id=1879699044062290",
"advertiser": {
"id": null,
"name": "Trail Kit Outdoors Ltd",
"url": null
},
"title": "Espresso is Back",
"text": "Espresso is Back",
"format": "video",
"images": null,
"videos": [
"https://library.tiktok.com/api/v1/cdn/video/1879699044062290.mp4"
],
"landing_url": null,
"cta": null,
"platforms": [
"tiktok"
],
"active": null,
"first_shown_at": "2026-11-10T08:00:00Z",
"last_shown_at": "2026-11-11T08:00:00Z",
"reach": "1K-10K"
}
]
},
"page": {
"next_cursor": "eyJvIjoyMH0",
"has_more": true
},
"warnings": [],
"meta": {
"capability": "tiktok.creative_center.ads.search",
"billing": {
"amount": "0.002",
"currency": "USD",
"balance_after": "9.998"
},
"unavailable": {},
"cached": false,
"replayed": false,
"fetched_at": "2026-11-11T08:00:00Z"
}
}Try it
This sends a real call to https://api.okdata.online and is billed as usual: at most $0.002. Failed calls are free. Your key goes only to that address and is never stored on this site.
Questions
How much does the TikTok Creative Center top ads API cost?
One call costs $0.002 and returns one page of about 20 ads. Collecting 1,000 ads takes about 50 calls, $0.10 in total. Each page is a separate call; failed calls are not charged.
How do I get the next page?
Pass page.next_cursor from the response back as the cursor parameter. When page.has_more is false there is nothing left. Every page is its own call at $0.002.
Do I need a TikTok account, cookies or a QR login?
No. You send only your okdata API key. The data is public data from TikTok; nothing is fetched with your own TikTok account.
Am I charged when a call fails?
No. Every error response says charged: false, except a timeout, which says charged: null until the outcome is known. Resend with the same Idempotency-Key and you are never charged twice.
What if TikTok does not show a field?
The field is null, and meta.unavailable names it with the reason: platform (the platform never shows it) or capability (we cannot fetch it yet).
Answers that use this endpoint
More TikTok endpoints
- TikTok video searchtiktok.videos.searchPost[]$0.002/call
- TikTok video detailtiktok.videos.getPost$0.002/call
- TikTok video commentstiktok.videos.comments.listComment[]$0.002/call
- TikTok account profiletiktok.users.getAccount$0.002/call
- TikTok Ads Library searchtiktok.ads.searchAd[]$0.004/call
- TikTok Shop product searchtiktok.shop.products.searchProduct[]$0.004/call
- TikTok Shop product detailtiktok.shop.products.getProduct$0.002/call
- TikTok Shop product reviewstiktok.shop.products.reviews.listReview[]$0.002/call