# TikTok AI-Generated Content Label Scraper (`rainminer/tiktok-aigc-label-scraper`) Actor

Extract TikTok AI-generated (AIGC) disclosure labels for EU AI Act brand-safety and Article 50 checks. Detect creator and platform auto labels; export isAiGenerated, label text, and enums as JSON or CSV. Paste URLs or finish a dataset via datasetId. No login. Residential proxies recommended.

- **URL**: https://apify.com/rainminer/tiktok-aigc-label-scraper.md
- **Developed by:** [rainminer](https://apify.com/rainminer) (community)
- **Categories:** Social media, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.37 / 1,000 video aigc labels

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

The **TikTok AI-Generated Label Scraper** extracts **AI-generated (AIGC) disclosure labels** from public [TikTok](https://www.tiktok.com/) video pages — the same class of transparency signals teams track for **EU AI Act** / **Article 50** brand-safety and synthetic-media monitoring. Paste video URLs — or finish another TikTok video dataset by pointing at its `datasetId` — and get structured rows with `isAiGenerated`, `aiGeneratedLabel`, and the raw TikTok AIGC enum fields.

![TikTok](https://upload.wikimedia.org/wikipedia/en/thumb/a/a9/TikTok_logo.svg/320px-TikTok_logo.svg.png)

TikTok shows two public disclosure types: **“Creator labeled as AI-generated”** (the creator opted in) and **“AI-generated”** (TikTok applied an automatic label). This Actor reads those platform signals from the public video page. No TikTok login is required.

Need to **stamp official EU AI Act icons** onto your own images before you publish? Pair this scraper with [EU AI Act Image Labeler](https://apify.com/rainminer/eu-ai-image-labeler) — detect what TikTok already disclosed, then label your own creatives with Commission **AI GENERATED** / **AI MODIFIED** marks.

***

### What does TikTok AI-Generated Label Scraper do?

Most TikTok scrapers return profiles, hashtags, and engagement — but **not** **AI-generated** disclosure labels. This Actor focuses on that job:

- Reads public TikTok video pages (no login)
- Detects **creator-labeled** AI disclosure (`IsAigc` / `aigcLabelType`)
- Detects TikTok’s **platform auto label** (`moderationAigcLabelType`)
- Works as a **dataset finisher**: pass an Apify `datasetId` from a prior TikTok run with `webVideoUrl` / `url` columns
- Exports JSON, CSV, Excel, or API rows you can join onto existing video metadata

***

### What data can you extract?

| Field | Description |
| ----- | ----------- |
| `videoUrl` | Canonical public video URL |
| `videoId` | TikTok item id |
| `authorUsername` | Creator `@handle` without `@` |
| `description` | Video caption |
| `createTime` | Publish time (ISO) |
| `isAiGenerated` | True when TikTok shows an AIGC disclosure (`IsAigc`, `aigcLabelType` > 0, or `moderationAigcLabelType` > 0) |
| `aiGeneratedLabel` | Label text (e.g. “Creator labeled as AI-generated” or “AI-generated”) when available |
| `showAigc` | Raw TikTok UI flag (often true even when no AIGC label is shown) |
| `aigcDescription` | TikTok’s AIGC description string when present |
| `aigcLabelType` | Raw TikTok creator AIGC label enum (number; `0`/`null` = none) |
| `moderationAigcLabelType` | Raw TikTok moderation AIGC enum (number; `0`/`null` = none) |
| `imageUrl` | Cover / thumbnail URL |
| `scrapedAt` | Scrape timestamp |

***

### Why scrape TikTok AI-generated labels?

Use cases this Actor is built for:

1. **EU AI Act / Article 50 monitoring** — export TikTok’s public AI disclosures for brand-safety and policy reviews aimed at EU audiences
2. **Brand safety for paid social** — flag AI-disclosed creative before a campaign goes live
3. **Influencer vetting** — check whether a creator’s recent videos carry AIGC labels
4. **Ad network compliance** — keep an audit trail of platform labels instead of guessing from pixels
5. **Trust and safety research** — measure disclosure rates on public TikTok videos over time
6. **Synthetic-media monitoring** — watch accounts that post realistic AI video or audio
7. **Dataset enrichment** — join AIGC flags onto an existing TikTok video scrape via `datasetId`
8. **Marketplace / UGC QA** — reject or review listings that use unlabeled vs labeled AI media
9. **Newsroom / fact-check queues** — prioritize videos TikTok already marked as AI-generated
10. **Policy reporting** — export creator vs auto-label breakdowns for internal reviews
11. **Competitive intelligence** — compare how often rival creators disclose AI tools
12. **Agency reporting** — attach label status next to engagement stats in client dashboards

***

### EU AI Act and TikTok AI labels

The **EU AI Act** (notably **Article 50**) pushes clear disclosure of AI-generated and AI-manipulated media for deployers who publish deepfake-style content to EU audiences. TikTok’s in-product AIGC labels are a **platform transparency signal** — useful evidence for brand safety, influencer checks, and internal compliance workflows — but they are **not** a substitute for your own legal obligations when *you* publish synthetic media.

Use this Actor to:

- Audit whether public TikTok videos already carry a **creator** or **platform** AI disclosure
- Build datasets of labeled vs unlabeled videos for EU-facing risk reviews
- Feed downstream tools that need `isAiGenerated` before ads, UGC, or agency packs go live

When you need to **apply** official Commission icons to *your* stills (not scrape TikTok’s), use [EU AI Act Image Labeler](https://apify.com/rainminer/eu-ai-image-labeler).

This Actor is **not legal advice** and does not certify Article 50 compliance.

***

### How to scrape TikTok AI-generated labels

1. Open the Actor in [Apify Console](https://console.apify.com/)
2. Paste one or more **TikTok video URLs**, *or* set **Source dataset ID** from a prior TikTok scrape
3. Keep **Residential** proxies enabled (recommended — TikTok often withholds video data without them)
4. Click **Start**
5. Download results from the **Output** tab (JSON, CSV, Excel, or API)

You can also call the Actor from the Apify API, a schedule, or a webhook after another TikTok scraper finishes.

***

### Input

| Field | Required | Default | Description |
| ----- | -------- | ------- | ----------- |
| `startUrls` / `videoUrls` | no\* | — | TikTok video URLs |
| `datasetId` | no\* | — | Apify dataset ID; reads `webVideoUrl`, `url`, and similar fields |
| `maxItems` | no | `5` | Max videos per start URL / dataset batch |
| `proxyConfiguration` | no | Residential on | Apify Proxy settings |

\*Provide at least one of `startUrls`, `videoUrls`, or `datasetId`.

Example:

```json
{
  "startUrls": [
    { "url": "https://www.tiktok.com/@jing.li.ai/video/7679733009402154272" }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

Dataset-finisher example (after another TikTok video scrape):

```json
{
  "datasetId": "YOUR_DATASET_ID",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

***

### Output

Example dataset item:

```json
{
  "videoUrl": "https://www.tiktok.com/@jing.li.ai/video/7679733009402154272",
  "videoId": "7679733009402154272",
  "authorUsername": "jing.li.ai",
  "description": "#fanvue #aigirl #tktok #aigenerated",
  "createTime": "2026-08-30T08:06:26.000Z",
  "isAiGenerated": true,
  "aiGeneratedLabel": "Creator labeled as AI-generated",
  "showAigc": true,
  "aigcDescription": null,
  "aigcLabelType": 2,
  "moderationAigcLabelType": 1,
  "imageUrl": "https://...",
  "scrapedAt": "2026-08-31T12:00:00.000Z"
}
```

#### Label meanings

| Signal | Typical `aiGeneratedLabel` | Meaning |
| ------ | -------------------------- | ------- |
| Creator disclosure (`IsAigc` / `aigcLabelType` = 2) | `Creator labeled as AI-generated` | Creator marked the video as AI-generated |
| Platform auto label (`aigcLabelType` = 1 or `moderationAigcLabelType` > 0) | `AI-generated` | TikTok applied an AI disclosure |

***

### How much does it cost?

This Actor is **pay per result plus Apify platform usage** (compute and residential proxies). You pay a maintenance fee for each video row (from **$0.49 per 1,000 results** on the FREE Store plan) and you also pay Apify usage for the run. Residential proxies are the default because TikTok often withholds public video data without them — that is the main usage driver.

Keep `maxItems` small while you test. For production, pass a `datasetId` from a discovery scraper so you only enrich the videos you already collected.

***

### Tips

- Prefer **RESIDENTIAL** proxies with a US (or target-market) country for reliable page data
- Use `datasetId` to enrich an existing TikTok video dataset instead of re-scraping discovery
- Short links (`vt.tiktok.com`, `vm.tiktok.com`) are accepted and normalized when possible
- `isAiGenerated` can be `true` even when TikTok’s internal `IsAigc` flag is still `false` — the Actor also reads numeric label enums (often sent as strings)

***

### FAQ

#### Does this replace a full TikTok video scraper?

No. Use a general TikTok scraper for discovery and engagement at scale. Use this Actor for **AI-generated label** fields (or chain them via `datasetId`).

#### Do I need a TikTok login?

No. Only public video pages are scraped.

#### What if a video has no AI label?

`isAiGenerated` is `false` (or `null` when signals are ambiguous) and `aiGeneratedLabel` is `null`. Raw enum fields are `0` or `null`.

#### Why is `showAigc` true on videos with no AI label?

TikTok often sets that UI flag even when no AIGC disclosure is present. This Actor only sets `isAiGenerated` when `IsAigc` is true or a numeric label enum is greater than zero.

#### Does this scrape TikTok Footnotes / community notes?

No. Footnotes are a separate US-only product. This Actor only reads **AIGC disclosure labels**.

#### Why do I need a proxy?

TikTok often returns an empty video payload to datacenter IPs. Residential proxies (US or your target market) make `itemStruct` hydrate reliably.

#### How does this relate to the EU AI Act?

TikTok’s AIGC labels help you **observe** how the platform discloses AI media. The **EU AI Act** / **Article 50** duty is about whether *you* clearly disclose AI-generated or manipulated content you publish. Scrape here for monitoring; stamp your own images with [EU AI Act Image Labeler](https://apify.com/rainminer/eu-ai-image-labeler). Neither tool replaces legal advice.

***

### Related Actors

| Actor | Job |
| ----- | --- |
| [EU AI Act Image Labeler](https://apify.com/rainminer/eu-ai-image-labeler) | Stamp official EU **AI GENERATED** / **AI MODIFIED** icons into your images |
| [TikTok AI-Generated Label Scraper](https://apify.com/rainminer/tiktok-aigc-label-scraper) | This Actor — scrape TikTok’s public AIGC disclosure labels |

***

### Image Credit

Image credit: [TikTok](https://www.tiktok.com/) (logo via Wikimedia Commons)

# Actor input Schema

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

TikTok video page URLs (https://www.tiktok.com/@user/video/123…). Alias of videoUrls.

## `videoUrls` (type: `array`):

Optional alternate input: plain TikTok video URL strings (same as startUrls).

## `datasetId` (type: `string`):

Optional Apify dataset from a prior TikTok scrape. Reads webVideoUrl, url, submittedVideoUrl, or videoUrl fields as the video spine. Uses a dataset picker so limited-permission runs can READ that storage.

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

Maximum number of videos to process per start URL / source batch key.

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

Residential proxies are recommended — TikTok often withholds video itemStruct without them.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.tiktok.com/@jing.li.ai/video/7679733009402154272"
    }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://www.tiktok.com/@jing.li.ai/video/7679733009402154272"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rainminer/tiktok-aigc-label-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 = {
    "startUrls": [{ "url": "https://www.tiktok.com/@jing.li.ai/video/7679733009402154272" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("rainminer/tiktok-aigc-label-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 '{
  "startUrls": [
    {
      "url": "https://www.tiktok.com/@jing.li.ai/video/7679733009402154272"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call rainminer/tiktok-aigc-label-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rainminer/tiktok-aigc-label-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/3Ah3YnvqFy5CLRdI1/builds/8Rie5M8vSmObcnAcG/openapi.json
