Given a brand/project, systematically "seriously learn about and respect" its related subreddits, and produce actionable community research.This is due diligence before going on Reddit, not a playbook for advertising.
Iron rule · Two compliance gates (every conclusion must pass both)
- Gate 1 = the sub's written rules: Does this sub allow links/self-promotion/brand content? (Check rules.json; if it doesn't pass, don't post)
- Gate 2 = FTC disclosure: As long as the poster has a material connection with the brand (supply/rebates/payment/employment), linking the brand/recommending the brandmust be explicitly disclosed。Passing Gate 1 ≠ you can advertise without disclosing. Who posts the link determines whether disclosure is needed: a truly independent user linking the brand = free (cannot ghostwrite, cannot fabricate); an affiliated creator linking the brand = must disclose.
- Nuclear red line: Not disclosing an affiliated identity + going into competitor posts to trash rivals = never do this in any sub (this is exactly how Insta360 got hammered across the entire internet).
⚠️ What data you can get · What you cannot get (memorize this first, don't build on assumptions)
| Data | Can you get it | Description |
|---|---|---|
| Top-upvoted posts top 10/20/50 | ✅ Yes | By score / comment count / upvote_ratio, MCP get_subreddit_top_posts limit to 100 |
| Top-upvoted comments | ✅ Yes | MCP get_post_comments |
| Original rules text rules.json | ✅ Yes (requires a real browser) | Local curl/WebFetch hits 403 anti-scraping; need same-origin fetch from a logged-in Chrome (see below) |
| upvote_ratio (upvote/downvote ratio) | ✅ Yes | But only the percentage |
| Separate downvote count | ❌ Cannot get it | Reddit only exposes net score + upvote_ratio |
| Other people's post views (view count) | ❌ Cannot get it | view Only the author themselvescan see it in their own backend; you cannot see views on other people's top-upvoted posts. "Top 50 by view" is unobtainable |
| Views on your own posts/comments | ✅ Yes | A logged-in author can scrape from the DOM/backend (only for content they posted themselves, accumulating as they post) |
🔐 Account security · Keep the two paths separate (important)
High-volume work goes through MCP, lightweight rules go through the browser, and operating accounts never bear scraping risk.
- Top-upvoted posts/comments (high volume) → go through Reddit MCP: MCP uses independent read-only API credentials,does not touch our operating accounts, so you can pull in large quantities with confidence (tested on 51 subs with no issues).
- Rules rules.json (lightweight) → same-origin fetch from logged-in Chrome: Locally it will get 403, so you must use a real browser. Use
scripts/fetch_rules_via_server.py(run on a machine that has a logged-in browser, reusea logged-in-Chrome fetch helper (browser.py))。- must be slow and human-like: A request every few seconds. Going faster will trigger Reddit rate limiting (measured: 40+ requests/second → account temporarily rate-limited, returns empty/HTML). Reading the rules themselves is extremely low-risk (public metadata), butdon't hammer away with your operations account— the worry is dragging down the bot's main job, not getting banned.
- Best practices: For scraping usea dedicated research account, separate from the posting/operations account. Rate limiting is temporary and recovers on its own, but you need to keep the pace down.
Process
1. Define the community universe (six-dimension enumeration)
Enumerate related subs along six dimensions: ①product line→activity ②camera/device system ③subject/use case ④creator platform/monetization ⑤adjacent lifestyle ⑥purchase-decision hubs.Both your own brand-related and competitor-related ones. Expand until "new subs no longer surface high value" (saturation).
2. Pull top posts + score fit (via MCP, safe)
Per sub get_subreddit_top_posts(time="month"/"all", limit=20~50). Study each post: title format/hook/post type (text/link/image/gallery)/score.Find commonalities: what content takes off in this community? Pick the few posts with the most comments get_post_comments and look at the top comments. Use the free agnes model for batch rough processing (per-post map + merge reduce, don't feed big chunks at once — small models miss things). Output per sub: brand-fit 1-5 + viral patterns + community profile.
3. Scrape the raw rules (via logged-in Chrome, slow)
python3 scripts/fetch_rules_via_server.py(edit the PRIORITY list). Extract per sub: self-promotion policy / link policy (whether affiliate·referral·short links·tracking parameters are banned) / raw text of brand-association clauses / brand-mention permissiveness / confidence (raw text captured = high, behavioral evidence only = low).If you can't capture it, mark it "unverified — needs manual logged-in transcription"; never fabricate.
4. Brand reality (the gap between rules and practice)
In top posts, look at: how is the brand actually mentioned (in the post/in comments/positive-negative-neutral)? Who posts links, where do they link, is there disclosure? Community reaction to competitor comparison posts (upvoted or flamed)?The gap is often where the real opportunity is— some subs write strict rules but brands survive naturally in top posts, by being "organic + useful + transparent".
5. Produce a per-community policy matrix
One row per sub: community | self-promotion policy | link policy | brand-mention permissiveness | measured: how the brand appears | measured: how links are used | disclosure requirements | Net conclusion: can associated creators mention it/how to mention it. Attach three decision rules (when to post links / when disclosure is mandatory / never do = associate with black-hat competitors).
Orchestrate with ultracode (optional)
When volume is large: phase1 pull top posts + profiles in parallel (a few subs per agent, via MCP), phase2 synthesize the matrix.Keep concurrency to ≤2-3, to avoid instant server-side rate limiting (measured: 6-7 agents firing at once gets limited).