# TikTok Creative Center Top Ads Scraper (`crawlerbros/tiktok-top-ads-scraper`) Actor

Scrape the highest-performing TikTok ads from the Creative Center. Filter by country, period, industry, and objective. Get video URLs, CTR, and ad metadata.

- **URL**: https://apify.com/crawlerbros/tiktok-top-ads-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## TikTok Top Ads Scraper

Scrape the TikTok Creative Center's Top Ads leaderboard at ads.tiktok.com/business/creativecenter. Returns the highest-performing TikTok advertisements ranked by recommendation score, click-through rate, or likes. Filters by country, time period, industry, campaign objective, and language. Returns video download URLs at multiple resolutions. No TikTok account or cookies are required.

### What this actor does

- Fetches the top-performing ads leaderboard from TikTok's Creative Center API
- Supports ranking by recommendation score (`for_you`), click-through rate (`ctr`), or like count (`like`)
- Filters by country (any ISO 2-letter code), time period (7, 30, or 180 days), industry, and campaign objective
- Returns direct video download URLs at up to five resolutions (360p, 480p, 540p, 720p, 1080p)
- Includes performance metrics: CTR, like count, and cost tier
- Records `observedCountry` and `observedPeriod` on each row for dataset provenance
- Empty fields are omitted

### Output per ad

- `adId` — unique TikTok ad identifier
- `adTitle` — ad headline or creative title
- `brandName` — advertiser or brand name
- `cost` — cost tier indicator (0 or 1)
- `ctr` — click-through rate (float)
- `like` — total like count
- `industryKey` — TikTok's industry classification key (e.g. `label_14104000000`)
- `objectiveKey` — campaign objective key (e.g. `campaign_objective_conversion`)
- `isSearch` — true when the ad appeared in a search placement
- `videoId` — TikTok video ID for the ad creative
- `duration` — video duration in seconds
- `videoCoverUrl` — cover/thumbnail image URL
- `videoUrls` — object with resolution-keyed download URLs: `360p`, `480p`, `540p`, `720p`, `1080p`
- `videoWidth` — video width in pixels
- `videoHeight` — video height in pixels
- `observedCountry` — country code used for this query
- `observedPeriod` — time period in days used for this query
- `scrapedAt` — ISO 8601 timestamp of collection

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `country` | string | `"US"` | ISO 2-letter country code (e.g. `US`, `GB`, `DE`, `JP`). Leave empty for all countries. |
| `period` | string | `"30"` | Time period for the ranking: `"7"`, `"30"`, or `"180"` days. |
| `industry` | string | — | Industry filter key (e.g. `label_14104000000`). Leave empty for all industries. Discover keys by inspecting `industryKey` in results. |
| `objective` | string | — | Campaign objective filter. Options: `campaign_objective_conversion`, `campaign_objective_video_views`, `campaign_objective_traffic`, `campaign_objective_app_installs`, `campaign_objective_reach`, `campaign_objective_lead_generation`, `campaign_objective_product_sales`. Leave empty for all. |
| `language` | string | — | Language code (e.g. `en`, `es`, `ar`). Leave empty for all languages. |
| `orderBy` | string | `"for_you"` | Ranking method: `for_you` (recommended), `ctr` (click-through rate), or `like` (like count). |
| `maxItems` | integer | `30` | Maximum number of ads to return (1–500). |

#### Example: Top US ads by CTR in the last 30 days

```json
{
  "country": "US",
  "period": "30",
  "orderBy": "ctr",
  "maxItems": 50
}
````

#### Example: Top conversion ads globally

```json
{
  "country": "",
  "period": "7",
  "objective": "campaign_objective_conversion",
  "orderBy": "for_you",
  "maxItems": 100
}
```

#### Example: Top ads in Germany for the past 180 days

```json
{
  "country": "DE",
  "period": "180",
  "orderBy": "like",
  "maxItems": 30
}
```

#### Example: Top app-install ads in English

```json
{
  "country": "US",
  "period": "30",
  "objective": "campaign_objective_app_installs",
  "language": "en",
  "maxItems": 25
}
```

### Use cases

- **Ad creative research** — study the highest-performing video ad creatives by market, period, and objective to inform your own campaigns
- **Competitor intelligence** — identify competitor brands appearing in the top-ads leaderboard and download their creative for analysis
- **Campaign benchmarking** — compare your ad's CTR against the top performers in your country and industry
- **Trend spotting** — track which ad formats, durations, and video styles dominate the leaderboard week over week
- **Media buying insights** — discover which campaign objectives and industries are most competitive in a given market

### FAQ

**Q: Do I need a TikTok Ads account?**\
A: No. The TikTok Creative Center leaderboard is publicly accessible without an account or login.

**Q: How often does the ranking update?**\
A: TikTok updates the Creative Center leaderboard periodically, typically daily. Run the actor on a daily or weekly schedule for trend tracking.

**Q: Can I get the actual video files?**\
A: Yes. The `videoUrls` field contains direct download links at available resolutions (360p through 1080p). These URLs may expire — use them promptly after collection.

**Q: What is the `industry` filter format?**\
A: Industry keys follow the pattern `label_NNNNNNNNNNN` (e.g. `label_14104000000`). Run the actor once without a filter and inspect the `industryKey` values in the results to discover valid keys for your vertical.

**Q: What does `orderBy: for_you` mean?**\
A: `for_you` uses TikTok's own recommendation score, which blends multiple signals beyond just CTR or likes. It is the default ranking used by the Creative Center's "Top Ads" tab.

**Q: How many ads can I collect per run?**\
A: Up to 500. The Creative Center typically surfaces 100–300 unique ads per country and period combination.

**Q: Can I filter by multiple countries at once?**\
A: No. Each run targets a single country. To collect data for multiple countries, run the actor once per country and merge the results.

**Q: What is the `cost` field?**\
A: It is a TikTok cost-tier indicator (0 or 1) from the Creative Center's raw API response. It is not an actual spend figure.

### Related TikTok Scrapers

Build a complete TikTok data pipeline with our full suite:

| Scraper | URL |
|---|---|
| TikTok Post Scraper | https://apify.com/crawlerbros/tiktok-post-scraper |
| TikTok Profile Scraper | https://apify.com/crawlerbros/tiktok-profile-scraper |
| TikTok Comments Scraper | https://apify.com/crawlerbros/tiktok-comments-scraper |
| TikTok Search Scraper | https://apify.com/crawlerbros/tiktok-search-scraper |
| TikTok Hashtag Scraper | https://apify.com/crawlerbros/tiktok-hashtag-scraper |
| TikTok Music Scraper | https://apify.com/crawlerbros/tiktok-music-scraper |
| TikTok Transcript Scraper | https://apify.com/crawlerbros/tiktok-transcript-scraper |
| TikTok Followers Scraper | https://apify.com/crawlerbros/tiktok-followers-scraper |
| TikTok Mention Scraper | https://apify.com/crawlerbros/tiktok-mention-scraper |
| TikTok Profile Mention Scraper | https://apify.com/crawlerbros/tiktok-profile-mention-scraper |
| TikTok Playlist Scraper | https://apify.com/crawlerbros/tiktok-playlist-scraper |
| TikTok Explore Scraper | https://apify.com/crawlerbros/tiktok-explore-scraper |
| TikTok For You Scraper | https://apify.com/crawlerbros/tiktok-for-you-scraper |
| TikTok Downloader | https://apify.com/crawlerbros/tiktok-downloader-api |
| TikTok Ads Library Scraper | https://apify.com/crawlerbros/tiktok-ads-library-scraper-pro |
| TikTok Hashtag Trends Scraper | https://apify.com/crawlerbros/tiktok-hashtag-trends-scraper |
| TikTok LIVE Scraper | https://apify.com/crawlerbros/tiktok-live-scraper |

# Actor input Schema

## `country` (type: `string`):

ISO 2-letter country code (e.g. US, GB, DE). Leave empty for all countries.

## `period` (type: `string`):

Time period for the top ads ranking

## `industry` (type: `string`):

Industry filter key from the filters API (e.g. label\_14104000000). Leave empty for all industries.

## `objective` (type: `string`):

Campaign objective to filter by

## `language` (type: `string`):

Language code (e.g. en, es, ar). Leave empty for all languages.

## `orderBy` (type: `string`):

How to rank the top ads

## `maxItems` (type: `integer`):

Maximum number of ads to collect

## Actor input object example

```json
{
  "country": "US",
  "period": "30",
  "objective": "",
  "orderBy": "for_you",
  "maxItems": 5
}
```

# Actor output Schema

## `data` (type: `string`):

Dataset containing top TikTok ad records. Each row includes adId, adUrl, adTitle, brandName, ctr, like, videoId, videoCoverUrl, videoUrls, videoDuration, industryKey, objectiveKey, observedCountry, observedPeriod, scrapedAt.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "country": "US",
    "period": "30",
    "objective": "",
    "orderBy": "for_you",
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/tiktok-top-ads-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "country": "US",
    "period": "30",
    "objective": "",
    "orderBy": "for_you",
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/tiktok-top-ads-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "country": "US",
  "period": "30",
  "objective": "",
  "orderBy": "for_you",
  "maxItems": 5
}' |
apify call crawlerbros/tiktok-top-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/tiktok-top-ads-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Creative Center Top Ads Scraper",
        "description": "Scrape the highest-performing TikTok ads from the Creative Center. Filter by country, period, industry, and objective. Get video URLs, CTR, and ad metadata.",
        "version": "1.0",
        "x-build-id": "9KohmXXqHgth0TUKB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~tiktok-top-ads-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-tiktok-top-ads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/crawlerbros~tiktok-top-ads-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-tiktok-top-ads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/crawlerbros~tiktok-top-ads-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-tiktok-top-ads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "ISO 2-letter country code (e.g. US, GB, DE). Leave empty for all countries.",
                        "default": "US"
                    },
                    "period": {
                        "title": "Time Period (Days)",
                        "enum": [
                            "7",
                            "30",
                            "180"
                        ],
                        "type": "string",
                        "description": "Time period for the top ads ranking",
                        "default": "30"
                    },
                    "industry": {
                        "title": "Industry",
                        "type": "string",
                        "description": "Industry filter key from the filters API (e.g. label_14104000000). Leave empty for all industries."
                    },
                    "objective": {
                        "title": "Ad Objective",
                        "enum": [
                            "",
                            "campaign_objective_conversion",
                            "campaign_objective_video_views",
                            "campaign_objective_traffic",
                            "campaign_objective_app_installs",
                            "campaign_objective_reach",
                            "campaign_objective_lead_generation",
                            "campaign_objective_product_sales"
                        ],
                        "type": "string",
                        "description": "Campaign objective to filter by",
                        "default": ""
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "Language code (e.g. en, es, ar). Leave empty for all languages."
                    },
                    "orderBy": {
                        "title": "Sort Order",
                        "enum": [
                            "for_you",
                            "ctr",
                            "like"
                        ],
                        "type": "string",
                        "description": "How to rank the top ads",
                        "default": "for_you"
                    },
                    "maxItems": {
                        "title": "Maximum Ads",
                        "minimum": 0,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of ads to collect",
                        "default": 30
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
