# TikTok Ads Library Scraper (`s-r/tiktok-ads-library`) Actor

Scrape TikTok's Ad Library by keyword, advertiser name, or business ID across any region — get video URLs, cover images, impressions, spend, dates, and rejection info.

- **URL**: https://apify.com/s-r/tiktok-ads-library.md
- **Developed by:** [SR](https://apify.com/s-r) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 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/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

## Free TikTok Ad Library Scraper — Competitor Ad Spy

The free TikTok Ad Library scraper. Search TikTok's official Ad Library
by **keyword**, **advertiser name**, or **business ID** across 50+
regions — get video URLs, cover images, impressions, spend ranges,
dates, and rejection info as clean JSON.

Built for **TikTok competitor ad spy**, **creator marketing intelligence**,
and **brand monitoring** on TikTok.

### What you get

- Ad ID, advertiser name, audit status, ad type (image / video / carousel)
- First-shown / last-shown dates + total days running
- Estimated audience size + impression bucket + spend bucket
- Video URLs + cover image URLs (downloadable directly)
- Image URLs (carousel ads)
- Rejection reasons + affected regions where TikTok disclosed them
- Pagination via offset + search_id
- 50+ region support (Note: TikTok Ad Library does **not** support
  region=US — use region=all to include US ads in the global result set)

### Why use a TikTok Ad Library scraper

TikTok's Ad Library has no public API. Their official site
`library.tiktok.com` requires a browser session and JavaScript
rendering, and aggressively rate-limits unauth requests. To
programmatically pull TikTok ads at scale you have to scrape the
internal `/api/v1/search` endpoint and parse the responses.

This Actor handles the rotating IPs, the parameter validation, and the
audit-status / ad-type translation so you get clean structured JSON
ready for analysis.

### Input

| Field | Default | Description |
|---|---|---|
| `search` | — | Advertiser name or keyword. One of `search` / `ad_id` / `adv_biz_ids` is required |
| `ad_id` | — | Specific ad ID lookup (returns deeplink only — TikTok has no public detail API) |
| `adv_biz_ids` | — | TikTok advertiser business ID |
| `region` | `all` | ISO country code or `all`. **NOT `US`** (TikTok policy) |
| `query_type` | `1` | `1` = by advertiser name, `0` = by keyword |
| `sort` | `last_shown_date,desc` | See INPUT_SCHEMA enum for all options |
| `start_date` | -365d | YYYY-MM-DD lower bound |
| `end_date` | now | YYYY-MM-DD upper bound |
| `limit` | 20 | 1-100 ads per request |
| `offset` | 0 | Pagination offset |

### Use cases

- **TikTok competitor ad spy** — see every ad a brand is running
- **Creator / influencer benchmarking** — pull ad creatives by category
- **Brand monitoring on TikTok** — alert on new creative refreshes
- **Cross-platform creative analysis** — pair with Meta + Google + LinkedIn
  ad library scrapers for full competitor intelligence
- **Ad-rejection research** — see which categories TikTok rejects most
  often in which regions

### Limits

- TikTok Ad Library **does not support `region=US`** — returns 400 for any
  US-region query (TikTok policy)
- TikTok has no public ad-detail API — `ad_id` lookup returns the deeplink only
- Spend / impression are bucket strings (e.g. `$1k-$5k`), not exact numbers
- Some regions return zero results when the advertiser is not active there

### Related Actors — Free Ad Spy Suite

Pair this actor with the rest of the suite for full cross-platform competitor ad intelligence:

- **[Free Facebook Ad Library Scraper](https://apify.com/s-r/meta-ads-library)** — every active Meta ad for any brand or page
- **[Free LinkedIn Ad Library Scraper](https://apify.com/s-r/linkedin-ads-library)** — B2B ad spy across LinkedIn
- **[Free Google Ads Transparency Scraper](https://apify.com/s-r/google-ads-transparency)** — every ad an advertiser ran on Google Search, YouTube, Display, Shopping

Run all four on the same competitor and you have the complete picture
of what they're advertising across every major surface.

# Actor input Schema

## `search` (type: `string`):

Advertiser name or keyword (e.g. "nike", "korean skincare"). One of search / ad_id / adv_biz_ids is required.
## `ad_id` (type: `string`):

Specific ad ID. Returns deeplink only (TikTok has no public detail API).
## `adv_biz_ids` (type: `string`):

TikTok advertiser business ID filter.
## `region` (type: `string`):

ISO country code or 'all'. Note: TikTok Ad Library does NOT support region=US — use 'all' to include US ads in the global result set.
## `query_type` (type: `string`):

1 = by advertiser name, 0 = by keyword.
## `sort` (type: `string`):

Order results by recency or impression count.
## `start_date` (type: `string`):

Lower bound for ad's last-shown date (YYYY-MM-DD). Default: 1 year ago.
## `end_date` (type: `string`):

Upper bound for ad's last-shown date (YYYY-MM-DD). Default: now.
## `limit` (type: `integer`):

Max ads per request (1-100).
## `offset` (type: `integer`):

Result offset for pagination.
## `proxy_url` (type: `string`):

Optional IPv4 proxy URL in the form scheme://username:password@host:port. TikTok's library.tiktok.com has no IPv6, so the Actor defaults to direct connection from Apify compute IPs. Override this only if the default IP is rate-limited.

## Actor input object example

```json
{
  "search": "nike",
  "region": "all",
  "query_type": "1",
  "sort": "last_shown_date,desc",
  "limit": 20,
  "offset": 0
}
````

# 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 = {
    "search": "nike"
};

// Run the Actor and wait for it to finish
const run = await client.actor("s-r/tiktok-ads-library").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 = { "search": "nike" }

# Run the Actor and wait for it to finish
run = client.actor("s-r/tiktok-ads-library").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 '{
  "search": "nike"
}' |
apify call s-r/tiktok-ads-library --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Ads Library Scraper",
        "description": "Scrape TikTok's Ad Library by keyword, advertiser name, or business ID across any region — get video URLs, cover images, impressions, spend, dates, and rejection info.",
        "version": "0.1",
        "x-build-id": "NcCvMpIKTsmmoHBvc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/s-r~tiktok-ads-library/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-s-r-tiktok-ads-library",
                "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/s-r~tiktok-ads-library/runs": {
            "post": {
                "operationId": "runs-sync-s-r-tiktok-ads-library",
                "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/s-r~tiktok-ads-library/run-sync": {
            "post": {
                "operationId": "run-sync-s-r-tiktok-ads-library",
                "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": {
                    "search": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Advertiser name or keyword (e.g. \"nike\", \"korean skincare\"). One of search / ad_id / adv_biz_ids is required."
                    },
                    "ad_id": {
                        "title": "Ad ID",
                        "type": "string",
                        "description": "Specific ad ID. Returns deeplink only (TikTok has no public detail API)."
                    },
                    "adv_biz_ids": {
                        "title": "Advertiser business ID",
                        "type": "string",
                        "description": "TikTok advertiser business ID filter."
                    },
                    "region": {
                        "title": "Region",
                        "enum": [
                            "all",
                            "NL",
                            "DE",
                            "BE",
                            "FR",
                            "GB",
                            "ES",
                            "IT",
                            "AT",
                            "CH",
                            "PL",
                            "SE",
                            "DK",
                            "NO",
                            "FI",
                            "PT",
                            "IE",
                            "AU",
                            "CA",
                            "NZ",
                            "JP",
                            "KR",
                            "BR",
                            "MX",
                            "IN",
                            "TR",
                            "ZA",
                            "AR",
                            "CL",
                            "CO",
                            "EG",
                            "SA",
                            "AE",
                            "IL",
                            "SG",
                            "MY",
                            "TH",
                            "PH",
                            "ID",
                            "VN",
                            "TW",
                            "HK"
                        ],
                        "type": "string",
                        "description": "ISO country code or 'all'. Note: TikTok Ad Library does NOT support region=US — use 'all' to include US ads in the global result set.",
                        "default": "all"
                    },
                    "query_type": {
                        "title": "Query type",
                        "enum": [
                            "1",
                            "0"
                        ],
                        "type": "string",
                        "description": "1 = by advertiser name, 0 = by keyword.",
                        "default": "1"
                    },
                    "sort": {
                        "title": "Sort order",
                        "enum": [
                            "last_shown_date,desc",
                            "last_shown_date,asc",
                            "first_shown_date,desc",
                            "first_shown_date,asc",
                            "impression,desc",
                            "impression,asc"
                        ],
                        "type": "string",
                        "description": "Order results by recency or impression count.",
                        "default": "last_shown_date,desc"
                    },
                    "start_date": {
                        "title": "Start date",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Lower bound for ad's last-shown date (YYYY-MM-DD). Default: 1 year ago."
                    },
                    "end_date": {
                        "title": "End date",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Upper bound for ad's last-shown date (YYYY-MM-DD). Default: now."
                    },
                    "limit": {
                        "title": "Number of ads",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Max ads per request (1-100).",
                        "default": 20
                    },
                    "offset": {
                        "title": "Pagination offset",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Result offset for pagination.",
                        "default": 0
                    },
                    "proxy_url": {
                        "title": "Proxy URL (optional, advanced)",
                        "type": "string",
                        "description": "Optional IPv4 proxy URL in the form scheme://username:password@host:port. TikTok's library.tiktok.com has no IPv6, so the Actor defaults to direct connection from Apify compute IPs. Override this only if the default IP is rate-limited."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
