# TikTok Creative Center — Top Ads Spy (CTR + Video URL) (`dltik/tiktok-creative-center`) Actor

Scrape TikTok's official Creative Center Top Ads — winning ad creatives with CTR, likes, MP4 video URL (720p), cover, duration, industry. Filter country/period/industry, sort by CTR/likes/cost. Headless bootstrap + HTTP pagination. Dropshipper goldmine.

- **URL**: https://apify.com/dltik/tiktok-creative-center.md
- **Developed by:** [Walid](https://apify.com/dltik) (community)
- **Categories:** Marketing, Lead generation
- **Features:** Limited permissions
- **Stats:** 309 total users, 70 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 ad scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## TikTok Creative Center — Top Ads Spy (CTR + Video URL)

![TikTok Creative Center Top Ads Spy banner](https://api.apify.com/v2/key-value-stores/soog47JXvcdWYvx37/records/banner.png)

**TikTok Creative Center Scraper** extracts winning ad creatives from TikTok's **official Creative Center** — with the performance metrics that matter for dropshippers and agencies: **CTR, likes, direct MP4 video URL (720p), cover image, duration, industry, objective**. Filter by country, period and industry; sort by For You / CTR / likes / cost. No TikTok account needed.

> ⭐ **Found this useful?** Click the **Bookmark** button at the top of [this page](https://apify.com/dltik/tiktok-creative-center) — it's the single strongest signal that keeps this actor visible to others. One click. No signup beyond your existing Apify account.

***

### What can TikTok Creative Center Scraper do?

- 🎬 **Top Ads list** — TikTok's officially-ranked winning ads, exactly as shown in the Creative Center UI
- 📊 **CTR + likes** — performance metrics the public ad libraries (FB, Google, LinkedIn) don't expose
- 🎥 **MP4 video URL (720p)** — direct downloadable URL of the ad creative
- 🖼️ **Cover image** — high-resolution thumbnail
- 🌍 **Country filter** — US, FR, GB, DE, IT, ES, JP, BR, MX, and any ISO code
- 📅 **Period** — last 7 / 30 / 180 days
- 🎯 **Industry filter** — pinpoint your niche (E-commerce > Beauty, etc.) via the industry key
- 📈 **Sort modes** — For You, CTR, Cost, Likes, Like rate, 6s play rate
- ⚡ **Fast** — 60 ads in ~20s; one-shot Chromium bootstrap then pure HTTP pagination

***

### What data can you extract per TikTok ad?

| Field | Description |
|-------|-------------|
| `ad_id` | TikTok material ID |
| `ad_title` | Ad copy / hook line |
| `brand_name` | Brand / advertiser when available |
| `industry_key` | Creative Center industry classification |
| `objective_key` | Campaign objective (conversion, traffic, …) |
| `ctr` | Click-through rate (0–1) |
| `likes` | Total likes |
| `cost_score` | Relative cost score |
| `duration_sec` | Video duration in seconds |
| `video_id` | TikTok video ID |
| `video_url_720p` | **Direct MP4 URL (720p)** |
| `video_url_540p` / `video_url_360p` | Lower-quality MP4 URLs (when present) |
| `cover_url` | Cover image (CDN) |
| `width`, `height` | Video pixel dimensions |
| `country_code`, `period_days` | Filters echoed back |
| `detail_url` | Creative Center detail page |

***

### How to spy on TikTok ads

1. **[Create a free Apify account](https://apify.com/sign-up)** — no credit card required
2. **Open [TikTok Creative Center Scraper](https://apify.com/dltik/tiktok-creative-center)** in Apify Store
3. **Pick a country** (default `US`) and **period** (default 30 days)
4. **Optional**: a specific **industry** key or a different **sort** (CTR for best click rates)
5. **Click Start** — ads stream in within seconds
6. **Download** as JSON, CSV, or Excel; the MP4 URLs are direct-download links

***

### How much does it cost to spy on TikTok ads?

**$0.002 per ad** ($2 per 1,000 ads). One-shot Chromium bootstrap (~10–15s once per run) then pure HTTP pagination.

| Run size | Ads | Apify cost | Time |
|----------|-----|------------|------|
| Quick test | 10 | ~$0.02 | ~15s |
| Standard | 60 | ~$0.12 | ~20s |
| Deep sweep | 200 | ~$0.40 | ~30s |
| Full scan | 500 | ~$1.00 | ~1min |

***

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `countryCode` | string | `US` | ISO 2-letter code (US, FR, GB, DE, IT, ES, JP, BR, MX, …) |
| `period` | integer | `30` | `7`, `30`, or `180` days |
| `orderBy` | string | `for_you` | `for_you`, `ctr`, `cost`, `like`, `like_rate`, `play_6s_rate` |
| `industry` | string | — | Industry key from the Creative Center URL (e.g. `22102000000`); empty = all |
| `maxResults` | integer | `60` | Cap on total ads (paginated, ~20 per page) |
| `useResidentialProxy` | boolean | `false` | Enable only if you hit rate limits |

***

### Output example

![Sample output — TikTok Creative Center scraper](https://api.apify.com/v2/key-value-stores/soog47JXvcdWYvx37/records/output.png)

```json
{
  "ad_id": "7634600921591185426",
  "ad_title": "today is pink @SCUFFERS",
  "brand_name": null,
  "industry_key": "label_30101000000",
  "objective_key": "campaign_objective_conversion",
  "ctr": 0.21,
  "likes": 8184,
  "cost_score": 1,
  "duration_sec": 15.02,
  "video_id": "v24044gl0000d7khibnog65ujb3buq60",
  "video_url_720p": "https://v16m-default.tiktokcdn.com/.../video.mp4",
  "cover_url": "https://p16-common-sign.tiktokcdn.com/.../cover.image",
  "width": 576,
  "height": 1024,
  "country_code": "US",
  "period_days": 30,
  "detail_url": "https://ads.tiktok.com/business/creativecenter/topads/7634600921591185426/pc/en?countryCode=US&period=30"
}
```

***

### Use cases

- **Dropshipping research** — find winning product creatives sorted by CTR / likes
- **Creative inspiration** — download the actual MP4 video URLs of top-performing ads
- **Agency competitive intel** — track TikTok ad trends per country and industry
- **AI training data** — collect performance-labeled video creatives at scale
- **Trend tracking** — refresh weekly to see what's winning right now

***

### Use the actor via API

**Python:**

```python
import requests

run = requests.post(
    "https://api.apify.com/v2/acts/dltik~tiktok-creative-center/runs",
    headers={"Authorization": "Bearer YOUR_APIFY_TOKEN"},
    json={
        "countryCode": "US",
        "period": 30,
        "orderBy": "ctr",
        "maxResults": 60
    }
).json()
print("Run started:", run["data"]["id"])
```

**curl:**

```bash
curl -X POST "https://api.apify.com/v2/acts/dltik~tiktok-creative-center/runs" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"countryCode":"US","period":30,"orderBy":"ctr","maxResults":60}'
```

***

### FAQ

**Do I need a TikTok account or developer key?**
No. The Creative Center is TikTok's public marketing transparency tool. The scraper bootstraps a single signed-request triplet via a headless browser then paginates via the public JSON API — no login, no token.

**Why the brief headless step?**
TikTok signs each Creative Center API request with a per-session `user-sign` header. We capture one valid triplet by loading the page in a headless browser, then reuse it for many fast HTTP calls. Total bootstrap ~10–15s once per run.

**How do I get an `industry` key?**
Open the Creative Center, apply an industry filter in the UI, copy the `industry=...` number from the URL into the actor input.

**Does it return real-time data?**
TikTok refreshes the Creative Center rankings hourly–daily. Run the actor as often as you need fresh rankings.

**Does it download the videos?**
No — to keep the per-ad cost low and the dataset light, the actor returns the direct MP4 URL. Drop those URLs into any downloader (yt-dlp, ffmpeg, your own script) to grab the binaries when needed.

**Advanced: refresh signing without redeploy.**
If TikTok ever rotates and the bundled fallback triplet expires, you can update three actor env vars in the Apify console without redeploying: `TT_USER_SIGN`, `TT_WEB_ID`, `TT_TIMESTAMP` (and optionally `TT_ANONYMOUS_USER_ID`, `TT_UA`) — copy the values from the request headers of any `creative_radar_api` call in your browser's DevTools.

***

### Connect with Make, Zapier & n8n

This actor integrates with any automation platform via the Apify API.

#### Make (Integromat)

1. Add an **Apify module** in your Make scenario
2. Select **Run Actor** → choose this actor
3. Configure the input (paste your JSON)
4. Add a **Get Dataset Items** module to retrieve results
5. Send top ads to Google Sheets, your CRM, Slack, etc.

#### Zapier

1. Use the **Apify integration** on Zapier
2. Trigger: **Actor Run Finished**
3. Action: **Get Dataset Items**
4. Pipe results into your spreadsheet or BI tool

#### n8n

1. Add an **HTTP Request** node to call the Apify API
2. POST to `https://api.apify.com/v2/acts/dltik~tiktok-creative-center/runs`
3. Wait for completion, then fetch dataset items
4. Route the MP4 URLs to a downloader node

***

⭐ **Found this TikTok Creative Center Scraper useful? Bookmark it** — Apify ranks actors by bookmarks, so it's the strongest single signal for Store visibility. One click = directly helps this actor stay surfaced.

### Other scrapers by dltik

| Actor | What it does | Price |
|-------|-------------|-------|
| [Facebook Ads Library Scraper](https://apify.com/dltik/facebook-ads-scraper) | Meta (Facebook + Instagram) ad library spy with DSA detail enrichment | $0.75/1K |
| [Google Ads Transparency Scraper](https://apify.com/dltik/google-ads-transparency) | Google Search, YouTube, Display ad spy via official Ad Transparency Center | $1/1K |
| [LinkedIn Ad Library Scraper](https://apify.com/dltik/linkedin-ad-library) | B2B competitor ad spy from LinkedIn's public Ad Library | $2/1K |
| [TikTok Scraper](https://apify.com/dltik/tiktok-scraper) | Profiles, videos, hashtags, search, trending | $8/1K |

# Actor input Schema

## `countryCodes` (type: `array`):

ISO 2-letter country codes (US, FR, GB, DE, IT, ES, JP, BR, MX, etc.). Several markets are scraped in parallel, each returning up to maxResults ads. Leave empty to use the single Country field below.

## `countryCode` (type: `string`):

ISO 2-letter country code. Shortcut for a single market; ignored if Countries is set.

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

Lookback window for top ads. TikTok Creative Center supports 7, 30, 180.

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

How to rank the top ads.

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

Industry filter key from the Creative Center URL (e.g. '22102000000' = E-commerce > Beauty). Leave empty for all industries.

## `maxResults` (type: `integer`):

Cap on total ads to fetch (paginated, ~20 per page).

## `enrichDetails` (type: `boolean`):

For each ad, also fetch its detail page: landing-page URL, CTA, per-second retention/keyframe data and like/CTR percentiles vs industry. The landing page reveals the exact product/offer behind each winning ad. Billed per ad enriched.

## `useResidentialProxy` (type: `boolean`):

Enable only if you hit rate limits on large runs — the public Creative Center API serves cold datacenter requests just fine.

## `proxyConfiguration` (type: `object`):

Advanced: override the proxy. Only honored when 'Use residential proxy' is enabled.

## Actor input object example

```json
{
  "countryCodes": [
    "US"
  ],
  "countryCode": "US",
  "period": "30",
  "orderBy": "for_you",
  "maxResults": 60,
  "enrichDetails": false,
  "useResidentialProxy": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

List of top TikTok ads with performance metrics and media URLs.

# 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 = {
    "countryCodes": [
        "US"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dltik/tiktok-creative-center").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 = { "countryCodes": ["US"] }

# Run the Actor and wait for it to finish
run = client.actor("dltik/tiktok-creative-center").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "countryCodes": [
    "US"
  ]
}' |
apify call dltik/tiktok-creative-center --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dltik/tiktok-creative-center"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/a2zGnaABEeahPlToJ/builds/Zgqei7N4YQTyRkC2N/openapi.json
