# TikTok Paid Partnership Check - Was That An Ad? (`reapx/tiktok-disclosure-checker`) Actor

Was that post actually an ad? Check any TikTok post for the paid partnership tag, #ad and every sponsored label - so you know what was paid for and what was not.

- **URL**: https://apify.com/reapx/tiktok-disclosure-checker.md
- **Developed by:** [Tarek Etman](https://apify.com/reapx) (community)
- **Categories:** For creators, Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 25.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.30 / 1,000 video checked for #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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

# README

![reapX - the record of what changed](https://reapx.dev/reapx.gif)

## Was That Video Actually An Ad?

> *"Did they switch the paid toggle on, or did they just not bother?"*

TikTok gives creators a paid partnership toggle and almost nobody checks whether it was ever
switched on. By the time it matters the caption has been edited, the video is buried, and all
you have is somebody's word.

We keep the record from the day we first see it. Across a creator's recent uploads you get
every paid partnership flag, #ad and sponsor tag, **whether it was on the video or buried at
the end of a caption**, and what share of their paid work they tag at all.

**What comes back reads like this:**

> *"@creator ran 5 paid videos in the last month and flagged 2 of them. The other 3 carried the
> brand in the caption with no tag at all - and one of those is their best-performing video."*

Paste that into the deck. The fields underneath are there for when someone asks you to prove it.

### ⬇️ Input

The actor accepts a JSON configuration object specifying the target TikTok handle or video URL.

| Field | Type | Required | Description | Default |
|---|---|---|---|---|
| `username` | String | Yes | TikTok handle (e.g. `tiktok`) or video URL. | `"tiktok"` |
| `maxPosts` | Integer | Yes | How much of their recent output we go through (1 to 100). | `20` |
| `proxyConfiguration` | Object | No | Proxy settings for request routing. By default uses Apify Proxy. | `{"useApifyProxy": true}` |

#### Input Example

```json
{
  "username": "tiktok",
  "maxPosts": 20
}
```

***

### ⬆️ Output

Every video comes back with its answer and a permanent identifier you can cite.

| Field | Type | Description |
|---|---|---|
| `awemeId` | String | Permanent TikTok video awemeId identifier (e.g. `"7281940192401"`). Stable per-row key. |
| `username` | String | TikTok handle of the authoring account. |
| `videoUrl` | String | Canonical web URL of the TikTok video. |
| `caption` | String | Full video caption text. |
| `disclosureStatus` | String | Whether the post was tagged as paid (`"disclosed"`, `"undisclosed"`, `"no_sponsorship_detected"`). |
| `disclosureType` | String | Identified disclosure method (`"paid_partnership_tag"`, `"commercial_content_toggle"`, `"hashtag_ad"`, `"none"`). |
| `disclosureTokens` | Array | List of matched disclosure tags or hashtags found. |
| `isSponsoredContent` | Boolean | True if commercial sponsorship cues were detected. |
| `isDisclosed` | Boolean | True if FTC disclosure standards were satisfied. |
| `brandName` | String | Associated brand or commercial partner name if detected. |
| `diggCount` | Integer | Total numeric likes on the video. |
| `commentCount` | Integer | Total numeric comments on the video. |
| `shareCount` | Integer | Total numeric shares of the video. |
| `postedAt` | String | ISO 8601 publication timestamp of the video. |
| `scrapedAt` | String | ISO 8601 timestamp of data collection. |

#### Sample Output Item

```json
{
  "awemeId": "7281940192401",
  "username": "creator_handle",
  "videoUrl": "https://www.tiktok.com/@creator_handle/video/7281940192401",
  "caption": "Testing out the new product from @brand! #ad #paidpartnership",
  "disclosureStatus": "disclosed",
  "disclosureType": "hashtag_ad",
  "disclosureTokens": ["#ad", "#paidpartnership"],
  "isSponsoredContent": true,
  "isDisclosed": true,
  "brandName": "brand",
  "diggCount": 45200,
  "commentCount": 890,
  "shareCount": 1200,
  "postedAt": "2026-08-02T15:30:00.000Z",
  "scrapedAt": "2026-08-05T16:35:00.000Z"
}
```

***

### How it works

1. **Native Data Retrieval:** Accesses TikTok creator profile data directly on plain HTTP without heavy browser emulation.
2. **Caption & Label Scanning:** Scans video captions and metadata for commercial partnership toggles, `#ad`, `#sponsored`, and `#paidpartnership` tags.
3. **The check:** works out whether what they did would actually count as tagging it.
4. **The record:** every video is filed under its permanent `awemeId`.

***

### ❓ FAQ

##### Does this actor require residential proxies?

No. TikTok profile HTML data returns over standard HTTP connections on plain datacenter IPs without residential proxy costs.

##### How does it spot a paid post?

It reads the caption and the video's own paid-partnership flag, plus tags like `#ad`, `#sponsored`, `#paidpartnership`, and `#partner`.

***

### 💬 Your feedback

Want it tuned to your own rules, or run across a whole campaign? reapxdev@proton.me.

***

*Unofficial - not affiliated with TikTok or ByteDance. Collects structured video metadata. Contact reapxdev@proton.me.*

# Actor input Schema

## `username` (type: `string`):

A TikTok handle to go through their recent videos, or paste a single video link to check just that one.

## `maxPosts` (type: `integer`):

How much of their recent output we go through. Go deeper when you need a whole campaign covered.

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

How the run reaches the platform. The default is already the route that works for this source, so leave it alone unless you have a reason to change it.

## Actor input object example

```json
{
  "username": "tiktok",
  "maxPosts": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `items` (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 = {
    "username": "tiktok",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("reapx/tiktok-disclosure-checker").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 = {
    "username": "tiktok",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("reapx/tiktok-disclosure-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "username": "tiktok",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call reapx/tiktok-disclosure-checker --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/vW0faPtd11P3iEI1y/builds/CYbZLBgmx6EcKcu45/openapi.json
