TikTok Comments Scraper avatar
TikTok Comments Scraper

Pricing

$1.00 / 1,000 comments

Go to Store
TikTok Comments Scraper

TikTok Comments Scraper

clockworks/tiktok-comments-scraper

Developed by

Clockworks

Maintained by Apify

Extract TikTok comments. Just add a TikTok URL and get TikTok video and profile data: comments, URLs, numbers of shares, followers, hashtags, hearts, video, and music metadata. Export scraped data, run the scraper via API, schedule and monitor runs or integrate with other tools.

4.4 (13)

Pricing

$1.00 / 1,000 comments

114

Monthly users

928

Runs succeeded

98%

Response time

2.1 days

Last modified

a day ago

You can access the TikTok Comments Scraper programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, youā€™ll need an Apify account and your API token, found in Integrations settings in Apify Console.

1{
2  "openapi": "3.0.1",
3  "info": {
4    "version": "0.0",
5    "x-build-id": "Agp1NsV8uQlKsDVOg"
6  },
7  "servers": [
8    {
9      "url": "https://api.apify.com/v2"
10    }
11  ],
12  "paths": {
13    "/acts/clockworks~tiktok-comments-scraper/run-sync-get-dataset-items": {
14      "post": {
15        "operationId": "run-sync-get-dataset-items-clockworks-tiktok-comments-scraper",
16        "x-openai-isConsequential": false,
17        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
18        "tags": [
19          "Run Actor"
20        ],
21        "requestBody": {
22          "required": true,
23          "content": {
24            "application/json": {
25              "schema": {
26                "$ref": "#/components/schemas/inputSchema"
27              }
28            }
29          }
30        },
31        "parameters": [
32          {
33            "name": "token",
34            "in": "query",
35            "required": true,
36            "schema": {
37              "type": "string"
38            },
39            "description": "Enter your Apify token here"
40          }
41        ],
42        "responses": {
43          "200": {
44            "description": "OK"
45          }
46        }
47      }
48    },
49    "/acts/clockworks~tiktok-comments-scraper/runs": {
50      "post": {
51        "operationId": "runs-sync-clockworks-tiktok-comments-scraper",
52        "x-openai-isConsequential": false,
53        "summary": "Executes an Actor and returns information about the initiated run in response.",
54        "tags": [
55          "Run Actor"
56        ],
57        "requestBody": {
58          "required": true,
59          "content": {
60            "application/json": {
61              "schema": {
62                "$ref": "#/components/schemas/inputSchema"
63              }
64            }
65          }
66        },
67        "parameters": [
68          {
69            "name": "token",
70            "in": "query",
71            "required": true,
72            "schema": {
73              "type": "string"
74            },
75            "description": "Enter your Apify token here"
76          }
77        ],
78        "responses": {
79          "200": {
80            "description": "OK",
81            "content": {
82              "application/json": {
83                "schema": {
84                  "$ref": "#/components/schemas/runsResponseSchema"
85                }
86              }
87            }
88          }
89        }
90      }
91    },
92    "/acts/clockworks~tiktok-comments-scraper/run-sync": {
93      "post": {
94        "operationId": "run-sync-clockworks-tiktok-comments-scraper",
95        "x-openai-isConsequential": false,
96        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
97        "tags": [
98          "Run Actor"
99        ],
100        "requestBody": {
101          "required": true,
102          "content": {
103            "application/json": {
104              "schema": {
105                "$ref": "#/components/schemas/inputSchema"
106              }
107            }
108          }
109        },
110        "parameters": [
111          {
112            "name": "token",
113            "in": "query",
114            "required": true,
115            "schema": {
116              "type": "string"
117            },
118            "description": "Enter your Apify token here"
119          }
120        ],
121        "responses": {
122          "200": {
123            "description": "OK"
124          }
125        }
126      }
127    }
128  },
129  "components": {
130    "schemas": {
131      "inputSchema": {
132        "type": "object",
133        "properties": {
134          "postURLs": {
135            "title": "TikTok video URLs",
136            "type": "array",
137            "description": "Add the video URLs you want to extract comments from. Enter URLs one by one or edit it in bulk.",
138            "items": {
139              "type": "string"
140            }
141          },
142          "commentsPerPost": {
143            "title": "Maximum comments per post",
144            "minimum": 1,
145            "type": "integer",
146            "description": "The number of comments extracted from every result. This can scrape all comments, tends to slow down for thousands comments per post."
147          },
148          "maxRepliesPerComment": {
149            "title": "Maximum replies per comment",
150            "minimum": 0,
151            "type": "integer",
152            "description": "The maximum number of replies you want from a single comment. \n\nNote: Successful extraction of all desired replies is currently not guaranteed."
153          },
154          "profiles": {
155            "title": "Usernames",
156            "type": "array",
157            "description": "Add one or multiple TikTok usernames you want to scrape. You can enter the usernames one by one, or use the <strong>Bulk edit</strong> section to add a prepared list.",
158            "items": {
159              "type": "string"
160            }
161          },
162          "resultsPerPage": {
163            "title": "šŸ’Æ Number of videos per profile ",
164            "minimum": 1,
165            "maximum": 1000000,
166            "type": "integer",
167            "description": "Add the number of videos you want to scrape per profile.",
168            "default": 1
169          },
170          "profileScrapeSections": {
171            "title": "Profile sections to scrape",
172            "minItems": 1,
173            "uniqueItems": true,
174            "type": "array",
175            "description": "If a profile has reposted videos, you can scrape them by selecting <i>Reposts</i>",
176            "items": {
177              "type": "string",
178              "enum": [
179                "videos",
180                "reposts"
181              ],
182              "enumTitles": [
183                "Videos",
184                "Reposts"
185              ]
186            },
187            "default": [
188              "videos"
189            ]
190          },
191          "profileSorting": {
192            "title": "Profile video sorting",
193            "enum": [
194              "latest",
195              "popular",
196              "oldest"
197            ],
198            "type": "string",
199            "description": "Select: \n\n<i>Latest</i> to scrape the most recent videos first \n\n<i>Oldest</i> - the oldest videos first \n\n<i>Popular</i> - the most popular videos first \n\nDate filters only work with <i>Latest</i> and <i>Oldest</i>.",
200            "default": "latest"
201          },
202          "oldestPostDate": {
203            "title": "Scrape profile videos newer than [date]",
204            "type": "string",
205            "description": "Optional filter. Only videos uploaded after or on this date will be scraped."
206          },
207          "scrapeLastNDays": {
208            "title": "Scrape profile videos from the last [X] days",
209            "minimum": 0,
210            "type": "integer",
211            "description": "Optional filter. Specify how old the scraped videos should be - in days. Entering: \n\n <code>1</code> will get you only today's posts \n\n<code>2</code> - yesterday's and today's, and so on. \n\nIf the <i>Scrape videos newer than</i> field above was set, the most recent videos will be scraped."
212          },
213          "newestPostDate": {
214            "title": "Scrape profile videos older than [date]",
215            "type": "string",
216            "description": "Optional filter. Only videos uploaded before or on this date will be scraped."
217          },
218          "excludePinnedPosts": {
219            "title": "Exclude pinned posts",
220            "type": "boolean",
221            "description": "Tick to exclude pinned posts from profiles. Pinned posts are usually the first videos on a profile's page.",
222            "default": false
223          }
224        }
225      },
226      "runsResponseSchema": {
227        "type": "object",
228        "properties": {
229          "data": {
230            "type": "object",
231            "properties": {
232              "id": {
233                "type": "string"
234              },
235              "actId": {
236                "type": "string"
237              },
238              "userId": {
239                "type": "string"
240              },
241              "startedAt": {
242                "type": "string",
243                "format": "date-time",
244                "example": "2025-01-08T00:00:00.000Z"
245              },
246              "finishedAt": {
247                "type": "string",
248                "format": "date-time",
249                "example": "2025-01-08T00:00:00.000Z"
250              },
251              "status": {
252                "type": "string",
253                "example": "READY"
254              },
255              "meta": {
256                "type": "object",
257                "properties": {
258                  "origin": {
259                    "type": "string",
260                    "example": "API"
261                  },
262                  "userAgent": {
263                    "type": "string"
264                  }
265                }
266              },
267              "stats": {
268                "type": "object",
269                "properties": {
270                  "inputBodyLen": {
271                    "type": "integer",
272                    "example": 2000
273                  },
274                  "rebootCount": {
275                    "type": "integer",
276                    "example": 0
277                  },
278                  "restartCount": {
279                    "type": "integer",
280                    "example": 0
281                  },
282                  "resurrectCount": {
283                    "type": "integer",
284                    "example": 0
285                  },
286                  "computeUnits": {
287                    "type": "integer",
288                    "example": 0
289                  }
290                }
291              },
292              "options": {
293                "type": "object",
294                "properties": {
295                  "build": {
296                    "type": "string",
297                    "example": "latest"
298                  },
299                  "timeoutSecs": {
300                    "type": "integer",
301                    "example": 300
302                  },
303                  "memoryMbytes": {
304                    "type": "integer",
305                    "example": 1024
306                  },
307                  "diskMbytes": {
308                    "type": "integer",
309                    "example": 2048
310                  }
311                }
312              },
313              "buildId": {
314                "type": "string"
315              },
316              "defaultKeyValueStoreId": {
317                "type": "string"
318              },
319              "defaultDatasetId": {
320                "type": "string"
321              },
322              "defaultRequestQueueId": {
323                "type": "string"
324              },
325              "buildNumber": {
326                "type": "string",
327                "example": "1.0.0"
328              },
329              "containerUrl": {
330                "type": "string"
331              },
332              "usage": {
333                "type": "object",
334                "properties": {
335                  "ACTOR_COMPUTE_UNITS": {
336                    "type": "integer",
337                    "example": 0
338                  },
339                  "DATASET_READS": {
340                    "type": "integer",
341                    "example": 0
342                  },
343                  "DATASET_WRITES": {
344                    "type": "integer",
345                    "example": 0
346                  },
347                  "KEY_VALUE_STORE_READS": {
348                    "type": "integer",
349                    "example": 0
350                  },
351                  "KEY_VALUE_STORE_WRITES": {
352                    "type": "integer",
353                    "example": 1
354                  },
355                  "KEY_VALUE_STORE_LISTS": {
356                    "type": "integer",
357                    "example": 0
358                  },
359                  "REQUEST_QUEUE_READS": {
360                    "type": "integer",
361                    "example": 0
362                  },
363                  "REQUEST_QUEUE_WRITES": {
364                    "type": "integer",
365                    "example": 0
366                  },
367                  "DATA_TRANSFER_INTERNAL_GBYTES": {
368                    "type": "integer",
369                    "example": 0
370                  },
371                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
372                    "type": "integer",
373                    "example": 0
374                  },
375                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
376                    "type": "integer",
377                    "example": 0
378                  },
379                  "PROXY_SERPS": {
380                    "type": "integer",
381                    "example": 0
382                  }
383                }
384              },
385              "usageTotalUsd": {
386                "type": "number",
387                "example": 0.00005
388              },
389              "usageUsd": {
390                "type": "object",
391                "properties": {
392                  "ACTOR_COMPUTE_UNITS": {
393                    "type": "integer",
394                    "example": 0
395                  },
396                  "DATASET_READS": {
397                    "type": "integer",
398                    "example": 0
399                  },
400                  "DATASET_WRITES": {
401                    "type": "integer",
402                    "example": 0
403                  },
404                  "KEY_VALUE_STORE_READS": {
405                    "type": "integer",
406                    "example": 0
407                  },
408                  "KEY_VALUE_STORE_WRITES": {
409                    "type": "number",
410                    "example": 0.00005
411                  },
412                  "KEY_VALUE_STORE_LISTS": {
413                    "type": "integer",
414                    "example": 0
415                  },
416                  "REQUEST_QUEUE_READS": {
417                    "type": "integer",
418                    "example": 0
419                  },
420                  "REQUEST_QUEUE_WRITES": {
421                    "type": "integer",
422                    "example": 0
423                  },
424                  "DATA_TRANSFER_INTERNAL_GBYTES": {
425                    "type": "integer",
426                    "example": 0
427                  },
428                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
429                    "type": "integer",
430                    "example": 0
431                  },
432                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
433                    "type": "integer",
434                    "example": 0
435                  },
436                  "PROXY_SERPS": {
437                    "type": "integer",
438                    "example": 0
439                  }
440                }
441              }
442            }
443          }
444        }
445      }
446    }
447  }
448}

šŸ’¬ TikTok Comments Scraper OpenAPI definition

OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.

OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.

By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.

You can download the OpenAPI definitions for TikTok Comments Scraper from the options below:

If youā€™d like to learn more about how OpenAPI powers GPTs, read our blog post.

You can also check out our other API clients:

Pricing

Pricing model

Pay per resultĀ 

This Actor isĀ paid per result. You are not charged for the Apify platform usage, but only a fixed price for each dataset of 1,000 items in the Actor outputs.

Price per 1,000 items

$1.00