Multilevel marketing on Reddit is a measurable immune response, not a vibe.
Every top result for this query is a consumer-side take. r/antiMLM screenshots. BuzzFeed roast compilations. A Taylor & Francis stigma paper. None of them measure the physics of what Reddit actually does to MLM-shaped comments. I did. One automated commenter, 2,732 tracked replies, 11 months, one Postgres. The penalty curve is exact, the cutoffs are sharp, and the prompt rules that stay on the safe side are all in a single Python file.
What the SERP actually covers, and what it leaves on the table
Search for this phrase today and the first page is a mirror of how normal Reddit users feel about MLMs. r/antiMLM as a subreddit. A stigma analysis from Taylor & Francis. BuzzFeed's "18 Times People in MLMs Had Absolutely No Shame." Salon, The Conversation, and a handful of newspaper op-eds calling it a legal pyramid. All true, all well-sourced, and all written from the perspective of someone who received a "Hey hun" message from a cousin.
What none of those pages answer: if you were building an automated tool to post commercial content on Reddit, how hard is it to accidentally cross into MLM-shaped behavior, and what does Reddit measurably do when you do? That question has an answer, and the answer is a number. Several numbers, actually.
S4L is my Reddit commenter. It has been running against a Neon Postgres for 11 months. It logs every reply it writes, the subreddit, the thread, the hour, the gap since the last post, and the upvote count at read-time. That dataset is the source for everything on this page. The product is the measurement.
The five MLM surface signals Reddit detects
Reddit's immune system does not know the difference between a supplement-line downline pitch and a SaaS affiliate. It detects a small set of surface signals that both share. In the S4L dataset each of these signals carries a measurable penalty on expected upvotes.
How the penalty accumulates, one signal at a time
Signal 1: a named product
Signal-by-signal penalty table
2,732 comments grouped by the MLM surface signal they carry. The 'Avg performance' column is what Reddit does in response.
| Feature | Volume | Avg performance |
|---|---|---|
| Comment names a product | 139 comments | avg 1.17 upvotes, hard cap at 10 |
| Comment has no product name | 2,593 comments | avg 3.05 upvotes, topped at 639 |
| Comment contains a URL | 103 comments | avg 1.38 upvotes, cap 40 |
| Comment contains no URL | 2,629 comments | avg 3.02 upvotes, cap 639 |
| Self-reply to own thread with link | (single worst example) | -8 upvotes in r/devops |
| Sub-minute posting gap (spam heuristic) | 384 comments (55%) | avg 2.6 upvotes |
| 1 to 5 minute gap (human-paced) | 175 comments | avg 7.0 upvotes |
The anchor fact: S4L's own name is on its blacklist
Line 309 of scripts/engagement_styles.py is the single most anti-MLM line in the codebase. It is injected into the system prompt for every Reddit reply the bot drafts. The list inside the parentheses is the set of seven projects the bot is allowed to engage on behalf of. The product is telling itself not to mention itself.
Anchor fact
Line 309 of engagement_styles.py reads, verbatim:
NEVER mention product names (fazm, assrt, pieline, cyrano, terminator, mk0r, s4l). NEVER include URLs or links.
S4L is the seventh name on the list. The product is aware that naming itself in a Reddit comment costs 61% of its expected upvotes, and it bakes that awareness into the drafting prompt. The opposite of MLM is not silence; it is this specific rule, enforced at prompt-level before the LLM sees the thread.
The 20% cap on promotional replies, and where it lives
The standard affiliate and MLM playbook uses the 9:1 ratio: nine value comments for every one promotional. S4L replaces it with a stricter cap, enforced at prompt-drafting time rather than by rate limit. The LLM is told, on every reply, that the promotional style is only permitted 20% of the time. The other 80% rotates across seven content styles, each ranked by live upvote data from the posts table.
Standard MLM 9:1 playbook vs. the S4L engagement rules
The left column is what most reddit affiliate marketing guides teach. The right column is what S4L actually enforces in prompt.
| Feature | 9:1 playbook | S4L actual |
|---|---|---|
| Promotional comments | 10% (the 1 in 9:1) | 20% absolute cap, prompt-enforced |
| Non-promotional comments | 90% undifferentiated | 80% rotating across 7 measured styles |
| URL in the promotional comment | Usually present | Tier 1 default: no URL |
| Product name in the promotional comment | Usually present | Only in Tier 2 or Tier 3 branches |
| Rate limit between comments | Rarely specified | 3 to 5 minute minimum gap enforced |
| Per-subreddit daily cap | Rarely specified | 2 per sub per day, cross-posted 0 |
| Thread tree position | Not addressed | Prefer reply-to-OP (4.2x avg upvotes) |
How a single reply is routed through the immune-system rules
A Reddit thread hits the pipeline with an OP body, a set of commenters, a subreddit, and subreddit rules scraped from /about/rules.json. The hub decides the tier, the style, and whether any of the five MLM signals apply. The outputs on the right are the three classes of reply the bot is allowed to produce.
Thread in, classified reply out
What happens on a single draft call
What it looks like when the bot refuses to ship an MLM-shaped reply
The lint step is not cosmetic. It runs between the LLM's draft and the post to Reddit. If the draft trips any of the five MLM signals, the reply is skipped and logged as a refusal. The terminal output below is what a real skip looks like, trimmed from a recent run. The bot would rather ship nothing than ship a comment that lives in the 1.17-upvote bucket.
Subreddits the bot refuses to comment in
The clearest operational artifact of the anti-MLM stance is subreddit_bans.comment_blocked in config.json. 15 subs are blocked from comments entirely. A longer thread_blocked list (26 subs) blocks thread creation. The pipeline reads both lists before every run in reddit_tools.py _load_comment_blocked_subs(). A sub lands on the list if mods banned the account, if the sub enforces strict no-commercial rules, or if the measured average upvote fell below zero.
Noteworthy: r/vipassana and r/Meditation are on the list despite the Vipassana project averaging 11.48 upvotes per comment across 81 posts. The block is not performance-driven, it is cultural. A commercial account engaging in contemplative-practice subs is MLM-shaped by definition, no matter how well the content performs. The bot is not allowed to engage there even though the math would tempt it.
“1 sentence comments: 6.03 avg upvotes. 2 sentence comments: 1.90. The dead zone is real and it is where most MLM pitches live.”
engagement_styles.py line 306, measured across 2,732 comments
The anti-patterns file: what the bot is forbidden to ever write
Below the style rules in engagement_styles.py is a separate get_anti_patterns() function. These are not tuned for upvotes. These are the phrases that make a comment legibly MLM to any Reddit reader. The bot will never emit any of them.
Phrases the lint step rejects before posting
- Opens with 'exactly', 'yeah totally', '100%', 'that is smart' (pleaser patterns)
- Contains 'I built' or 'we built' or 'I am working on' (self-promo signal)
- Contains 'DM me' or 'shoot me a DM' (MLM-recruiter shape)
- Contains 'happy to jump on a call' or 'book a demo'
- Names any product from config.json (fazm, assrt, pieline, cyrano, terminator, mk0r, s4l)
- Contains any .com, .ai, .io, or http token unless Tier 3
- Promises to share a link or file not already in config.json
- Makes a time-bound claim ('by next week', 'before Friday')
If you are doing this by hand, the four rules that transfer
You do not need S4L to write Reddit comments that avoid the MLM immune system. The rules are just four, and each one has measured effect size in the dataset. Most affiliate marketers break all four by default. Breaking one of them roughly halves your expected upvotes; breaking all four drops you into the 1.17-avg floor that defines the MLM-shaped comment class.
Four rules that carry the measured effect
- Reply to OP, not to commenters. 4.2x multiplier on avg upvotes.
- Never put a URL in the first comment. 54% average-upvote penalty otherwise.
- Never name the product you are promoting. 61% penalty and a cap at 10 upvotes.
- 1 sentence or 4 to 5 sentences. Never 2 or 3 (the dead zone).
Every statistic on this page traces to a single postgres table. This is who owns it.
Who wrote this, and where the numbers came from
See what this pipeline actually ships
S4L is the Reddit commenter that produced every statistic on this page. The code, the prompt rules, the subreddit blacklist, and the lint step are all visible at s4l.ai.
Open S4L →Frequently asked questions
Is r/antiMLM the only reason MLMs get punished on Reddit?
No. r/antiMLM is visible, but the measurable effect is sitewide. In the 2,732-comment S4L dataset, any comment containing a product name averaged 1.17 upvotes against a baseline of 3.05; any comment containing a URL averaged 1.38 against 3.02. Those comments were posted across dozens of subreddits, not just r/antiMLM. The immune response is distributed: a combination of user downvotes, Automoderator link filters, subreddit-specific self-promotion rules, and vote-ring detection. r/antiMLM just makes the norm visible.
Can I do MLM recruiting on Reddit if I follow the 9:1 rule?
The 9:1 rule (nine value comments for every one promotional comment) does not survive contact with the data. S4L's blacklist caps promotional replies at 20%, stricter than 9:1, and still measures a 61% average-upvote penalty whenever a product name appears. The rule does not account for the cliff between 1 upvote and 0 or 1 upvote and silent removal. 58.6% of comments in the S4L dataset sit at exactly 1 upvote, which is consistent with either low traffic or silent shadowban-style filtering. Following 9:1 is necessary but not sufficient: Reddit's immune system targets the shape of the comment, not the ratio.
Which subreddits does an automated tool refuse to post in?
S4L's config.json lists 15 subreddits under subreddit_bans.comment_blocked, including r/SaaS, r/indiehackers, r/vibecoding, r/ClaudeAI, r/mcp, and r/vipassana. The reasons vary: strict mod enforcement, shadowban risk, cultural mismatch, or measured negative engagement. A separate thread_blocked list of 26 subs blocks creating new threads altogether, including r/smallbusiness (-0.15 avg upvotes), r/node (-4.00 avg), r/reactjs, r/EndTipping, r/RestaurantOwners, and r/singularity. The list is reflective, not prescriptive: these are subs where posts empirically underperformed or triggered moderator actions.
What does the 20% recommendation cap actually do?
Line 280 of scripts/engagement_styles.py injects the string 'recommendation: Recommend a project from config casually. MAX 20% of replies.' into the prompt for every Reddit reply the bot drafts. This is not a post-hoc filter or rate limit; it is a constraint the LLM sees before it writes a single word. The effect is that 80% of replies rotate across seven measured content styles (storyteller, pattern_recognizer, critic, contrarian, data_point_drop, snarky_oneliner, curious_probe), ranked by live upvote data. Only 20% are even allowed to name a project. In MLM terms, this is the inverse of the standard downline-expansion playbook.
Why does the product blacklist include S4L itself?
engagement_styles.py line 309 reads verbatim: 'NEVER mention product names (fazm, assrt, pieline, cyrano, terminator, mk0r, s4l). NEVER include URLs or links.' S4L is one of seven projects in the shared config, and the same prompt rules apply to every one of them. When the bot is engaging on behalf of the S4L project, it is explicitly forbidden from naming S4L. The rationale is in the data: naming any project caps the measured comment upside at 10 upvotes. Promotion of S4L happens elsewhere (thread posts under r/self, the website, long-form guides like this one), not inside organic replies. This is the opposite of MLM hierarchy, which depends on downline recruiters naming the program.
Can I automate Reddit engagement without tripping the MLM immune system?
The measurable answer is yes, with specific constraints. Hold rate at 30 to 50 comments per day maximum. Keep 3 to 5 minutes between comments (the 1 to 5 minute gap bucket averages 7.0 upvotes vs 2.6 for sub-minute). One comment per thread, never two. Prefer replying to OP (10.82 avg) over commenters (2.59). Never put a URL in the first comment. Never name the product you are promoting. Use first-person openings (4.18 avg vs 2.71 for 'the' openings). Follow the bimodal length rule: 1 sentence or 4 to 5 sentences, never 2 or 3. If all seven of those hold, the measured distribution puts you in the top decile. If any one breaks, the expected upvote count roughly halves.
What is the difference between Reddit's treatment of MLM and affiliate marketing?
Legally and structurally there is a difference: MLM recruits downstream sellers and pays on their recruits' sales, affiliate marketing pays on a single conversion. Reddit's immune system does not distinguish. Both are detected through the same surface signals: product-name repetition (caps upside at 10 upvotes), URL presence in comments (drops avg 54%), self-reply patterns (one of the worst-performing archetypes in the dataset), and cross-subreddit posting velocity. A comment that names a supplement line with a referral code and a comment that names a SaaS with an affiliate link look identical to Reddit's anti-commercial signal stack. The page rules on this page apply to both.
Does Reddit shadowban MLM accounts specifically?
Reddit does not publish its enforcement criteria, so this is observational. 58.6% of comments in the S4L dataset sit at exactly 1 upvote, which is elevated compared to healthy accounts (typically 30 to 40%). The elevation is consistent with one of three scenarios: comments landing in low-traffic threads, comments being silently removed by Automoderator before accumulating votes, or a soft shadowban where comments appear logged-in but not logged-out. The operational check is to open a logged-out incognito tab and verify the comment is visible. For MLM-shaped accounts (product-name repetition, URL presence, burst posting), the risk of silent removal is much higher than for accounts that follow the bimodal-length and no-link rules.