# TikTok Ads Library Scraper | Ads & Targeting | $0.29/1K (`monkey.d.scraping/tiktok-ads-library-scraper`) Actor

Scrape the TikTok Ad Library by brand or keyword for $0.29 per 1,000 ads, platform usage included. Automatic date splitting returns more ads; add advertiser, payer and age × gender targeting for $0.60/1K. No login.

- **URL**: https://apify.com/monkey.d.scraping/tiktok-ads-library-scraper.md
- **Developed by:** [Monkey D. Scraping](https://apify.com/monkey.d.scraping) (community)
- **Categories:** Social media, Marketing
- **Security:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.29 / 1,000 ads

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 Ads Library Scraper | Ads & Targeting | $0.29/1K

**TikTok Ads Library Scraper** exports ads from the public **TikTok Ad Library** (Commercial Content Library) by brand, advertiser name or keyword. Get ad text, video, first and last shown dates and estimated reach for **$0.29 per 1,000 ads**, platform usage included. Add advertiser, payer, objective, reach by country with age and gender, and targeting for **$0.60 per 1,000 ads**. No TikTok account, login or cookies needed.

Built for marketers, agencies, e-commerce teams and analysts who want to see what competitors advertise on TikTok, which products and angles they push, and which countries and audiences they target.

#### Why choose this TikTok Ads Library scraper?

- **Low, all-inclusive price.** $0.29 per 1,000 ads, or $0.89 with full details. Platform usage (compute, proxies) is **included**, so the price you see is the price you pay. Several TikTok ad scrapers charge Apify platform usage on top of their per-result price, or add a start fee per run.
- **More ads per search.** The TikTok Ad Library only shows a few hundred ads per search. This scraper **splits the date range automatically** and keeps going, so large brands and broad keywords return many more ads.
- **Built for a busy library.** Detail pages are opened in parallel and the pace adapts to the TikTok Ad Library: more pages at once when it answers quickly, fewer and with short pauses when it slows down, so runs keep going instead of getting blocked.
- **You never pay for gaps.** Duplicate ads are free. Details are charged **only when they were actually obtained**. Ads requested by ID that cannot be read are not charged.
- **Every ad found is delivered.** The search runs first, then details are added. If the library slows down or the run nears its time limit, the remaining ads are still delivered (without details, which are then not charged). The status message shows progress live and the run summary flags searches that are partial.
- **Full targeting data.** Reach per country with the **age × gender breakdown**, targeted ages and genders, interests, custom audiences, languages, devices, objective, payer and advertiser registration country.
- **No login, no cookies, no TikTok account.**

##### Benchmark on the same search

Same search, same day: keyword `samsung`, Italy, 6 October – 5 November 2026, about 100 ads with details. Measured on 5 November 2026 against a popular TikTok ads scraper in the Apify Store.

| | This Actor | Popular alternative |
|---|---|---|
| Ads delivered | **108** | 70 (stopped after 7 of 9 pages) |
| Ads with details | **108 / 108** | 70 / 70 |
| Run time | **8 min 41 s** | 14 min 25 s |
| Total cost to the user | **$0.096** ($0.89 per 1,000 ads) | $0.087 for 70 ads (about $1.24 per 1,000 ads, platform usage included) |

Results depend on the search, the date range and how busy the TikTok Ad Library is. Re-run your own search with 10 ads to check output and cost before larger runs.

#### What can you use it for?

- **Competitor ad research**: list every TikTok ad a brand ran in the last days or months, with video, text and dates.
- **Product and creative ideas**: search a keyword (for example `skincare` or `air fryer`) and see which products and hooks advertisers are using.
- **Targeting and reach analysis**: see in which countries an ad ran, estimated unique users reached, and the age and gender breakdown.
- **Advertiser and lead research**: find who pays for ads in a niche, where the advertiser is registered and which TikTok account it uses.
- **Monitoring with schedules or API**: run the same search daily or weekly and compare results in your own pipeline.

#### What data do you get?

| Field | Description | Search ($0.29/1K) | Details (+$0.60/1K) |
|---|---|---|---|
| `adId`, `adUrl` | Ad ID and link to the ad page in the TikTok Ad Library | ✅ | ✅ |
| `adText`, `adType` | Ad caption and format: `video`, `image` or `text` | ✅ | ✅ |
| `videoUrl`, `coverImageUrl`, `imageUrls` | Creative links as published by the library | ✅ | ✅ |
| `firstShownDate`, `lastShownDate` | Dates the ad was shown (YYYY-MM-DD) | ✅ | ✅ |
| `estimatedAudience`, `category`, `status` | Unique users reached range, category, `active` or `unavailable` | ✅ | ✅ |
| `advertiserName` | Advertiser name when the library shows it | ✅ (when shown) | ✅ |
| `advertiserId`, `advertiserCountry`, `paidBy`, `advertiserTikTokUser` | Advertiser ID, registration country, payer, linked TikTok account | — | ✅ |
| `objective` | Campaign objective, for example `Reach` or `Lead generation` | — | ✅ |
| `totalImpressions`, `totalRegions`, `impressionsByCountry` | Reach overall and per country, with age × gender breakdown | — | ✅ |
| `targetingAgeByCountry`, `targetingGenderByCountry`, `targeting`, `targetAudienceSize` | Targeted ages, genders, countries, languages, interests, custom audiences, devices | — | ✅ |

Every row also has `searchTerm`, `searchCountry`, `detailsIncluded` and `scrapedAt`.

#### How much does it cost?

You pay only for results. Platform usage is included.

| What you get | Price per 1,000 ads | 100 ads | 1,000 ads |
|---|---|---|---|
| Search results only (details off) | **$0.29** | $0.029 | $0.29 |
| Search results with details (default) | **$0.89** ($0.29 + $0.60) | $0.089 | $0.89 |

- Duplicate ads are removed and not charged.
- Details are charged only when they were actually obtained for that ad.
- An ad requested by ID whose details cannot be read is not charged.
- Set a maximum cost per run in Apify Console and the run stops when it is reached.

#### How to use it

1. Enter one or more **advertiser names or keywords**, one per line.
2. Choose the **country** where the ads were shown, or all supported countries.
3. Set **maximum ads per search**. Start with 10 to see the output.
4. Optional: choose **dates**. Without dates you get the last 30 days.
5. Click **Start** and export to JSON, CSV, Excel, or use the API.

For faster and cheaper runs, turn off **Include advertiser and targeting details** in the advanced options.

##### Tips for large searches

- Narrow the search with a **country** and **dates**: you get more relevant ads and faster runs.
- For thousands of ads, run the search **without details** first, then put the IDs of the ads you care about in **Ad IDs** to get their details. It is quicker and cheaper.
- When the TikTok Ad Library is busy, detail pages slow down for every tool. The status message says so, and if detail pages become extremely slow the remaining ads are delivered without details, which are not charged.

#### Input example

```json
{
  "searchTerms": ["samsung"],
  "country": "IT",
  "maxAdsPerSearch": 10,
  "dateFrom": "2026-10-01",
  "dateTo": "2026-11-05",
  "includeDetails": true
}
```

#### Output example

Real result with details, shortened:

```json
{
  "adId": "1879941377312769",
  "adUrl": "https://library.tiktok.com/ads/detail/?ad_id=1879941377312769",
  "status": "active",
  "searchTerm": "samsung",
  "searchCountry": "IT",
  "advertiserName": "Ricardos_cartel",
  "advertiserId": "7700239797620785170",
  "advertiserCountry": "Italy",
  "paidBy": "Ricardos_cartel",
  "adText": "samsung s26 ultra edit#samsung #s26u",
  "adType": "video",
  "objective": "Reach",
  "category": "Tech & Electronics",
  "firstShownDate": "2026-10-24",
  "lastShownDate": "2026-10-25",
  "estimatedAudience": "1K-10K",
  "totalImpressions": "1K-10K",
  "totalRegions": 1,
  "impressionsByCountry": [
    {
      "country": "IT",
      "impressions": "8K",
      "breakdowns": [
        { "age": "18-24", "gender": "MALE", "impressions": "2K" },
        { "age": "18-24", "gender": "FEMALE", "impressions": "2K" }
      ]
    }
  ],
  "targetingAgeByCountry": [
    { "region": "IT", "13-17": true, "18-24": true, "25-34": true, "35-44": true, "45-54": true, "55+": true }
  ],
  "targetingGenderByCountry": [{ "region": "IT", "female": true, "male": true, "unknown": true }],
  "targetAudienceSize": "22.1M-27.0M",
  "detailsIncluded": true,
  "scrapedAt": "2026-11-05T13:11:03.394Z"
}
```

#### Ready-to-run examples

| Example | Use case | What you get |
|---|---|---|
| [Competitor ads by brand](https://apify.com/monkey.d.scraping/tiktok-ads-library-scraper/examples/tiktok-competitor-ads-by-brand) | See what a brand advertises on TikTok in Germany | Up to 20 recent adidas ads with advertiser and targeting details |
| [Ad ideas by keyword](https://apify.com/monkey.d.scraping/tiktok-ads-library-scraper/examples/tiktok-ads-keyword-research) | Find products and hooks in a niche across all countries | Up to 50 skincare ads, search results only |
| [Highest-reach ads and targeting](https://apify.com/monkey.d.scraping/tiktok-ads-library-scraper/examples/tiktok-ads-reach-and-targeting) | See which ads reached the most people and whom they targeted | Up to 20 Nike ads in France sorted by reach, with age, gender and country breakdown |

#### Coverage and limits

- The TikTok Ad Library covers ads shown in the **European Union, EEA, Switzerland, United Kingdom, Turkey and Brazil**. Ads shown only in other countries are not in the library.
- Dates can go back up to **one year**.
- The library shows a few hundred ads per search. For larger searches the scraper automatically splits the date range, so you can collect more. Very large searches can return fewer ads than the total reported by the library; the run summary marks them as partial.
- Some removed ads (`status: "unavailable"`) have no advertiser name, even with details.
- Reach values are ranges published by TikTok (for example `1K-10K`), not exact numbers.
- For some ads TikTok does not publish reach, countries or objective, even when the advertiser details are available (for example some advertisers registered outside the EU). These fields are then `null` or empty: this is what the library shows, not a scraping error.
- Video and image links are temporary links published by the library.

#### FAQ

**Is this the cheapest way to scrape the TikTok Ad Library?**
At $0.29 per 1,000 ads with platform usage included, it is lower than the TikTok ad scrapers we checked in the Apify Store on 5 November 2026, which charge between $0.40 and $15 per 1,000 ads, often plus platform usage or a start fee. Prices change, so compare the total cost of a test run.

**Why is the total cost lower than other scrapers?**
Because platform usage is included in the price, details are charged only when obtained, and duplicates are free. You do not get a separate compute bill.

**How many ads can I get for one brand or keyword?**
As many as the library shows for your dates. Searches are split by date automatically to go past the few hundred ads TikTok shows per search. Very busy periods can return fewer ads than the total reported by TikTok; the run summary flags them.

**Why are reach or countries empty for some ads?**
The TikTok Ad Library does not publish reach, countries or objective for every ad. When TikTok leaves them out, the scraper returns `null` instead of guessing. Advertiser ID, registration country, payer and target audience size are usually still available with details.

**Do I need a TikTok account or cookies?**
No. The scraper reads the public TikTok Ad Library like a visitor does.

**What is the difference between search and details?**
Search returns the ad, its creative and dates. Details add who advertises and pays, the objective, reach by country with age and gender, and targeting. Details take longer because each ad page is opened.

**Can I search by advertiser and by keyword?**
Yes. Each line is searched as the library does: advertiser names and words in the ad.

**Can I get specific ads?**
Yes. Put ad IDs in **Ad IDs** in the advanced options. Details are fetched for each ID.

**Does it work for the TikTok Creative Center top ads?**
No. This Actor covers the TikTok Ad Library (Commercial Content Library) only.

**How do I monitor a competitor?**
Save an Apify task with the brand and schedule it. Each run returns the ads shown in the chosen period; compare runs by `adId`.

#### Related ad research tools

- [Microsoft Ads Library Scraper](https://apify.com/monkey.d.scraping/microsoft-ads-library-scraper): Bing ads by keyword, advertiser or website domain, with landing pages, UTM parameters, impressions by country and targeting. From $0.50 per 1,000 ads.
- [LinkedIn Ad Library Scraper](https://apify.com/monkey.d.scraping/linkedin-ad-library-scraper): LinkedIn ads by company, keyword or payer, with impressions by country, targeting, payer and dates. From $0.50 per 1,000 ads.
- [Google Ads Scraper — Transparency Center](https://apify.com/monkey.d.scraping/google-ads-transparency-scraper): a competitor's Google Search, YouTube and Shopping ads by domain or brand, with reach by country and platform, ad texts and landing pages. From $0.40 per 1,000 ads.
- [Google Ads Domain Checker](https://apify.com/monkey.d.scraping/google-ads-domain-checker): check whether a website domain advertises on Google, with advertiser names, ad dates and evidence links.
- [LinkedIn Ad Library Change Monitor](https://apify.com/monkey.d.scraping/linkedin-ad-library-change-monitor): collect a company's public LinkedIn ads and see what changed between runs.

#### More tools for marketers

- [Website SEO Audit & Contact Scraper](https://apify.com/monkey.d.scraping/website-opportunity-auditor): audit the landing pages your competitors advertise, with SEO issues and contact details.
- [Google Shopping Price Tracker & Seller Monitor](https://apify.com/monkey.d.scraping/google-shopping-price-change-seller-monitor): track competitor prices and sellers on Google Shopping.
- [Google Trends Scraper — Keyword History API](https://apify.com/monkey.d.scraping/google-trends-keyword-analysis): check the search interest behind the keywords competitors bid on.
- [Affiliate Program Finder & Commission Checker](https://apify.com/monkey.d.scraping/affiliate-program-finder): find affiliate programs and commissions in your niche.

These are separate Actors and are never called by this TikTok Actor.

# Actor input Schema

## `searchTerms` (type: `array`):

Brand, advertiser name or keyword, one per line, for example samsung or air fryer. Each line is a separate search in the TikTok Ad Library.

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

Country where the ads were shown. The TikTok Ad Library covers the EU, EEA, Switzerland, the UK, Turkey and Brazil.

## `maxAdsPerSearch` (type: `integer`):

Stops each search after this many unique ads. Start with 10 to preview the output; duplicates are never charged.

## `dateFrom` (type: `string`):

Ads shown on or after this date. Empty: 30 days before the end date. At most one year back.

## `dateTo` (type: `string`):

Ads shown on or before this date. Empty: today.

## `includeDetails` (type: `boolean`):

Adds advertiser ID and country, payer, objective, reach by country with age and gender, and targeting (+$0.60 per 1,000 ads). Turn off for search results only ($0.29 per 1,000 ads).

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

Order of the results returned by the library.

## `adIds` (type: `array`):

Fetch these ads directly by ID, for example 1879941377312769. When filled, the search fields are ignored and details are fetched for each ID.

## Actor input object example

```json
{
  "searchTerms": [
    "samsung"
  ],
  "country": "all",
  "maxAdsPerSearch": 10,
  "includeDetails": true,
  "sortBy": "last_shown_date,desc"
}
```

# Actor output Schema

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

One row per unique TikTok ad, with details when enabled.

## `advertisers` (type: `string`):

Advertiser, payer, objective, reach and audience size per ad.

## `summary` (type: `string`):

Searches, ads delivered, details obtained, date range and partial searches.

# 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 = {
    "searchTerms": [
        "samsung"
    ],
    "country": "all",
    "maxAdsPerSearch": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("monkey.d.scraping/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 = {
    "searchTerms": ["samsung"],
    "country": "all",
    "maxAdsPerSearch": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("monkey.d.scraping/tiktok-ads-library-scraper").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 '{
  "searchTerms": [
    "samsung"
  ],
  "country": "all",
  "maxAdsPerSearch": 10
}' |
apify call monkey.d.scraping/tiktok-ads-library-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,monkey.d.scraping/tiktok-ads-library-scraper"
        }
    }
}
```

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/QQjOBpPFRdWT0jYQl/builds/zVhHXnqg5o9Tnaj7K/openapi.json
