# TikTok Comments Scraper — Text, Likes, Replies & Users (`convertfleetdotonline/tiktok-comments-scraper-lite`) Actor

Scrape TikTok comments from any video or photo URL: text, likes, reply threads and commenter profiles (username, region, avatar). Browser-based, no signing keys or TikTok login. Export JSON/CSV.

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

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Scraper — Text, Likes, Replies & Commenter Data

Scrape **TikTok comments from any video or photo URL** — comment text, like counts, reply threads, and commenter profiles (username, region, avatar). Export to **JSON or CSV**, or pull results via the Apify API. No TikTok API keys, no request-signing to maintain.

### ✨ What it does

Give it one or more TikTok post URLs and get back structured comment data:

- 💬 **Comment text** — the full comment body (emoji included)
- ❤️ **Like count** per comment
- 🧵 **Reply threads** — optional nested replies, linked to their parent comment
- 👤 **Commenter profile** — username, display name, profile URL, avatar, region
- 🕒 **Timestamp** — ISO 8601 `createdAt` for every comment
- 📌 Author-liked / pinned flags where available

### 🔧 How it works

TikTok signs its internal comment API (X-Bogus / msToken), so a plain HTTP request returns nothing. Instead of reverse-engineering and constantly re-patching that signing, this Actor opens the real video page in a headless browser and lets **TikTok's own JavaScript** issue the signed request — it simply **intercepts the response**. That makes it resilient to signing changes, and scrolling the page naturally paginates to more comments.

### ⚠️ Important: use a session or residential proxies

TikTok shows a **"Log in" wall** to untrusted IP addresses and will not load comments without a trusted session. For reliable results, provide **either**:

1. **`sessionCookies`** — cookies exported from a signed-in TikTok browser session (use a Cookie-Editor browser extension → export as JSON → paste as an array of `{name, value}`), **and/or**
2. **Residential proxies** — set `proxyConfiguration` to the `RESIDENTIAL` group.

On datacenter IPs with no session you will get a `Log in` wall and zero comments — that is TikTok's block, not an Actor bug.

### 📥 Input

```json
{
    "startUrls": ["https://www.tiktok.com/@user/video/7660060335751089430"],
    "maxItems": 200,
    "includeReplies": false,
    "sessionCookies": [
        { "name": "sessionid", "value": "..." },
        { "name": "tt-target-idc", "value": "..." }
    ],
    "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
````

| Field | Required | Description |
|---|---|---|
| `startUrls` | ✅ | TikTok video/photo post URLs |
| `maxItems` | | Max comments per video (default 200) |
| `includeReplies` | | Also return reply comments (default false) |
| `sessionCookies` | recommended | Cookies from a signed-in TikTok session — lifts the login wall |
| `proxyConfiguration` | recommended | Use `RESIDENTIAL` proxies for best success |

### 📤 Output (one item per comment)

```json
{
    "id": "7277992603752203013",
    "parentId": null,
    "text": "This is exactly what I needed, thank you! ❤️",
    "createdAt": "2026-06-14T17:28:42.000Z",
    "likeCount": 12,
    "replyCount": 1,
    "awemeId": "7660060335751089430",
    "user": {
        "id": "7175984693090419717",
        "username": "someuser",
        "displayName": "Some User",
        "url": "https://www.tiktok.com/@someuser",
        "avatarUrl": "https://p16-sign-va.tiktokcdn.com/...",
        "region": "US"
    }
}
```

### 💡 Use cases

- **Content research** — mine the questions and requests under viral videos for your next hooks
- **Influencer & lead research** — pull commenter usernames and regions off any post
- **Sentiment & trend analysis** — feed comment text into an LLM or spreadsheet
- **Community monitoring** — track what your audience says under your own posts

### ❓ FAQ

**Do I need a TikTok account?** For reliable results, yes — provide session cookies. TikTok blocks comment loading for anonymous, untrusted IPs.

**Why did I get zero comments / a "Log in" error?** You ran without a session on a datacenter IP. Add `sessionCookies` and/or use residential proxies.

**Which URLs work?** Individual video/photo posts (`tiktok.com/@user/video/<id>` or `/photo/<id>`). Profile, hashtag, and sound pages are not supported.

**Can I get replies?** Yes — set `includeReplies: true` (each reply counts toward `maxItems`).

### ⚖️ Disclaimer

Not affiliated with, endorsed by, or sponsored by TikTok / ByteDance. "TikTok" is a trademark of its owner, used only to describe the data source. Extracts publicly visible comment data only. You are responsible for using the data in compliance with applicable laws and TikTok's terms.

# Actor input Schema

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

TikTok video or photo post URLs to scrape comments from (e.g. https://www.tiktok.com/@user/video/123456).

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

Maximum comments to return per video.

## `includeReplies` (type: `boolean`):

Also include reply comments (nested under top-level comments).

## `sessionCookies` (type: `array`):

Cookies from a signed-in TikTok browser session. TikTok shows a 'Log in' wall to untrusted IPs and never loads comments without a session. Export cookies (e.g. with an EditThisCookie/Cookie-Editor extension) as an array of {name, value} objects and paste here.

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

RESIDENTIAL proxies are strongly recommended — TikTok captchas datacenter IPs.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.tiktok.com/@vicky.owens/video/7660060335751089430"
  ],
  "maxItems": 200,
  "includeReplies": false,
  "sessionCookies": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": [
        "https://www.tiktok.com/@vicky.owens/video/7660060335751089430"
    ],
    "sessionCookies": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("convertfleetdotonline/tiktok-comments-scraper-lite").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": ["https://www.tiktok.com/@vicky.owens/video/7660060335751089430"],
    "sessionCookies": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("convertfleetdotonline/tiktok-comments-scraper-lite").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 '{
  "startUrls": [
    "https://www.tiktok.com/@vicky.owens/video/7660060335751089430"
  ],
  "sessionCookies": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call convertfleetdotonline/tiktok-comments-scraper-lite --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Comments Scraper — Text, Likes, Replies & Users",
        "description": "Scrape TikTok comments from any video or photo URL: text, likes, reply threads and commenter profiles (username, region, avatar). Browser-based, no signing keys or TikTok login. Export JSON/CSV.",
        "version": "1.0",
        "x-build-id": "8NfFGpcSMMBGieghD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/convertfleetdotonline~tiktok-comments-scraper-lite/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-convertfleetdotonline-tiktok-comments-scraper-lite",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/convertfleetdotonline~tiktok-comments-scraper-lite/runs": {
            "post": {
                "operationId": "runs-sync-convertfleetdotonline-tiktok-comments-scraper-lite",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/convertfleetdotonline~tiktok-comments-scraper-lite/run-sync": {
            "post": {
                "operationId": "run-sync-convertfleetdotonline-tiktok-comments-scraper-lite",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "TikTok video/photo URLs",
                        "minItems": 1,
                        "type": "array",
                        "description": "TikTok video or photo post URLs to scrape comments from (e.g. https://www.tiktok.com/@user/video/123456).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max comments per video",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum comments to return per video.",
                        "default": 200
                    },
                    "includeReplies": {
                        "title": "Include replies",
                        "type": "boolean",
                        "description": "Also include reply comments (nested under top-level comments).",
                        "default": false
                    },
                    "sessionCookies": {
                        "title": "TikTok session cookies (recommended)",
                        "type": "array",
                        "description": "Cookies from a signed-in TikTok browser session. TikTok shows a 'Log in' wall to untrusted IPs and never loads comments without a session. Export cookies (e.g. with an EditThisCookie/Cookie-Editor extension) as an array of {name, value} objects and paste here."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "RESIDENTIAL proxies are strongly recommended — TikTok captchas datacenter IPs."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
