{
  "data": {
    "id": "YK6dbdzXkIGVcYw9b",
    "actId": "ZMVN9kj26FcmbEMKq",
    "userId": "9Um4NEFR7z42j35AD",
    "startedAt": "2026-10-29T17:58:07.304Z",
    "finishedAt": "2026-10-29T17:58:15.652Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 8131,
      "runTimeSecs": 8.131,
      "computeUnits": 0.009034444444444444,
      "imageSizeBytes": 544909312
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"TikTok Comments Scraper input\",\n  \"description\": \"Collect public comments from one or more known TikTok posts.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"startUrls\": {\n      \"title\": \"TikTok post URLs or IDs\",\n      \"description\": \"Add 1–100 public TikTok video or photo/carousel URLs, or numeric post IDs. Equivalent inputs are collected once. Short links are not supported yet.\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"https://www.tiktok.com/@zachking/video/7631200623693729038\"\n      ],\n      \"minItems\": 1,\n      \"maxItems\": 100\n    },\n    \"maxCommentsPerVideo\": {\n      \"title\": \"Top-level comments per post\",\n      \"description\": \"Save up to this many unique top-level comments from each post. Enter any positive whole number. If left blank, the Actor uses 100. Replies do not count toward this limit. Larger values can increase runtime and cost.\",\n      \"type\": \"integer\",\n      \"default\": 100,\n      \"minimum\": 1,\n      \"editor\": \"number\"\n    },\n    \"includeReplies\": {\n      \"title\": \"Include replies\",\n      \"description\": \"Also save public replies as separate billable rows. Replies increase runtime and cost.\",\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"maxRepliesPerComment\": {\n      \"title\": \"Replies per top-level comment\",\n      \"description\": \"Maximum replies saved for each top-level comment when replies are enabled. Range: 1–100. This setting is ignored when replies are off.\",\n      \"type\": \"integer\",\n      \"default\": 10,\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"editor\": \"number\"\n    }\n  },\n  \"required\": [\n    \"startUrls\"\n  ]\n}",
    "readme": "# TikTok Comments Scraper\n\n## 💬 What does TikTok Comments Scraper do?\n\nTikTok Comments Scraper is a simple, fast way to collect public TikTok comments\nand replies from known video and photo posts. Paste full post URLs or numeric\npost IDs and get clean, structured JSON or CSV with one analysis-ready row for\nevery saved comment or reply.\n\nUse it to collect large comment datasets for brand monitoring, social\nlistening, creator research, thesis data collection, sentiment analysis, AI,\nspreadsheets, warehouses, and automated monitoring. The structured output is\neasy to analyze and includes stable post and comment IDs, comment text, public\nauthor details, timestamps, likes, language, reply links, and visible creator\nsignals.\n\nThe Actor uses logged-out public TikTok data. It does not need your TikTok\naccount, cookies, API key, or copied browser session. It does not access private\nposts or bypass access controls.\n\nWith TikTok Comments Scraper, you can:\n\n- 📣 Study public reactions to brands, products, campaigns, and creators.\n- 🔎 Find the words, questions, and topics audiences use in real comments.\n- 🧠 Build datasets for sentiment analysis, topic modeling, and AI workflows.\n- 🧑‍🔬 Collect structured public comments for academic and market research.\n- 💬 Preserve reply threads with stable parent and reply IDs.\n- 🖼️ Collect comments from both TikTok video and photo/carousel posts.\n- 📊 Export results as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.\n- 🔁 Run scheduled jobs through the Apify API, SDKs, webhooks, and integrations.\n\n## 📦 What TikTok comment data can I extract?\n\nEach default-dataset row represents one real public TikTok comment or reply.\nReplies are separate rows, which keeps CSV, SQL, and per-row billing simple.\n\n| Data group         | Main fields                                                                                       |\n| ------------------ | ------------------------------------------------------------------------------------------------- |\n| 🔗 Post identity   | `inputUrl`, `postUrl`, `postId`                                                                   |\n| 💬 Comment         | `commentId`, `text`, `language`, `createdAt`, `likesCount`                                        |\n| 🧵 Reply thread    | `parentCommentId`, `replyToCommentId`, `isReply`, `replyDepth`, `replyCount`                      |\n| 👤 Public author   | `authorId`, `authorHandle`, `authorDisplayName`, `authorUrl`, `authorAvatarUrl`, `authorVerified` |\n| ❤️ Creator signals | `isPinned`, `isHeartedByCreator`                                                                  |\n| 📌 Collection      | `commentIndex`, `replyIndex`, `status`, `scrapedAt`                                               |\n\nPublic values that TikTok does not expose stay `null`. Missing values are not\nguessed or replaced with fake zeroes.\n\n## ✨ Why use this Actor?\n\n- ✅ **Analysis-ready rows:** one stable shape for both comments and replies.\n- 🪄 **Simple setup:** paste post URLs, choose a limit, and start the run. No\n  code is required.\n- 🆔 **Strict post identity:** every saved row is checked against the requested\n  TikTok post ID.\n- 🧹 **Run-wide deduplication:** equivalent post inputs and repeated comment IDs\n  are collected once.\n- 🧵 **Valid reply links:** replies carry their top-level parent ID so you can\n  rebuild each thread.\n- 🖼️ **Video and carousel support:** use full `/video/` and `/photo/` URLs.\n- 🚦 **Honest empty results:** invalid, unsupported, unavailable, and\n  no-public-comment inputs appear in the run summary instead of becoming\n  charged fake rows.\n- 🎛️ **Clear limits:** caps apply per post, replies have their own cap, and the\n  summary explains whether the Actor reached a cap or exhausted public rows.\n- 💸 **Clear billing:** one saved comment or reply is one result. Platform usage\n  is included.\n- 🔒 **Public-data boundary:** no user login, cookies, or private TikTok data.\n\nIn a fixed July 2026 production test, the Actor saved 1,000 unique comments\nfrom 10 public posts in 46.9 seconds. The test produced no wrong-post rows and\nno output duplicates. Live speed and available comment volume can vary by post\nand over time.\n\n## ⚙️ Can I use this Actor through an API?\n\nYes. Run TikTok Comments Scraper manually in Apify Console or connect it to:\n\n- Apify API\n- Python SDK\n- JavaScript SDK\n- Webhooks\n- Scheduled runs\n- Make, Zapier, n8n, Google Sheets, and other Apify integrations\n\nThis makes the Actor useful for repeatable research, dashboards, data\nwarehouses, AI pipelines, and monitoring jobs.\n\n### 🔌 API example\n\nStart a run with the Apify API. Keep your token in an environment variable or\nsecret store; do not commit it to source code.\n\n```bash\ncurl -X POST \\\n  \"https://api.apify.com/v2/acts/chronometrica~tiktok-comments-scraper/runs?token=$APIFY_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"startUrls\": [\"https://www.tiktok.com/@zachking/video/7631200623693729038\"],\n    \"maxCommentsPerVideo\": 100,\n    \"includeReplies\": false,\n    \"maxRepliesPerComment\": 10\n  }'\n```\n\nUse the returned run ID to check status, download dataset items, or connect a\nwebhook. The same input works with the Apify JavaScript and Python clients.\n\n## 🎯 Why scrape TikTok comments?\n\n| Use case               | How the data helps                                                    |\n| ---------------------- | --------------------------------------------------------------------- |\n| 📣 Brand monitoring    | Learn how audiences react to campaigns and products.                  |\n| 🕵️ Competitor research | See what people praise, dislike, and ask competitors.                 |\n| 🤝 Creator research    | Review audience quality and public reactions before a partnership.    |\n| 🧠 Sentiment datasets  | Supply clean text for your own sentiment or topic model.              |\n| 🧑‍🔬 Academic research   | Collect structured public discussion for reproducible analysis.       |\n| 🔁 Ongoing monitoring  | Schedule the same known posts and compare public reactions over time. |\n\nThe Actor supplies public source data. It does not add automatic sentiment\nlabels or make claims about a person's intent.\n\n## 💵 Pricing\n\nTikTok Comments Scraper uses pay-per-result pricing. One result means one\nsuccessful public comment or reply written to the default dataset.\n\n| Apify plan | Price per 1,000 comments or replies |\n| ---------- | ----------------------------------: |\n| Free       |                               $1.00 |\n| Starter    |                               $0.80 |\n| Scale      |                               $0.60 |\n| Business   |                               $0.50 |\n\nPlatform usage is included. There is no start fee and no minimum run charge.\nInvalid inputs, unsupported URLs, unavailable posts, empty public results, and\nduplicate inputs do not create result rows and are not charged as results.\n\nUse `maxCommentsPerVideo`, `includeReplies`, and `maxRepliesPerComment` to\ncontrol result volume before a run. Replies are additional result rows.\n\nExample result charges:\n\n| Saved rows |   Free | Business |\n| ---------: | -----: | -------: |\n|        100 |  $0.10 |    $0.05 |\n|      1,000 |  $1.00 |    $0.50 |\n|     10,000 | $10.00 |    $5.00 |\n\n## 🚀 How do I use TikTok Comments Scraper?\n\n1. Open **TikTok Comments Scraper** in Apify Console.\n2. Paste one or more full TikTok video or photo post URLs, or numeric post IDs.\n3. Choose the maximum number of top-level comments per post.\n4. Turn on replies only if you need them, then set the reply cap.\n5. Click **Start**.\n6. Open **Output** to inspect the dataset and run summary.\n7. Download the data or send it to another tool through an integration.\n\n## ⬇️ Input\n\n```json\n{\n    \"startUrls\": [\"https://www.tiktok.com/@zachking/video/7631200623693729038\"],\n    \"maxCommentsPerVideo\": 100,\n    \"includeReplies\": false,\n    \"maxRepliesPerComment\": 10\n}\n```\n\n### 🔗 Supported post inputs\n\n- Full `https://www.tiktok.com/@user/video/POST_ID` URLs\n- Full `https://www.tiktok.com/@user/photo/POST_ID` URLs\n- `http` or `https`\n- `www`, non-`www`, and mobile TikTok hosts\n- Full URLs copied without `http://` or `https://`\n- Full URLs with query parameters\n- Numeric TikTok post IDs\n\nEquivalent inputs for the same post are collected once. TikTok short links\nsuch as `vm.tiktok.com` and `vt.tiktok.com` are not supported yet. Resolve them\nto a full post URL before running the Actor.\n\n### 🎛️ Input settings\n\n| Setting                | What it controls                                                                                                                   |\n| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |\n| `startUrls`            | Add 1–100 public TikTok video or photo URLs, or numeric post IDs.                                                                  |\n| `maxCommentsPerVideo`  | Choose any positive whole number as the top-level comment limit for each post. Default: 100. Replies do not count toward this cap. |\n| `includeReplies`       | Save public replies as separate rows. Default: off. Turning it on can increase runtime and cost.                                   |\n| `maxRepliesPerComment` | Save 1–100 replies under each saved top-level comment when replies are enabled. Default: 10.                                       |\n\n## ⬆️ Output sample\n\n```json\n{\n    \"inputIndex\": 0,\n    \"inputUrl\": \"https://www.tiktok.com/@example/video/7631200623693729038\",\n    \"platform\": \"tiktok\",\n    \"postUrl\": \"https://www.tiktok.com/@example/video/7631200623693729038\",\n    \"postId\": \"7631200623693729038\",\n    \"commentId\": \"7600000000000000001\",\n    \"parentCommentId\": null,\n    \"replyToCommentId\": null,\n    \"isReply\": false,\n    \"replyDepth\": 0,\n    \"commentIndex\": 0,\n    \"replyIndex\": null,\n    \"text\": \"Example public comment\",\n    \"language\": \"en\",\n    \"createdAt\": \"2026-07-12T18:30:00.000Z\",\n    \"createTime\": 1783881000,\n    \"likesCount\": 42,\n    \"replyCount\": 3,\n    \"authorId\": \"7000000000000000001\",\n    \"authorHandle\": \"example_user\",\n    \"authorDisplayName\": \"Example User\",\n    \"authorUrl\": \"https://www.tiktok.com/@example_user\",\n    \"authorAvatarUrl\": \"https://example.com/avatar.jpeg\",\n    \"authorVerified\": false,\n    \"isPinned\": false,\n    \"isHeartedByCreator\": false,\n    \"status\": \"ok\",\n    \"scrapedAt\": \"2026-07-12T22:00:00.000Z\"\n}\n```\n\nEvery dataset row has `status: \"ok\"`. Inputs that do not produce a real public\ncomment row are explained in the `OUTPUT` run summary instead.\n\n### 🧵 Comment and reply fields\n\n- `commentId` is the stable row identity used for deduplication.\n- `parentCommentId` is `null` for a top-level comment. For a reply, it points to\n  the saved top-level parent row.\n- `replyToCommentId` identifies the directly replied-to comment when TikTok\n  exposes it.\n- `commentIndex` and `replyIndex` are zero-based saved positions, not TikTok\n  relevance scores.\n- `replyCount` is the public reply total for a top-level comment. It is `null`\n  on reply rows because it is not applicable there.\n- `createdAt` and `createTime` describe when TikTok says the comment was\n  created. `scrapedAt` describes when this Actor collected the row.\n- `isPinned`, `isHeartedByCreator`, and `authorVerified` stay `null` if TikTok\n  does not expose the public flag. They are not guessed as `false`.\n\n## 🧾 Run summary\n\nThe `OUTPUT` record helps you check the whole run. It includes:\n\n- inputs received and unique posts planned;\n- duplicate post inputs skipped;\n- posts attempted and posts with rows;\n- top-level comments and replies written;\n- candidates seen and duplicate comments skipped;\n- public outcome and stop-reason counts;\n- safe details for inputs that did not produce rows;\n- request, retry, and pagination totals.\n\n| Input outcome            | Meaning                                                            |            Result charge |\n| ------------------------ | ------------------------------------------------------------------ | -----------------------: |\n| `ok`                     | One or more public comment rows were saved.                        | One charge per saved row |\n| `no_public_comments`     | The public post resolved, but TikTok returned no public comments.  |                     None |\n| `deleted_or_unavailable` | The post could not be validated as publicly available.             |                     None |\n| `private`                | The post was not available to logged-out public viewers.           |                     None |\n| `blocked_or_challenged`  | TikTok did not expose public comments for that request.            |                     None |\n| `invalid_input`          | The input was not a TikTok post URL or numeric post ID.            |                     None |\n| `unsupported_url`        | The URL was TikTok-related but outside the supported post formats. |                     None |\n| `failed` or `partial`    | A temporary request stopped all or part of the post collection.    |          Saved rows only |\n\nIf a post produces no rows, check `failedInputDetails` in `OUTPUT`. It keeps the\ninput, post ID when available, outcome, plain-language reason, and whether a\nretry may help. The Actor does not hide an empty result behind a successful\ndataset row.\n\n## 🔒 Public-data boundary\n\nTikTok Comments Scraper uses logged-out public TikTok surfaces only.\n\nIt does not:\n\n- request your TikTok username or password;\n- use your account, cookies, or copied browser session;\n- collect private or followers-only posts;\n- solve access challenges or bypass login controls;\n- discover posts from profiles, keywords, or hashtags;\n- download TikTok videos or photos;\n- promise every comment shown by TikTok's displayed total.\n\n## ⚠️ Limits and interpretation\n\n- TikTok decides which comments and replies are visible to logged-out public\n  viewers.\n- Deleted, hidden, filtered, region-limited, or moderated comments may not be\n  available.\n- A displayed TikTok comment total can be higher than the rows available from\n  the public continuation source.\n- `maxCommentsPerVideo` and `maxRepliesPerComment` are hard saved-row caps, not\n  promises that every post has that much public inventory.\n- Comment order follows the public source order. It is not a custom relevance,\n  sentiment, or most-liked ranking.\n- Likes, replies, author details, pins, hearts, and public availability can\n  change between runs.\n- Short TikTok share links are not supported yet.\n\n## ❓ FAQ\n\n### Does this Actor need a TikTok API key or login?\n\nNo. It uses logged-out public TikTok data and does not need your account,\ncookies, or API key.\n\n### Does it support TikTok photo and carousel posts?\n\nYes. Paste the full `/photo/POST_ID` URL. Comments and replies use the same\ndataset shape as video-post comments.\n\n### Are replies charged?\n\nYes. Each successfully saved reply is its own dataset row and result. Leave\n`includeReplies` off when you only need top-level comments.\n\n### Why did I receive fewer comments than the displayed TikTok total?\n\nTikTok's displayed total and its logged-out public continuation inventory can\ndiffer. The run summary reports whether the Actor reached your cap or exhausted\nthe available public source.\n\n### How does deduplication work?\n\nEquivalent URLs and IDs for the same post are collected once per run. Saved\nrows are deduplicated by TikTok's stable comment ID.\n\n### Can it collect private posts or comments that require login?\n\nNo. Private, account-only, and otherwise unavailable data is outside the\nActor's public-data boundary.\n\n## 🏆 Best practices\n\n- 🎯 Start with 50–100 comments while testing a new workflow.\n- 💬 Turn on replies only when conversation threads matter to your analysis.\n- 🔗 Use full video or photo URLs instead of TikTok short links.\n- 🧾 Check `OUTPUT` before treating a small dataset as a failure.\n- 🆔 Join and deduplicate downstream work with `postId` and `commentId`.\n- 🔁 Schedule repeated runs when you need to observe public comment changes\n  over time.\n\n## 🛟 Support\n\nFor help, include the Apify run ID, one example input URL or post ID, what you\nexpected, and the status shown in `OUTPUT`. Do not send TikTok passwords,\ncookies, session data, or private links.\n\n## ⚖️ Responsible use\n\nThis Actor collects data that TikTok exposes to logged-out public viewers at\nrun time. You are responsible for using the data lawfully and for following\napplicable privacy, data-protection, research, and platform rules. Avoid using\npublic comments to harass people, infer sensitive traits, or make automated\nhigh-impact decisions about individuals.\n\n## 🔗 Related social media scrapers\n\nContinue the same workflow on this platform or compare public data across\nplatforms.\n\n### Continue on TikTok\n\n- [TikTok Profile Scraper](https://apify.com/chronometrica/tiktok-channel-scraper)\n  — collect public creator details, links, and audience stats.\n- [TikTok Search Scraper](https://apify.com/chronometrica/tiktok-search-scraper)\n  — find public videos, creators, and metrics by keyword.\n- [TikTok Metrics Scraper](https://apify.com/chronometrica/tiktok-metrics-scraper)\n  — collect public video, profile, engagement, hashtag, and music data.\n- [TikTok Transcript Scraper](https://apify.com/chronometrica/tiktok-transcript-scraper)\n  — extract public caption text and timestamped segments.\n\n### Compare comments across platforms\n\n- [Facebook Comments Scraper](https://apify.com/chronometrica/facebook-comments-scraper)\n  — collect public comments, replies, authors, dates, and reactions.\n- [Instagram Comments Scraper](https://apify.com/chronometrica/instagram-comments-scraper)\n  — collect public comments, authors, dates, likes, and reply counts.\n- [YouTube Comments Scraper](https://apify.com/chronometrica/youtube-comments-scraper)\n  — collect public comments, replies, authors, likes, pins, and creator\n  hearts.\n- [Reddit Comments Scraper](https://apify.com/chronometrica/reddit-comments-scraper)\n  — collect public thread comments, replies, authors, scores, and dates.\n- [Snapchat Comments Scraper](https://apify.com/chronometrica/snapchat-comments-scraper)\n  — collect public comments and replies from Snapchat Spotlight posts.\n- [LinkedIn Comments Scraper](https://apify.com/chronometrica/linkedin-comments-scraper)\n  — collect public comments, replies, authors, dates, and reactions.\n",
    "actorDefinition": {
      "$schema": "https://apify.com/schemas/v1/actor.ide.json",
      "actorSpecification": 1,
      "name": "tiktok-comments-scraper",
      "title": "TikTok Comments Scraper",
      "description": "A simple, fast TikTok comment scraper for public video and photo posts. Collect comments and replies in clean JSON or CSV with text, likes, language, timestamps, authors, and thread IDs. Built for brand monitoring, sentiment analysis, creator research, and AI. Pay only for saved results.",
      "seoTitle": "TikTok Comments Scraper | Comments & Replies",
      "seoDescription": "Extract TikTok comments and replies from video and photo posts. Export clean JSON or CSV with text, likes, authors, timestamps, and thread IDs. No login.",
      "categories": [
        "SOCIAL_MEDIA",
        "AGENTS",
        "AUTOMATION"
      ],
      "version": "0.1",
      "buildTag": "latest",
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 3600,
        "memoryMbytes": 512
      },
      "exampleRunInput": {
        "contentType": "application/json; charset=utf-8",
        "body": "{\n    \"startUrls\": [\"https://www.tiktok.com/@zachking/video/7631200623693729038\"],\n    \"maxCommentsPerVideo\": 100\n}"
      },
      "input": {
        "title": "TikTok Comments Scraper input",
        "description": "Collect public comments from one or more known TikTok posts.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "startUrls": {
            "title": "TikTok post URLs or IDs",
            "description": "Add 1–100 public TikTok video or photo/carousel URLs, or numeric post IDs. Equivalent inputs are collected once. Short links are not supported yet.",
            "type": "array",
            "editor": "stringList",
            "prefill": [
              "https://www.tiktok.com/@zachking/video/7631200623693729038"
            ],
            "minItems": 1,
            "maxItems": 100
          },
          "maxCommentsPerVideo": {
            "title": "Top-level comments per post",
            "description": "Save up to this many unique top-level comments from each post. Enter any positive whole number. If left blank, the Actor uses 100. Replies do not count toward this limit. Larger values can increase runtime and cost.",
            "type": "integer",
            "default": 100,
            "minimum": 1,
            "editor": "number"
          },
          "includeReplies": {
            "title": "Include replies",
            "description": "Also save public replies as separate billable rows. Replies increase runtime and cost.",
            "type": "boolean",
            "default": false
          },
          "maxRepliesPerComment": {
            "title": "Replies per top-level comment",
            "description": "Maximum replies saved for each top-level comment when replies are enabled. Range: 1–100. This setting is ignored when replies are off.",
            "type": "integer",
            "default": 10,
            "minimum": 1,
            "maximum": 100,
            "editor": "number"
          }
        },
        "required": [
          "startUrls"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "TikTok Comments Scraper output",
        "description": "Comment and reply rows are stored in the default dataset. OUTPUT contains run, failure, cap, and pagination accounting.",
        "properties": {
          "comments": {
            "type": "string",
            "title": "Comments",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "summary": {
            "type": "string",
            "title": "Run summary",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records/OUTPUT"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "inputIndex": {
                "type": "integer",
                "title": "Input Position",
                "description": "Zero-based position of the original input."
              },
              "inputUrl": {
                "type": "string",
                "title": "Original Input",
                "description": "Original URL or post ID supplied by the user."
              },
              "platform": {
                "type": "string",
                "title": "Platform",
                "description": "Source platform. Always tiktok."
              },
              "postUrl": {
                "type": "string",
                "title": "TikTok Post URL",
                "description": "Normalized TikTok post URL for the requested post identity."
              },
              "postId": {
                "type": "string",
                "title": "TikTok Post ID",
                "description": "Stable TikTok post ID that anchors this comment."
              },
              "commentId": {
                "type": "string",
                "title": "Comment ID",
                "description": "Stable TikTok comment ID used for dedupe."
              },
              "parentCommentId": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Parent Comment ID",
                "description": "Top-level parent comment ID for a reply; otherwise null."
              },
              "replyToCommentId": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Replied-to Comment ID",
                "description": "Direct replied-to comment ID when public; otherwise null."
              },
              "isReply": {
                "type": "boolean",
                "title": "Reply",
                "description": "True for a reply row; false for a top-level comment row."
              },
              "replyDepth": {
                "type": "integer",
                "title": "Reply Depth",
                "description": "Thread depth: 0 for a top-level comment and 1 for a reply."
              },
              "commentIndex": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Collected Comment Position",
                "description": "Zero-based saved position among top-level comments for this post."
              },
              "replyIndex": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Collected Reply Position",
                "description": "Zero-based saved position among replies for the same parent."
              },
              "text": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Comment Text",
                "description": "Public TikTok comment text."
              },
              "language": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Comment Language",
                "description": "Public TikTok comment language code when available."
              },
              "createdAt": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "title": "Created At",
                "description": "Comment creation time from TikTok in ISO 8601 format."
              },
              "createTime": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Created Time (Unix)",
                "description": "Public Unix timestamp from TikTok."
              },
              "likesCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Likes",
                "description": "Public likes on this comment when TikTok exposes the count."
              },
              "replyCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Public Reply Count",
                "description": "Public reply total for a top-level comment; null for a reply row."
              },
              "authorId": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Author ID",
                "description": "Public TikTok author ID when available."
              },
              "authorHandle": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Author Handle",
                "description": "Public TikTok author handle without the @ prefix."
              },
              "authorDisplayName": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Author",
                "description": "Public display name of the comment author."
              },
              "authorUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Author URL",
                "description": "Public TikTok profile URL built from the author handle."
              },
              "authorAvatarUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Author Avatar",
                "description": "Public author avatar URL with tracking query parameters removed."
              },
              "authorVerified": {
                "type": [
                  "boolean",
                  "null"
                ],
                "title": "Verified Author",
                "description": "Public TikTok verification flag when available."
              },
              "isPinned": {
                "type": [
                  "boolean",
                  "null"
                ],
                "title": "Pinned by Creator",
                "description": "Whether TikTok marks the comment as pinned by the post creator."
              },
              "isHeartedByCreator": {
                "type": [
                  "boolean",
                  "null"
                ],
                "title": "Hearted by Creator",
                "description": "Whether TikTok marks the comment as liked by the post creator."
              },
              "status": {
                "type": "string",
                "title": "Row Status",
                "description": "Row outcome. Saved comment and reply rows use ok."
              },
              "scrapedAt": {
                "type": "string",
                "format": "date-time",
                "title": "Collected At",
                "description": "Time this row was collected by the Actor."
              }
            },
            "required": [
              "inputIndex",
              "inputUrl",
              "platform",
              "postUrl",
              "postId",
              "commentId",
              "isReply",
              "replyDepth",
              "status",
              "scrapedAt"
            ]
          },
          "views": {
            "overview": {
              "title": "TikTok comments",
              "description": "One row per public TikTok comment or reply.",
              "transformation": {
                "fields": [
                  "inputIndex",
                  "inputUrl",
                  "platform",
                  "postUrl",
                  "postId",
                  "commentId",
                  "parentCommentId",
                  "replyToCommentId",
                  "isReply",
                  "replyDepth",
                  "commentIndex",
                  "replyIndex",
                  "text",
                  "language",
                  "createdAt",
                  "createTime",
                  "likesCount",
                  "replyCount",
                  "authorId",
                  "authorHandle",
                  "authorDisplayName",
                  "authorUrl",
                  "authorAvatarUrl",
                  "authorVerified",
                  "isPinned",
                  "isHeartedByCreator",
                  "status",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "inputIndex": {
                    "label": "Input Position",
                    "format": "number"
                  },
                  "inputUrl": {
                    "label": "Original Input",
                    "format": "text"
                  },
                  "platform": {
                    "label": "Platform",
                    "format": "text"
                  },
                  "postUrl": {
                    "label": "TikTok Post URL",
                    "format": "text"
                  },
                  "postId": {
                    "label": "TikTok Post ID",
                    "format": "text"
                  },
                  "commentId": {
                    "label": "Comment ID",
                    "format": "text"
                  },
                  "parentCommentId": {
                    "label": "Parent Comment ID",
                    "format": "text"
                  },
                  "replyToCommentId": {
                    "label": "Replied-to Comment ID",
                    "format": "text"
                  },
                  "isReply": {
                    "label": "Reply",
                    "format": "boolean"
                  },
                  "replyDepth": {
                    "label": "Reply Depth",
                    "format": "number"
                  },
                  "commentIndex": {
                    "label": "Collected Comment Position",
                    "format": "number"
                  },
                  "replyIndex": {
                    "label": "Collected Reply Position",
                    "format": "number"
                  },
                  "text": {
                    "label": "Comment Text",
                    "format": "text"
                  },
                  "language": {
                    "label": "Comment Language",
                    "format": "text"
                  },
                  "createdAt": {
                    "label": "Created At",
                    "format": "date"
                  },
                  "createTime": {
                    "label": "Created Time (Unix)",
                    "format": "number"
                  },
                  "likesCount": {
                    "label": "Likes",
                    "format": "number"
                  },
                  "replyCount": {
                    "label": "Public Reply Count",
                    "format": "number"
                  },
                  "authorId": {
                    "label": "Author ID",
                    "format": "text"
                  },
                  "authorHandle": {
                    "label": "Author Handle",
                    "format": "text"
                  },
                  "authorDisplayName": {
                    "label": "Author",
                    "format": "text"
                  },
                  "authorUrl": {
                    "label": "Author URL",
                    "format": "link"
                  },
                  "authorAvatarUrl": {
                    "label": "Author Avatar",
                    "format": "link"
                  },
                  "authorVerified": {
                    "label": "Verified Author",
                    "format": "boolean"
                  },
                  "isPinned": {
                    "label": "Pinned by Creator",
                    "format": "boolean"
                  },
                  "isHeartedByCreator": {
                    "label": "Hearted by Creator",
                    "format": "boolean"
                  },
                  "status": {
                    "label": "Row Status",
                    "format": "text"
                  },
                  "scrapedAt": {
                    "label": "Collected At",
                    "format": "date"
                  }
                }
              }
            }
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "readme": "# TikTok Comments Scraper\n\n## 💬 What does TikTok Comments Scraper do?\n\nTikTok Comments Scraper is a simple, fast way to collect public TikTok comments\nand replies from known video and photo posts. Paste full post URLs or numeric\npost IDs and get clean, structured JSON or CSV with one analysis-ready row for\nevery saved comment or reply.\n\nUse it to collect large comment datasets for brand monitoring, social\nlistening, creator research, thesis data collection, sentiment analysis, AI,\nspreadsheets, warehouses, and automated monitoring. The structured output is\neasy to analyze and includes stable post and comment IDs, comment text, public\nauthor details, timestamps, likes, language, reply links, and visible creator\nsignals.\n\nThe Actor uses logged-out public TikTok data. It does not need your TikTok\naccount, cookies, API key, or copied browser session. It does not access private\nposts or bypass access controls.\n\nWith TikTok Comments Scraper, you can:\n\n- 📣 Study public reactions to brands, products, campaigns, and creators.\n- 🔎 Find the words, questions, and topics audiences use in real comments.\n- 🧠 Build datasets for sentiment analysis, topic modeling, and AI workflows.\n- 🧑‍🔬 Collect structured public comments for academic and market research.\n- 💬 Preserve reply threads with stable parent and reply IDs.\n- 🖼️ Collect comments from both TikTok video and photo/carousel posts.\n- 📊 Export results as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.\n- 🔁 Run scheduled jobs through the Apify API, SDKs, webhooks, and integrations.\n\n## 📦 What TikTok comment data can I extract?\n\nEach default-dataset row represents one real public TikTok comment or reply.\nReplies are separate rows, which keeps CSV, SQL, and per-row billing simple.\n\n| Data group         | Main fields                                                                                       |\n| ------------------ | ------------------------------------------------------------------------------------------------- |\n| 🔗 Post identity   | `inputUrl`, `postUrl`, `postId`                                                                   |\n| 💬 Comment         | `commentId`, `text`, `language`, `createdAt`, `likesCount`                                        |\n| 🧵 Reply thread    | `parentCommentId`, `replyToCommentId`, `isReply`, `replyDepth`, `replyCount`                      |\n| 👤 Public author   | `authorId`, `authorHandle`, `authorDisplayName`, `authorUrl`, `authorAvatarUrl`, `authorVerified` |\n| ❤️ Creator signals | `isPinned`, `isHeartedByCreator`                                                                  |\n| 📌 Collection      | `commentIndex`, `replyIndex`, `status`, `scrapedAt`                                               |\n\nPublic values that TikTok does not expose stay `null`. Missing values are not\nguessed or replaced with fake zeroes.\n\n## ✨ Why use this Actor?\n\n- ✅ **Analysis-ready rows:** one stable shape for both comments and replies.\n- 🪄 **Simple setup:** paste post URLs, choose a limit, and start the run. No\n  code is required.\n- 🆔 **Strict post identity:** every saved row is checked against the requested\n  TikTok post ID.\n- 🧹 **Run-wide deduplication:** equivalent post inputs and repeated comment IDs\n  are collected once.\n- 🧵 **Valid reply links:** replies carry their top-level parent ID so you can\n  rebuild each thread.\n- 🖼️ **Video and carousel support:** use full `/video/` and `/photo/` URLs.\n- 🚦 **Honest empty results:** invalid, unsupported, unavailable, and\n  no-public-comment inputs appear in the run summary instead of becoming\n  charged fake rows.\n- 🎛️ **Clear limits:** caps apply per post, replies have their own cap, and the\n  summary explains whether the Actor reached a cap or exhausted public rows.\n- 💸 **Clear billing:** one saved comment or reply is one result. Platform usage\n  is included.\n- 🔒 **Public-data boundary:** no user login, cookies, or private TikTok data.\n\nIn a fixed July 2026 production test, the Actor saved 1,000 unique comments\nfrom 10 public posts in 46.9 seconds. The test produced no wrong-post rows and\nno output duplicates. Live speed and available comment volume can vary by post\nand over time.\n\n## ⚙️ Can I use this Actor through an API?\n\nYes. Run TikTok Comments Scraper manually in Apify Console or connect it to:\n\n- Apify API\n- Python SDK\n- JavaScript SDK\n- Webhooks\n- Scheduled runs\n- Make, Zapier, n8n, Google Sheets, and other Apify integrations\n\nThis makes the Actor useful for repeatable research, dashboards, data\nwarehouses, AI pipelines, and monitoring jobs.\n\n### 🔌 API example\n\nStart a run with the Apify API. Keep your token in an environment variable or\nsecret store; do not commit it to source code.\n\n```bash\ncurl -X POST \\\n  \"https://api.apify.com/v2/acts/chronometrica~tiktok-comments-scraper/runs?token=$APIFY_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"startUrls\": [\"https://www.tiktok.com/@zachking/video/7631200623693729038\"],\n    \"maxCommentsPerVideo\": 100,\n    \"includeReplies\": false,\n    \"maxRepliesPerComment\": 10\n  }'\n```\n\nUse the returned run ID to check status, download dataset items, or connect a\nwebhook. The same input works with the Apify JavaScript and Python clients.\n\n## 🎯 Why scrape TikTok comments?\n\n| Use case               | How the data helps                                                    |\n| ---------------------- | --------------------------------------------------------------------- |\n| 📣 Brand monitoring    | Learn how audiences react to campaigns and products.                  |\n| 🕵️ Competitor research | See what people praise, dislike, and ask competitors.                 |\n| 🤝 Creator research    | Review audience quality and public reactions before a partnership.    |\n| 🧠 Sentiment datasets  | Supply clean text for your own sentiment or topic model.              |\n| 🧑‍🔬 Academic research   | Collect structured public discussion for reproducible analysis.       |\n| 🔁 Ongoing monitoring  | Schedule the same known posts and compare public reactions over time. |\n\nThe Actor supplies public source data. It does not add automatic sentiment\nlabels or make claims about a person's intent.\n\n## 💵 Pricing\n\nTikTok Comments Scraper uses pay-per-result pricing. One result means one\nsuccessful public comment or reply written to the default dataset.\n\n| Apify plan | Price per 1,000 comments or replies |\n| ---------- | ----------------------------------: |\n| Free       |                               $1.00 |\n| Starter    |                               $0.80 |\n| Scale      |                               $0.60 |\n| Business   |                               $0.50 |\n\nPlatform usage is included. There is no start fee and no minimum run charge.\nInvalid inputs, unsupported URLs, unavailable posts, empty public results, and\nduplicate inputs do not create result rows and are not charged as results.\n\nUse `maxCommentsPerVideo`, `includeReplies`, and `maxRepliesPerComment` to\ncontrol result volume before a run. Replies are additional result rows.\n\nExample result charges:\n\n| Saved rows |   Free | Business |\n| ---------: | -----: | -------: |\n|        100 |  $0.10 |    $0.05 |\n|      1,000 |  $1.00 |    $0.50 |\n|     10,000 | $10.00 |    $5.00 |\n\n## 🚀 How do I use TikTok Comments Scraper?\n\n1. Open **TikTok Comments Scraper** in Apify Console.\n2. Paste one or more full TikTok video or photo post URLs, or numeric post IDs.\n3. Choose the maximum number of top-level comments per post.\n4. Turn on replies only if you need them, then set the reply cap.\n5. Click **Start**.\n6. Open **Output** to inspect the dataset and run summary.\n7. Download the data or send it to another tool through an integration.\n\n## ⬇️ Input\n\n```json\n{\n    \"startUrls\": [\"https://www.tiktok.com/@zachking/video/7631200623693729038\"],\n    \"maxCommentsPerVideo\": 100,\n    \"includeReplies\": false,\n    \"maxRepliesPerComment\": 10\n}\n```\n\n### 🔗 Supported post inputs\n\n- Full `https://www.tiktok.com/@user/video/POST_ID` URLs\n- Full `https://www.tiktok.com/@user/photo/POST_ID` URLs\n- `http` or `https`\n- `www`, non-`www`, and mobile TikTok hosts\n- Full URLs copied without `http://` or `https://`\n- Full URLs with query parameters\n- Numeric TikTok post IDs\n\nEquivalent inputs for the same post are collected once. TikTok short links\nsuch as `vm.tiktok.com` and `vt.tiktok.com` are not supported yet. Resolve them\nto a full post URL before running the Actor.\n\n### 🎛️ Input settings\n\n| Setting                | What it controls                                                                                                                   |\n| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |\n| `startUrls`            | Add 1–100 public TikTok video or photo URLs, or numeric post IDs.                                                                  |\n| `maxCommentsPerVideo`  | Choose any positive whole number as the top-level comment limit for each post. Default: 100. Replies do not count toward this cap. |\n| `includeReplies`       | Save public replies as separate rows. Default: off. Turning it on can increase runtime and cost.                                   |\n| `maxRepliesPerComment` | Save 1–100 replies under each saved top-level comment when replies are enabled. Default: 10.                                       |\n\n## ⬆️ Output sample\n\n```json\n{\n    \"inputIndex\": 0,\n    \"inputUrl\": \"https://www.tiktok.com/@example/video/7631200623693729038\",\n    \"platform\": \"tiktok\",\n    \"postUrl\": \"https://www.tiktok.com/@example/video/7631200623693729038\",\n    \"postId\": \"7631200623693729038\",\n    \"commentId\": \"7600000000000000001\",\n    \"parentCommentId\": null,\n    \"replyToCommentId\": null,\n    \"isReply\": false,\n    \"replyDepth\": 0,\n    \"commentIndex\": 0,\n    \"replyIndex\": null,\n    \"text\": \"Example public comment\",\n    \"language\": \"en\",\n    \"createdAt\": \"2026-07-12T18:30:00.000Z\",\n    \"createTime\": 1783881000,\n    \"likesCount\": 42,\n    \"replyCount\": 3,\n    \"authorId\": \"7000000000000000001\",\n    \"authorHandle\": \"example_user\",\n    \"authorDisplayName\": \"Example User\",\n    \"authorUrl\": \"https://www.tiktok.com/@example_user\",\n    \"authorAvatarUrl\": \"https://example.com/avatar.jpeg\",\n    \"authorVerified\": false,\n    \"isPinned\": false,\n    \"isHeartedByCreator\": false,\n    \"status\": \"ok\",\n    \"scrapedAt\": \"2026-07-12T22:00:00.000Z\"\n}\n```\n\nEvery dataset row has `status: \"ok\"`. Inputs that do not produce a real public\ncomment row are explained in the `OUTPUT` run summary instead.\n\n### 🧵 Comment and reply fields\n\n- `commentId` is the stable row identity used for deduplication.\n- `parentCommentId` is `null` for a top-level comment. For a reply, it points to\n  the saved top-level parent row.\n- `replyToCommentId` identifies the directly replied-to comment when TikTok\n  exposes it.\n- `commentIndex` and `replyIndex` are zero-based saved positions, not TikTok\n  relevance scores.\n- `replyCount` is the public reply total for a top-level comment. It is `null`\n  on reply rows because it is not applicable there.\n- `createdAt` and `createTime` describe when TikTok says the comment was\n  created. `scrapedAt` describes when this Actor collected the row.\n- `isPinned`, `isHeartedByCreator`, and `authorVerified` stay `null` if TikTok\n  does not expose the public flag. They are not guessed as `false`.\n\n## 🧾 Run summary\n\nThe `OUTPUT` record helps you check the whole run. It includes:\n\n- inputs received and unique posts planned;\n- duplicate post inputs skipped;\n- posts attempted and posts with rows;\n- top-level comments and replies written;\n- candidates seen and duplicate comments skipped;\n- public outcome and stop-reason counts;\n- safe details for inputs that did not produce rows;\n- request, retry, and pagination totals.\n\n| Input outcome            | Meaning                                                            |            Result charge |\n| ------------------------ | ------------------------------------------------------------------ | -----------------------: |\n| `ok`                     | One or more public comment rows were saved.                        | One charge per saved row |\n| `no_public_comments`     | The public post resolved, but TikTok returned no public comments.  |                     None |\n| `deleted_or_unavailable` | The post could not be validated as publicly available.             |                     None |\n| `private`                | The post was not available to logged-out public viewers.           |                     None |\n| `blocked_or_challenged`  | TikTok did not expose public comments for that request.            |                     None |\n| `invalid_input`          | The input was not a TikTok post URL or numeric post ID.            |                     None |\n| `unsupported_url`        | The URL was TikTok-related but outside the supported post formats. |                     None |\n| `failed` or `partial`    | A temporary request stopped all or part of the post collection.    |          Saved rows only |\n\nIf a post produces no rows, check `failedInputDetails` in `OUTPUT`. It keeps the\ninput, post ID when available, outcome, plain-language reason, and whether a\nretry may help. The Actor does not hide an empty result behind a successful\ndataset row.\n\n## 🔒 Public-data boundary\n\nTikTok Comments Scraper uses logged-out public TikTok surfaces only.\n\nIt does not:\n\n- request your TikTok username or password;\n- use your account, cookies, or copied browser session;\n- collect private or followers-only posts;\n- solve access challenges or bypass login controls;\n- discover posts from profiles, keywords, or hashtags;\n- download TikTok videos or photos;\n- promise every comment shown by TikTok's displayed total.\n\n## ⚠️ Limits and interpretation\n\n- TikTok decides which comments and replies are visible to logged-out public\n  viewers.\n- Deleted, hidden, filtered, region-limited, or moderated comments may not be\n  available.\n- A displayed TikTok comment total can be higher than the rows available from\n  the public continuation source.\n- `maxCommentsPerVideo` and `maxRepliesPerComment` are hard saved-row caps, not\n  promises that every post has that much public inventory.\n- Comment order follows the public source order. It is not a custom relevance,\n  sentiment, or most-liked ranking.\n- Likes, replies, author details, pins, hearts, and public availability can\n  change between runs.\n- Short TikTok share links are not supported yet.\n\n## ❓ FAQ\n\n### Does this Actor need a TikTok API key or login?\n\nNo. It uses logged-out public TikTok data and does not need your account,\ncookies, or API key.\n\n### Does it support TikTok photo and carousel posts?\n\nYes. Paste the full `/photo/POST_ID` URL. Comments and replies use the same\ndataset shape as video-post comments.\n\n### Are replies charged?\n\nYes. Each successfully saved reply is its own dataset row and result. Leave\n`includeReplies` off when you only need top-level comments.\n\n### Why did I receive fewer comments than the displayed TikTok total?\n\nTikTok's displayed total and its logged-out public continuation inventory can\ndiffer. The run summary reports whether the Actor reached your cap or exhausted\nthe available public source.\n\n### How does deduplication work?\n\nEquivalent URLs and IDs for the same post are collected once per run. Saved\nrows are deduplicated by TikTok's stable comment ID.\n\n### Can it collect private posts or comments that require login?\n\nNo. Private, account-only, and otherwise unavailable data is outside the\nActor's public-data boundary.\n\n## 🏆 Best practices\n\n- 🎯 Start with 50–100 comments while testing a new workflow.\n- 💬 Turn on replies only when conversation threads matter to your analysis.\n- 🔗 Use full video or photo URLs instead of TikTok short links.\n- 🧾 Check `OUTPUT` before treating a small dataset as a failure.\n- 🆔 Join and deduplicate downstream work with `postId` and `commentId`.\n- 🔁 Schedule repeated runs when you need to observe public comment changes\n  over time.\n\n## 🛟 Support\n\nFor help, include the Apify run ID, one example input URL or post ID, what you\nexpected, and the status shown in `OUTPUT`. Do not send TikTok passwords,\ncookies, session data, or private links.\n\n## ⚖️ Responsible use\n\nThis Actor collects data that TikTok exposes to logged-out public viewers at\nrun time. You are responsible for using the data lawfully and for following\napplicable privacy, data-protection, research, and platform rules. Avoid using\npublic comments to harass people, infer sensitive traits, or make automated\nhigh-impact decisions about individuals.\n\n## 🔗 Related social media scrapers\n\nContinue the same workflow on this platform or compare public data across\nplatforms.\n\n### Continue on TikTok\n\n- [TikTok Profile Scraper](https://apify.com/chronometrica/tiktok-channel-scraper)\n  — collect public creator details, links, and audience stats.\n- [TikTok Search Scraper](https://apify.com/chronometrica/tiktok-search-scraper)\n  — find public videos, creators, and metrics by keyword.\n- [TikTok Metrics Scraper](https://apify.com/chronometrica/tiktok-metrics-scraper)\n  — collect public video, profile, engagement, hashtag, and music data.\n- [TikTok Transcript Scraper](https://apify.com/chronometrica/tiktok-transcript-scraper)\n  — extract public caption text and timestamped segments.\n\n### Compare comments across platforms\n\n- [Facebook Comments Scraper](https://apify.com/chronometrica/facebook-comments-scraper)\n  — collect public comments, replies, authors, dates, and reactions.\n- [Instagram Comments Scraper](https://apify.com/chronometrica/instagram-comments-scraper)\n  — collect public comments, authors, dates, likes, and reply counts.\n- [YouTube Comments Scraper](https://apify.com/chronometrica/youtube-comments-scraper)\n  — collect public comments, replies, authors, likes, pins, and creator\n  hearts.\n- [Reddit Comments Scraper](https://apify.com/chronometrica/reddit-comments-scraper)\n  — collect public thread comments, replies, authors, scores, and dates.\n- [Snapchat Comments Scraper](https://apify.com/chronometrica/snapchat-comments-scraper)\n  — collect public comments and replies from Snapchat Spotlight posts.\n- [LinkedIn Comments Scraper](https://apify.com/chronometrica/linkedin-comments-scraper)\n  — collect public comments, replies, authors, dates, and reactions.\n"
    },
    "buildNumber": "0.1.18",
    "imageDigest": "84ad930da20e9b11db31d26988c0faf31d0a143e787c55b05e682b6239ff7408",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "release-candidate",
      "versionNumber": "0.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.009034444444444444
    }
  }
}