{
  "data": {
    "id": "s2gh898TkcFQPzyyx",
    "actId": "nwRXDwL4EwAsiMcpf",
    "userId": "9Um4NEFR7z42j35AD",
    "startedAt": "2026-10-30T05:53:45.775Z",
    "finishedAt": "2026-10-30T05:53:53.844Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CI"
    },
    "stats": {
      "durationMillis": 7971,
      "runTimeSecs": 7.971,
      "computeUnits": 0.008856666666666667,
      "imageSizeBytes": 544894464
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Facebook Comments Scraper input\",\n  \"description\": \"Paste public Facebook links, choose how many results you want, and run the Actor.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"startUrls\": {\n      \"sectionCaption\": \"Facebook comments\",\n      \"sectionDescription\": \"Add Facebook links, then choose the result limit, replies, order, and optional dates.\",\n      \"title\": \"Facebook URLs\",\n      \"type\": \"array\",\n      \"description\": \"Paste 1–100 post, Reel, video, or photo links. Supported short and share links work too. Page, Group, profile, Story, and private links do not.\",\n      \"editor\": \"stringList\",\n      \"minItems\": 1,\n      \"maxItems\": 100,\n      \"prefill\": [\n        \"https://www.facebook.com/reel/1733966934399341\"\n      ],\n      \"items\": {\n        \"type\": \"string\",\n        \"minLength\": 1\n      }\n    },\n    \"maxResultsPerPost\": {\n      \"title\": \"Maximum results per URL\",\n      \"type\": \"integer\",\n      \"description\": \"The most comments and replies to save for each URL. Choose 1–10,000. Default: 500. For example, 25 URLs at 500 each can save up to 12,500 paid rows.\",\n      \"editor\": \"number\",\n      \"default\": 500,\n      \"minimum\": 1,\n      \"maximum\": 10000\n    },\n    \"includeReplies\": {\n      \"title\": \"Include replies\",\n      \"type\": \"boolean\",\n      \"description\": \"Save replies as separate paid rows. Replies count toward Maximum results per URL.\",\n      \"editor\": \"checkbox\",\n      \"default\": false\n    },\n    \"commentSortMode\": {\n      \"title\": \"Comment order\",\n      \"type\": \"string\",\n      \"description\": \"Choose the order Facebook uses. This does not change the result limit.\",\n      \"editor\": \"select\",\n      \"default\": \"all\",\n      \"enum\": [\n        \"all\",\n        \"newest\",\n        \"most_relevant\"\n      ],\n      \"enumTitles\": [\n        \"All comments\",\n        \"Newest first\",\n        \"Most relevant first\"\n      ]\n    },\n    \"commentsFrom\": {\n      \"title\": \"From date\",\n      \"type\": \"string\",\n      \"description\": \"Only save comments on or after this date. Leave empty for no start date. Comments without a public date are skipped when a date is set.\",\n      \"editor\": \"datepicker\",\n      \"dateType\": \"absolute\"\n    },\n    \"commentsUntil\": {\n      \"title\": \"To date\",\n      \"type\": \"string\",\n      \"description\": \"Only save comments on or before this date. Leave empty for no end date. Comments without a public date are skipped when a date is set.\",\n      \"editor\": \"datepicker\",\n      \"dateType\": \"absolute\"\n    },\n    \"collectAllAvailable\": {\n      \"sectionCaption\": \"Advanced\",\n      \"sectionDescription\": \"Use only when you need every available result. This can cost much more.\",\n      \"title\": \"Remove the result limit\",\n      \"type\": \"boolean\",\n      \"description\": \"Ignore the maximum above. This may cost much more. The run still stops when the public source ends, the charge limit is reached, time runs out, or the source fails.\",\n      \"editor\": \"checkbox\",\n      \"default\": false\n    }\n  },\n  \"required\": [\n    \"startUrls\"\n  ]\n}",
    "readme": "# Facebook Comments Scraper - Replies & Reactions\n\n## 💬 What does Facebook Comments Scraper do?\n\nPaste direct public Facebook post, Reel, video, Watch, photo, permalink, or\nsupported share links. Get clean public comment and reply rows with text,\nauthors, dates, reaction breakdowns, profile pictures, attachments, and thread\nlinks.\n\nUse it for audience research, brand monitoring, customer feedback, creator\nresearch, social listening, comment analysis, spreadsheets, and automated data\npipelines. Each saved result is one real public comment or reply, not a post\nsummary.\n\nThe Actor uses public, logged-out Facebook pages. It does not require a\nFacebook login, API key, cookies, or copied browser session from you. Invalid,\nduplicate, unsupported, unavailable, and confirmed zero-comment inputs do not\ncreate paid result rows.\n\nWith Facebook Comments Scraper, you can:\n\n- 💬 Collect public comments from posts, Reels, videos, Watch pages, photos,\n  permalinks, `fb.watch`, and supported share links.\n- 🧵 Rebuild reply threads with saved parent and root comment IDs.\n- ❤️ Analyze total reactions and Like, Love, Care, Haha, Wow, Sad, and Angry\n  breakdowns when Facebook exposes them.\n- ↕️ Choose All comments, Newest, or Most relevant order.\n- 📅 Keep comments inside inclusive start and end dates.\n- 🎯 Set an exact per-content result limit, or remove the numeric cap.\n- 🧹 Receive clean unique rows after equivalent URLs and repeated comment IDs\n  are removed.\n- 📦 Export JSON, JSONL, CSV, Excel, XML, RSS, or HTML, or use the Apify API,\n  SDKs, webhooks, schedules, and integrations.\n- 💸 Pay only for public comments and replies saved to the dataset.\n\n## ✨ Why use this Actor?\n\n- **Clean and useful:** one flat row for each public comment or reply.\n- **Strict identity:** every row stays tied to the requested Facebook content.\n- **Connected threads:** replies are saved only with their saved parent and\n  root comment.\n- **Exact controls:** choose order, dates, replies, and the maximum saved rows\n  for each content item.\n- **Rich public context:** get reaction types, profile pictures, attachments,\n  and parent content details when Facebook exposes them.\n- **Clear billing:** empty and failed inputs do not become charged fake rows.\n- **Honest limits:** an uncapped run can still stop at source end, charge limit,\n  timeout, or failure.\n\n## 📦 What data do I get?\n\nEach dataset row represents one real public Facebook comment or reply.\n\n| Data group          | Main fields                                                                             |\n| ------------------- | --------------------------------------------------------------------------------------- |\n| 🔗 Content identity | `inputUrl`, `postUrl`, `contentId`, `contentType`                                       |\n| 💬 Comment content  | `commentId`, `commentUrl`, `text`, `publishedAt`, `attachments`                         |\n| 🧵 Thread links     | `parentCommentId`, `rootCommentId`, `isReply`                                           |\n| 👤 Public author    | `authorId`, `authorName`, `authorUrl`, `authorProfilePictureUrl`                        |\n| ❤️ Public signals   | `reactionsCount`, `reactionCounts`, `replyCount`                                        |\n| 📝 Parent content   | Public post text, author, and publish time when exact target-bound values are available |\n| 🕐 Collection time  | `scrapedAt`                                                                             |\n\nPublic values that Facebook does not expose stay `null`. They are not guessed\nand they are not replaced with fake zeroes.\n\n## ⚙️ Can I use this Actor through an API?\n\nYes. Run Facebook Comments Scraper manually in Apify Console or use it through:\n\n- 🔌 Apify API\n- 🐍 Python SDK\n- 🟢 JavaScript SDK\n- 🪝 Webhooks\n- ⏰ Scheduled runs\n- 🧩 Apify integrations\n\n### API example\n\nKeep your Apify token in an environment variable or secret store.\n\n```bash\ncurl -X POST \\\n  \"https://api.apify.com/v2/acts/chronometrica~facebook-comments-scraper/runs?token=$APIFY_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"startUrls\": [\"https://www.facebook.com/reel/1733966934399341\"],\n    \"commentSortMode\": \"all\",\n    \"maxResultsPerPost\": 25,\n    \"collectAllAvailable\": false,\n    \"includeReplies\": false\n  }'\n```\n\n## 🎯 Why scrape Facebook comments?\n\n| Use case                  | How comment data helps                                      |\n| ------------------------- | ----------------------------------------------------------- |\n| 🔍 Audience research      | Find common questions, opinions, needs, and language.       |\n| 📣 Brand monitoring       | Track public feedback around products and campaigns.        |\n| 🧑‍🎨 Creator research       | Study public audience response and reply threads.           |\n| 💡 Content planning       | Find ideas, objections, and recurring questions.            |\n| 🤖 Sentiment and NLP      | Feed clean comment text into your own analysis workflow.    |\n| 🧱 Data pipeline building | Load stable comment and reply rows into databases and apps. |\n\nThe Actor collects source data. It does not add sentiment labels or guess a\nperson's intent.\n\n## 💵 Pricing: saved comments and replies only\n\nFacebook Comments Scraper uses pay-per-result pricing. One result means one\nunique public comment or reply saved to the default dataset. Platform usage is\nincluded.\n\n| Apify plan | Price per 1,000 saved rows |\n| ---------- | -------------------------: |\n| Free       |                      $2.15 |\n| Starter    |                      $1.70 |\n| Scale      |                      $1.45 |\n| Business   |                      $1.20 |\n\nThere is no paid row for an invalid or unsupported URL, an unavailable target,\nan explicit zero-comment target, a duplicate input, a duplicate comment, or a\nsource-deleted placeholder.\n\nUse `maxResultsPerPost`, `collectAllAvailable`, date filters, and\n`includeReplies` to control result volume. Replies are separate result rows and\ncount toward the same per-content limit.\n\n## 🚀 How do I use Facebook Comments Scraper?\n\n1. Open **Facebook Comments Scraper** in Apify Console.\n2. Add one or more known public Facebook content URLs.\n3. Choose the maximum total comment and reply rows for each content item.\n4. Turn on replies only when you need them.\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\nExample input:\n\n```json\n{\n  \"startUrls\": [\"https://www.facebook.com/reel/1733966934399341\"],\n  \"commentSortMode\": \"all\",\n  \"maxResultsPerPost\": 25,\n  \"collectAllAvailable\": false,\n  \"includeReplies\": false\n}\n```\n\n### 🔗 Supported content inputs\n\n- Facebook post URLs with numeric or `pfbid` keys\n- Reel URLs\n- Watch URLs, owner video URLs, and `video.php` URLs\n- Modern, legacy, and owner photo URLs\n- `story.php` and `permalink.php` post URLs\n- `fb.watch` short links\n- Typed `/share/p/`, `/share/v/`, and `/share/r/` links\n- `www`, `m`, `mbasic`, and `mobile` Facebook host variants\n\nEquivalent inputs that resolve to the same content or comment rows are\ncollected once in a run.\n\n### 🎛️ Settings\n\n| Setting               | What it controls                                                                                                                             |\n| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |\n| `startUrls`           | Add 1–100 public Facebook post, Reel, video, Watch, photo, permalink, or supported share URLs.                                               |\n| `maxResultsPerPost`   | Set the maximum comment and reply rows for each URL. Use 1–10,000. Default: 500.                                                             |\n| `collectAllAvailable` | Remove the result limit. The run still stops at source end, charge limit, timeout, or failure. Off by default and may greatly increase cost. |\n| `includeReplies`      | Save replies as separate paid rows. They count toward the maximum above. Off by default.                                                     |\n| `commentSortMode`     | Choose `all`, `newest`, or `most_relevant`. This changes order, not the result limit. Default: `all`.                                        |\n| `commentsFrom`        | Pick the first date to keep. Leave empty for no start date. API users may also send an ISO or relative date.                                 |\n| `commentsUntil`       | Pick the last date to keep. Leave empty for no end date. Replies need an in-range saved parent.                                              |\n\n## ⬆️ Output sample\n\n```json\n{\n  \"inputUrl\": \"https://www.facebook.com/reel/1733966934399341\",\n  \"postUrl\": \"https://www.facebook.com/reel/1733966934399341/\",\n  \"contentId\": \"1733966934399341\",\n  \"contentType\": \"reel\",\n  \"commentId\": \"1234567890123456\",\n  \"commentUrl\": \"https://www.facebook.com/reel/1733966934399341/?comment_id=1234567890123456\",\n  \"parentCommentId\": null,\n  \"rootCommentId\": \"1234567890123456\",\n  \"isReply\": false,\n  \"text\": \"Example public comment\",\n  \"publishedAt\": null,\n  \"attachments\": [\n    {\n      \"type\": \"Sticker\",\n      \"url\": null,\n      \"thumbnailUrl\": \"https://scontent.example/sticker.png\",\n      \"width\": 240,\n      \"height\": 240\n    }\n  ],\n  \"reactionsCount\": 12,\n  \"reactionCounts\": {\n    \"like\": 8,\n    \"love\": 2,\n    \"care\": 1,\n    \"haha\": 1,\n    \"wow\": null,\n    \"sad\": null,\n    \"angry\": null\n  },\n  \"replyCount\": 3,\n  \"authorId\": \"100012345678901\",\n  \"authorName\": \"Example Author\",\n  \"authorUrl\": \"https://www.facebook.com/example.author\",\n  \"authorProfilePictureUrl\": \"https://scontent.example/profile.jpg\",\n  \"postTitle\": null,\n  \"postDescription\": null,\n  \"postPublishedAt\": null,\n  \"postAuthorId\": null,\n  \"postAuthorName\": null,\n  \"postAuthorUrl\": null,\n  \"scrapedAt\": \"2026-07-13T00:00:00.000Z\"\n}\n```\n\n`reactionCounts` uses the fixed keys `like`, `love`, `care`, `haha`, `wow`,\n`sad`, and `angry`. A key is `null` when Facebook does not expose that exact\ntype count. `attachments` contains media bound to that exact comment. Every\nattachment has `type`, `url`, `thumbnailUrl`, `width`, and `height`; individual\nvalues can be `null`. Facebook media and profile-picture URLs can expire.\nDownload needed media promptly and only when you have the right to store it.\n\n### 🧵 Comment and reply relationships\n\nTop-level comments have `isReply: false` and `parentCommentId: null`.\n\nReplies have `isReply: true`. Their `parentCommentId` points to a saved parent\nrow. Their `rootCommentId` points to the saved top-level root of the thread.\nThe Actor does not save a reply when it cannot prove and save its parent.\n\n### 📊 Run summary\n\nThe `OUTPUT` record includes:\n\n- the chosen comment sort mode;\n- inputs received and unique content items planned;\n- duplicate inputs skipped;\n- content items attempted and items that produced rows;\n- comments and replies saved;\n- duplicate results, date-filtered results, and results skipped because no\n  exact date was available;\n- input status and stop-reason counts;\n- safe details for inputs that did not produce rows.\n\nInput-level failures stay in the run summary because they do not create paid\ndataset rows.\n\n## 🚦 Input outcomes\n\nThe dataset contains real comments and replies only. Invalid, unsupported,\nunavailable, zero-comment, and duplicate inputs are reported in `OUTPUT`.\nThey do not become fake or paid dataset rows.\n\n## 🔒 Public-source boundary\n\nFacebook Comments Scraper uses logged-out public Facebook data only.\n\nIt does not use:\n\n- a Facebook account or API key supplied by you;\n- user login cookies or copied sessions;\n- private posts, private groups, or friends-only content;\n- Facebook Stories, profiles, Pages, feeds, or search as collection inputs;\n- challenge solving or access-control bypasses;\n- active Live broadcasts or collection pages.\n\n## ⚠️ Limits and interpretation\n\n- Facebook can delete, hide, reorder, or limit comments at any time.\n- Public comment availability can differ by region and logged-out viewer state.\n- Exact publish timestamps, author links, reactions, and reply totals are not\n  always public. Missing values stay `null`.\n- Reaction-type counts, profile pictures, and comment attachments are included\n  only when Facebook exposes them on the exact public comment. Media URLs can\n  expire.\n- A requested limit is a maximum, not a guarantee. Public rows can run out\n  first.\n- Replies are saved only when their parent row is also saved.\n- Share and short links must resolve to one matching supported content type.\n- Albums, profiles, feeds, searches, groups, Stories, and collection pages do\n  not identify one supported comment owner.\n\n## ❓ FAQ\n\n### Does this Actor need a Facebook login, cookies, or API key?\n\nNo. It uses logged-out public Facebook data.\n\n### Why did I receive fewer rows than requested?\n\nThe public comment list may have ended, replies may have been turned off, rows\nmay have been duplicates, or Facebook may not have exposed a verified public\ncomment list. Check `OUTPUT` for the status and stop reason.\n\n### Will it work with Reels and shared links?\n\nThe Actor accepts direct public Reel URLs plus supported `fb.watch`, `/share/p/`,\n`/share/v/`, and `/share/r/` links. It resolves a supported wrapper to one\nmatching content item before collecting comments. Unsupported or ambiguous\nlinks are explained in `OUTPUT` and do not create paid rows.\n\n### Will I get replies?\n\nTurn on `includeReplies`. Each saved reply has `parentCommentId` and\n`rootCommentId`, and is saved only when its parent is also saved. Replies count\ntoward the same per-content result limit.\n\n### Can I remove the row limit?\n\nYes. Turn on `collectAllAvailable` to ignore the numeric limit. Collection then\ncontinues until the public source ends, the buyer charge limit is reached, the\nrun times out, or the run fails.\n\n### What do I pay for?\n\nYou pay for unique public comments and replies saved to the default dataset.\nInvalid, unsupported, unavailable, duplicate, source-deleted, and confirmed\nzero-comment inputs do not create paid result rows.\n\n### Can I paste a Facebook Page or Group URL?\n\nNo. This Actor collects comments from direct supported public content URLs. It\ndoes not discover every post from a Page, Group, profile, feed, or search page.\n\n### What happens when a post has no public comments?\n\nThe input outcome appears in `OUTPUT`. It does not create a fake dataset row or\na paid result.\n\n### How are duplicates removed?\n\nEach Facebook content item is collected once per run. Each Facebook comment ID\nis saved once.\n\n### Does the Actor search Facebook for posts?\n\nNo. It collects comments from known public content URLs that you provide.\n\n## 🛟 Support\n\nFor support, include the Apify run ID, one input URL, the expected public\ncontent, the observed dataset or `OUTPUT` result, and whether the issue affects\none row or the whole run. Do not send Facebook login details or browser\nsessions.\n\n## 🔗 Related social media scrapers\n\nContinue the same workflow on this platform or compare public data across\nplatforms.\n\n### Continue on Facebook\n\n- [Facebook Page Scraper](https://apify.com/chronometrica/facebook-channel-scraper)\n  — collect public Page details, links, and audience stats.\n- [Facebook Metrics Scraper](https://apify.com/chronometrica/facebook-metrics-scraper)\n  — collect public post, Reel, video, photo, and profile metrics.\n\n### Compare comments across platforms\n\n- [Instagram Comments Scraper](https://apify.com/chronometrica/instagram-comments-scraper)\n  — collect public comments, authors, dates, likes, and reply counts.\n- [TikTok Comments Scraper](https://apify.com/chronometrica/tiktok-comments-scraper)\n  — collect public comments, replies, authors, likes, and thread links.\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",
    "changelog": "# Changelog\n\n## 2.0.2 — 2026-10-30\n\n- Fixed cases where public posts with comments returned no results.\n- Improved reliability for large comment and reply threads.\n\n## 2.0.1 — 2026-07-15\n\n- Add links to the other published social media scrapers.\n\n## 2.0.0 — 2026-07-14\n\n- Collect public Facebook comments and replies from supported posts, Reels,\n  videos, Watch pages, photos, permalinks, `fb.watch`, and typed share links.\n- Choose All comments, Newest, or Most relevant order, and keep comments inside\n  an optional date range.\n- Set an exact per-content result limit with a 500-row default, or remove the\n  numeric cap for all available public comments.\n- Save replies as flat rows linked to their saved parent and root comments.\n- Get comment text, dates, authors, reaction totals and types, profile pictures,\n  attachments, and exact parent-content details when Facebook exposes them.\n- Use a clean 26-field dataset contract, buyer-friendly input form, and run\n  summary for results, filters, duplicates, stops, and input outcomes.\n- Pay only for unique public comments and replies saved to the dataset. Invalid,\n  unsupported, unavailable, duplicate, and confirmed zero-comment inputs do\n  not create paid result rows.\n",
    "actorDefinition": {
      "$schema": "https://apify.com/schemas/v1/actor.ide.json",
      "actorSpecification": 1,
      "name": "facebook-comments-scraper",
      "title": "Facebook Comments Scraper - Replies & Reactions",
      "description": "Scrape public Facebook comments and replies from posts, Reels, photos, Watch URLs, and supported share links. Get text, authors, dates, reaction breakdowns, profile pictures, attachments, and threads. Sort and filter results, set exact maximums or remove the numeric cap—without login or cookies.",
      "seoTitle": "Facebook Comments Scraper | Posts, Reels & Replies",
      "seoDescription": "Scrape public Facebook comments and replies from posts, Reels, photos, and supported share links. Get reactions, dates, authors, threads, and clean CSV or JSON.",
      "categories": [
        "SOCIAL_MEDIA"
      ],
      "version": "2.0",
      "buildTag": "latest",
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 3600,
        "memoryMbytes": 512
      },
      "exampleRunInput": {
        "contentType": "application/json; charset=utf-8",
        "body": "{\n  \"startUrls\": [\"https://www.facebook.com/reel/1733966934399341\"],\n  \"commentSortMode\": \"all\",\n  \"maxResultsPerPost\": 25,\n  \"collectAllAvailable\": false,\n  \"includeReplies\": false\n}"
      },
      "input": {
        "title": "Facebook Comments Scraper input",
        "description": "Paste public Facebook links, choose how many results you want, and run the Actor.",
        "type": "object",
        "schemaVersion": 1,
        "additionalProperties": false,
        "properties": {
          "startUrls": {
            "sectionCaption": "Facebook comments",
            "sectionDescription": "Add Facebook links, then choose the result limit, replies, order, and optional dates.",
            "title": "Facebook URLs",
            "type": "array",
            "description": "Paste 1–100 post, Reel, video, or photo links. Supported short and share links work too. Page, Group, profile, Story, and private links do not.",
            "editor": "stringList",
            "minItems": 1,
            "maxItems": 100,
            "prefill": [
              "https://www.facebook.com/reel/1733966934399341"
            ],
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "maxResultsPerPost": {
            "title": "Maximum results per URL",
            "type": "integer",
            "description": "The most comments and replies to save for each URL. Choose 1–10,000. Default: 500. For example, 25 URLs at 500 each can save up to 12,500 paid rows.",
            "editor": "number",
            "default": 500,
            "minimum": 1,
            "maximum": 10000
          },
          "includeReplies": {
            "title": "Include replies",
            "type": "boolean",
            "description": "Save replies as separate paid rows. Replies count toward Maximum results per URL.",
            "editor": "checkbox",
            "default": false
          },
          "commentSortMode": {
            "title": "Comment order",
            "type": "string",
            "description": "Choose the order Facebook uses. This does not change the result limit.",
            "editor": "select",
            "default": "all",
            "enum": [
              "all",
              "newest",
              "most_relevant"
            ],
            "enumTitles": [
              "All comments",
              "Newest first",
              "Most relevant first"
            ]
          },
          "commentsFrom": {
            "title": "From date",
            "type": "string",
            "description": "Only save comments on or after this date. Leave empty for no start date. Comments without a public date are skipped when a date is set.",
            "editor": "datepicker",
            "dateType": "absolute"
          },
          "commentsUntil": {
            "title": "To date",
            "type": "string",
            "description": "Only save comments on or before this date. Leave empty for no end date. Comments without a public date are skipped when a date is set.",
            "editor": "datepicker",
            "dateType": "absolute"
          },
          "collectAllAvailable": {
            "sectionCaption": "Advanced",
            "sectionDescription": "Use only when you need every available result. This can cost much more.",
            "title": "Remove the result limit",
            "type": "boolean",
            "description": "Ignore the maximum above. This may cost much more. The run still stops when the public source ends, the charge limit is reached, time runs out, or the source fails.",
            "editor": "checkbox",
            "default": false
          }
        },
        "required": [
          "startUrls"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Facebook comments and run summary",
        "description": "Open the dataset for comment rows. Open the run summary for result counts and clear input outcomes.",
        "properties": {
          "results": {
            "type": "string",
            "title": "Comments and replies",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "output": {
            "type": "string",
            "title": "Result counts and input outcomes",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records/OUTPUT"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "inputUrl": {
                "type": "string",
                "title": "Original Input",
                "description": "Original Facebook URL supplied by the user."
              },
              "postUrl": {
                "type": "string",
                "title": "Facebook Content URL",
                "description": "Public URL for the Facebook content that owns the comment."
              },
              "contentId": {
                "type": "string",
                "title": "Facebook Content ID",
                "description": "Facebook ID for the content that owns the comment."
              },
              "contentType": {
                "type": "string",
                "title": "Content Type",
                "description": "Facebook content type, such as post, reel, video, or photo."
              },
              "commentId": {
                "type": "string",
                "title": "Comment ID",
                "description": "Facebook comment ID."
              },
              "commentUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Comment URL",
                "description": "Public Facebook comment link when available."
              },
              "parentCommentId": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Parent Comment ID",
                "description": "Parent comment ID for a reply; otherwise null."
              },
              "rootCommentId": {
                "type": "string",
                "title": "Root Comment ID",
                "description": "Top-level root comment ID for this thread."
              },
              "isReply": {
                "type": "boolean",
                "title": "Reply",
                "description": "True when this row is a reply."
              },
              "text": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Comment Text",
                "description": "Public comment text. Deleted source slots may be null."
              },
              "publishedAt": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "title": "Published At",
                "description": "Exact public publish time when available."
              },
              "attachments": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "url": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "thumbnailUrl": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "width": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "height": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "type",
                    "url",
                    "thumbnailUrl",
                    "width",
                    "height"
                  ]
                },
                "title": "Attachments",
                "description": "Public media attached to this exact comment."
              },
              "reactionsCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Reactions",
                "description": "Public reaction count, or null when unavailable."
              },
              "reactionCounts": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "like",
                  "love",
                  "care",
                  "haha",
                  "wow",
                  "sad",
                  "angry"
                ],
                "properties": {
                  "like": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "love": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "care": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "haha": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "wow": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "sad": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "angry": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                },
                "title": "Reaction Breakdown",
                "description": "Exact public reaction counts by type when available."
              },
              "replyCount": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Public Reply Count",
                "description": "Public reply count for a parent; null for reply rows or unavailable data."
              },
              "authorId": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Author ID",
                "description": "Public source author ID when available."
              },
              "authorName": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Author",
                "description": "Public comment author name when available."
              },
              "authorUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Author URL",
                "description": "Public Facebook author URL when available."
              },
              "authorProfilePictureUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Author Profile Picture",
                "description": "Public author profile picture URL when available."
              },
              "postTitle": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Post Title",
                "description": "Public title of the exact parent content when available."
              },
              "postDescription": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Post Description",
                "description": "Public text of the exact parent content when available."
              },
              "postPublishedAt": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "title": "Post Published At",
                "description": "Exact parent content publish time when available."
              },
              "postAuthorId": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Post Author ID",
                "description": "Public parent content author ID when available."
              },
              "postAuthorName": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Post Author",
                "description": "Public parent content author name when available."
              },
              "postAuthorUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Post Author URL",
                "description": "Public parent content author URL when available."
              },
              "scrapedAt": {
                "type": "string",
                "format": "date-time",
                "title": "Collected At",
                "description": "Time this row was collected."
              }
            },
            "required": [
              "inputUrl",
              "postUrl",
              "contentId",
              "contentType",
              "commentId",
              "rootCommentId",
              "isReply",
              "scrapedAt"
            ]
          },
          "views": {
            "overview": {
              "title": "Facebook comments",
              "description": "One row per public Facebook comment or reply.",
              "transformation": {
                "fields": [
                  "text",
                  "authorName",
                  "publishedAt",
                  "reactionsCount",
                  "reactionCounts",
                  "replyCount",
                  "isReply",
                  "parentCommentId",
                  "attachments",
                  "authorProfilePictureUrl",
                  "commentUrl",
                  "postUrl",
                  "contentType",
                  "commentId",
                  "contentId",
                  "inputUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "text": {
                    "label": "Comment Text",
                    "format": "text"
                  },
                  "authorName": {
                    "label": "Author",
                    "format": "text"
                  },
                  "publishedAt": {
                    "label": "Published At",
                    "format": "date"
                  },
                  "reactionsCount": {
                    "label": "Reactions",
                    "format": "number"
                  },
                  "reactionCounts": {
                    "label": "Reaction Breakdown",
                    "format": "text"
                  },
                  "replyCount": {
                    "label": "Public Reply Count",
                    "format": "number"
                  },
                  "isReply": {
                    "label": "Reply",
                    "format": "boolean"
                  },
                  "parentCommentId": {
                    "label": "Parent Comment ID",
                    "format": "text"
                  },
                  "attachments": {
                    "label": "Attachments",
                    "format": "text"
                  },
                  "authorProfilePictureUrl": {
                    "label": "Author Profile Picture",
                    "format": "link"
                  },
                  "commentUrl": {
                    "label": "Comment URL",
                    "format": "link"
                  },
                  "postUrl": {
                    "label": "Facebook Content URL",
                    "format": "link"
                  },
                  "contentType": {
                    "label": "Content Type",
                    "format": "text"
                  },
                  "commentId": {
                    "label": "Comment ID",
                    "format": "text"
                  },
                  "contentId": {
                    "label": "Facebook Content ID",
                    "format": "text"
                  },
                  "inputUrl": {
                    "label": "Original Input",
                    "format": "text"
                  },
                  "scrapedAt": {
                    "label": "Collected At",
                    "format": "date"
                  }
                }
              }
            }
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "changelog": "# Changelog\n\n## 2.0.2 — 2026-10-30\n\n- Fixed cases where public posts with comments returned no results.\n- Improved reliability for large comment and reply threads.\n\n## 2.0.1 — 2026-07-15\n\n- Add links to the other published social media scrapers.\n\n## 2.0.0 — 2026-07-14\n\n- Collect public Facebook comments and replies from supported posts, Reels,\n  videos, Watch pages, photos, permalinks, `fb.watch`, and typed share links.\n- Choose All comments, Newest, or Most relevant order, and keep comments inside\n  an optional date range.\n- Set an exact per-content result limit with a 500-row default, or remove the\n  numeric cap for all available public comments.\n- Save replies as flat rows linked to their saved parent and root comments.\n- Get comment text, dates, authors, reaction totals and types, profile pictures,\n  attachments, and exact parent-content details when Facebook exposes them.\n- Use a clean 26-field dataset contract, buyer-friendly input form, and run\n  summary for results, filters, duplicates, stops, and input outcomes.\n- Pay only for unique public comments and replies saved to the dataset. Invalid,\n  unsupported, unavailable, duplicate, and confirmed zero-comment inputs do\n  not create paid result rows.\n",
      "readme": "# Facebook Comments Scraper - Replies & Reactions\n\n## 💬 What does Facebook Comments Scraper do?\n\nPaste direct public Facebook post, Reel, video, Watch, photo, permalink, or\nsupported share links. Get clean public comment and reply rows with text,\nauthors, dates, reaction breakdowns, profile pictures, attachments, and thread\nlinks.\n\nUse it for audience research, brand monitoring, customer feedback, creator\nresearch, social listening, comment analysis, spreadsheets, and automated data\npipelines. Each saved result is one real public comment or reply, not a post\nsummary.\n\nThe Actor uses public, logged-out Facebook pages. It does not require a\nFacebook login, API key, cookies, or copied browser session from you. Invalid,\nduplicate, unsupported, unavailable, and confirmed zero-comment inputs do not\ncreate paid result rows.\n\nWith Facebook Comments Scraper, you can:\n\n- 💬 Collect public comments from posts, Reels, videos, Watch pages, photos,\n  permalinks, `fb.watch`, and supported share links.\n- 🧵 Rebuild reply threads with saved parent and root comment IDs.\n- ❤️ Analyze total reactions and Like, Love, Care, Haha, Wow, Sad, and Angry\n  breakdowns when Facebook exposes them.\n- ↕️ Choose All comments, Newest, or Most relevant order.\n- 📅 Keep comments inside inclusive start and end dates.\n- 🎯 Set an exact per-content result limit, or remove the numeric cap.\n- 🧹 Receive clean unique rows after equivalent URLs and repeated comment IDs\n  are removed.\n- 📦 Export JSON, JSONL, CSV, Excel, XML, RSS, or HTML, or use the Apify API,\n  SDKs, webhooks, schedules, and integrations.\n- 💸 Pay only for public comments and replies saved to the dataset.\n\n## ✨ Why use this Actor?\n\n- **Clean and useful:** one flat row for each public comment or reply.\n- **Strict identity:** every row stays tied to the requested Facebook content.\n- **Connected threads:** replies are saved only with their saved parent and\n  root comment.\n- **Exact controls:** choose order, dates, replies, and the maximum saved rows\n  for each content item.\n- **Rich public context:** get reaction types, profile pictures, attachments,\n  and parent content details when Facebook exposes them.\n- **Clear billing:** empty and failed inputs do not become charged fake rows.\n- **Honest limits:** an uncapped run can still stop at source end, charge limit,\n  timeout, or failure.\n\n## 📦 What data do I get?\n\nEach dataset row represents one real public Facebook comment or reply.\n\n| Data group          | Main fields                                                                             |\n| ------------------- | --------------------------------------------------------------------------------------- |\n| 🔗 Content identity | `inputUrl`, `postUrl`, `contentId`, `contentType`                                       |\n| 💬 Comment content  | `commentId`, `commentUrl`, `text`, `publishedAt`, `attachments`                         |\n| 🧵 Thread links     | `parentCommentId`, `rootCommentId`, `isReply`                                           |\n| 👤 Public author    | `authorId`, `authorName`, `authorUrl`, `authorProfilePictureUrl`                        |\n| ❤️ Public signals   | `reactionsCount`, `reactionCounts`, `replyCount`                                        |\n| 📝 Parent content   | Public post text, author, and publish time when exact target-bound values are available |\n| 🕐 Collection time  | `scrapedAt`                                                                             |\n\nPublic values that Facebook does not expose stay `null`. They are not guessed\nand they are not replaced with fake zeroes.\n\n## ⚙️ Can I use this Actor through an API?\n\nYes. Run Facebook Comments Scraper manually in Apify Console or use it through:\n\n- 🔌 Apify API\n- 🐍 Python SDK\n- 🟢 JavaScript SDK\n- 🪝 Webhooks\n- ⏰ Scheduled runs\n- 🧩 Apify integrations\n\n### API example\n\nKeep your Apify token in an environment variable or secret store.\n\n```bash\ncurl -X POST \\\n  \"https://api.apify.com/v2/acts/chronometrica~facebook-comments-scraper/runs?token=$APIFY_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"startUrls\": [\"https://www.facebook.com/reel/1733966934399341\"],\n    \"commentSortMode\": \"all\",\n    \"maxResultsPerPost\": 25,\n    \"collectAllAvailable\": false,\n    \"includeReplies\": false\n  }'\n```\n\n## 🎯 Why scrape Facebook comments?\n\n| Use case                  | How comment data helps                                      |\n| ------------------------- | ----------------------------------------------------------- |\n| 🔍 Audience research      | Find common questions, opinions, needs, and language.       |\n| 📣 Brand monitoring       | Track public feedback around products and campaigns.        |\n| 🧑‍🎨 Creator research       | Study public audience response and reply threads.           |\n| 💡 Content planning       | Find ideas, objections, and recurring questions.            |\n| 🤖 Sentiment and NLP      | Feed clean comment text into your own analysis workflow.    |\n| 🧱 Data pipeline building | Load stable comment and reply rows into databases and apps. |\n\nThe Actor collects source data. It does not add sentiment labels or guess a\nperson's intent.\n\n## 💵 Pricing: saved comments and replies only\n\nFacebook Comments Scraper uses pay-per-result pricing. One result means one\nunique public comment or reply saved to the default dataset. Platform usage is\nincluded.\n\n| Apify plan | Price per 1,000 saved rows |\n| ---------- | -------------------------: |\n| Free       |                      $2.15 |\n| Starter    |                      $1.70 |\n| Scale      |                      $1.45 |\n| Business   |                      $1.20 |\n\nThere is no paid row for an invalid or unsupported URL, an unavailable target,\nan explicit zero-comment target, a duplicate input, a duplicate comment, or a\nsource-deleted placeholder.\n\nUse `maxResultsPerPost`, `collectAllAvailable`, date filters, and\n`includeReplies` to control result volume. Replies are separate result rows and\ncount toward the same per-content limit.\n\n## 🚀 How do I use Facebook Comments Scraper?\n\n1. Open **Facebook Comments Scraper** in Apify Console.\n2. Add one or more known public Facebook content URLs.\n3. Choose the maximum total comment and reply rows for each content item.\n4. Turn on replies only when you need them.\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\nExample input:\n\n```json\n{\n  \"startUrls\": [\"https://www.facebook.com/reel/1733966934399341\"],\n  \"commentSortMode\": \"all\",\n  \"maxResultsPerPost\": 25,\n  \"collectAllAvailable\": false,\n  \"includeReplies\": false\n}\n```\n\n### 🔗 Supported content inputs\n\n- Facebook post URLs with numeric or `pfbid` keys\n- Reel URLs\n- Watch URLs, owner video URLs, and `video.php` URLs\n- Modern, legacy, and owner photo URLs\n- `story.php` and `permalink.php` post URLs\n- `fb.watch` short links\n- Typed `/share/p/`, `/share/v/`, and `/share/r/` links\n- `www`, `m`, `mbasic`, and `mobile` Facebook host variants\n\nEquivalent inputs that resolve to the same content or comment rows are\ncollected once in a run.\n\n### 🎛️ Settings\n\n| Setting               | What it controls                                                                                                                             |\n| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |\n| `startUrls`           | Add 1–100 public Facebook post, Reel, video, Watch, photo, permalink, or supported share URLs.                                               |\n| `maxResultsPerPost`   | Set the maximum comment and reply rows for each URL. Use 1–10,000. Default: 500.                                                             |\n| `collectAllAvailable` | Remove the result limit. The run still stops at source end, charge limit, timeout, or failure. Off by default and may greatly increase cost. |\n| `includeReplies`      | Save replies as separate paid rows. They count toward the maximum above. Off by default.                                                     |\n| `commentSortMode`     | Choose `all`, `newest`, or `most_relevant`. This changes order, not the result limit. Default: `all`.                                        |\n| `commentsFrom`        | Pick the first date to keep. Leave empty for no start date. API users may also send an ISO or relative date.                                 |\n| `commentsUntil`       | Pick the last date to keep. Leave empty for no end date. Replies need an in-range saved parent.                                              |\n\n## ⬆️ Output sample\n\n```json\n{\n  \"inputUrl\": \"https://www.facebook.com/reel/1733966934399341\",\n  \"postUrl\": \"https://www.facebook.com/reel/1733966934399341/\",\n  \"contentId\": \"1733966934399341\",\n  \"contentType\": \"reel\",\n  \"commentId\": \"1234567890123456\",\n  \"commentUrl\": \"https://www.facebook.com/reel/1733966934399341/?comment_id=1234567890123456\",\n  \"parentCommentId\": null,\n  \"rootCommentId\": \"1234567890123456\",\n  \"isReply\": false,\n  \"text\": \"Example public comment\",\n  \"publishedAt\": null,\n  \"attachments\": [\n    {\n      \"type\": \"Sticker\",\n      \"url\": null,\n      \"thumbnailUrl\": \"https://scontent.example/sticker.png\",\n      \"width\": 240,\n      \"height\": 240\n    }\n  ],\n  \"reactionsCount\": 12,\n  \"reactionCounts\": {\n    \"like\": 8,\n    \"love\": 2,\n    \"care\": 1,\n    \"haha\": 1,\n    \"wow\": null,\n    \"sad\": null,\n    \"angry\": null\n  },\n  \"replyCount\": 3,\n  \"authorId\": \"100012345678901\",\n  \"authorName\": \"Example Author\",\n  \"authorUrl\": \"https://www.facebook.com/example.author\",\n  \"authorProfilePictureUrl\": \"https://scontent.example/profile.jpg\",\n  \"postTitle\": null,\n  \"postDescription\": null,\n  \"postPublishedAt\": null,\n  \"postAuthorId\": null,\n  \"postAuthorName\": null,\n  \"postAuthorUrl\": null,\n  \"scrapedAt\": \"2026-07-13T00:00:00.000Z\"\n}\n```\n\n`reactionCounts` uses the fixed keys `like`, `love`, `care`, `haha`, `wow`,\n`sad`, and `angry`. A key is `null` when Facebook does not expose that exact\ntype count. `attachments` contains media bound to that exact comment. Every\nattachment has `type`, `url`, `thumbnailUrl`, `width`, and `height`; individual\nvalues can be `null`. Facebook media and profile-picture URLs can expire.\nDownload needed media promptly and only when you have the right to store it.\n\n### 🧵 Comment and reply relationships\n\nTop-level comments have `isReply: false` and `parentCommentId: null`.\n\nReplies have `isReply: true`. Their `parentCommentId` points to a saved parent\nrow. Their `rootCommentId` points to the saved top-level root of the thread.\nThe Actor does not save a reply when it cannot prove and save its parent.\n\n### 📊 Run summary\n\nThe `OUTPUT` record includes:\n\n- the chosen comment sort mode;\n- inputs received and unique content items planned;\n- duplicate inputs skipped;\n- content items attempted and items that produced rows;\n- comments and replies saved;\n- duplicate results, date-filtered results, and results skipped because no\n  exact date was available;\n- input status and stop-reason counts;\n- safe details for inputs that did not produce rows.\n\nInput-level failures stay in the run summary because they do not create paid\ndataset rows.\n\n## 🚦 Input outcomes\n\nThe dataset contains real comments and replies only. Invalid, unsupported,\nunavailable, zero-comment, and duplicate inputs are reported in `OUTPUT`.\nThey do not become fake or paid dataset rows.\n\n## 🔒 Public-source boundary\n\nFacebook Comments Scraper uses logged-out public Facebook data only.\n\nIt does not use:\n\n- a Facebook account or API key supplied by you;\n- user login cookies or copied sessions;\n- private posts, private groups, or friends-only content;\n- Facebook Stories, profiles, Pages, feeds, or search as collection inputs;\n- challenge solving or access-control bypasses;\n- active Live broadcasts or collection pages.\n\n## ⚠️ Limits and interpretation\n\n- Facebook can delete, hide, reorder, or limit comments at any time.\n- Public comment availability can differ by region and logged-out viewer state.\n- Exact publish timestamps, author links, reactions, and reply totals are not\n  always public. Missing values stay `null`.\n- Reaction-type counts, profile pictures, and comment attachments are included\n  only when Facebook exposes them on the exact public comment. Media URLs can\n  expire.\n- A requested limit is a maximum, not a guarantee. Public rows can run out\n  first.\n- Replies are saved only when their parent row is also saved.\n- Share and short links must resolve to one matching supported content type.\n- Albums, profiles, feeds, searches, groups, Stories, and collection pages do\n  not identify one supported comment owner.\n\n## ❓ FAQ\n\n### Does this Actor need a Facebook login, cookies, or API key?\n\nNo. It uses logged-out public Facebook data.\n\n### Why did I receive fewer rows than requested?\n\nThe public comment list may have ended, replies may have been turned off, rows\nmay have been duplicates, or Facebook may not have exposed a verified public\ncomment list. Check `OUTPUT` for the status and stop reason.\n\n### Will it work with Reels and shared links?\n\nThe Actor accepts direct public Reel URLs plus supported `fb.watch`, `/share/p/`,\n`/share/v/`, and `/share/r/` links. It resolves a supported wrapper to one\nmatching content item before collecting comments. Unsupported or ambiguous\nlinks are explained in `OUTPUT` and do not create paid rows.\n\n### Will I get replies?\n\nTurn on `includeReplies`. Each saved reply has `parentCommentId` and\n`rootCommentId`, and is saved only when its parent is also saved. Replies count\ntoward the same per-content result limit.\n\n### Can I remove the row limit?\n\nYes. Turn on `collectAllAvailable` to ignore the numeric limit. Collection then\ncontinues until the public source ends, the buyer charge limit is reached, the\nrun times out, or the run fails.\n\n### What do I pay for?\n\nYou pay for unique public comments and replies saved to the default dataset.\nInvalid, unsupported, unavailable, duplicate, source-deleted, and confirmed\nzero-comment inputs do not create paid result rows.\n\n### Can I paste a Facebook Page or Group URL?\n\nNo. This Actor collects comments from direct supported public content URLs. It\ndoes not discover every post from a Page, Group, profile, feed, or search page.\n\n### What happens when a post has no public comments?\n\nThe input outcome appears in `OUTPUT`. It does not create a fake dataset row or\na paid result.\n\n### How are duplicates removed?\n\nEach Facebook content item is collected once per run. Each Facebook comment ID\nis saved once.\n\n### Does the Actor search Facebook for posts?\n\nNo. It collects comments from known public content URLs that you provide.\n\n## 🛟 Support\n\nFor support, include the Apify run ID, one input URL, the expected public\ncontent, the observed dataset or `OUTPUT` result, and whether the issue affects\none row or the whole run. Do not send Facebook login details or browser\nsessions.\n\n## 🔗 Related social media scrapers\n\nContinue the same workflow on this platform or compare public data across\nplatforms.\n\n### Continue on Facebook\n\n- [Facebook Page Scraper](https://apify.com/chronometrica/facebook-channel-scraper)\n  — collect public Page details, links, and audience stats.\n- [Facebook Metrics Scraper](https://apify.com/chronometrica/facebook-metrics-scraper)\n  — collect public post, Reel, video, photo, and profile metrics.\n\n### Compare comments across platforms\n\n- [Instagram Comments Scraper](https://apify.com/chronometrica/instagram-comments-scraper)\n  — collect public comments, authors, dates, likes, and reply counts.\n- [TikTok Comments Scraper](https://apify.com/chronometrica/tiktok-comments-scraper)\n  — collect public comments, replies, authors, likes, and thread links.\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": "2.0.18",
    "imageDigest": "a731a999ec6fd9934cfd989dd98bfd4149825c2ed7acfacfde3d19eb5ca83a38",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "release-candidate",
      "versionNumber": "2.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.008856666666666667
    }
  }
}