# TikTok Watchdog (`socialwatchdog/tiktok-watchdog`) Actor

Real-time monitor for new & deleted TikTok videos (.mp4), reposts, 24h stories, and profile changes.

- **URL**: https://apify.com/socialwatchdog/tiktok-watchdog.md
- **Developed by:** [SocialWatchdog](https://apify.com/socialwatchdog) (community)
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.30 / 1,000 monitoring runs

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 Watchdog: Posts, Reposts, 24h Stories & Stealth Deletions

> **Automated 24/7 monitoring for any TikTok profile.** Get instant alerts for new videos, stealth deletions, reposts, and 24-hour stories. Automatically archives un-watermarked `.mp4` video files for new uploads so deleted content is never lost. **100% automated (no TikTok login or setup required).**

***

#### What You Can Track

- 🚨 **Deleted Video Recovery (.mp4):**
  - **New Videos (Published while monitoring):** Every new video and story published after you start monitoring is automatically saved as a raw un-watermarked `.mp4` file. If the creator deletes or privates it later, you have the full video file!
  - **Feed Videos (Page 1 Surveillance - Top 15 Videos):** High-speed surveillance audits the creator's Page 1 feed (up to 15 videos in 1 single HTTP query). If an existing video on their profile gets deleted, you receive full forensic proof: original caption, HD cover image, deletion timestamp, and metrics (past video files from before monitoring started cannot be downloaded retroactively).
- 🔄 **Reposts, Removals & False Un-Repost Shield:**
  - **New Reposts (Shared while monitoring):** Instant notification when the creator reposts a video, with the original creator's username, caption, sound, and link.
  - **Feed Reposts (Page 1 Surveillance - Top 30 Reposts):** Monitors existing reposts on Page 1 of their profile (up to 30 reposts in 1 single HTTP query). If they quietly remove or un-repost one later, you receive an alert with the original creator's details, caption, and removal timestamp.
  - **Zero False Alarms Shield:** If a repost vanishes because the *original creator* deleted the video, switched their account/post to private (`🔒`), or the post was age-restricted (18+/sensitive), the watchdog automatically verifies this and suppresses the alarm—ensuring you ONLY get notified for genuine intentional un-reposts made by the tracked user.
- 📹 **New Video Uploads:** Get notified the moment a creator posts a new video or photo carousel, complete with captions, sounds, and media downloads.
- 📸 **24-Hour Stories:** Automatically captures and archives active TikTok stories before they expire.
- 👤 **Profile & Identity Sentry:** Detects changes to biography text, website links, display names, profile avatars, and username handles.
- 🔒 **Privacy Changes & Account Lifecycle:**
  - **Public ⇄ Private Switches:** Get alerted the instant a TikTok creator switches to Private (`🔒 PRIVACY_CHANGED_TO_PRIVATE`) or unlocks their profile back to Public (`🔓`).
  - **Account Deactivations & Bans:** If an account is deactivated, banned, or temporarily unavailable, SocialWatchdog alerts you with `🚨 ACCOUNT_DEACTIVATED_OR_BANNED` and preserves historical records in storage.
  - **Reactivations & Restorations:** When the creator returns online, you receive an immediate alert (`🎉 ACCOUNT_REACTIVATED`) with the exact restoration timestamp.
- 👥 **Multi-Account Monitoring:** Monitor up to 5 TikTok creators in a single task (e.g. `mrbeast, khaby.lame`).

***

#### Quick Start (3 Steps)

1. **Enter Username(s):** Type the TikTok handle(s) you want to monitor (up to 5 handles, separated by commas, e.g. `mrbeast, khaby.lame`).
2. **Choose What to Monitor:** Leave default options on to track videos, reposts, stories, and profile changes.
3. **Run & Schedule:** Click **Start** to take the initial baseline snapshot. Then click **Schedule** to run automatically every 15 minutes for 24/7 monitoring.

> 💡 **Tip:** Connect Apify integrations (Email, Slack, Discord, or Webhooks) in the **Integrations** tab to receive alerts the instant a video is posted or deleted.

***

#### Simple, Transparent Pricing

- **$0.0033 per check** (covers up to 5 accounts in one task).
- **~$9.50 / month** for 24/7 monitoring on a 15-minute schedule.
- **Only ~$4.50 / month net** after Apify's standard $5.00/month free credit.
- **$0.00 extra fees:** All video downloads (.mp4), repost tracking, and notifications are 100% free with zero bandwidth surcharges.

| Schedule | Cost per Month | With Apify Free Credit ($5/mo) | Accounts Covered |
| :--- | :--- | :--- | :--- |
| **Every 15 minutes (Recommended)** | ~$9.50 / mo | **~$4.50 / mo** | Up to 5 accounts |
| **Every 30 minutes** | ~$9.50 / mo | **~$4.50 / mo** | Up to 5 accounts |
| **Every 1 hour** | ~$9.50 / mo | **~$4.50 / mo** | Up to 5 accounts |

***

#### Settings & Options

| Field | Description | Default |
| :--- | :--- | :--- |
| **Usernames** (`username`) | TikTok handle(s) to monitor (up to 5, e.g. `mrbeast, khaby.lame`). | *Required* |
| **Download Videos** (`downloadVideos`) | Automatically download and save raw .mp4 videos for new uploads and stories. | `true` (On) |
| **Track Reposts** (`monitorReposts`) | Monitor newly reposted videos and Page 1 quiet un-reposts (top 30 reposts). Includes False Un-Repost Shield. | `true` (On) |
| **Track Stories** (`monitorStories`) | Detect temporary 24-hour stories and save media before expiry. | `true` (On) |
| **Track Profile** (`monitorProfile`) | Alert on bio, avatar, display name, and handle changes. | `true` (On) |
| **Track Privacy** (`trackPrivacy`) | Alert immediately when a creator switches between Public and Private. | `true` (On) |
| **Track Lifecycle** (`trackLifecycle`) | Alert when an account deactivates, is banned, or reactivates back online. | `true` (On) |
| **Custom Storage** (`customKvStoreName`) | Optional storage name to keep media saved permanently forever. | *Empty* |

***

#### Sample Alert Outputs

##### 1. Deleted Video Alert (with .mp4 Download Link)

```json
{
  "eventType": "VIDEO_DELETED",
  "username": "mrbeast",
  "videoId": "7392819283719",
  "mediaType": "video",
  "caption": "Giving away $10,000 to the first person who comments! 🤫",
  "metricsAtDeletion": {
    "likes": 245000,
    "comments": 14200,
    "shares": 8900
  },
  "url": "https://www.tiktok.com/@mrbeast/video/7392819283719",
  "permanentArchiveUrl": "https://api.apify.com/v2/key-value-stores/.../records/archive_mrbeast_7392819283719.mp4",
  "status": "CONFIRMED_DELETED_OR_PRIVATED",
  "summary": "🚨 DELETED VIDEO: Post 7392819283719 was removed or privated by @mrbeast. Video recovered (.mp4)!",
  "detectedAt": "2026-11-09T14:30:00.000Z"
}
```

##### 2. New Video Upload Alert

```json
{
  "eventType": "NEW_VIDEO_UPLOAD",
  "username": "mrbeast",
  "videoId": "7401928374819",
  "mediaType": "video",
  "caption": "I survived 100 hours in a deserted city!",
  "url": "https://www.tiktok.com/@mrbeast/video/7401928374819",
  "permanentArchiveUrl": "https://api.apify.com/v2/key-value-stores/.../records/archive_mrbeast_7401928374819.mp4",
  "summary": "🎬 NEW VIDEO: @mrbeast published: \"I survived 100 hours in a deserted city!\"",
  "detectedAt": "2026-11-09T14:35:00.000Z"
}
```

##### 3. Privacy Shift Alert (Public ⇄ Private)

```json
{
  "eventType": "PRIVACY_CHANGED",
  "username": "mrbeast",
  "status": "PRIVACY_CHANGED_TO_PRIVATE",
  "summary": "🔒 PRIVACY CHANGED: @mrbeast switched their account to PRIVATE. Video feed is now locked.",
  "url": "https://www.tiktok.com/@mrbeast",
  "detectedAt": "2026-11-09T18:15:00.000Z"
}
```

##### 4. Account Deactivation & Reactivation Alerts

```json
{
  "eventType": "ACCOUNT_DEACTIVATED_OR_BANNED",
  "username": "mrbeast",
  "status": "DEACTIVATED_OR_BANNED",
  "summary": "🚨 ACCOUNT UNAVAILABLE: @mrbeast has been deactivated, banned, or changed handle on TikTok.",
  "details": "Account was previously active and is no longer accessible on TikTok. Historical memory preserved.",
  "detectedAt": "2026-11-09T18:20:00.000Z"
}
```

*When the account returns online:*

```json
{
  "eventType": "ACCOUNT_REACTIVATED",
  "username": "mrbeast",
  "summary": "🎉 ACCOUNT RESTORED: @mrbeast is back online and accessible!",
  "details": "Account has returned online after deactivation or temporary ban.",
  "url": "https://www.tiktok.com/@mrbeast",
  "detectedAt": "2026-11-09T19:45:00.000Z"
}
```

***

#### Frequently Asked Questions

- **What happens if a creator goes private or deactivates their TikTok?**\
  Unlike standard scrapers that crash or fail when an account disappears, SocialWatchdog stays active on intelligent standby. It alerts you the second a creator flips to private or deactivates, keeps all previously saved videos and metadata safe in storage, and continuously monitors for the moment the account reactivates or goes public again.
- **Can I download full video files for videos from the past?**\
  No. Full un-watermarked .mp4 video files are saved for **new videos and stories published after you start monitoring**. For videos that were already published in the past, the watchdog captures and delivers the original caption, permanent HD cover image, metrics, and timestamps if they get deleted.
- **How does repost tracking work for past vs. new reposts?**
  - **New Reposts:** The moment the tracked creator reposts any new video, you receive an immediate alert (`🔁 REPOST_ADDED`) with the original creator's handle, video link, caption, and thumbnail.
  - **Past Reposts (Rolling 30-Repost Surveillance Window):** The watchdog continuously maintains a rolling memory of their Page 1 reposts (up to 30 reposts). If an existing repost quietly disappears from their profile, the watchdog performs forensic status verification:
    - If the original video was deleted by the creator, the creator set their account/video to private (`🔒`), or it was age-restricted (18+/sensitive), the alert is **suppressed** so you aren't spammed by third-party actions.
    - If the original video is confirmed still live and public, it confirms a **genuine intentional un-repost** made by the tracked user, firing a verified alert (`❌ REPOST_REMOVED`) with the original creator's username, caption, and removal timestamp.
- **Do I need to install or run anything on my computer?**\
  No. Everything runs in Apify cloud 24/7 without needing your machine running.
- **Are the video downloads watermarked?**\
  No. Video files are saved as clean, un-watermarked high-definition .mp4 files.
- **How do I receive instant alerts?**\
  Go to the **Integrations** tab in Apify Console and connect Email, Slack, Discord, Telegram, or Webhooks.

# Actor input Schema

## `username` (type: `array`):

Add up to 5 accounts to monitor (e.g. mrbeast, santeluca).

## `downloadVideos` (type: `boolean`):

Preserve un-watermarked .mp4 videos and photos for all newly detected uploads and deleted content.

## `customKvStoreName` (type: `string`):

Name or ID of the Key-Value Store where the videos and media will be stored. Omit to store in the default watchdog store. Using a named Key-Value store bypasses the 7-day data retention limit and stores the content forever until manually deleted.<br><br>The name can consist of letters, digits, underscores, or hyphens without spaces.

## `monitorReposts` (type: `boolean`):

Alert when a creator reposts a video or removes an existing repost. High-speed Page 1 rolling surveillance audits top 12 reposts with smart un-repost forensics.

## `monitorProfile` (type: `boolean`):

Alert when any monitored creator modifies their bio text or link, changes profile picture, updates display name, or switches handle.

## `monitorStories` (type: `boolean`):

Detect temporary 24-hour stories published by the creators and save media before it expires.

## `resetBaseline` (type: `boolean`):

Clear previously stored memory and re-seed a fresh baseline snapshot for the specified accounts.

## Actor input object example

```json
{
  "username": [
    "mrbeast"
  ],
  "downloadVideos": true,
  "monitorReposts": true,
  "monitorProfile": true,
  "monitorStories": true,
  "resetBaseline": false
}
```

# 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 = {
    "username": [
        "mrbeast"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialwatchdog/tiktok-watchdog").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": ["mrbeast"] }

# Run the Actor and wait for it to finish
run = client.actor("socialwatchdog/tiktok-watchdog").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 '{
  "username": [
    "mrbeast"
  ]
}' |
apify call socialwatchdog/tiktok-watchdog --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,socialwatchdog/tiktok-watchdog"
        }
    }
}
```

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/IaDzCKoy498s4Ilx5/builds/N0nbbnXih2ChAJPgL/openapi.json
