# TikTok Ads Spy (`burbn/tiktok-top-ads-spy`) Actor

Uncover trending TikTok ads across 80+ countries. Filter by Spark Ads, objective, and industry. Download high-converting creatives for your ad campaigns.

- **URL**: https://apify.com/burbn/tiktok-top-ads-spy.md
- **Developed by:** [Kevin](https://apify.com/burbn) (community)
- **Categories:** Social media, Lead generation, E-commerce
- **Stats:** 91 total users, 7 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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 Top Ads Spy

**Uncover the most successful TikTok ads across any industry and country. Filter top-performing campaigns, analyze engagement metrics like CTR and Likes, and download high-quality ad creatives directly. Perfect for marketers, dropshippers, and competitive research!**

### 📋 Table of Contents

- [🚀 Features](#-features)
- [🎯 Use Cases](#-use-cases)
- [⚡ Quick Start](#-quick-start)
- [📊 Input Parameters](#-input-parameters)
- [📤 Output Format](#-output-format)
- [🎨 Ad Data Extracted](#-ad-data-extracted)
- [📈 Performance & Reliability](#-performance--reliability)
- [💡 Best Practices](#-best-practices)
- [❓ FAQ](#-faq)

### 🚀 Features

#### 🎬 **Complete Ad Intelligence**

- ✅ **No Login Required** - Spy on top ads without a TikTok account
- ✅ **Global Coverage** - Filter campaigns from over 80+ supported countries
- ✅ **Deep Industry Filtering** - Target specific categories, apps, games, or physical products
- ✅ **Objective Filtering** - Filter by Traffic, App Installs, Conversions, and more
- ✅ **Real-Time Data** - Discover currently trending and successful ads

#### 📊 **Comprehensive Metrics**

- ✅ **Engagement Data** - Access exact Like percentages and Click-Through Rates (CTR)
- ✅ **Cost & Performance** - Understand campaign cost scaling potential
- ✅ **Format Details** - Identify whether an ad is a "Spark Ad" or regular feed ad
- ✅ **Video Downloads** - Get URLs for high-quality MP4 video creatives (up to 1080p)
- ✅ **Metadata** - Scrape ad titles, keywords, and campaign tags

### 🎯 Use Cases

| Use Case | Description | Benefits |
|----------|-------------|----------|
| 📈 **Performance Marketing** | Discover high-CTR creatives | Lower your CPA by replicating proven formulas |
| 🛍️ **Dropshipping/E-commerce** | Find winning products | See what products are actively being scaled |
| 🔍 **Competitive Intelligence** | Study competitor strategies | Benchmark against the best ad campaigns |
| 🎨 **Ad Creative Inspiration** | Discover trending formats | Improve your creative output and hooks |
| 📱 **App Promotion** | Analyze app install campaigns | See how top apps acquire users on TikTok |
| 🌍 **Market Expansion** | Research ads in new countries | Understand regional differences before launching |

### ⚡ Quick Start

#### 1️⃣ **Basic Quick Search (US, Last 30 Days)**

```json
{
  "period": "30",
  "country_code": "US",
  "order_by": "ctr",
  "maxResults": 100
}
```

#### 2️⃣ **Find High Converting E-commerce Ads**

```json
{
  "period": "7",
  "country_code": "US",
  "objective": "4", 
  "order_by": "cvr",
  "maxResults": 50
}
```

#### 3️⃣ **Search by Specific Keyword**

```json
{
  "period": "180",
  "country_code": "GB",
  "keyword": "skincare",
  "maxResults": 200
}
```

### 📊 Input Parameters

#### Configuration Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `period` | String | `"30"` | Time range (7, 30, or 180 days) |
| `country_code` | String | `"US"` | Country ISO code (e.g., US, GB, CA) |
| `industry` | String | `""` | Filter by specific industry category |
| `objective` | String | `""` | Campaign goal (Conversions, App Installs, etc.) |
| `ad_format` | String | `""` | Filter by Spark Ads vs Non-Spark Ads |
| `ad_language` | String | `""` | Language of the ad |
| `like` | String | `""` | Filter by Like range (e.g., Top 1~20%) |
| `order_by` | String | `"ctr"` | Metric to sort by (ctr, cvr, impression, like...) |
| `keyword` | String | `""` | Keyword to search internally |
| `page` | Integer| `1` | Start extraction from this page |
| `maxResults`| Integer| `100` | Maximum number of ads to retrieve (0 for all) |
| `limit` | Integer| `20` | Results per page per request (Max 20) |

### 📤 Output Format

#### 🎬 **Ad Data Structure**

```json
{
  "source": "tiktok_top_ads",
  "ad_id": 1234567890123456,
  "ad_title": "Get 50% off our best selling product today! Link in bio. #sale #trending",
  "brand_name": "Premium Brand",
  "cost": 5,
  "ctr": 3.42,
  "like": 1,
  "is_search": false,
  "tag": ["E-commerce", "Apparel"],
  "industry_key": "22110000000",
  "objective_key": "4",
  "video_id": "v123456789",
  "duration": 15.4,
  "cover_url": "https://p16-sign-va.tiktokcdn.com/...",
  "video_url": "https://v16m.tiktokcdn.com/...",
  "video_urls": {
    "1080p": "https://v16m.tiktokcdn.com/...",
    "720p": "https://v16m.tiktokcdn.com/... "
  },
  "video_width": 1080,
  "video_height": 1920,
  "favorite": false
}
```

### 🎨 Ad Data Extracted

#### 🎬 **Video Content & Media**

| Element | Description | Details |
|---------|-------------|--------|
| **Best Video URL** | Direct download link in the highest available resolution | High-quality MP4 format |
| **All Resolutions** | URLs for 1080p, 720p, 540p, 480p, and 360p | Flexible media downloading |
| **Duration & Dimensions** | Length in seconds and video width/height | Technical specs |
| **Cover URL** | Ad thumbnail | Best for preview grids |

#### 📈 **Performance & Metric Data**

| Metric | Description | Details |
|--------|-------------|----------|
| **CTR** | Click-Through Rate | Measure how compelling the creative is |
| **Like Tier** | The percentile bracket of likes | Gauges top-end engagement |
| **Cost Scaling** | Relative cost expenditure indicator | Highlights ads receiving heavy budget |
| **Objective / Industry** | Direct categorization codes | Good for mapping across niches |

### 📈 Performance & Reliability

#### 🔄 **Reliability Features**

- ✅ **Auto-Retry & Backoff** - Handles temporary connection hiccups gracefully
- ✅ **Dynamic Pagination** - Seamlessly loops through pages of results
- ✅ **Fail-Safes** - Early exits if maximum results limit is hit perfectly

### 💡 Best Practices

#### ✅ **Recommended Usage**

1. **Test Hooks Quickly** - Sort by `CTR` over a `7` day period to see currently working ad hooks.
2. **Find Evergreen Hits** - Sort by `impression` over a `180` day period to see legacy ads that are constantly funded.
3. **Download Assets Immediately** - Save `.mp4` URLs as soon as possible, as TikTok CDN links rotate and eventually expire.
4. **Use Max Results Carefully** - Do not set Max Results to 0 (Unlimited) on broad searches; it could take a long time and use unnecessary units.

#### ⚠️ **Important Notes**

- The API uses localized ISO country codes (e.g., `US`, `GB`). Ensure codes are standard 2-letter combos.
- Top ad metrics are estimated brackets/indexes rather than absolute numeric views in order to protect advertiser privacy.
- Not every video resolution is guaranteed to be available; the scraper defaults down to the next highest quality available.

### ❓ FAQ

#### **Q: Do I need to be logged into TikTok?**

**A:** No, this tool utilizes specialized endpoints and does not require you to provide cookies, account access, or passwords.

#### **Q: Can I get the actual number of views/clicks?**

**A:** TikTok abstracts raw ad numbers on its public dashboards to protect advertiser data. The `ctr`, `like`, and `cost` fields provide highly accurate percentile/relative data.

#### **Q: Are the video URLs permanent?**

**A:** Temporary. CDN video URLs typically expire after some time. It is strongly advised to download the assets after scraping if you wish to archive them.

#### **Q: Does this scrape Spark ads (organically boosted posts)?**

**A:** Yes, both Spark Ads and standard non-Spark Ads are scraped. You can filter between them using the Ad Format parameter.

***

### 🏷️ **Keywords & Tags**

`tiktok top ads`, `tiktok ads scraper`, `tiktok ads spy`, `tiktok ads library`, `tiktok ads research`, `tiktok ads analysis`, `tiktok ads monitoring`, `tiktok ads tracker`, `tiktok ads data extraction`, `tiktok ads metadata`, `tiktok ads performance`, `tiktok ads metrics`, `tiktok ads creative`, `tiktok ads video`, `tiktok ads downloader`, `tiktok ads api`, `tiktok ads extractor`, `tiktok ads analytics`, `tiktok ads monitoring`, `tiktok ads archiver`, `tiktok ads saver`, `tiktok ads backup`, `tiktok ads data extraction`, `tiktok ads metadata`, `tiktok music extractor`, `tiktok engagement metrics`, `tiktok ads viewer without login`, `tiktok ads viewer online`, `tiktok ads downloader apify`, `tiktok ads scraper apify actor`, `tiktok social media monitoring`, `tiktok competitor analysis`, `tiktok influencer research`, `tiktok content analysis`, `tiktok ads automation`, `tiktok ads tracking`, `tiktok ads research tool`, `tiktok ads batch download`, `tiktok api scraper`, `tiktok ads viewer tool`, `tiktok ads data scraper`, `tiktok ads content extractor`, `tiktok music scraper`, `tiktok engagement tracker`, `tiktok analytics tool`, `tiktok data extraction`, `tiktok scraper`, `tiktok downloader`, `tiktok ads collector`, `tiktok trend analysis`, `tiktok marketing tool`, `tiktok social media tool`

***

### 🎁 Get $5 Free Apify Credits

New to Apify? [Sign up using this link](https://apify.com?fpr=free-credits) and get **$5 free credits** to start scraping Google Ads right away! No credit card required.

**⭐ If this actor helps your workflow, please give it a star!**

***

# Actor input Schema

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

Select the time period for top ads data. Choose from Last 7 days, Last 30 days, or Last 180 days.

## `page` (type: `integer`):

The page number to start scraping from. Default: 1.

## `country_code` (type: `string`):

Select a country to filter ads by region. Leave empty for all countries.

## `order_by` (type: `string`):

Sort ads by a specific metric.

## `like` (type: `string`):

Filter ads by like performance range. 1: Top 1~20%, 2: Top 21~40%, 3: Top 41~60%, 4: Top 61~80%, 5: Top 81~100%.

## `ad_format` (type: `string`):

Filter by ad format type.

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

Filter by campaign objective.

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

Select an industry to filter ads. Leave empty for all industries.

## `ad_language` (type: `string`):

Select a language to filter ads. Leave empty for all languages.

## `keyword` (type: `string`):

Search ads by keyword in ad title.

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

Maximum number of ads to scrape. Set to 0 for unlimited (scrapes all available results). Default: 100.

## `limit` (type: `integer`):

Number of results to fetch per API request. Maximum: 20.

## Actor input object example

```json
{
  "period": "30",
  "page": 1,
  "country_code": "US",
  "order_by": "ctr",
  "like": "",
  "ad_format": "",
  "objective": "",
  "industry": "",
  "ad_language": "",
  "keyword": "",
  "maxResults": 20,
  "limit": 20
}
```

# Actor output Schema

## `overview` (type: `string`):

Open the dataset view with an overview of scraped TikTok top ads including key metrics.

## `detailed` (type: `string`):

Open the dataset view with detailed data for each scraped TikTok ad.

# 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 = {
    "period": "30",
    "page": 1,
    "country_code": "US",
    "order_by": "ctr",
    "like": "",
    "ad_format": "",
    "objective": "",
    "industry": "",
    "ad_language": "",
    "keyword": "",
    "maxResults": 20,
    "limit": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("burbn/tiktok-top-ads-spy").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 = {
    "period": "30",
    "page": 1,
    "country_code": "US",
    "order_by": "ctr",
    "like": "",
    "ad_format": "",
    "objective": "",
    "industry": "",
    "ad_language": "",
    "keyword": "",
    "maxResults": 20,
    "limit": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("burbn/tiktok-top-ads-spy").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 '{
  "period": "30",
  "page": 1,
  "country_code": "US",
  "order_by": "ctr",
  "like": "",
  "ad_format": "",
  "objective": "",
  "industry": "",
  "ad_language": "",
  "keyword": "",
  "maxResults": 20,
  "limit": 20
}' |
apify call burbn/tiktok-top-ads-spy --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/2ryhbC5LaJY6lbMK3/builds/AEDxJGYDc0k0kkWqf/openapi.json
