# TikTok Reposts Scraper (`deepmine/tiktok-reposts-scraper`) Actor

Export the videos any TikTok profile reposted: who reposted it, the original creator with followers and bio, plays, likes, comments, shares, caption, sound and a video file link. Filter by the creator's followers, or get only new reposts on a schedule. Usernames in, CSV or JSON out. No login.

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

## Pricing

from $0.22 / 1,000 reposts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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?

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 Reposts Scraper

A **TikTok reposts scraper**: enter TikTok usernames and get every video each profile reposted (its **Reposts** tab), one clean row per repost. Each row names who reposted it and the video's original creator, with the creator's followers, bio and email, the video's plays, likes, comments, shares, saves and reposts, the caption, hashtags, sound, post date and a downloadable video file link.

No TikTok account, no cookies, no login. Filter by the original creator's follower count, turn on **Creator details** for each creator's join date and bio link, or schedule it with **Only new reposts** to get just what was reposted since the last run.

| Original creator | 📝 Caption | 🔁 Reposted By | ▶️ Plays | ❤️ Likes | 👥 Creator Followers | 📏 Tier | 📅 Posted |
|---|---|---|---:|---:|---:|---|---|
| [@cooperkupp](https://www.tiktok.com/@cooperkupp) | [Don’t try this at home 😝](https://www.tiktok.com/@cooperkupp/video/7682135541378256142) | zachking | 1,600,000 | 132,100 | 694,900 | macro | 2026-09-05 |
| [@andrew.collects](https://www.tiktok.com/@andrew.collects) | [The Craziest Bricks and Minifigs Video Yet! #lego…](https://www.tiktok.com/@andrew.collects/video/7658332561386638622) | zachking | 832,500 | 76,800 | 7,823 | nano | 2026-07-03 |
| [@rylan.smithhh](https://www.tiktok.com/@rylan.smithhh) | [@MrBeast will you please come to our pep rally at…](https://www.tiktok.com/@rylan.smithhh/video/7696325861934370078) | mrbeast | 8,600,000 | 1,100,000 | 12,100 | micro | 2026-10-14 |
| [@n2nfilms](https://www.tiktok.com/@n2nfilms) | [Mr Lean](https://www.tiktok.com/@n2nfilms/video/7694481336265936141) | mrbeast | 3,500,000 | 346,800 | 19,100 | micro | 2026-10-09 |
| [@sharktankabc](https://www.tiktok.com/@sharktankabc) | [It's time to ignite a spark for a new season of en…](https://www.tiktok.com/@sharktankabc/video/7688776456482147597) | mrbeast | 514,400 | 15,000 | 481,000 | mid | 2026-09-23 |

<sub>Collected 2026-10-22 with the prefilled input, `{"profiles": ["zachking", "mrbeast"], "maxRepostsPerProfile": 50}`. Every row also has the full caption, comments, shares, saves, the creator's bio and email, hashtags, sound, the video file link, the reposting profile's followers and the IDs.</sub>

**$0.29 per 1,000 reposts** on the Starter plan ($0.34 Free, $0.25 Scale, $0.22 Business). The prefilled run (100 reposts) costs about $0.03.

### Why this one

- **Who reposted what.** Every row has the reposting profile (`reposterUsername`, its followers and link) next to the original creator, so the reposts of many profiles in one run stay apart. Two of your profiles that repost the same video give a row each: who amplifies what is the data.
- **The original creator, in full.** Follower, following, like and video counts, bio, the email written in the bio, a size tier (nano to mega) and verified badge for the creator of every reposted video, with no extra request. The Reposts tab rounds counts of 10K and over the way TikTok's site does (6.3M); **Creator details** replace them with the exact counts from the creator's profile page and add their join date, bio link, friends count, app language, business-account and TikTok Shop seller flags.
- **Follower filters that cost nothing.** Keep only reposts of creators in a follower range (`minAuthorFollowers`, `maxAuthorFollowers`): micro-influencers, say. Skipped reposts aren't charged and don't count toward your maximum.
- **Only new reposts, or a full refresh.** On a schedule, `onlyNew` delivers only the reposts no earlier run delivered for that profile. Leave it off and each run delivers every repost again with today's plays and likes.
- **The whole video.** A video file link that opens without cookies, an embed link that doesn't expire, the cover and the full-size cover with its width and height, captions languages, on-screen text, tagged place, sound with its audio file and its creator's account, and whether comments, Duets and Stitches are allowed.
- **Fails loudly, never silently.** Every run saves a per-profile summary (`OUTPUT`). If TikTok stops answering part-way, that profile is marked and the run fails so you notice; the rows already read are kept.

### Input

| Field | What it does | Default |
|---|---|---|
| `profiles` | TikTok usernames or profile URLs, one per line: `zachking`, `@zachking`, `https://www.tiktok.com/@zachking`. | `zachking`, `mrbeast` |
| `maxRepostsPerProfile` | Reposts per profile, newest repost first, up to 5,000. | 50 |
| `minAuthorFollowers` | Keep only reposts whose original creator has at least this many followers (the count the Reposts tab shows). 0 = no minimum. | 0 |
| `maxAuthorFollowers` | Keep only reposts whose original creator has at most this many followers. 0 = no maximum. | 0 |
| `creatorDetails` | Also read each original creator's profile page (once per creator): exact counts, join date, bio link, friends, app language, business-account and TikTok Shop seller flags, and the account behind another creator's original sound. Same price. | off |
| `onlyNew` | Deliver only the reposts that no earlier run with this option delivered for that profile. | off |
| `proxyConfiguration` | Apify Proxy. Keep datacenter (the default); residential doesn't help here. | Apify datacenter |

Example:

```json
{
  "profiles": ["zachking", "mrbeast", "khaby.lame"],
  "maxRepostsPerProfile": 200,
  "minAuthorFollowers": 10000,
  "maxAuthorFollowers": 1000000
}
```

### Output

One row per repost, profile by profile in your order, each profile's reposts in the order its Reposts tab shows them (newest repost first). Table views in the Console:

- **📊 Overview**: 🖼️ Cover, 🏷️ Username, 👤 Original Creator, 📝 Caption, 🔗 TikTok, 🔁 Reposted By, ▶️ Plays, ❤️ Likes, 💬 Comments, 🔁 Shares, 👥 Followers, 📅 Posted, 🏅 Rank
- **📈 Stats**: 🏷️ Username, 🔗 TikTok, 🔁 Reposted By, ▶️ Plays, ❤️ Likes, 💬 Comments, 🔁 Shares, 🔖 Saves, 👥 Followers, 📏 Creator Tier, ⏱️ Duration, 📅 Posted
- **🔎 Details**: the video file, AI label, captions, quality, file size and the creator's numbers
- **👤 Creator Details** (with Creator details on): 🖼️ Creator Photo, 🏷️ Username, 👥 Followers, 📏 Creator Tier, 📧 Creator Email, 📅 Creator Joined, 🌐 Creator Link, 🌐 Creator Language, 💼 Business Account, 🔁 Reposted By

The profiles you entered are in a second dataset, **👤 Profiles** (free): one row each, with their own follower and following counts, join date and bio link.

#### Output fields

Every row has these keys, in this order; the ones marked "Only with Creator details" are there only with `creatorDetails` on. `author*` is always the video's original creator; `reposter*` is the profile you entered. A value TikTok didn't send is `null` (never an empty string or a made-up 0).

- `cover`: the video's cover image (signed by TikTok: the link stops working about 2 days after the run).
- `authorName`: the original creator's display name.
- `caption`: the full caption, hashtags included.
- `captionSnippet`: the caption's first 50 characters on one line, for tables.
- `authorUsername`: the original creator's TikTok username, without @.
- `videoUrl`: the reposted video's page on TikTok (its URL names the original creator).
- `authorVerified`: the original creator has TikTok's verified badge.
- `reposterUsername`: the profile that reposted the video (the one you entered), as TikTok spells it.
- `reposterName`: the reposting profile's display name.
- `reposterUrl`: the reposting profile on TikTok.
- `reposterFollowers`: the reposting profile's followers (exact).
- `isAd`: TikTok labels the post as an ad or a paid partnership.
- `plays`: views, as TikTok shows them (rounded from 10K up: 411.7K is `411700`). Null when TikTok hides the counter.
- `likes`: likes (rounded the same way). Null when TikTok hides the counter.
- `comments`: comments.
- `shares`: shares. Null when TikTok hides the counter.
- `saves`: saves (TikTok's Favorites). Null when TikTok hides the counter.
- `reposts`: the video's own repost count. The Reposts tab sends 0 for every video, so it is `null` here (TikTok hides the counter).
- `authorFollowers`: the original creator's followers when the repost was collected. The Reposts tab rounds 10K and over to one decimal (6.3M is `6300000`); with Creator details it's the exact count.
- `durationSeconds`: length in seconds. Null for photo posts.
- `postedAt`: when the original creator posted the video (UTC). TikTok doesn't show when it was reposted.
- `rank`: place in the profile's Reposts tab, newest repost first. Reposts skipped by your follower range keep their place, so gaps are normal.
- `hashtags`: hashtags in the caption, without #.
- `mentions`: usernames mentioned in the caption.
- `soundTitle`: the sound's title ("original sound" is the creator's own audio).
- `soundUrl`: the sound's page on TikTok.
- `videoFileUrl`: the video file (MP4) in the best quality TikTok serves, a direct link anyone can open or download (no login, no cookies). Often H.265 (HEVC), which some browsers don't play; download it to watch. Null for photo posts.
- `videoFileExpiresAt`: when the video file link expires (UTC), about 2 days after the run.
- `isPhotoPost`: a photo post (slideshow): its pictures are in `photos`.
- `isAiGenerated`: TikTok labels the post as AI-generated.
- `hasCaptions`: TikTok has captions (subtitles) for the video.
- `captionLanguages`: the languages TikTok has captions in (`eng-US`, ...).
- `captionLanguage`: the language of the caption text as TikTok detects it (`en`, `es`, ...).
- `onScreenText`: text the creator put on the video with TikTok's text stickers.
- `placeName`: the place the post is tagged with, when it has one.
- `placeAddress`: the tagged place's address.
- `placeCity`: the tagged place's city.
- `width`: video width in pixels. Null for photo posts.
- `height`: video height in pixels. Null for photo posts.
- `definition`: TikTok's quality label (`540p`, `720p`, `1080p`).
- `format`: the video file format (`mp4`).
- `fileSizeBytes`: size of TikTok's standard video file in bytes.
- `authorAvatar`: the original creator's profile picture (signed: about 2 days).
- `authorBio`: the original creator's bio.
- `authorFollowing`: accounts the original creator follows (rounded from 10K up; exact with Creator details).
- `authorLikes`: total likes on all the original creator's videos (rounded from 10K up; exact with Creator details).
- `authorVideos`: the original creator's public videos (rounded from 10K up; exact with Creator details).
- `authorPrivate`: the original creator's account is private. Null when TikTok doesn't say.
- `soundAuthor`: the sound's artist or creator name.
- `soundAlbum`: the album of a released track, when TikTok names it.
- `soundIsOriginal`: the sound is the creator's own audio, not a released track.
- `soundCover`: the sound's cover art (signed: about 2 days).
- `authorProfileUrl`: the original creator's profile on TikTok.
- `authorSizeTier`: the original creator's size by followers: `nano` (under 10K), `micro` (10K-100K), `mid` (100K-500K), `macro` (500K-1M) or `mega` (1M and more).
- `authorEmail`: the first email address written in the original creator's bio, when there is one.
- `authorFriends`: accounts the original creator follows that follow them back. Only with Creator details (the Reposts tab doesn't say).
- `authorJoinedAt`: when the original creator's account was created (UTC). Only with Creator details.
- `authorBioLinkUrl`: the link in the original creator's bio. Only with Creator details.
- `authorLanguage`: the original creator's TikTok app language (`en`, `es`, ...). Only with Creator details.
- `authorIsCommerceAccount`: the original creator has a TikTok business (commerce) account. Only with Creator details.
- `authorIsSeller`: TikTok marks the original creator as a TikTok Shop seller. Only with Creator details.
- `soundDurationSeconds`: the sound's length in seconds.
- `soundAudioUrl`: the sound's audio file (signed by TikTok; it can expire).
- `soundIsCopyrighted`: TikTok marks the sound as a copyrighted track.
- `soundIsCommercial`: the sound is in TikTok's commercial music library (cleared for business use).
- `soundCreatorUsername`: the TikTok account that made the sound, when it's an original sound: the video's creator for their own sound; another account's original sound with Creator details. Null for released tracks.
- `soundCreatorUrl`: the sound creator's profile on TikTok.
- `commentsAllowed`: anyone may comment on the video. `false` when the creator turned comments off or limited them to friends.
- `duetAllowed`: others may Duet the video. Null when TikTok doesn't say (photo posts).
- `stitchAllowed`: others may Stitch the video. Null when TikTok doesn't say (photo posts).
- `videoCodec`: the video's codec (`h264`, `h265`). Null for photo posts.
- `videoBitrate`: the standard video file's bitrate in bits per second. Null for photo posts.
- `dynamicCover`: the video's cover at full size, a still image in the Reposts tab (signed: about 2 days).
- `coverWidth`: the full-size cover's width in pixels, read from the image itself. Null when it couldn't be read.
- `coverHeight`: the full-size cover's height in pixels.
- `embedUrl`: TikTok's embed player page for the video: opens with no login or cookies and doesn't expire.
- `photos`: the images of a photo post; null for videos (signed: about 2 days).
- `videoId`: TikTok's video ID.
- `authorId`: TikTok's user ID of the original creator.
- `authorSecUid`: the original creator's secUid, the ID TikTok's own web API uses.
- `soundId`: TikTok's sound ID.
- `poiId`: TikTok's ID of the tagged place.
- `playlistId`: TikTok's ID of the creator's playlist the video is in, when it is in one.
- `soundCreatorId`: TikTok's user ID of the sound creator.
- `reposterId`: TikTok's user ID of the reposting profile.
- `reposterSecUid`: the reposting profile's secUid.
- `input`: the profile you entered, exactly as entered.
- `scrapedAt`: when it was collected (UTC).

The **👤 Profiles** dataset has one row per profile you entered, with these keys:

- `avatar`: profile picture.
- `name`: display name.
- `bio`: the full bio.
- `bioSnippet`: the bio's first 50 characters.
- `username`: TikTok username.
- `profileUrl`: the profile on TikTok.
- `verified`: TikTok's verified badge.
- `followers`: followers (exact).
- `following`: accounts they follow.
- `likes`: total likes on all their videos.
- `videos`: their public videos.
- `joinedAt`: when the account was created (UTC).
- `bioLinkUrl`: the link in their bio.
- `userId`: TikTok's user ID.
- `secUid`: TikTok's secUid.
- `scrapedAt`: when it was collected (UTC).

Notes:

- **Newest repost first.** The rows of a profile come in its Reposts tab's order, so `maxRepostsPerProfile` 50 gives the 50 most recent reposts. TikTok doesn't show when a video was reposted, only when it was posted (`postedAt`).
- **Some profiles show no reposts.** A profile that reposted nothing, or hides its Reposts tab, gives no rows and costs nothing (`no_results` in the run summary). An empty tab is believed only after a known profile's tab answers on the same connection and a second fresh connection gets the same empty tab; otherwise the profile is `blocked` (free), never a false "no reposts".
- **Image and file links expire.** Covers, avatars, the video file and the sound file are signed by TikTok and stop working about 2 days after the run; `embedUrl` and the page links don't expire.

#### Run summary (`OUTPUT`)

```json
{
  "results": 100,
  "inputs": [
    {"input": "zachking", "status": "ok", "results": 50, "stopReason": "max_results", "username": "zachking"}
  ]
}
```

`status` per profile: `ok`, `no_results` (no reposts, or none in your follower range, or none new), `private`, `not_found`, `blocked` (TikTok stopped answering; the run fails so you notice, rows already read are kept), `stopped` (your spending limit), `failed` (with Only new reposts: the Actor couldn't record what it delivered, so it stopped before delivering more; nothing is ever charged twice). `stopReason`: `max_results`, `end` (the tab ended) or `caught_up` (Only new reposts reached the reposts an earlier run delivered). `filteredOut` counts the reposts your follower range skipped; `deliveredBefore` the ones Only new reposts skipped.

### How long does a run take?

The first reposts usually arrive **about 4 to 7 seconds after the run starts**, counted on Apify's own clock from the run's start time, so the container start and loading the Apify SDK are included (4.0 to 6.6 s in seven test runs of one or two profiles; one run whose first profile met slow TikTok answers took 13 s). The prefilled run (100 reposts) takes 6 to 9 seconds in all. A Reposts tab reads at about 30 reposts a page: all 119 of @zachking's reposts took 10 seconds, and 446 reposts from 9 profiles took 23 seconds, the profiles read in parallel. With Creator details, each original creator's profile page is read once per run: 50 reposts with their creators' details took about 10 seconds.

### Pricing

Pay per result, no start fee and no minimum. Example: 1,000 reposts cost $0.29 on the Starter plan.

| Your Apify plan | Per 1,000 reposts |
|---|---|
| Free | $0.34 |
| Starter | $0.29 |
| Scale | $0.25 |
| Business | $0.22 |

You pay only for rows that reach your dataset. The profiles you entered, private or missing profiles, reposts your follower range or Only new reposts skip cost nothing. Creator details are included. When your spending limit is reached, the run stops.

### FAQ

**Do I need a TikTok account?** No. The Actor reads only what TikTok shows logged-out visitors.

**Whose numbers are on a row, the reposter's or the creator's?** The video's and its original creator's (`author*`). The reposting profile is in `reposter*`, and its full profile is in the 👤 Profiles dataset.

**When was the video reposted?** TikTok doesn't show it. The order of the rows (`rank`) is the Reposts tab's, newest repost first.

**How do I track new reposts?** Schedule the Actor with `onlyNew` on. Each run delivers only what no earlier run with the option delivered for that profile, and stops reading a profile once it reaches them. Each page of reposts is recorded before it is delivered and charged, so a repost is never charged twice, even when a run fails or is restarted.

**Need the creators' own videos?** Use our TikTok Profile & Videos API with the `authorUsername` values from this run.

### Feedback

Missing a field, or a result that doesn't look right? Open an issue on the **Issues** tab and we'll look into it. If the data helps you, a short review on this page helps other people find it.

# Actor input Schema

## `profiles` (type: `array`):

TikTok usernames or profile URLs whose Reposts tab you want, one per line. Examples: zachking, @zachking, https://www.tiktok.com/@zachking

## `maxRepostsPerProfile` (type: `integer`):

Reposts to get from each profile, newest repost first. Up to 5,000. You pay per repost.

## `minAuthorFollowers` (type: `integer`):

Keep only reposts of videos whose original creator has at least this many followers. 0 = no minimum. Skipped reposts cost nothing.

## `maxAuthorFollowers` (type: `integer`):

Keep only reposts of videos whose original creator has at most this many followers. 0 = no maximum. Skipped reposts cost nothing.

## `creatorDetails` (type: `boolean`):

Also open each original creator's profile page for their exact follower, like and video counts (the Reposts tab rounds 10K and over), join date, bio link, friends, app language, business-account and TikTok Shop seller flags. One page per creator; included in the price per repost.

## `onlyNew` (type: `boolean`):

For scheduled runs: deliver only the reposts that no earlier run with this option delivered for that profile (remembered in your account's storage). Leave it off to get every repost again with today's plays and likes.

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

TikTok is reached through Apify Proxy. Datacenter proxies are enough; residential ones don't help here.

## Actor input object example

```json
{
  "profiles": [
    "zachking",
    "mrbeast"
  ],
  "maxRepostsPerProfile": 50,
  "minAuthorFollowers": 0,
  "maxAuthorFollowers": 0,
  "creatorDetails": false,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `profiles` (type: `string`):

No description

## `summary` (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 = {
    "profiles": [
        "zachking",
        "mrbeast"
    ],
    "maxRepostsPerProfile": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/tiktok-reposts-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 = {
    "profiles": [
        "zachking",
        "mrbeast",
    ],
    "maxRepostsPerProfile": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/tiktok-reposts-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 '{
  "profiles": [
    "zachking",
    "mrbeast"
  ],
  "maxRepostsPerProfile": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call deepmine/tiktok-reposts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deepmine/tiktok-reposts-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/5DNdqo6SvrpN8RfBA/builds/wjjBN8L1ozTzy4Pum/openapi.json
