InsightSocial API
TikTok

TikTok Ads Top API reference

Your first 10 calls are free, no card needed. Pricing and FAQ

Get a free API key
Example request
curl "https://api.insightsocial.app/v1/tiktok/ads/top" \
  -H "x-api-key: $INSIGHTSOCIAL_API_KEY"

Step-by-step: Ad library aggregation

GET
/v1/tiktok/ads/top

Returns TikTok's Creative Center leaderboard of top-performing ads for a market and time window, each with click-through rate, board rank, like count, industry, objective, and the ad video.

Use it to find ad creative that actually performed. It is one window with no cursor, so set limit for depth and change country, period, or order_by for a different board.

Metered: 100–1000 credits. We reserve the ceiling when the call starts and charge what it actually used when it finishes.

x-api-key<token>

Your key from the dashboard. It starts with isk_.

In: header

Query Parameters

country?string

Creative Center market to read the board for. Defaults to US. This is the market the ads ran in, not the language they are in.

Value in

  • "US"
  • "CA"
  • "MX"
  • "BR"
  • "GB"
  • "DE"
  • "FR"
  • "IT"
  • "ES"
  • "NL"
  • "PL"
  • "SE"
  • "TR"
  • "SA"
  • "AE"
  • "AU"
  • "JP"
  • "KR"
  • "ID"
  • "TH"
  • "VN"
  • "MY"
  • "PH"
  • "SG"
period?string

Lookback window in days: 7, 30 or 180. Defaults to 30. A longer window is a different board, not more rows.

Value in

  • "7"
  • "30"
  • "180"
order_by?string

How TikTok ranks the board: for_you (TikTok's own blend, the default), ctr, impression, like, cvr, play_2s_rate or play_6s_rate.

Value in

  • "for_you"
  • "impression"
  • "ctr"
  • "play_2s_rate"
  • "play_6s_rate"
  • "cvr"
  • "like"
ad_format?string

Restrict to Spark ads (ads boosted from an organic post) or Non-Spark ads. Defaults to all.

Value in

  • "All ad types"
  • "Spark ads"
  • "Non-Spark ads"
ad_language?string

Filter by the language of the ad copy.

Value in

  • "en"
  • "ja"
  • "zh"
  • "vi"
  • "th"
  • "pt"
  • "id"
like_tier?string

TikTok's engagement percentile band, 1 (top) to 5. Use it to read further down the ranking without raising limit.

Value in

  • "1"
  • "2"
  • "3"
  • "4"
  • "5"
industry?string

Creative Center sub-category label, for example 'Skincare' or 'Cosmetics'. Use a sub-category, not a top-level group: the board returns nothing for the broad groups such as 'Financial Services' or 'Education'. Omit for all industries.

keyword?string

Search the board by brand or product keyword.

limit?integer

How many ads to return, 1-100, default 20.

Range1 <= value <= 100
since?string

Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following next_cursor, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept.

until?string

Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept.

dry_run?"1"

Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.

Value in

  • "1"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://api.insightsocial.app/v1/tiktok/ads/top"
{  "success": true,  "platform": "string",  "endpoint": "string",  "schema_version": "2",  "pagination": {    "next_cursor": "string",    "has_more": true,    "page_size": 0,    "stopped_at": "since"  },  "unavailable": [    "string"  ],  "credits_used": 0,  "credits_remaining": 0,  "request_id": "string",  "cached": true,  "idempotent_replay": true,  "charge_reason": "string",  "free_call": true,  "data": {    "items": [      {        "post": {          "id": "string",          "url": "http://example.com",          "kind": "string",          "content": {            "text": "string",            "media_urls": [              "http://example.com"            ],            "thumbnail_url": "http://example.com",            "duration_seconds": 0          },          "author": {            "id": "string",            "username": "string",            "display_name": "string",            "avatar_url": "http://example.com",            "verified": true          },          "engagement": {            "views": 0,            "likes": 0,            "comments": 0,            "shares": 0,            "saves": 0          },          "flags": {            "nsfw": true,            "spoiler": true,            "pinned": true,            "deleted": true,            "likes_hidden": true,            "comments_hidden": true,            "shares_hidden": true,            "views_hidden": true,            "saves_hidden": true          },          "published_at": "2019-08-24T14:15:22Z",          "language": "string",          "ext": {            "property1": null,            "property2": null          }        }      }    ],    "total": 0,    "truncated": true,    "ext": {      "property1": null,      "property2": null    }  }}