Comment cards group into account tokens, thread folders, and community trays.
Count each unit for its stated purpose.

A theme is the one customer idea you name before you count. A comment is one public reply under a post. An account is the public name on a row. An account is not a proven person, buyer, or personal group. A thread is one source post. A community is the Reddit group for that post. You add the community from the known post address. The collection program does not return it.

One long thread can make a theme look common. A few accounts may write most of the yes comments. The four counts show that difference. Removing the largest thread shows whether a second thread still has the theme.

People ask for customer-research tactics in public. A product marketing thread asks for tactics. A SaaS thread shows that research on Reddit is hard. Those threads show a need. They do not name this count unit. They do not prove this check. They do not measure a market.

Read the rows before you count

An Actor is a hosted data collection program. This method uses the Reddit Comments Actor, public build 1.0.7. A Task is a saved input preset. The customer language research Task is only a start. It is not proof that the counts happen by themselves. The Actor saves source rows. You do every count in this method.

The Actor accepts `postUrls` for known public threads. You may send 1 to 50 post URLs. `maxCommentsPerPost` is the cap for one post. A cap is the most comments you ask the Actor to save from that post. The cap can be 1 to 500. The default cap is 100. The saved Task uses 250. For the first check, use one post and choose cap 3. Add more posts only later. Keep every cap inside the same limits.

The saved Task points at one sample thread. Replace that sample with your own known public URLs.

json
{
  "postUrls": [
    "https://www.reddit.com/r/LocalLLaMA/comments/1ui241x/the_number_1_public_enemy_of_opensource/"
  ],
  "maxCommentsPerPost": 250
}
Read the rows before you count

One saved row is one public comment under a source post. You need `postId`, `canonicalPostUrl`, `commentId`, `authorName`, `body`, `status`, and `observedAt`. `canonicalPostUrl` is the standard public address of the source post. The body is the comment text. `observedAt` is the time that row was seen. Comment status in the dataset is only ok, deleted, or removed. A run result of partial or failed is not a comment status.

The body and `authorName` can be empty or a stand-in. The text [deleted] is a stand-in. It is not one account shared by every missing name. Use `authorName` as an account key only when it is not empty and it is not [deleted].

A current one-known-thread control of a known AskMarketing thread returned 3 different comment IDs that match the source post. Each of those 3 had text in the body. A separate read found 3 different public author names that were not empty. Those names are not kept here. `parentId` and depth were null on all 3 rows. `hiddenBranchesRemaining` was null. This method does not need a reply tree. A null parent is not a reply link. Do not invent one. A missing parent also does not tell you who a person is.

The OUTPUT block can include `commentsSaved`, `duplicatesSkipped`, `hiddenBranchesRemaining`, `completionReason`, `status`, `isComplete`, and `inputResults`. Each input can also show `commentsFound`, `commentsSaved`, `status`, and `reason`. On this 3-row run, `isComplete` was true, but status was partial. `isComplete` means the saved work finished. Partial means the Actor did not save a full thread. A finished run is not every comment on the post. This run was capped. It did not measure many threads. It did not measure a theme. The output has no unique-author counter. You count accounts yourself.

This Actor does not return `requestedSubreddit` or `matchedSubreddit`. A different Actor returns those fields. If you add a community column, copy it from the known `canonicalPostUrl` or from a source field you checked. Write where it came from. That column is your note. The Actor does not add theme labels. It does not rank products. It does not build a balanced sample for you.

Do these eight actions

  1. Name one theme and the threads you will use. Write what text is inside the theme. Write what text is outside it. Do this before you count. Each saved row is one recorded comment. The same account can write many comments. Many comments can sit in one thread.

A thread with many replies can look like a large customer group. It may be one long talk. Your include rule and your exclude rule stop you from moving the theme after you see the biggest thread.

  1. Collect one known thread first. Read each comment ID, the body, the status, the author field, and the OUTPUT block. A codeable comment has body text you can read and judge. Keep deleted, removed, and missing text out of the theme count. Still report how many of those rows you saw. A missing body does not mean the theme is absent. It means you cannot code that row. Choose a fixed cap. Keep every stop reason from the source. A cap is a limit you chose. It is not the full conversation.

Start with `maxCommentsPerPost` at 3 on one URL. If OUTPUT status is partial, say so. Do not call a finished run a complete population. A population here would be every comment on the post. If you add posts later, keep `postUrls` at or below 50. Keep each cap from 1 to 500.

  1. Keep each comment ID with its source post and its `observedAt` time. If two rows share words but not IDs, do not merge them. If the same ID conflicts across rows, review both rows. Do not pick one by the words alone. Count missing IDs that you cannot resolve in a separate group. A known account key must be an `authorName` that is not empty and is not [deleted]. Keep unknown names and stand-ins outside the known account set. Do not give all of those rows one shared account.
  2. Code the theme by hand on codeable text. Save the code, the coder name, a version, and a short context note. Use yes or no on each codeable comment. Yes means the theme is present. No means the text is readable and the theme is absent. In this method, positive means yes. It does not mean the writer is happy. Negative means no. It does not mean the writer is angry. Do not use an automatic sentiment tool. Sentiment here means a tool guess about feeling. The Actor will not code the theme. If you need reply context, open the public thread and read it. A null `parentId` is not context.
  3. Build four sets from the yes rows. The comment set holds each positive comment ID once. The account set holds each known account with at least one yes comment. The thread set holds each thread with at least one yes comment. The community set holds each community with at least one yes thread. Count a value once inside its own set. Three comments from one account are one account. One thread belongs to one community in this method. These four sets answer four questions. They do not estimate buyers. They do not count silent readers.
  4. Write the numerator and the denominator for each set. The numerator is how many units have the theme. The denominator is the group you divide by. The comment denominator is the codeable comments in your selected sample. The account denominator is known accounts with at least one codeable comment under your rule. It is not every registered user. Report unknown-account rows beside that fraction. Report the caps you used. The thread denominator is the known threads you selected. The community denominator is the known communities you selected. Neither denominator is all of Reddit. Keep each planned source count separate from each usable observed count. The planned count is how many threads or communities you chose to read. The usable observed count is how many of those you retrieved and could code. If you do not keep those counts separate, label each selected denominator as observed-positive coverage and show each unknown. Observed-positive coverage counts only units you could read and code. A failed thread is unresolved coverage. An unavailable thread is unresolved coverage. A wholly uncodeable thread is unresolved coverage. A failed community is unresolved coverage. An unavailable community is unresolved coverage. A wholly uncodeable community is unresolved coverage. Unresolved coverage is not a true negative. A true negative means you saw the unit and the theme was absent. A partial thread can leave some text out. If the retrieved text has no theme, the theme was not observed in the retrieved sample. That result does not show that the theme is absent.

A high comment fraction can come from one account that posted many times. The account fraction can look smaller because that name counts once. A high thread fraction can still sit inside one community. Read the four fractions together.

  1. Rank the selected threads by how many yes comments they hold. Remove only the top thread, then count all four units again. This is a leave-one-thread-out check. It shows whether your conclusion depends on that one thread. It is not a significance test. A significance test asks whether chance alone could make the gap. This check does not do that. It does not mean the removed thread is bad data. Put the thread back in the final collection. Add a short influence note that says what changed.

Compare each unit on its own. The comment share can fall hard when one thread held most yes rows. The account share can move differently because repeat posts are already one account. The thread share loses that thread in the numerator and the denominator. The community share can stay the same when another selected thread in that community still has the theme.

  1. Publish an evidence-spread table and a short conclusion. An evidence spread is the four fractions side by side. Say how many comments, accounts, threads, and communities carry the theme. Say what remains after you remove the top thread. A theme that lives in one thread can still teach you from the words. That is qualitative evidence. It has weak breadth. Breadth is how many separate sources agree. Use the result to plan more research. Do not claim a market size. Do not claim a customer majority. Do not rank features from these fractions.

A fictional nine-comment ledger

The tables below are original fiction. They teach the arithmetic. They are not an Actor result. They are not the 3-row sample. The sample had no theme codes. These comment IDs are fictional labels. This ledger does not show an Actor cap. On a real run, report your cap and any partial stop.

The fiction has nine codeable comments. They come from three known threads: T1, T2, and T3. T1 and T2 are in community Q1. T3 is in community Q2. Positive means the theme is present. Negative means the theme is absent on text you can read.

A fictional nine-comment ledger
RowComment IDThreadCommunityAccountBody stateTheme
1C1T1Q1Acodeablepositive
2C2T1Q1Acodeablepositive
3C3T1Q1Acodeablepositive
4C4T1Q1Bcodeablepositive
5C5T1Q1Ccodeablepositive
6C6T2Q1Acodeablepositive
7C7T2Q1Dcodeablenegative
8C8T3Q2Ecodeablenegative
9C9T3Q2Fcodeablenegative

One more row is availability only. It is outside the nine codeable comments.

A fictional nine-comment ledger
RowComment IDThreadCommunityAccountBody stateTheme
10R1not in the setsnot in the setsunknownremovednot coded

R1 is not a tenth codeable comment. It is not a negative. The unknown author is not a seventh known account. Do not treat [deleted] as a shared key. This fiction does not put R1 on T1, T2, or T3. A missing body does not mean the theme is absent. Report one removed-body row with an unknown account. Keep it in the availability count only.

The known-account namespace is only A, B, C, D, E, and F. A namespace here is the set of names allowed into the account count. A repeat of A is still one name. R1 adds no name.

Full comment set: C1, C2, C3, C4, C5, C6. The comment denominator is C1 through C9.

6 of 9 = 66.7 percent of codeable comments are positive.

Full account set: A, B, C. A wrote four codeable comments. Three are on T1. One is on T2. A is still one account. The account denominator is A, B, C, D, E, and F.

3 of 6 = 50 percent of known codeable accounts are positive.

R1 stays outside this denominator.

Full thread set: T1, T2. The thread denominator is T1, T2, and T3.

2 of 3 = 66.7 percent of selected threads are positive.

Full community set: Q1. T3 is in Q2, and both Q2 comments are negative. The community denominator is Q1 and Q2.

1 of 2 = 50 percent of selected communities are positive.

These four fractions describe the selected sample only. They are not population prevalence. Prevalence would mean the share among all customers. You did not select all customers.

T1 holds five of the six positive comments. Those five are C1, C2, C3, C4, and C5.

5 of 6 = 83.3 percent.

T1 is the dominant thread. Dominant means it holds the most yes comments.

Now remove T1 and count again. The remaining codeable comments are C6, C7, C8, and C9. The only remaining positive comment is C6. Account A wrote it on T2.

Remaining comment set: C6. The denominator is C6, C7, C8, and C9.

1 of 4 = 25 percent of remaining codeable comments are positive.

Remaining known accounts are A, D, E, and F. B and C leave this denominator. Their only codeable comments were on T1. Do not keep B or C in this check. Do not add the unknown author from R1. A is the only remaining positive account. A still counts once.

Remaining account set: A. The denominator is A, D, E, and F.

1 of 4 = 25 percent of remaining known accounts are positive.

Remaining threads are T2 and T3. T2 is still positive. T3 is not.

Remaining thread set: T2. The denominator is T2 and T3.

1 of 2 = 50 percent of remaining threads are positive.

Remaining communities are still Q1 and Q2. Q1 stays positive because T2 is in Q1. Q2 stays negative.

Remaining community set: Q1. The denominator is Q1 and Q2.

1 of 2 = 50 percent of remaining communities are positive.

A fictional nine-comment ledger
UnitFull sampleLeave T1 out
Positive comments6 of 9 = 66.7 percent1 of 4 = 25 percent
Positive known accounts3 of 6 = 50 percent1 of 4 = 25 percent
Positive threads2 of 3 = 66.7 percent1 of 2 = 50 percent
Positive communities1 of 2 = 50 percent1 of 2 = 50 percent

Each unit moves for a different reason. The comment fraction falls from 66.7 percent to 25 percent. T1 held five yes comments. One yes comment remains on T2. The account fraction falls from 50 percent to 25 percent. B and C leave with T1. A remains once. The three T1 posts from A are not three accounts. The thread fraction falls from 66.7 percent to 50 percent. You remove T1 from both sides. T2 still qualifies. The community fraction stays 50 percent. Q1 still has T2. Removing T1 does not remove Q1.

The theme still appears in a second thread. Its comment frequency was dominated by T1. Keep T1 in the final collection. The influence note should say two facts. T1 supplied 5 of 6 positive comments. The theme still appears once on T2.

R1 stays an availability note in both counts. It never becomes a no vote. It never becomes an account.

The bounded conclusion for this fiction is narrow. In these selected threads, the comment rate looks high mainly because of T1. The theme is present for 3 of 6 known accounts. It is present in 2 of 3 threads. It is present in 1 of 2 communities. After you remove T1, it remains for 1 account, 1 thread, and 1 community. That is a lead for more research. It is not a majority of customers. It is not a feature rank.

Sources & further reading

By Chronometrica · Updated

Back to top ↑