# TikTok Comments & Images Scraper (`rainminer/tiktok-comments-images-scraper`) Actor

Scrape TikTok video comments and replies with photo and sticker image URLs. Export text, likes, authors, pinned status, and comment media from public videos for social listening, moderation, brand monitoring, and creator analytics. Paste video links and download JSON/CSV. No TikTok login required.

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

## Pricing

from $2.99 / 1,000 tiktok comments

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?

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

## TikTok Comments & Images Scraper

**TikTok Comments & Images Scraper** extracts comments and replies from public TikTok videos — including **photo and sticker image URLs** attached to comments. Paste one or more TikTok video links and get structured rows with text, likes, reply counts, author profile fields, pinned status, and media URLs ready for export or API pipelines.

Many comment scrapers return text and likes only. This Actor also maps **comment image attachments**: when a comment includes an uploaded photo or a sticker, the dataset includes `imageUrl` / `imageUrls` instead of leaving media blank.

***

### What does TikTok Comments & Images Scraper do?

- Scrapes **top-level comments** for public TikTok video URLs
- Optionally expands **reply threads** under each comment (`maxReplies`)
- Returns **comment photos** (`image_list`) and **sticker images** when present
- Exports author username, nickname, avatar, likes, reply totals, and pinned flag
- Works from public video pages — **no TikTok login**

***

### Why scrape TikTok comments with images?

Comment media carries context that text alone misses: product photos, receipt screenshots, meme stickers, and visual reactions. Teams use this Actor for:

1. **Brand monitoring** — catch image complaints or unboxing photos in replies
2. **Moderation / trust & safety** — review visual comment content with URLs
3. **Creator analytics** — measure which comments (and media) drive engagement
4. **Social listening** — feed comment text + images into research or LLM pipelines
5. **Campaign creative research** — collect sticker and meme formats audiences reuse
6. **Influencer due diligence** — sample recent comment media before a deal
7. **UGC discovery** — find product photos fans post under viral videos
8. **Support triage** — pull screenshot-style comments for known issue threads
9. **Competitive intel** — compare comment media mix across rival creators
10. **Dataset enrichment** — join image URLs onto an existing TikTok comments table

***

### How to scrape TikTok comments

1. Open this Actor on Apify and click **Try for free**
2. Paste one or more public TikTok video URLs into **TikTok video URLs**
3. Set **Max comments per video** (and optionally **Max replies per comment**)
4. Keep **Apify Proxy → RESIDENTIAL** enabled for reliable access
5. Click **Start**, then download the dataset as JSON, CSV, or Excel

***

### Input

```json
{
  "videoUrls": [
    "https://www.tiktok.com/@khaby.lame/video/7631024397754600735"
  ],
  "maxItems": 5,
  "maxReplies": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `videoUrls` | string list | — | Public TikTok video URLs (`/@user/video/{id}` preferred) |
| `startUrls` | request list | — | Alternative URL list (same video URL formats) |
| `maxItems` | integer | `5` | Max comments **per video** (includes replies when enabled) |
| `maxReplies` | integer | `0` | Max replies under each top-level comment (`0` = skip replies) |
| `proxyConfiguration` | proxy | residential | Apify Proxy; residential recommended for TikTok |

Provide either `videoUrls` or `startUrls` (or both).

***

### Output

Each dataset item is one comment or reply:

```json
{
  "commentId": "7632408908891833095",
  "videoUrl": "https://www.tiktok.com/@khaby.lame/video/7631024397754600735",
  "videoId": "7631024397754600735",
  "text": "The editor:",
  "createTime": "2026-04-24T12:44:51.000Z",
  "diggCount": 574051,
  "replyCommentTotal": 1204,
  "authorUsername": "someviewer",
  "authorNickname": "Some Viewer",
  "authorAvatarUrl": "https://p16-sign.tiktokcdn-us.com/...",
  "imageUrls": [
    "https://p16-comment-sg-sign.tiktokcdn-us.com/...~tplv-jj85edgx6n-image-origin.image"
  ],
  "imageUrl": "https://p16-comment-sg-sign.tiktokcdn-us.com/...~tplv-jj85edgx6n-image-origin.image",
  "isPinned": false,
  "parentCommentId": null,
  "scrapedAt": "2026-08-31T12:40:00.000Z"
}
```

Text-only comments still include the image fields — `imageUrls` is `[]` and `imageUrl` is `null`. Sticker comments populate the same image fields from TikTok’s sticker asset URLs.

| Field | Description |
| --- | --- |
| `commentId` | TikTok comment id |
| `videoUrl` / `videoId` | Source video |
| `text` | Comment text, or `null` when empty |
| `createTime` | ISO timestamp |
| `diggCount` | Likes on the comment |
| `replyCommentTotal` | TikTok-reported reply count |
| `authorUsername` / `authorNickname` / `authorAvatarUrl` | Comment author |
| `imageUrls` / `imageUrl` | Photo or sticker URLs (`imageUrl` is the primary) |
| `isPinned` | Pinned / stickied by the creator |
| `parentCommentId` | Parent comment id for replies, otherwise `null` |
| `scrapedAt` | When this row was scraped |

Download results as JSON, HTML, CSV, or Excel from the dataset tab, or pull them via the Apify API.

***

### Tips

- Prefer full `https://www.tiktok.com/@user/video/{id}` URLs over short `vm.tiktok.com` links when possible.
- Use **residential** proxies; datacenter IPs are often challenged by TikTok.
- Raise `maxItems` for deeper threads; replies also count toward `maxItems` when `maxReplies` > 0.
- Comment photo and sticker CDN URLs can expire — download media promptly if you need a durable archive.

***

### How much does it cost?

This Actor uses **pay-per-event** pricing. You pay for each comment row in the dataset (from **$3.99 per 1,000 results** on the FREE Store plan, lower on higher tiers) plus the small Actor-start fee. Platform compute and residential proxy usage for the run are included in that model for standard Store plans — keep `maxItems` modest while testing.

### Is it legal to scrape TikTok comments?

This Actor collects information that is publicly visible on TikTok video pages without logging in. You are responsible for how you use the data, including personal data of comment authors under GDPR and similar laws. Use results only for legitimate purposes and review TikTok’s Terms of Service for your use case. If unsure, consult your lawyers.

***

### FAQ

#### Does this scrape comment images and stickers?

Yes. Uploaded comment photos and sticker assets are mapped into `imageUrl` / `imageUrls` when TikTok’s public comment API returns them.

#### Do I need a TikTok account?

No. The Actor reads the same public comment endpoints available to logged-out web visitors.

#### How is this different from a text-only comments scraper?

This Actor focuses on the **comment media gap** — returning image and sticker URLs alongside standard comment fields for workflows that need visual comment content.

#### Can I scrape replies?

Yes. Set `maxReplies` above `0`. Each reply row sets `parentCommentId` to its parent comment.

***

### Support

Found a video where images should appear but come back empty? Open an issue on this Actor’s **Issues** tab with the video URL and a sample comment id. Feedback helps keep field mappings current as TikTok changes response shapes.

### Image Credit

Image credit: [TikTok](https://www.tiktok.com/)

# Actor input Schema

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

Public TikTok video URLs to scrape comments from. Accepts https://www.tiktok.com/@user/video/... and mobile /v/... links.

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

Optional alternative to videoUrls using Apify request-list sources. Each entry should be a public TikTok video URL.

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

Maximum number of comments (including replies when enabled) to save per video URL.

## `maxReplies` (type: `integer`):

Maximum replies to fetch under each top-level comment. Set to 0 to skip replies.

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

TikTok requires residential proxies for reliable comment access. Apify Proxy with the RESIDENTIAL group is recommended and enabled by default.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.tiktok.com/@khaby.lame/video/7631024397754600735"
  ],
  "maxItems": 5,
  "maxReplies": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "videoUrls": [
        "https://www.tiktok.com/@khaby.lame/video/7631024397754600735"
    ],
    "maxItems": 5,
    "maxReplies": 0,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rainminer/tiktok-comments-images-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 = {
    "videoUrls": ["https://www.tiktok.com/@khaby.lame/video/7631024397754600735"],
    "maxItems": 5,
    "maxReplies": 0,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("rainminer/tiktok-comments-images-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 '{
  "videoUrls": [
    "https://www.tiktok.com/@khaby.lame/video/7631024397754600735"
  ],
  "maxItems": 5,
  "maxReplies": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call rainminer/tiktok-comments-images-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rainminer/tiktok-comments-images-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/K35sDe5guZdmaYrih/builds/9aeMu2Giu9n0X4edX/openapi.json
