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

Export public TikTok Creative Center Top Ads by keyword, country, period, industry, objective, language, and format with ad copy, videos, images, and performance signals.

- **URL**: https://apify.com/fetch\_cat/tiktok-ads-library-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Social media, Marketing, Videos
- **Stats:** 9 total users, 5 monthly users, 97.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.11 / 1,000 ad records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Creative Center Top Ads Scraper

Search and export public TikTok Creative Center Top Ads by keyword, country, period, language, industry, objective, format, and sort mode. This Actor covers Creative Center's curated high-performing ads; it does not claim to be TikTok's complete EU Commercial Content Library.

Use this Actor to collect TikTok ad examples, creative metadata, landing-page links, media URLs, and public performance indicators for competitive ad research, creative strategy, ecommerce analysis, agency reporting, and marketing intelligence. Results can be downloaded as CSV, JSON, Excel, XML, RSS, or used through the Apify Dataset API.

### At a glance

- **TikTok Creative Center export**: Collect public Top Ads records from TikTok Creative Center.
- **Ad search filters**: Search by brand, product, keyword, market, period, language, industry, objective, ad format, and sort mode.
- **Creative metadata**: Export ad text, brand names, advertiser names, detail URLs, landing-page URLs, video URLs, cover images, and duration.
- **Public metrics**: Save public Creative Center signals such as likes, CTR labels, cost index, country, language, and period.
- **API export**: Send ad records to spreadsheets, research decks, BI tools, creative databases, or AI agents.
- **Reliable run outcomes**: Retry temporary failures, preserve successful rows from mixed inputs, and inspect `RUN_SUMMARY` for empty, partial, or failed sources.

### Ready-to-run examples

Use these saved Store examples as starting points. Open any example to prefill the Actor input, then adjust URLs, keywords, limits, or filters for your own run.

- **[TikTok fashion ads in the UK](https://apify.com/fetch_cat/tiktok-ads-library-scraper/examples/tiktok-fashion-ads-uk-research)**
- **[TikTok phone ads competitive research](https://apify.com/fetch_cat/tiktok-ads-library-scraper/examples/tiktok-phone-ads-competitive-research)**
- **[TikTok mobile game ads research](https://apify.com/fetch_cat/tiktok-ads-library-scraper/examples/tiktok-mobile-game-ads-research)**
- **[TikTok top ads in the UK for the last 7 days](https://apify.com/fetch_cat/tiktok-ads-library-scraper/examples/tiktok-top-ads-uk-last-7-days)**
- **[TikTok top ads in the US for the last 7 days](https://apify.com/fetch_cat/tiktok-ads-library-scraper/examples/tiktok-top-ads-us-last-7-days)**

### What can it do?

TikTok Creative Center Top Ads Scraper extracts public ad records from TikTok Creative Center Top Ads and saves one dataset row per unique ad.

- **Search public ads**: Use keywords or Creative Center URLs to find ads around brands, products, categories, or topics.
- **Filter by market**: Add country codes, languages, industry keys, objective keys, ad format, and lookback period.
- **Collect creative links**: Save public detail pages, landing pages, video URLs, and cover images when available.
- **Compare public metrics**: Export Creative Center public signals such as likes, CTR labels, and cost index.
- **Build repeatable research**: Schedule recurring competitor or category monitoring and export results through the API.
- **Cover multiple searches fairly**: Multi-country and multi-keyword runs rotate across source combinations instead of exhausting the first search.

### Common workflows

- **Competitive ad intelligence**: Monitor how brands, products, and competitors appear in public TikTok ad examples.
- **Creative research**: Build a swipe file of hooks, offers, covers, landing pages, and ad text.
- **Ecommerce analysis**: Track public ads by product category, region, language, and objective.
- **Agency reporting**: Export ad examples into spreadsheets, BI tools, or research decks.
- **Market monitoring**: Compare public ad patterns across regions and lookback periods.
- **AI workflows**: Feed ad text, URLs, and metadata into classification, summarization, or creative analysis tools.

### What data can you extract?

The Actor returns one dataset row per public TikTok Creative Center ad record.

| Field | Description |
| --- | --- |
| `adId` | TikTok Creative Center ad identifier |
| `detailUrl` | Public Creative Center detail URL |
| `brandName` | Brand name when available |
| `advertiserName` | Advertiser name when available |
| `adText` | Public ad title or caption text |
| `landingPageUrl` | Landing page URL when available |
| `videoUrl` | Public creative video URL when available |
| `videoUrls` | Available CDN resolutions keyed by quality |
| `mediaExpiresAt` | Expiry timestamp parsed from signed media URLs when present |
| `coverImageUrl` | Creative thumbnail image |
| `durationSeconds` | Video duration |
| `likes` | Public like count label when available |
| `ctr` | Public CTR metric when available |
| `costIndex` | Public cost index when available |
| `industryKey` | TikTok industry key |
| `objectiveKey` | TikTok objective key |
| `countryCode` | Market used for the search |
| `language` | Ad language when available |
| `adFormat` | Ad format when available |
| `keyword` | Keyword used for the search |
| `periodDays` | Lookback period in days |
| `source`, `sourcePage` | Creative Center provenance and source page |
| `scrapedAt` | Timestamp of extraction |

### Pricing

This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.

| Event | What is charged | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: |
| `apify-actor-start` | Once per run at the current 512 MB memory setting | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 |
| `apify-default-dataset-item` | Per TikTok ad record saved in the default dataset. | $0.20537 / 1,000 | $0.17858 / 1,000 | $0.13929 / 1,000 | $0.10715 / 1,000 | $0.07143 / 1,000 | $0.05 / 1,000 |

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

### Input configuration

| Setting | JSON key | Use it for | Example |
| --- | --- | --- | --- |
| Keywords | `keywords` | Optional ad text, brand, product, or topic searches. | `["skincare"]` |
| Regions / country codes | `regions` | TikTok Creative Center country codes. | `["US", "GB"]` |
| Maximum ads | `maxItems` | Cap saved ad rows and spend. | `20` |
| Time period | `period` | Creative Center lookback window in days. | `7` |
| Industry keys | `industries` | Optional TikTok industry/category keys. | `["ecommerce"]` |
| Objective keys | `objectives` | Optional campaign objective keys. | `["conversions"]` |
| Ad languages | `languages` | Optional language codes. | `["en"]` |
| Ad format | `adFormat` | Optional TikTok ad format key. | `video` |
| Sort by | `sortBy` | Creative Center ranking mode. | `for_you` |
| Creative Center URLs | `startUrls` | Optional Top Ads URLs whose query parameters are used as hints. | `[{"url":"https://ads.tiktok.com/business/creativecenter/inspiration/topads/pc/en?countryCode=US&period=7"}]` |
| Maximum retries | `maxRetries` | Bound retries for temporary HTTP, rate-limit, network, and index errors. | `3` |
| Runtime safety limit | `runtimeSafetySecs` | Stop new requests before the platform timeout and preserve completed rows. | `240` |
| Proxy configuration | `proxyConfiguration` | Optional Apify Proxy routing when direct requests are blocked. | `{"useApifyProxy":false}` |

### Example input

```json
{
  "keywords": ["skincare"],
  "regions": ["US"],
  "period": "7",
  "sortBy": "for_you",
  "maxItems": 20
}
```

### Example output

```json
{
  "adId": "123456789",
  "brandName": "Example Brand",
  "advertiserName": "Example Advertiser",
  "adText": "A public TikTok ad caption...",
  "detailUrl": "https://ads.tiktok.com/business/creativecenter/topads/...",
  "landingPageUrl": "https://example.com/product",
  "videoUrl": "https://...",
  "coverImageUrl": "https://...",
  "durationSeconds": 18,
  "likes": 189,
  "ctr": 0.14,
  "costIndex": 1,
  "industryKey": "beauty",
  "objectiveKey": "conversions",
  "countryCode": "US",
  "language": "en",
  "adFormat": "video",
  "keyword": "skincare",
  "periodDays": 7,
  "source": "creative_center",
  "sourcePage": 1,
  "scrapedAt": "2026-06-20T00:00:00.000Z"
}
```

### How to run it

1. Open the Actor on Apify.
2. Enter keywords or leave keywords empty for top ads in a market.
3. Add one or more region codes.
4. Choose period, sort mode, and optional language, industry, objective, or format filters.
5. Set `maxItems`.
6. Start the run and export the dataset.

### Search tips

- **Start with one region**: Use one market first so you can understand the returned ads.
- **Use product-language keywords**: Search terms such as `skincare`, `running shoes`, or brand names usually produce clearer research sets.
- **Compare sort modes**: Try `for_you`, `ctr`, `like`, or `cost` depending on your research goal.
- **Keep filters light**: Industry and objective keys are useful only when you know the Creative Center values you need.
- **Schedule snapshots**: Run the same market and keyword set weekly to compare public ad examples over time.
- **Widen sparse searches**: Creative Center can have no Top Ads for a narrow 7-day query; try 30 or 180 days before treating the source as unavailable.

### Limits and caveats

- The Actor extracts public TikTok Creative Center data only.
- It does not access private advertiser accounts, campaign spend, targeting, account dashboards, or non-public ads.
- Some fields are empty when Creative Center does not expose them for an ad.
- Public metrics are Creative Center labels/signals and should be treated as research indicators, not full campaign analytics.
- Creative Center is a curated Top Ads surface, not a complete archive of every TikTok ad.
- Signed TikTok CDN media links expire. Use `mediaExpiresAt` when present and rerun the Actor to refresh links.
- Brand or advertiser fields are often unavailable for creator/UGC ads, and landing pages are not present on every search row.

### Integrations

You can connect TikTok ad data to downstream tools:

- Export CSV or Excel to creative research spreadsheets.
- Save ad examples into Airtable, Notion, or an internal creative database.
- Send recurring research rows to BI dashboards.
- Trigger webhooks after competitor monitoring runs.
- Combine ad outputs with TikTok profile, hashtag, video, and trends datasets.

### API usage

#### Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/tiktok-ads-library-scraper').call({
  keywords: ['skincare'],
  regions: ['US'],
  period: '7',
  maxItems: 20
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/tiktok-ads-library-scraper').call(run_input={
    'keywords': ['skincare'],
    'regions': ['US'],
    'period': '7',
    'maxItems': 20,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~tiktok-ads-library-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"keywords":["skincare"],"regions":["US"],"period":"7","maxItems":20}'
```

### MCP and AI agents

This Actor can be used through the official Apify MCP server at `https://mcp.apify.com`.

For a focused single-Actor tool setup, use:

```text
https://mcp.apify.com?tools=fetch_cat/tiktok-ads-library-scraper
```

Claude CLI setup:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/tiktok-ads-library-scraper"
```

Claude Desktop configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/tiktok-ads-library-scraper"
    }
  }
}
```

Example prompts:

- “Export 20 US skincare Top Ads from the last 30 days and summarize the most common hooks.”
- “Compare Creative Center Top Ads for `US` and `GB`, then return the dataset link and any `RUN_SUMMARY` warnings.”

Use the same JSON keys shown in the input configuration table, such as `keywords`, `regions`, `period`, `maxItems`, `sortBy`, and `startUrls`.

### FAQ

#### Can I scrape TikTok ads without logging in?

Yes. This Actor targets public TikTok Creative Center data.

#### Can I filter by country?

Yes. Use the `regions` input with Creative Center country codes such as `US`, `GB`, `DE`, or `JP`.

#### Does it get private campaign data?

No. It extracts public Creative Center ad examples and metadata only.

#### Can I monitor competitors over time?

Yes. Use Apify schedules with the same keywords, markets, and period settings.

#### Why did a valid search return no rows?

Creative Center's Top Ads index can be sparse for narrow keywords and short periods. A valid no-match run reports `EMPTY_SOURCE`; broaden the keyword or choose 30 or 180 days. Invalid country codes and foreign `startUrls` fail explicitly instead of silently falling back to unrelated US ads.

#### Does this include TikTok's EU Commercial Content Library?

No. It exports the global Creative Center Top Ads surface. The EU transparency library is a different source with different country limits, advertiser fields, delivery dates, and reach ranges.

### Related Actors

- [TikTok Profile Scraper](https://apify.com/fetch_cat/tiktok-profile-scraper)
- [TikTok Hashtag Scraper](https://apify.com/fetch_cat/tiktok-hashtag-scraper)
- [TikTok Video Scraper](https://apify.com/fetch_cat/tiktok-video-scraper)
- [TikTok Trends Scraper](https://apify.com/fetch_cat/tiktok-trends-scraper)
- [Instagram Stories & Highlights Scraper](https://apify.com/fetch_cat/instagram-stories-highlights-scraper)

### Support

If a run fails, returns no data, or a field looks wrong, open an issue from the Actor page.

Please include the Apify run ID or run URL, input JSON, one example public URL, query, or input item, what you expected, and what the dataset returned. Small reproducible inputs make parsing or site-layout issues much faster to fix.

### Privacy and data handling

This Actor processes the filters and public Creative Center ad records needed for your run. Results and `RUN_SUMMARY` stay in your Apify run storage. It does not access private advertiser accounts, private campaign analytics, or non-public targeting data. You are responsible for using the exported public data and media links lawfully and for following TikTok's applicable terms.

# Actor input Schema

## `keywords` (type: `array`):

Optional ad text or brand keywords to search. Leave empty to return top ads for the selected markets.

## `regions` (type: `array`):

TikTok Creative Center country codes such as US, GB, DE, FR, BR, JP, AU. Use one or a few for focused runs.

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

Maximum number of ad records to save across all keyword and region combinations.

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

Lookback window used by TikTok Creative Center.

## `industries` (type: `array`):

Optional TikTok industry/category keys. Leave empty for all industries.

## `objectives` (type: `array`):

Optional campaign objective keys. Leave empty for all objectives.

## `languages` (type: `array`):

Optional language codes such as en, es, de, fr, pt, ja. Leave empty for all languages.

## `adFormat` (type: `string`):

Optional TikTok ad format key if you want to narrow results.

## `sortBy` (type: `string`):

Ranking used by TikTok Creative Center.

## `startUrls` (type: `array`):

Optional TikTok Creative Center Top Ads URLs. Query parameters like keyword, countryCode, and period are used as hints.

## `maxRetries` (type: `integer`):

Retries for temporary network, rate-limit, server, and Creative Center index errors.

## `runtimeSafetySecs` (type: `integer`):

Stops new requests before the platform timeout so completed rows and diagnostics are preserved.

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

Optional Apify Proxy configuration for regions or networks where Creative Center blocks direct requests.

## Actor input object example

```json
{
  "keywords": [],
  "regions": [
    "US"
  ],
  "maxItems": 20,
  "period": "7",
  "sortBy": "for_you",
  "startUrls": [
    {
      "url": "https://ads.tiktok.com/business/creativecenter/inspiration/topads/pc/en?countryCode=US&period=7"
    }
  ],
  "maxRetries": 3,
  "runtimeSafetySecs": 240,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `ads` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# 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 = {
    "keywords": [],
    "regions": [
        "US"
    ],
    "startUrls": [
        {
            "url": "https://ads.tiktok.com/business/creativecenter/inspiration/topads/pc/en?countryCode=US&period=7"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/tiktok-ads-library-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 = {
    "keywords": [],
    "regions": ["US"],
    "startUrls": [{ "url": "https://ads.tiktok.com/business/creativecenter/inspiration/topads/pc/en?countryCode=US&period=7" }],
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/tiktok-ads-library-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 '{
  "keywords": [],
  "regions": [
    "US"
  ],
  "startUrls": [
    {
      "url": "https://ads.tiktok.com/business/creativecenter/inspiration/topads/pc/en?countryCode=US&period=7"
    }
  ]
}' |
apify call fetch_cat/tiktok-ads-library-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/RnxYr0I6hkNVQk9ee/builds/hbLbD0yb8rBINohJc/openapi.json
