# TikTok Ad Library Scraper - Landing Pages & UTMs \[NO LOGIN] ✅ (`unseenuser/tiktok-ads-library-scraper`) Actor

TikTok Ad Library scraper for the EU Ads Library: search by keyword, advertiser or ad ID. Get every ad's landing page with UTM and campaign tags, campaign objective and the countries it ran in, plus video and run dates. No login, no duplicates, failed rows free. CSV, Excel, JSON, API.

- **URL**: https://apify.com/unseenuser/tiktok-ads-library-scraper.md
- **Developed by:** [Unseen User](https://apify.com/unseenuser) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.80 / 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 Ad Library Scraper - EU Ads, Landing Pages & Regions

> **Search TikTok's EU Ads Library by keyword or advertiser. Get videos, run dates and reach ranges, plus optional landing pages, objectives and countries.**

Use this **TikTok Ad Library** scraper to pull competitor ads from the TikTok Ads Library with each ad's landing page, UTM and campaign tags, target countries and campaign objective, ready to export as CSV, Excel or JSON, or through the Apify API.

TikTok's official name for this archive is the **TikTok Commercial Content Library** (library.tiktok.com). It covers ads shown in the European Economic Area, Switzerland and the UK.

### ⚡ Why This Actor?

Enter keywords, advertiser names or ad IDs and get back TikTok Ads Library ads (advertiser, title, video, cover image, first and last shown dates, days running, estimated audience range). Switch on details to also get each ad's landing page URL, campaign objective and the list of European countries where it ran, all in the same run. Built for competitive ad research on TikTok's EU-regulated transparency library, priced at $0.80 per 1,000 ads.

What it does NOT do: it does not return TikTok Creative Center "Top Ads", engagement metrics (likes, CTR), spend or impressions, or age, gender and interest targeting. TikTok does not publish those for library ads. See the field table below for exactly what you get.

### 🎯 Use Cases

- **Competitive monitoring**: see which ads a competitor is running on TikTok in Europe, with run dates and creative
- **Landing page research**: pull the exact landing page URLs (with UTM parameters) behind competitor ads to study funnels and offers
- **Creative inspiration**: collect video and image creatives by keyword (e.g. "skincare") to see what formats are in market
- **Market entry research**: check which European countries a brand targets before launching there
- **Agency pitch preparation**: show a prospect what their competitors run on TikTok, with dates and objectives
- **Ad longevity analysis**: use first and last shown dates and `daysRunning` to spot long-running (likely profitable) ads
- **Cross-library research**: combine with our Google, Meta and LinkedIn ad library actors for a full-channel picture of one brand
- **TikTok ads examples by niche**: search a keyword such as "running shoes" or "skincare" and get real, current TikTok ads examples with title, creative and (with details on) landing page
- **TikTok ads API alternative**: get competitor ad data as JSON through the Apify API, without applying for TikTok's own developer access
- **Weekly competitor watch**: schedule one run per competitor and collect their latest ads, landing pages and target markets each week

### 📚 TikTok Ads Library vs. TikTok Creative Center

These are two different TikTok products. People mix them up, so here is the difference:

| | TikTok Ads Library (this Actor) | TikTok Creative Center "Top Ads" |
|---|---|---|
| **What it is** | Legal transparency archive TikTok runs under the EU Digital Services Act | Marketing inspiration tool for advertisers |
| **Which ads** | Ads shown to users in Europe (all sizes, including small advertisers) | A curated set of high-performing ads |
| **Advertiser name** | Yes | Often blank |
| **Run dates** | Yes (first and last shown) | Limited |
| **Engagement (likes, CTR)** | No | Yes |
| **Covered by this Actor** | ✅ Yes | ❌ No |

This Actor covers the Ads Library only. Creative Center Top Ads are not covered.

### 🌍 Supported Countries

TikTok's Ads Library covers ads shown in Europe. The country list per ad comes from TikTok and is only returned when `includeDetails` is on. In our live test (Oct 20, 2026), one ad returned 27 countries:

`AT, BE, BG, CH, CY, CZ, DK, EE, ES, FI, FR, GB, GR, HR, HU, IE, LT, LV, NL, NO, PL, PT, RO, SE, SI, SK, TR`

The list varies per ad, because it reflects where that specific ad ran. TikTok decides which countries the library covers. Ads shown only outside Europe (for example US-only ads) are generally not in the library.

**There is no country filter input.** The library search cannot be narrowed by country, and we never charge you for ads only to throw them away. If you need one country, turn on details and filter the `targetCountries` column in your dataset.

### 🚀 Quick Start

1. Click **Try for free** on this Actor's page
2. Enter at least one search term, advertiser name or ad ID (see Inputs Overview below)
3. Run the Actor
4. Download results as JSON, CSV, or XLSX, or pull via Apify API

### ⚙️ Inputs Overview

| Input | Type | Required | Description | Example/Allowed Values |
|---|---|---|---|---|
| `searchTerms` | array of strings | ⚠️ One of `searchTerms` / `advertiserNames` / `adIds` required | Keywords to search the Ads Library (general search) | `["skincare", "protein powder"]` |
| `advertiserNames` | array of strings | ⚠️ One of the three required | Advertiser names. Works best with the exact name shown in the library. If no advertiser matches exactly, the Actor searches the same text as a keyword and keeps only ads whose advertiser name contains it as a whole word | `["NIKE Retail B.V."]` |
| `advertiserBizId` | string | ❌ | TikTok advertiser business ID (from a "See all ads" link). Pins the exact advertiser. Only allowed when exactly ONE advertiser name is given | `7078923208527618049` |
| `adIds` | array of strings | ⚠️ One of the three required | Ads Library ad IDs or library URLs. Fetches full details directly (no search) | `1879330505776530` or `https://library.tiktok.com/ads/detail/?ad_id=1879330505776530` |
| `includeDetails` | boolean | ❌ | **⚠️ COST WARNING:** adds landing page, objective, country list and 720p video for every search result. Charged as an extra `ad-detail` event ($7 per 1,000) on top of the `ad` event. Default `false` | `false` |
| `maxResults` | integer | ❌ | Max ads per search term or advertiser. Default 30, maximum 5,000. Set `0` for all results: every ad available is fetched, and the cost grows with the number of ads, so set a maximum cost per run in Apify if needed | `30`, or `0` for all |

> NOTE: Free Apify users receive up to 5 ads per run. Upgrade to any paid Apify plan to remove this limit. This limit was set by the Actor developer, not by Apify.

#### Example inputs

**1. Brand research (one advertiser, with landing pages and countries):**

```json
{
  "advertiserNames": ["Gymshark"],
  "includeDetails": true,
  "maxResults": 60
}
```

**2. Keyword discovery (several keywords, cheap search rows only):**

```json
{
  "searchTerms": ["skincare", "collagen", "sunscreen"],
  "maxResults": 240
}
```

**3. Multi-country question ("which European countries does this brand target?"):** there is no country input, so run the brand search with details on, then filter or pivot the `targetCountries` column:

```json
{
  "advertiserNames": ["Digital Skincare Inc."],
  "includeDetails": true,
  "maxResults": 120
}
```

**4. Date window ("ads first shown in the last 30 days"):** there is no date input (the library search cannot be narrowed by date). Run a normal search and filter `firstShownDate` in your dataset. Each row also carries `daysRunning`.

**5. Detail lookup for known ads:**

```json
{
  "adIds": [
    "1879330505776530",
    "https://library.tiktok.com/ads/detail/?ad_id=1879330505471106"
  ]
}
```

### 📊 Output Fields - What You Get and When

| Field | Search row | Needs `includeDetails` (or `adIds`) | Notes |
|---|---|---|---|
| `adId`, `adUrl` | ✅ | | `adUrl` is the public Ads Library page |
| `advertiserName` | ✅ | | Advertiser name as shown in the library |
| `brandName` | | ✅ | Brand name from the ad's detail page |
| `advertiserBizId` | Sometimes | ✅ | Empty in keyword searches; filled in advertiser searches and in details |
| `adTitle` | ✅ | | Ad caption/title text |
| `adTypeCode`, `auditStatus` | ✅ | | Raw TikTok codes, not documented by TikTok (live test: `adTypeCode` "2" on video ads, `auditStatus` "1") |
| `firstShownDate`, `lastShownDate` | ✅ | | ISO dates (`YYYY-MM-DD`, UTC) |
| `daysRunning` | ✅ | | Inclusive days between first and last shown |
| `estimatedAudience` | ✅ | | Range string, e.g. `0-1K`, `1K-10K` |
| `videoUrl`, `thumbnailUrl`, `imageUrls`, `videos` | ✅ | | **Expiring signed URLs, see note below.** Some ads are image ads: `videoUrl` is empty and the image is in `imageUrls` |
| `landingPageUrl`, `landingPageDomain` | | ✅ | Full URL including UTM parameters |
| `objective`, `objectives` | | ✅ | e.g. `Sales` |
| `targetCountries` | | ✅ | European country codes where the ad ran |
| `videoUrlsByQuality`, `coverUrl` | | ✅ | e.g. `720p` |
| `isUnavailable`, `rejectionInfo` | Sometimes | ✅ | Signals ads TikTok has pulled or flagged |
| `detailFetched`, `detailError` | ✅ | ✅ | Whether details were added, and why not if a lookup failed |
| `query`, `searchType`, `resolvedAdvertiserName`, `searchTotal`, `scrapedAt` | ✅ | ✅ | Run context. `searchType` is `keyword`, `advertiser`, `advertiser_fallback` (matched by name, see the advertiser FAQ) or `ad_id`; `resolvedAdvertiserName` is the advertiser name TikTok matched |
| `status`, `error.type`, `error.message`, `charged` | | | Only on explanation rows, see below |

**NOT returned (TikTok does not publish these for library ads):** spend and impressions (not published for these ads, including big-brand ads in our live tests), age groups, gender, interest targeting, per-country reach, unique users seen, payer / "paid by", call-to-action type, likes, comments, shares, CTR, cost.

> **🖼️ Image ads:** not every ad is a video. For image ads, `videoUrl` is empty and `videos` is an empty list; the creative is in `imageUrls` (and `thumbnailUrl`).

> **⏱️ Expiring media URLs:** video and image URLs are signed TikTok CDN links. In our live test, cover images expired about 6 hours after the run. Download any media you need right after the run finishes. Old URLs will return errors.

#### Example output row (`includeDetails: true`, media URLs shortened)

```json
{
  "adId": "1879330505776530",
  "adUrl": "https://library.tiktok.com/ads/detail/?ad_id=1879330505776530",
  "advertiserName": "Digital Skincare Inc.",
  "advertiserBizId": "7186955021488275458",
  "brandName": "Digital Skincare Inc.",
  "adTitle": "Personalized Skincare Plan",
  "adTypeCode": "2",
  "auditStatus": "1",
  "firstShownDate": "2026-10-18",
  "lastShownDate": "2026-10-19",
  "daysRunning": 2,
  "estimatedAudience": "0-1K",
  "videoUrl": "https://library.tiktok.com/api/v1/cdn/...",
  "thumbnailUrl": "https://p16-common-sign.tiktokcdn.com/...",
  "targetCountries": ["HR", "HU", "DK", "CY", "CZ", "GB", "TR", "..."],
  "landingPageUrl": "https://interview.lovi.care/?ttclid=__CLICKID__&utm_source=tiktok&utm_id=__AID__&utm_campaign=__CAMPAIGN_NAME__&utm_medium=cpc&utm_content=__CID_NAME__",
  "landingPageDomain": "interview.lovi.care",
  "objective": "Sales",
  "objectives": ["Sales"],
  "videoUrlsByQuality": { "720p": "https://library.tiktok.com/api/v1/cdn/..." },
  "isUnavailable": false,
  "detailFetched": true,
  "query": "skincare",
  "searchType": "keyword",
  "scrapedAt": "2026-10-20T12:12:37.000Z"
}
```

#### Example output row: advertiser search with details (real run, image ad)

From a live run with `advertiserNames: ["Nike"]` and `includeDetails: true`. No advertiser is named exactly "Nike", so the Actor matched "NIKE Retail B.V." by name (`searchType: "advertiser_fallback"`). This is an image ad, so `videoUrl` is empty and `videos` is an empty list. Media URLs are shortened.

```json
{
  "adId": "1879011035967585",
  "adUrl": "https://library.tiktok.com/ads/detail/?ad_id=1879011035967585",
  "advertiserName": "NIKE Retail B.V.",
  "advertiserBizId": "6876453864464188162",
  "brandName": "NIKE Retail B.V.",
  "adTitle": "Trainiere ohne Kompromisse - im Nike Hybrid RN.",
  "adTypeCode": "2",
  "auditStatus": "1",
  "rejectionInfo": null,
  "firstShownDate": "2026-10-14",
  "lastShownDate": "2026-10-19",
  "daysRunning": 6,
  "estimatedAudience": "100K-200K",
  "showMode": 2,
  "videoUrl": null,
  "thumbnailUrl": "https://p16-common-sign.tiktokcdn.com/...",
  "videos": [],
  "imageUrls": ["https://p16-common-sign.tiktokcdn.com/..."],
  "targetCountries": ["DE"],
  "landingPageUrl": "https://www.nike.com/de/w/hybrid-training-8wvhh?cp=31123152041_brs_CRHX2J85JXMM",
  "landingPageDomain": "www.nike.com",
  "objective": "Traffic",
  "objectives": ["Traffic"],
  "videoUrlsByQuality": null,
  "coverUrl": "https://p16-common-sign.tiktokcdn.com/...",
  "isUnavailable": false,
  "detailFetched": true,
  "detailError": null,
  "query": "Nike",
  "searchType": "advertiser_fallback",
  "resolvedAdvertiserName": "NIKE Retail B.V.",
  "searchTotal": 5000,
  "scrapedAt": "2026-10-20T19:36:54.324Z",
  "_metadata": {
    "scraped_at": "2026-10-20T19:37:03.459Z",
    "input_mode": "search+detail",
    "query": "Nike",
    "search_type": "advertiser_fallback",
    "page": 2,
    "charged_events": ["ad", "ad-detail"]
  }
}
```

#### Explanation rows (never charged)

When something needs explaining, such as a search with no results, an ad ID that does not exist, a temporary problem with the data source, the free-plan limit or your maximum cost per run, the dataset gets one extra row like this:

```json
{
  "status": "no_data",
  "error": {
    "type": "no_results",
    "message": "No ads found for \"zzqqxx\". Try a different spelling or a broader term."
  },
  "charged": false,
  "input": "zzqqxx",
  "searchType": "keyword"
}
```

`status` is `no_data` (nothing to deliver, for example no results, ad not found, free-plan limit, maximum cost reached) or `error` (something went wrong, for example invalid input or the data source being temporarily unavailable). Filter on `status` to separate these rows from ads.

### 💰 Pricing

Pay-per-event model on Apify. You pay only for ads actually delivered to your dataset.

| Event | Price | When it is charged |
|---|---|---|
| Actor start | $0.02 per run | Once per run (Apify built-in) |
| `ad` | $0.80 per 1,000 | Each ad row delivered from a search |
| `ad-detail` | $7.00 per 1,000 | Each ad enriched with details (opt-in, or every `adIds` lookup) |

Failed lookups (error rows) are never charged.

**Free plan limit:** NOTE: Free Apify users receive up to 5 ads per run. Upgrade to any paid Apify plan to remove this limit. This limit was set by the Actor developer, not by Apify.

**Cost examples:**

| Run | Ads | Details | Approximate cost |
|---|---|---|---|
| Default keyword run | 30 | off | $0.02 + $0.024 = **about $0.04** |
| Quick keyword check | 120 | off | $0.02 + $0.096 = **about $0.12** |
| Brand deep-dive | 120 | on | $0.02 + $0.096 + $0.84 = **about $0.96** |
| Large keyword sweep | 5,000 | off | $0.02 + $4.00 = **about $4.02** |
| Large sweep with details | 5,000 | on | $0.02 + $4.00 + $35.00 = **about $39.02** |
| Detail lookup of 50 known ads | 50 | (always) | $0.02 + $0.35 = **about $0.37** |

> **⚠️ Cost Warning:** `includeDetails=true` adds $7 per 1,000 ads on top of the $0.80 search price (about 10x the price of search alone). Leave it off unless you need landing pages, objectives or countries.

If you set a maximum charge for a run, the Actor stops cleanly before going over it and never fetches an ad it cannot deliver within your limit.

See exact per-event pricing on the Actor's Apify page.

### ❓ FAQ

**Q: Is this legal?**
A: This Actor wraps Scrape Creators endpoints that handle the underlying data collection. Your downstream use of the data is your responsibility - see the full Terms of Service and the Actor-Specific Addendum (Part 4) for details.

**Q: Do I need a Scrape Creators account?**
A: No. UnseenUser holds the Scrape Creators credentials. You only need an Apify account.

**Q: What about TikTok's anti-scraping enforcement?**
A: TikTok's Terms restrict automated extraction. Scrape Creators handles the data collection - they bear the responsibility for their architecture's lawfulness. Your downstream use must comply with TikTok's Terms.

**Q: What if TikTok sends a cease-and-desist?**
A: Notify UnseenUser within 48 hours via the Apify profile contact form (apify.com/UnseenUser) and cease using this Actor immediately.

**Q: Can I use this data to train AI?**
A: NO. TikTok's Terms explicitly prohibit AI training on TikTok data, and advertisers retain copyright in their ad creative.

**Q: What about minors?**
A: TikTok has many under-18 users. This Actor returns business advertising, not user profiles, but its Terms strictly prohibit using data of users you know or suspect are minors. See Part 4 for details.

**Q: Is this the TikTok Creative Center (Top Ads)?**
A: No. This is the TikTok Ads Library, the EU transparency archive. Creative Center Top Ads are not covered. See the comparison table above.

**Q: Can I filter by country, date or ad type?**
A: Not as inputs. The library search cannot be narrowed by country, date or type, and we do not fetch and bill ads just to discard them. Filter `targetCountries` (needs details), `firstShownDate` or `adTypeCode` in your downloaded dataset.

**Q: When should I enable `includeDetails`?**
A: Only when you need landing pages, campaign objectives, the country list or the 720p video. It costs $7 per 1,000 ads extra, versus $0.80 per 1,000 for search rows alone.

**Q: Can I get spend or impressions?**
A: No. TikTok does not publish spend or impressions for these ads, so this Actor does not return them.

**Q: How do I search for one advertiser?**
A: Advertiser search works best with the exact name shown in the TikTok Ads Library, which is often the legal company name (for example "NIKE Retail B.V." rather than "Nike"). If no advertiser matches your text exactly, the Actor searches the same text as a keyword and keeps only ads whose advertiser name contains it as a whole word (ignoring upper and lower case). Those rows have `searchType` "advertiser_fallback" and the advertiser's real name in `resolvedAdvertiserName`. Use that name in your next run for an exact match.

**Q: Why are many ads from one advertiser, or from individual people?**
A: Results come newest first, so one advertiser running many near-identical ads can fill a keyword search. Use more specific keywords, or an advertiser search, to get a wider mix. Some advertisers are individual creators boosting their own posts: TikTok publishes their handle under EU ad-transparency rules. Do not use this data to profile, contact or target those individuals, and treat their videos as personal content (see Part 4, Section B).

**Q: How long are video and image URLs valid?**
A: A few hours. They are signed CDN URLs with an expiry (about 6 hours for cover images in our live test). Download what you need right after the run.

**Q: What does a row with `status` "error" or "no_data" mean?**
A: It explains why something could not be delivered, for example no results for a keyword or a temporary problem with the data source. These rows are never charged. If the message asks you to open an issue, please do, with the run ID and error type it shows.

**Q: Why did I only get 5 ads?**
A: NOTE: Free Apify users receive up to 5 ads per run. Upgrade to any paid Apify plan to remove this limit. This limit was set by the Actor developer, not by Apify.

**Q: How do I get all ads for a keyword or advertiser?**
A: Set `maxResults` to `0`. The Actor then keeps fetching until there are no more ads for that search term or advertiser, or until the free-plan limit or your maximum cost per run is reached. A popular keyword can return thousands of ads, and you pay per ad delivered, so set a maximum cost per run in Apify if you want a hard limit.

**Q: Is there an official TikTok Ads API for this?**
A: Not for competitor research. TikTok's Marketing API (often searched as "TikTok ads API") is for managing your own campaigns, and TikTok's Commercial Content API for the Ads Library requires an approved application. This Actor gives you TikTok Ads Library data as JSON through the Apify API with no application and no login: call it from your code, export to CSV or Excel, or connect it to Make, Zapier or Google Sheets.

**Q: Can AI agents use this TikTok ads scraper (MCP)?**
A: Yes. [Apify's MCP server](https://docs.apify.com/platform/integrations/mcp) lets AI agents and assistants such as Claude, ChatGPT and Cursor find and run Apify Actors, including this one, and read the results. Ask your agent to "search the TikTok Ad Library for skincare ads with landing pages" and it can run this Actor for you. TikTok's own "TikTok for Business" MCP server is a different tool: it manages your own ad campaigns. This Actor lets an AI agent research other brands' ads in the TikTok Ad Library.

**Q: Where can I find TikTok ads examples for my niche?**
A: Run a keyword search for your niche, for example "protein powder" or "language app". You get real, current ads from the TikTok Ads Library with title, creative, run dates and audience range. Turn on `includeDetails` to also see each ad's landing page and objective.

**Q: Does TikTok have an ads library?**
A: Yes. TikTok's ad library is the Commercial Content Library at library.tiktok.com, covering ads shown in the European Economic Area, Switzerland and the UK. This Actor searches it by keyword, advertiser name or ad ID, with no TikTok login, and gives you the results as a dataset.

**Q: Does it include US TikTok ads?**
A: No. The TikTok Ad Library covers ads shown in the European Economic Area, Switzerland and the UK. Ads shown only in the US are not in it, so this Actor cannot return them. Country lists can include other nearby markets; in our live test one ad also listed TR.

**Q: Can I download TikTok ad videos?**
A: Each row includes the ad's video URL (`videoUrl`, plus `videoUrlsByQuality` with details on) and image URLs (`imageUrls`, `thumbnailUrl`). They are signed links that expire after a few hours, so download the files you need right after the run. The Actor itself does not download or store media.

**Q: Why don't I see payer, reach or targeting like on library.tiktok.com?**
A: This Actor does not return the payer ("paid by"), unique reach or age, gender and interest targeting. For each ad it returns the estimated audience range (`estimatedAudience`), and with details on, the countries where the ad ran (`targetCountries`), the landing page and the campaign objective. See "Output Fields" above for the full list.

### 🎬 Demo videos

Schedule this TikTok Ad Library scraper to check your competitors' new ads every week:

[![How to schedule Apify Actors](https://img.youtube.com/vi/GRFW_Loo2dk/hqdefault.jpg)](https://www.youtube.com/watch?v=GRFW_Loo2dk)

Send new TikTok ads, landing pages and target countries straight to Google Sheets, Slack, Make or Zapier:

[![Apify integrations](https://img.youtube.com/vi/bNACk1_S_6w/hqdefault.jpg)](https://www.youtube.com/watch?v=bNACk1_S_6w)

### 🔗 Related Actors

- [Facebook & Instagram Ad Library scraper](https://apify.com/unseenuser/meta-ads): the same competitor ad research for Facebook and Instagram, from Meta's Ad Library
- [Google Ads scraper](https://apify.com/unseenuser/Google-ads): pull a brand's Google ads in bulk to compare with its TikTok ads
- [LinkedIn Ad Library scraper](https://apify.com/unseenuser/LinkedIn-ads): B2B ads from LinkedIn's Ad Library, to complete a brand's paid social picture
- [TikTok profile posts scraper](https://apify.com/unseenuser/TikTok-posts): bulk-scrape a brand's organic TikTok videos to compare with its paid ads

### 🔧 How it works

- **Live data:** every run queries TikTok's public Ads Library at run time. Nothing is served from an old cache.
- **No login needed:** you do not need a TikTok account, cookies or any third-party API key. An Apify account is all you need.
- **What ends a run:** a search stops when it reaches your `maxResults` for that term or advertiser (with `0`, there is no per-term limit), or when TikTok has no more ads for it. The whole run also stops when the free-plan limit of 5 ads is reached, or before your maximum charge per run would be exceeded.
- **Typical speed:** in our live tests, 120 ads for one keyword with details off took about 1 minute. With `includeDetails` on, expect about 2 seconds per ad (12 ads with details took about 20 to 25 seconds).
- **Newest first:** results come newest first, so one advertiser running many near-identical ads can fill a keyword search. Use more specific keywords, or an advertiser search, to diversify results.
- **No duplicates:** each ad appears once per run, even when several search terms or advertisers return the same ad. You are never charged twice for the same ad in one run.
- **Problems do not crash the run:** if a search finds nothing, an ad ID is not found, or a lookup fails, you get one explanation row (never charged) and the run continues with the rest. The run's status message sums up what happened in plain English.
- **Output:** one row per ad in the Apify dataset, downloadable as JSON, CSV or XLSX, or via the Apify API.

***

## Apify Actor - Terms of Service

**Version:** 4.0
**Effective Date:** May 5, 2026

***

### 0. ACCEPTANCE BY USE - IMPORTANT

**Read this section first.**

These Terms of Service ("Terms") form a binding legal agreement between you ("User," "you," "your") and UnseenUser, the Publisher of this Apify actor ("UnseenUser," "the Publisher," "we," "us," "our").

#### 0.1 How You Accept These Terms

You accept these Terms by **any of the following actions**, each of which constitutes a clear, affirmative act of acceptance:

- (a) **Running the Actor** - Initiating any execution of the Actor on the Apify platform
- (b) **Using any output** returned by the Actor for any purpose
- (c) **Continuing to access** the Actor's listing or documentation after these Terms are visible

#### 0.2 Continuing Acceptance

Each time you run the Actor or use its outputs, you reaffirm your acceptance of the then-current Terms. If you do not agree to these Terms or any subsequent update, you must stop using the Actor immediately.

#### 0.3 No Anonymous Acceptance

You cannot disclaim acceptance by:

- Failing to read these Terms before running the Actor
- Running the Actor through automated systems
- Sharing your Apify account with others who may not have read these Terms

By the act of running the Actor on Apify, you bind yourself, your organization (if applicable), and any individuals or systems acting on your behalf or under your authority.

#### 0.4 If You Do Not Accept

**If you do not agree to these Terms, you must not run the Actor.** No use is authorized without acceptance.

***

### PREAMBLE - UNDERSTANDING THE ARCHITECTURE

Before using the Actor, please understand the technical architecture of the service:

#### The Data Flow

```
You (User) → Apify Platform → Actor (software) → Third-Party API → Source Platform
                                                       ↓
You (User) ← Apify Platform ← Actor (software) ← Third-Party API
```

#### What Each Party Does

- **You (the User):** Run the Actor on the Apify platform with input parameters you choose
- **Apify:** Operates the cloud infrastructure that hosts and executes Actors. Apify is a Czech-incorporated company (Apify Technologies s.r.o.) governed by its own Terms of Service.
- **The Publisher (us):** Publishes software code (the Actor) on Apify's platform. The Actor is a thin wrapper that translates your input into requests to a third-party API and returns the API's responses to you. **The Publisher does not operate scraping infrastructure. The Publisher does not store or retain data returned by the Actor. The Publisher does not see, log, or process the personal data of any individuals returned in the Actor's outputs beyond what is incidental to passing the data through.**
- **Third-Party API Provider:** HarvestAPI (https://harvest-api.com) or Scrape Creators (https://scrapecreators.com). These are independent third-party companies that operate scraping infrastructure and return data from source platforms.
- **Source Platform:** LinkedIn, TikTok, YouTube, Reddit, Linktree, etc. These are the platforms whose publicly visible data is accessed by the Third-Party API Providers.

#### Why This Matters

Your relationship with the Publisher is that of a **software user** to a **software vendor**. The Publisher has the responsibilities of a software vendor (functional code, accurate documentation) and the limits of one (the Publisher is not responsible for how you use the data you obtain).

***

These Terms operate alongside but do not replace:

- Apify's Terms of Service and Acceptable Use Policy (governing your relationship with Apify)
- HarvestAPI Terms of Service and Scrape Creators Terms of Service (governing the underlying data infrastructure)
- Source Platform terms (LinkedIn, TikTok, etc.) governing the public data accessed
- Applicable law in your jurisdiction and the jurisdictions of data subjects

These Terms incorporate the actor-specific addendum published in each Actor's individual listing ("Addendum"). In the event of a conflict, the more restrictive provision applies.

***

### 1. NATURE OF THE SERVICE

#### 1.1 What the Actor Is

The Actor is a software program published on the Apify platform. Each Actor:

- (a) Accepts structured input from you on the Apify platform
- (b) Translates that input into HTTP requests to a third-party API operated by HarvestAPI or Scrape Creators
- (c) Receives HTTP responses from that third-party API
- (d) Returns the response data to you in a structured format on the Apify platform

The Actor's source code is hosted on Apify's infrastructure. The Actor runs in Apify's cloud, not on the Publisher's servers. The Publisher operates no servers running the Actor.

#### 1.2 What the Actor Is Not

The Actor is **not**:

- (a) A scraping tool - the Publisher does not operate scraping infrastructure, proxies, headless browsers, or fake accounts
- (b) A direct connection to any source platform - connections to source platforms are made by HarvestAPI / Scrape Creators
- (c) A data storage or data retention service - the Publisher does not maintain a database of any data the Actor returns
- (d) A licensed access channel to LinkedIn, TikTok, YouTube, Reddit, X (Twitter), Meta, Linktree, or any other source platform
- (e) Affiliated with, endorsed by, sponsored by, or authorized by any source platform

#### 1.3 The Publisher's Limited Role

The Publisher's role is limited to:

- (a) Designing and writing the Actor's source code
- (b) Publishing the Actor on the Apify Store
- (c) Maintaining the Actor (updating it when API providers change schemas)
- (d) Providing documentation and customer support via Apify's contact mechanism

The Publisher is a software vendor, similar to a developer who publishes an app on the Apple App Store or Google Play Store. The Publisher is not a data provider, data broker, data processor, or data controller for purposes of GDPR, CCPA, Israel's Privacy Protection Law, or equivalent.

#### 1.4 The Third-Party API Providers' Role

HarvestAPI (https://harvest-api.com) and Scrape Creators (https://scrapecreators.com) are independent third-party companies. They:

- (a) Operate the actual data scraping infrastructure
- (b) Maintain relationships with source platforms (or accept the operational risk of accessing public data without such relationships)
- (c) Are themselves Apify publishers (HarvestAPI publishes 9+ actors directly; Scrape Creators publishes 10+)
- (d) Provide their own Terms of Service governing their operations
- (e) Are responsible for compliance obligations relating to the data collection itself

The Publisher is a customer of these providers. The Publisher is not their agent, partner, or representative.

***

### 2. WHO MAY USE THE ACTOR

#### 2.1 Eligibility

You may use the Actor only if:

- (a) You are at least 18 years old or the age of majority in your jurisdiction
- (b) You have legal capacity to enter into binding contracts
- (c) You are not located in or resident of a country subject to comprehensive sanctions by the United States, European Union, United Kingdom, or Israel
- (d) You are not on any prohibited persons list

#### 2.2 User Representations

By using any Actor, you represent and warrant that:

- (a) **Truthful identity:** Information you provide about your identity and intended use is accurate
- (b) **Lawful intent:** Your intended use complies with applicable law in your jurisdiction
- (c) **Source platform compliance:** You will independently comply with the Terms of Service of any source platform whose data you obtain through the Actor
- (d) **Data subject rights:** Where Actor outputs include personal data, you will respect data subject rights under applicable law
- (e) **No prohibited use:** You will not use the Actor for any of the purposes prohibited in Section 4

These representations are continuous - they must remain true throughout your use.

***

### 3. PERMITTED USES

The Actor may be used for any lawful purpose, including:

- Market research and competitive analysis
- Academic research
- Journalism and investigative reporting
- Internal business intelligence
- Brand monitoring
- Recruitment research where consistent with applicable employment law
- Building products that further process publicly available information lawfully

Specific permitted uses for each Actor are described in that Actor's individual listing and Addendum.

***

### 4. PROHIBITED USES

You may not use the Actor for any of the following:

#### 4.1 Illegal Activity

Activity illegal under the law of your jurisdiction, the User's jurisdiction, or the jurisdiction of any data subjects.

#### 4.2 Harassment, Stalking, and Personal Targeting

- Compiling profiles for harassment, stalking, or doxxing
- Tracking individuals' movements or activities without their knowledge
- Building profiles of journalists, activists, dissidents, or vulnerable populations for retaliatory purposes

#### 4.3 Discrimination

- Using outputs for discriminatory employment, lending, housing, or insurance decisions based on protected characteristics
- Building lists for discriminatory purposes

#### 4.4 Spam and Unsolicited Commercial Communication

- Sending unsolicited marketing in violation of CAN-SPAM, CASL, GDPR, PECR, Israeli Anti-Spam Law (סעיף 30א לחוק התקשורת), or equivalent laws
- Building "lead lists" from scraped contacts without proper consent infrastructure
- Reselling contact data for spam purposes

#### 4.5 Fraud and Deception

- Identity theft or impersonation
- Generation of fake reviews, testimonials, or coordinated inauthentic behavior
- Election interference or political disinformation
- Securities fraud

#### 4.6 Source Platform Abuse

- Using outputs to circumvent technical protection measures of source platforms
- Creating fake accounts on source platforms based on Actor outputs
- Vote manipulation, engagement manipulation, or platform algorithm gaming
- Building services that competitively substitute for source platforms

#### 4.7 Reselling the Actor's Service

- Reselling raw Actor outputs as your own data product or scraping-as-a-service
- Sharing your Apify credentials to provide third parties indirect access
- Building competing API services using Actor outputs

#### 4.8 AI Training Without Authorization

- Using Actor outputs as training data for commercial AI/ML models without separate licensing authority from the source platform

#### 4.9 Sensitive Targeting

- Specifically targeting or profiling based on health conditions, sexual orientation, religious beliefs, political opinions, or other sensitive characteristics
- Targeting children under 16 (or local age of consent for data processing)

#### 4.10 Privacy Law Violations

- Processing personal data of EU/UK/California/Israeli residents without complying with applicable privacy law
- Failing to honor data subject access, deletion, or objection requests
- Processing data for purposes incompatible with its publication context

***

### 5. SOURCE PLATFORM TERMS - YOUR RESPONSIBILITY

#### 5.1 Acknowledgment

The Actor accesses publicly visible data on third-party platforms ("Source Platforms") through the Third-Party API Providers (HarvestAPI / Scrape Creators). Source Platforms include LinkedIn, TikTok, YouTube, Reddit, X (Twitter), Meta/Facebook, Linktree, Komi, Pillar, Linkbio, Linkme, and Amazon.

#### 5.2 Your Sole Responsibility

You acknowledge:

- (a) **You are solely responsible for ensuring your downstream use of data obtained through the Actor complies with the Source Platform's Terms of Service**
- (b) The Publisher makes no representation that any specific use is permitted under any Source Platform's terms
- (c) The Third-Party API Providers, not the Publisher, bear responsibility for the lawfulness of the data collection itself
- (d) You should review Source Platform terms before commercial use:
  - LinkedIn: https://www.linkedin.com/legal/user-agreement
  - TikTok: https://www.tiktok.com/legal/page/global/terms-of-service/en
  - YouTube: https://www.youtube.com/static?template=terms
  - X: https://twitter.com/en/tos
  - Reddit: https://www.redditinc.com/policies/user-agreement
  - Meta: https://www.facebook.com/legal/terms
  - Linktree: https://linktr.ee/s/terms/

#### 5.3 Cease-and-Desist Compliance

If you receive a cease-and-desist letter or other legal demand from a Source Platform regarding your use of Actor outputs, you must:

- (a) Cease the contested use immediately
- (b) Notify UnseenUser within 48 hours via UnseenUser's Apify profile contact form (https://apify.com/UnseenUser)
- (c) Cooperate with the Publisher as needed to mitigate
- (d) Not assert against the Publisher any claim arising from your inability to use the Actor for that Source Platform

***

### 6. DATA PROTECTION - REFLECTING ACTUAL ARCHITECTURE

#### 6.1 Roles Under Privacy Law

For purposes of GDPR, UK GDPR, CCPA, Israel's Privacy Protection Law (PPL) including Amendment 13, and equivalents:

- **You (the User) are the Data Controller** of any personal data you obtain through the Actor and subsequently process for your own purposes
- **HarvestAPI and Scrape Creators** are the entities that collect data from source platforms - they bear the responsibilities of data processors or controllers (depending on context) for the collection itself
- **The Publisher acts solely as a software vendor**, not as a data controller or processor, because the Publisher does not store, retain, or substantively process personal data - the Actor merely passes API responses through

#### 6.2 No Data Retention by the Publisher

The Publisher confirms:

- (a) The Publisher does not maintain a database of personal data obtained through the Actor
- (b) The Actor passes data from the Third-Party API directly to you on the Apify platform - data does not flow through the Publisher's infrastructure
- (c) Apify's standard execution and operational logging may include limited information about Actor runs (input parameters, run duration, data volume) - this is governed by Apify's own privacy practices
- (d) The Publisher does not access, view, or analyze your Actor outputs except as needed for technical support if you specifically share them with the Publisher

#### 6.3 Your Obligations as Data Controller

Where your use of the Actor involves processing personal data, you are responsible for:

- (a) Establishing a lawful basis for your processing (consent, legitimate interest with documented balancing test, contract, etc.)
- (b) Providing transparent notice to data subjects as required by applicable law
- (c) Honoring data subject access, rectification, erasure, restriction, and portability requests
- (d) Implementing appropriate security measures
- (e) Conducting Data Protection Impact Assessments where required
- (f) Appointing a Data Protection Officer if your operations require one
- (g) Registering databases with applicable supervisory authorities
- (h) Honoring opt-out requests for direct marketing
- (i) Cross-border transfer safeguards where data crosses borders

#### 6.4 Israel's Amendment 13 - User Compliance

If your use of the Actor involves Israeli residents' personal data, you must comply with the Privacy Protection Law as amended (Amendment 13, effective August 14, 2025). These obligations are yours as the data controller, not the Publisher's as the software vendor.

#### 6.5 Sensitive Data Targeting Restrictions

You will not use the Actor to specifically target, profile, or build datasets focused on:

- Health or medical conditions
- Religious beliefs
- Political opinions
- Sexual orientation or gender identity
- Genetic or biometric data
- Criminal history
- Children under 16

***

### 7. INTELLECTUAL PROPERTY

#### 7.1 Actor Code

The Actor's source code, schemas, documentation, and branding are owned by the Publisher. You receive a limited, non-exclusive, non-transferable, revocable license to use the Actor for permitted purposes during your active subscription/run with Apify.

#### 7.2 Output Data

The Publisher claims no ownership over the public data the Actor returns. Source Platforms may have copyright, database rights, or other rights in their data; data subjects may have copyright in user-generated content. Your use of output data must respect these rights independently.

#### 7.3 Restrictions

You may not reverse engineer, decompile, or reuse the Actor's code in a competing actor.

#### 7.4 Feedback

Feedback you provide may be used by the Publisher to improve products without compensation to you.

***

### 8. PRICING AND PAYMENT

#### 8.1 Apify Platform Billing

Pricing is administered through Apify's pricing models. Apify processes all payments. Apify's payment terms govern refunds and disputes.

#### 8.2 Pricing Changes

The Publisher may change Actor pricing with at least 14 days' notice via the Actor's Apify listing.

#### 8.3 No Refunds for Misuse

If your access is suspended or terminated for breach of these Terms, you forfeit any unused balance and are not entitled to refunds.

***

### 9. SERVICE AVAILABILITY AND CHANGES

#### 9.1 No Uptime Guarantee

The Actor depends on:

- (a) The Apify platform
- (b) Underlying API providers (HarvestAPI, Scrape Creators)
- (c) Source Platforms' continued public accessibility

Any of these may change behavior, restrict access, or become unavailable without notice. The Publisher makes no uptime guarantees.

#### 9.2 Service Discontinuation

The Publisher may discontinue any Actor at any time. Reasonable notice will be provided when feasible.

***

### 10. DISCLAIMERS

#### 10.1 "AS IS" Service

THE ACTOR IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTIES OF ANY KIND, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR PURPOSE, NON-INFRINGEMENT, OR ACCURACY OF DATA.

#### 10.2 No Representation of Lawfulness

The Publisher makes no representation that your specific use of the Actor or the data it returns is lawful in your jurisdiction or under any Source Platform's terms. The burden of determining lawfulness for your use case is yours.

#### 10.3 No Endorsement of Source Content

Content returned by the Actor was created by third parties. The Publisher does not endorse, verify, or take responsibility for it.

***

### 11. LIMITATION OF LIABILITY

#### 11.1 Aggregate Liability Cap

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL THE AGGREGATE LIABILITY OF THE PUBLISHER FOR ALL CLAIMS RELATING TO THE ACTOR EXCEED THE GREATER OF:

- (a) ONE HUNDRED U.S. DOLLARS (US $100), OR
- (b) THE AMOUNTS YOU PAID THROUGH APIFY FOR USE OF THE ACTOR IN THE THREE (3) MONTHS IMMEDIATELY PRECEDING THE EVENT

#### 11.2 Excluded Damages

THE PUBLISHER IS NOT LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES, OR FOR LOSS OF PROFITS, REVENUE, OR DATA, EVEN IF ADVISED OF THE POSSIBILITY.

#### 11.3 Time Limit

Any claim must be brought within one (1) year of the event.

***

### 12. INDEMNIFICATION

#### 12.1 Your Indemnification of the Publisher

You agree to defend, indemnify, and hold harmless the Publisher from any:

- Claims arising from your use of the Actor
- Claims arising from your violation of these Terms
- Claims arising from your violation of any law (including privacy law)
- Claims arising from your violation of any Source Platform's Terms of Service
- Claims arising from your processing of personal data obtained through the Actor
- Reasonable attorneys' fees and costs of defending such claims

#### 12.2 Defense

The Publisher may assume defense at your expense. You will cooperate with the Publisher's defense.

#### 12.3 Scope

The indemnification covers reasonable, foreseeable third-party claims arising from your use. It does not extend to:

- Claims arising from the Publisher's gross negligence or willful misconduct
- Claims regarding the Actor's source code itself (those are the Publisher's responsibility)
- Claims regarding the Third-Party API Provider's data collection (those are their responsibility)

***

### 13. SUSPENSION AND TERMINATION

#### 13.1 Termination by the Publisher

The Publisher may terminate your access for material breach, illegal use, breach of warranty, or upon credible legal demand.

#### 13.2 Effects of Termination

Your license ends, you must cease use, and applicable provisions survive.

#### 13.3 Termination by You

You may stop using the Actor at any time on Apify.

***

### 14. DISPUTE RESOLUTION

#### 14.1 Informal Resolution First

Send a detailed written description of the dispute via UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) and wait 60 days for resolution attempt before any formal claim.

#### 14.2 Governing Law

These Terms are governed by the substantive laws of the State of Israel, without regard to conflict of law principles.

#### 14.3 Exclusive Jurisdiction

Any dispute shall be brought exclusively in the competent civil courts of Tel Aviv-Jaffa, Israel.

#### 14.4 No Class Actions

You agree to bring claims only in your individual capacity.

#### 14.5 Attorneys' Fees

The prevailing party recovers reasonable attorneys' fees.

***

### 15. MISCELLANEOUS

#### 15.1 Entire Agreement

These Terms (with Addendum and incorporated documents) are the entire agreement.

#### 15.2 Severability

Unenforceable provisions are reformed to the minimum extent or severed.

#### 15.3 Assignment

You may not assign without the Publisher's consent. The Publisher may assign to affiliates, successors, or acquirers.

#### 15.4 Force Majeure

Neither party is liable for failure due to events beyond reasonable control, including changes by Source Platforms or Third-Party API Providers, or actions by Apify.

#### 15.5 Third-Party Beneficiaries

Apify, HarvestAPI, and Scrape Creators are intended third-party beneficiaries of Sections 4 (Prohibited Uses), 5 (Source Platform Compliance), and 12 (Indemnification).

#### 15.6 Survival

Sections 0 (Acceptance), 4, 5, 6, 7, 10, 11, 12, 14, and 15 survive termination.

#### 15.7 Language

English controls. Translations are for convenience only.

#### 15.8 Publisher Identification for Legal Process

The Publisher operates on the Apify platform under the username **UnseenUser** (apify.com/UnseenUser). The Publisher is a registered legal entity. Upon receipt of valid legal process (subpoena, court order, or equivalent) directed through Apify's official channels, the Publisher's full legal identity may be disclosed as required by law. This Section ensures that you have a valid path to legal recourse if needed.

***

### 16. ACKNOWLEDGMENT

By using any Actor, you acknowledge that:

- (a) You have read these Terms
- (b) You understand the architecture: you are using software (the Actor) on Apify's platform that calls third-party APIs
- (c) You accept responsibility for your use, including for compliance with Source Platform terms
- (d) Your indemnification obligations cover third-party claims arising from your use
- (e) Disputes are resolved in Israeli courts
- (f) The Publisher's identity, while not publicly disclosed in this listing, can be obtained through valid legal process via Apify

For questions, use UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) before running the Actor.

***

### APPENDIX - Document Version History

| Version | Date | Summary |
|---------|------|---------|
| 1.0 | May 5, 2026 | Initial publication |
| 2.0 | May 5, 2026 | Hardened (over-broad - treated User as data broker) |
| 3.0 | May 5, 2026 | Architecturally accurate - Publisher as software vendor |
| 4.0 | May 5, 2026 | **Anonymous Publisher.** All personally identifying information removed. Acceptance-by-Use mechanism formalized. |

***

## 🛡️ Part 4: Actor-Specific Terms of Service Addendum

### 🛡️ Actor-Specific ToS Addendum - 📢 TikTok Ad Library Scraper - EU Ads, Landing Pages & Regions

This addendum supplements the Master Terms of Service V4.0. By running this Actor, you accept both the Master ToS and this addendum.

#### A. Architectural Disclosure

This Actor is a software wrapper. It accepts your input parameters, calls TWO Scrape Creators endpoints in sequence (/v1/tiktok/ad-library/search + /v1/tiktok/ad-library/ad), combines the results into a structured output, and returns the combined data to you on the Apify platform. UnseenUser does not store, log, or substantively process the data returned. The data flows from Scrape Creators through Apify's runtime directly to you.

#### B. Nature of Data Returned

This Actor returns advertising records from TikTok's public Ads Library, the transparency archive TikTok maintains for ads shown in Europe. Each record covers one ad: the advertiser's name and (sometimes) TikTok advertiser business ID, the ad title, signed URLs to the ad video and images, first and last shown dates, and an estimated audience range. TikTok does not publish spend or impressions for these ads, and the Actor does not return them. With details enabled, it adds the ad's landing page URL (including tracking parameters), campaign objective, and the list of country codes where the ad ran. The Actor deliberately drops the `tt_user` field (a TikTok user object, empty in testing, but potentially personal data) and the `recommended_for_you` list of unrelated ads. It does not return engagement data, commenter data, or any targeting by age, gender or interest.

Where the Actor's output includes individual people's names, photos, contact details, or content authored by them, that data constitutes **personal data** subject to GDPR, CCPA, Israeli Privacy Protection Law (including Amendment 13), and equivalent privacy laws in your downstream processing - but **only in your hands as the data controller**, not in UnseenUser's hands as the software vendor.

Most advertisers are companies. Some are sole traders or individual creators whose "advertiser name" is their personal name, and ad videos may show identifiable people (actors, influencers, customers). Treat those records with personal-data care.

**Individual advertisers.** Many ads come from individual creators boosting their own posts, published under a personal TikTok handle. TikTok publishes these handles under EU ad-transparency rules; that publication does not make them free to reuse for other purposes. You may not use this data to profile, contact or target these individuals, and you must treat their ad videos as personal content (their own image, voice and creative work), not as business advertising material.

#### C. Permitted Use Cases

You may use this Actor for the following purposes (non-exhaustive list):

- **Competitive monitoring** - see which ads a competitor is running on TikTok in Europe, with run dates and creative
- **Landing page research** - pull the exact landing page URLs (with UTM parameters) behind competitor ads to study funnels and offers
- **Creative inspiration** - collect video and image creatives by keyword (e.g. "skincare") to see what formats are in market
- **Market entry research** - check which European countries a brand targets before launching there
- **Agency pitch preparation** - show a prospect what their competitors run on TikTok, with dates and objectives
- **Ad longevity analysis** - use first and last shown dates and `daysRunning` to spot long-running (likely profitable) ads
- **Cross-library research** - combine with our Google, Meta and LinkedIn ad library actors for a full-channel picture of one brand

#### D. Specifically Prohibited Uses

In addition to Master ToS Section 4 prohibitions, you may NOT:

- Copy and republish competitor ad creative (videos, images, ad copy) without licensing - copyright infringement
- Mass-clone ads with cosmetic changes to pass them off as your own, or to imitate a competitor's brand (trademark dilution and passing off)
- Re-host or redistribute downloaded ad videos as a public "TikTok ad spy" library or competing ad archive
- Use landing page URLs to send automated traffic, click fraud, bot visits, or to inflate a competitor's ad costs
- Use the data to impersonate an advertiser, build look-alike phishing pages, or run scams using real brands' creative
- Use advertiser names that are personal names (sole traders, creators) to compile profiles of those individuals
- Use political or issue ads that appear in the library for voter suppression or election interference
- Train commercial AI/ML models on ad creative obtained through this Actor without proper licensing

#### E. Platform Terms of Service Considerations

TikTok's Terms of Service prohibit automated extraction. ByteDance has actively litigated against scrapers (TikTok v. BrandTotal et al.). This Actor accesses publicly visible TikTok data via Scrape Creators - Scrape Creators bears responsibility for the lawfulness of the data collection. Your downstream use must independently comply with TikTok's Terms of Service.

TikTok publishes the Ads Library to meet transparency duties under the EU Digital Services Act. Its purpose is public scrutiny of advertising. TikTok may restrict commercial reuse of transparency data, and the library's own terms of use apply to it.

If TikTok issues a cease-and-desist regarding data obtained via this Actor, notify UnseenUser within 48 hours via the Apify profile contact form (apify.com/UnseenUser) and cease your use immediately.

#### F. Combined-Endpoint Data Sensitivity

This Actor combines two endpoints in one run. The combination yields data that is MORE revealing than either endpoint alone:

- Search alone: low sensitivity (advertiser name, title, creative, dates and audience range, all visible on TikTok's public library page)
- Detail alone: low-to-medium sensitivity (adds landing page with campaign tracking parameters and country list for one known ad)
- **Combined**: enables building a structured, bulk "competitor TikTok playbook" of a brand's creatives, funnels, objectives and target markets, refreshed at will

This combined view is commercially valuable, and that is what makes it attractive for the reuse TikTok's terms restrict. Use the combined output thoughtfully:

- Don't sell the combined dataset as a product
- Don't build a "TikTok Ads Library replacement" or public ad-spy service with this data
- Use it for your own internal research, client reporting and strategy

**Minor protection note:** the Ads Library holds business advertising, not user profiles, but TikTok has a large under-18 audience and some ad creatives feature young people. Do not use this Actor to identify, collect or analyze images or data of anyone you know or suspect is a minor, do not build products targeting minors from this data without COPPA / GDPR Article 8 compliant parental consent mechanisms, and delete any data you discover relates to a minor. The Actor always drops `tt_user` for this reason.

#### G. Ad Creative Copyright

Every ad in the library is protected by several layers of rights:

- **Video and images** - copyrighted by the advertiser or their agency
- **Ad copy and titles** - copyrighted by the advertiser
- **Music in videos** - licensed separately from music rights holders, often only for that advertiser's campaign
- **People appearing in ads** - actors and creators hold image and publicity rights
- **Brand names and logos** - trademarks of the advertiser

You may:

- **Analyze** creatives internally (formats, hooks, length, messaging themes)
- **Quote or show small excerpts with attribution** in internal reports or client pitches (typically fair use / fair dealing)
- **Aggregate metrics** (counts, dates, objectives, countries - facts, no copyright issue)

You may NOT:

- Republish full ad videos or images as your own or in a public gallery
- Reuse the music track from an ad (licenses rarely transfer)
- Strip advertiser attribution
- Train commercial AI on ad creative without licensing (NYT v. OpenAI, Andersen v. Stability AI show this is contested)

#### H. Ads Library vs. Creative Center - Scope and Labeling

This Actor covers the **TikTok Ads Library** (library.tiktok.com), the EU transparency archive. It does NOT cover **TikTok Creative Center Top Ads** (ads.tiktok.com/business/creativecenter), even though the underlying detail endpoint can accept Creative Center IDs. Creative Center IDs and URLs are rejected at input validation, before any charge.

This distinction must stay clear in the Apify listing:

- The title says "Ad Library", never "Top Ads" or "Creative Center scraper"
- The listing keywords do not use Creative Center or Top Ads terms, and the README states plainly that Creative Center is not covered
- Engagement metrics (likes, CTR, retention curves) belong to Creative Center data and are NOT returned here

#### I. Landing Pages and UTM Data

With details enabled, the Actor returns each ad's full landing page URL, including tracking parameters (for example `utm_source`, `utm_campaign`, and click-ID placeholders like `ttclid=__CLICKID__`). In testing these were template placeholders, not real click IDs or personal identifiers.

You may:

- Study funnels, offers, domains and campaign naming conventions
- Check landing pages manually or with low-volume, polite tooling

You may NOT:

- Send automated or bulk traffic to landing pages, or click through in ways that register as ad clicks (click fraud, cost inflation)
- Fill a competitor's analytics with fake visits carrying their UTM parameters
- Probe landing pages for vulnerabilities or scrape them in breach of their own terms
- Use landing page URLs to build phishing look-alikes

If a landing page URL ever contains what looks like a real personal identifier (an email, a name, a user ID), do not store or use it. Treat it as personal data and delete it.

#### J. Data Retention and Expiring Media URLs

Ads Library records are point-in-time. TikTok may remove ads from the library (for example after a takedown, a rejection, or the end of the retention period). Video and image URLs are signed CDN links that expire within hours (about 6 hours for cover images in our live test).

Consider:

- Documenting your retention policy and deleting records after a reasonable period (for example 90-365 days)
- Not re-hosting media to defeat URL expiry for public redistribution (copyright exposure, see Section G)
- Honoring deletion requests from advertisers who contact you directly
- Re-running the Actor for fresh data instead of relying on old, possibly removed records

The `isUnavailable` and `rejectionInfo` fields signal ads TikTok has pulled or flagged. Do not present such ads as live.

#### K. Cross-Platform Aggregation Limit

You may combine this Actor's output with other ad library data (Google, Meta, LinkedIn) to build a cross-channel view of a **company's** advertising. That is normal competitive research.

Do NOT aggregate TikTok ad data with Facebook/Instagram, LinkedIn, X/Twitter and other personal data to build comprehensive cross-platform identity profiles of named **individuals** (for example sole-trader advertisers or people appearing in ads). Cross-platform aggregation of individuals:

- Multiplies the personal data risk exponentially
- Triggers heightened scrutiny under GDPR (combination of data is itself processing)
- Has been the basis for Meta lawsuits (Meta v. BrandTotal, Meta v. Octopus Data)
- Creates "people search" / "data broker" profiles that the California Delete Act (effective 2026), GDPR Article 14, and Israeli Privacy Law Amendment 13 specifically target

| Use | Status |
|---|---|
| One brand's ads across TikTok, Google, Meta and LinkedIn for a competitor report | ✅ Permitted |
| Tracking a category (e.g. "skincare") across ad libraries for market research | ✅ Permitted |
| Profiling a named sole-trader advertiser across platforms with personal social accounts | ❌ Personal profiling - prohibited |
| Selling a merged multi-platform ad database as a product | ❌ Reselling outputs - prohibited under Master ToS 4.7 |

# Actor input Schema

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

Keywords to search the Ads Library, e.g. "skincare". Each term is a separate search. Free Apify plan: up to 5 ads per run; paid plans: no limit.

## `advertiserNames` (type: `array`):

Advertiser names. Works best with the exact name shown in the TikTok Ads Library, e.g. "NIKE Retail B.V.". If no advertiser matches exactly, the Actor searches the same text as a keyword and keeps only ads whose advertiser name contains it as a whole word.

## `advertiserBizId` (type: `string`):

TikTok advertiser business ID (from a "See all ads" link). Pins the exact advertiser. Only allowed when exactly one advertiser name is given.

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

Ads Library ad IDs (e.g. 1879330505776530) or library.tiktok.com ad URLs. Returns full details for each ad directly, charged as ad-detail. Creative Center ads are not supported.

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

⚠️ COST WARNING: adds $7 per 1,000 ads (ad-detail event) on top of $0.80 per 1,000. Adds landing page URL, campaign objective, the list of countries where the ad ran and the 720p video to every search result.

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

Maximum number of ads to return for each search term and each advertiser name. Set 0 to fetch every ad available; the cost grows with the number of ads, so set a maximum cost per run in Apify if needed. Free Apify plan: up to 5 ads per run; paid plans: no limit.

## Actor input object example

```json
{
  "searchTerms": [
    "skincare"
  ],
  "includeDetails": false,
  "maxResults": 20
}
```

# Actor output Schema

## `results` (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 = {
    "searchTerms": [
        "skincare"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("unseenuser/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": ["skincare"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("unseenuser/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": [
    "skincare"
  ],
  "maxResults": 20
}' |
apify call unseenuser/tiktok-ads-library-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,unseenuser/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/GAHnPtgMzy5oeakBJ/builds/AMC455LBYqVGeOqGi/openapi.json
