Repeated comment cards form small groups beside a separate review panel.
Repeated words can flag a pattern without proving spam.

Understanding the Structure of Public Export Rows

A public comment export turns unstructured social media discussions into clean data rows that you can examine and organize. Each exported row contains specific fields, including commentId stored as a string, contentId, text, authorId, authorUrl, parentCommentId, rootCommentId, isReply, publishedAt, and scrapedAt. Keeping these raw records unchanged is essential because modifying original text or removing identifiers destroys the audit trail needed for fair human review.

When gathering public post data, you can use the Facebook Comments Scraper to collect rows from one to one hundred public content links per run. The actor collects public comments up to a maximum results limit unless you select the option to collect all available records. Every commentId returned by the database is a unique string value that identifies a specific comment or reply.

It is important to remember that raw data tools do not perform moderation. The actor collects raw text, but it does not identify bots, detect spam, analyze user intent, categorize feedback, send replies, or issue automated alerts. Any actual analysis or judgment must happen through your own human-reviewed process. Additionally, missing authorId or publishedAt fields occur for unknown reasons in raw exports, so a missing author ID should never be treated as proof that a commenter is a bot or a fake account.

Merging Duplicate Collections by Comment ID

The first step in analyzing your data is merging repeated records of the exact same commentId. Because exports often run multiple times over several days, the same string commentId frequently appears in more than one download file.

Deduplicating by string commentId ensures that you are counting distinct observed comments rather than counting the same export row multiple times. If commentId 987654321 appears in two different export files, combining those rows leaves a single verified record. This deduplication step gives you a clean baseline before you look for repeated text across different comments.

To see how this works, consider a fictional product post that yields twelve raw export rows across two collection runs.

  • Total raw export rows collected: 12
  • Duplicate commentId rows merged across runs: 2
  • Observed distinct comments remaining: 10

Reconciling these counts gives you ten distinct comment records to analyze for text repetition.

Grouping Repeated Text Across Different Comment IDs

After merging duplicate comment IDs, the next step is grouping different string comment IDs that contain identical or nearly identical text strings. It is critical to distinguish comment identity from author identity here: having different comment IDs does not imply that the messages come from different accounts. A single author account can post multiple separate comments with identical text, or several different accounts can post the exact same phrase.

When comparing text across different comment IDs, applying gentle matching—such as converting text to lowercase and trimming extra whitespace—helps group identical messages. However, you must avoid aggressive text cleanup like removing entire words or specific symbols that change sentence meaning. For example, if a cleaning rule removes the word "not" from the sentence "I do not recommend this item," the phrase becomes "I do recommend this item," completely reversing the user's opinion and creating a false positive.

To manage repeated phrases effectively, divide repeated text into three main categories:

  1. Identical text across different comment IDs: Exact word matches across distinct comment records, which may come from the same account or different accounts during official giveaways, photo contests, or petition campaigns.
  2. Near-duplicates: Phrases with minor typos or slight word order changes, usually caused by copy-pasting or template responses.
  3. Contextual repetition: Common phrases like "How much is this?" or "Great photo!" that appear naturally across many different posts.

Fictional Comment Dataset Breakdown

We can apply these categories to our ten observed distinct comments from the fictional post example:

Grouping Repeated Text Across Different Comment IDs
Comment GroupComment IDsText Matching ReasonObserved CountContext Check Needed?Human Review Decision
Expected Giveaway Entriesc101, c102, c103, c104Exact match to contest instruction phrase4 distinct IDsYes (confirm against post rules)Retain as legitimate campaign entry
Unsolicited Promotional Linkc201, c202, c203Identical external website link and promotional pitch3 distinct IDsYes (check post topic and thread flow)Flag for manual review queue
General User Discussionc301, c302, c303Unique user questions and product feedback3 distinct IDsNoKeep in standard queue

This dataset accounts for all ten observed distinct comments: four expected giveaway entries, three promotional comments flagged for review, and three general discussion comments.

Grouping these rows shows why context matters. If an automated script flagged all repeated phrases as spam, the four contest entries would be wrongly targeted, frustrating real fans who were simply following the giveaway instructions.

Setting Up a Safe Human Review Workflow

A good review process focuses on privacy-minimized pattern counts instead of creating profile lists or tracking personal user details. Focus on counting distinct comment IDs alongside distinct observed author IDs to spot unusual patterns without collecting unnecessary personal data.

Remember that an account that posts multiple times in a single thread is not automatically a bot. Many real community members leave several comments when asking follow-up questions, chatting with other buyers, or replying to staff. Always read the original post and the surrounding conversation thread before making any moderation decisions. Context reveals whether a repeated phrase is helpful community activity or unwanted commercial noise.

To keep your workflow organized, maintain clear boundaries between data tasks. Basic file exports, date filtering, and general feedback sorting are explained in our guide on analyzing Facebook comments for customer feedback. Measuring public engagement formulas, follower counts, and public counters is covered in our resource on public Facebook post performance metrics. Keeping these topics separate ensures your review list stays focused on checking repeated text safely.

A complete review list should contain the comment group, comment IDs, text matching reasons, observed counts, context notes, and the final human decision. Do not attempt to calculate exact posting speeds if timestamps are missing, and avoid using rigid magic thresholds for spam confidence or automated probability scores. Human review should always be the final step.

Sources & further reading

By Chronometrica · Updated

Back to top ↑