

# How to Choose Subreddits for Customer Research

Choosing subreddits for customer research starts by testing the same problem query separately across different candidate communities to build a matched source frame. An Actor is a hosted data collection program. A Task is a saved input preset. A sampling frame is the defined set of sources from which you will collect. A Reddit community or subreddit is a public discussion space. Its members are not a representative sample of all customers.

## Collection setup

Start setup by linking the [Actor](https://apify.com/chronometrica/reddit-search-scraper) and [Task](https://apify.com/chronometrica/reddit-search-scraper/examples/search-posts-in-subreddits). The current preset uses query "customer feedback", subreddits "SaaS", "Entrepreneur", and "smallbusiness", maxResults 150, sort "relevance", and time "year". These generic defaults are not proved best communities. Replace them with justified candidate sources.

Compare separate runs using the same query, sort, time, and cap of 3 posts per run. One mixed run shares maxResults across all sources, which lets one large source consume the cap early. Retain key output fields: inputQuery, requestedSubreddit, matchedSubreddit, postId, canonicalPostUrl, title, body, createdAt, rank, status, unavailableFields, and observedAt.

A post with missing body context stays unreviewed. A lower source rank shows search order, not post quality. Post IDs represent discovered posts, not individual customers.

Each searchResults entry in the output contains query, subreddit, status, reason, candidatesFound, rowsSaved, duplicatesSkipped, endReason, source, and sourceUrl. The run summary includes status, statusReason, isComplete, query, searchesPlanned, searchesSucceeded, candidatesFound, usefulRows, rowsSaved, duplicatesSkipped, stopReason, and observedAt. Use collection diagnostics relevant to your audit, and skip internal cost fields.

In a recent control run, searchResults[0] logged subreddit=learnpython, status=ok, rowsSaved=3, endReason=max_results_reached, and source=reddit_rss. A global status of isComplete=true confirms a finished processing outcome, not full community population coverage. Note that row-level requestedSubreddit and matchedSubreddit fields can differ from the summary subreddit field.

## Build a source frame step by step

1. Name the customer situation, decision, and information needed. Separate user communities, professional practitioner communities, product support communities, and general founder discussions as source roles.
2. Find candidate public communities from actual topic discussions. Read their purpose, rules, and recent relevant threads. Do not infer buyer status from a community name alone.
3. Write an inclusion or exclusion reason for each community. Choose sources for differing perspectives, not just large member counts. Respect the source context and do not use research as permission to promote.
4. Run the [same small query](/en/articles/reddit-noise-query-tests/) in each chosen community separately. Keep caps, sort, window, and observation times comparable. Save the requested and matched subreddits to review any out-of-scope results.
5. Inspect returned posts to identify the situation described, such as a novice, experienced user, administrator, or vendor claim. Keep uncertainty instead of guessing identity from usernames. Read enough context to know if the problem is firsthand or hearsay.
6. Compare coverage by perspective to see which decision conditions appear and which are missing. Counts show your observed sample, but they cannot tell you how common a problem is in the whole market. An empty result can mean low query visibility rather than a lack of customer need.
7. Select a small, varied frame and document missing voices. Add another source only when it brings a new perspective. Avoid endless collection.
8. Deliver a source-choice table, query-cap manifest, and unanswered-perspective list. Downstream coding and product choices are separate work.

## Fictional worked example

All community names, posts, and customer situations are invented. Imagine a research question about how small teams choose a backup workflow. Four candidate sources are tested using separate runs with small caps, sort, and time parameters:

- BeginnerFiles: Three reviewed posts; two show firsthand setup confusion and one is unrelated. Source role is novice setup; include this for onboarding issues.
- AdminPractice: Three posts; two cover recovery and testing discussions, and one is a vendor announcement. Source role is experienced operations; include this for failure and recovery conditions.
- ToolQSupport: Three posts; two describe specific tool errors and one has a missing body. Source role is current product troubleshooting; include this narrowly and retain one unreviewed row.
- FounderChat: Three posts; one shows a budget constraint and two are promotional claims. Source role is budget context; keep this as a supplementary source, not a main source for technical reliability.

These collections yield twelve total collected posts. They include seven firsthand and relevant situation rows (two from BeginnerFiles, two from AdminPractice, two from ToolQSupport, and one from FounderChat), four excluded rows (one, one, zero, and two), and one unreviewed row.

Seven relevant posts do not equal seven unique customers because repeated authors or crossposts may exist. No relative population size follows from these small three-row samples.

The completed frame selects BeginnerFiles, AdminPractice, and ToolQSupport as main complementary sources, and FounderChat as an optional budget context. Missing voices include teams that do not post publicly and owners who recovered successfully without asking for help. If you change the query for FounderChat, mark it as a separate supplementary sample rather than combining its rate with the original fixed-query comparison.

| Community | Purpose | Inclusion reason | Exclusion reason | Query scope | Unknowns |
| --- | --- | --- | --- | --- | --- |
| BeginnerFiles | Novice setup | Capture onboarding issues | Unrelated posts | Fixed query, cap 3, year window | True novice count |
| AdminPractice | Operations | Cover recovery conditions | Vendor announcements | Fixed query, cap 3, year window | Failure frequency |
| ToolQSupport | Troubleshooting | Track tool errors | None (missing body post is unreviewed) | Fixed query, cap 3, year window | Unreviewed error rate |
| FounderChat | Budget context | See cost constraints | Promotional claims | Fixed query, cap 3, year window | Total buyer budget |

## Next action

Open Search Posts in Selected Subreddits at [https://apify.com/chronometrica/reddit-search-scraper/examples/search-posts-in-subreddits](https://apify.com/chronometrica/reddit-search-scraper/examples/search-posts-in-subreddits), replace generic communities with your justified source frame, use one small comparable query per source using the main [https://apify.com/chronometrica/reddit-search-scraper](https://apify.com/chronometrica/reddit-search-scraper), and keep your source-choice reasons with the export.

## Sources

- [Reddit Search Scraper Actor](https://apify.com/chronometrica/reddit-search-scraper)
- [Tactics for Customer Research Discussion](https://www.reddit.com/r/ProductMarketing/comments/1liklfb/best_tactics_for_customer_research/)
- [Customer Research on Reddit Discussion](https://www.reddit.com/r/SaaS/comments/1tb26ri/customer_research_on_reddit/)