Reddit marketing, for people who ship apps

Reddit marketing for indie apps is a discovery problem, not a posting problem

Every guide tells you to be authentic, give value, and not spam. True, and useless, because it skips the actual work. The hard part of marketing an indie app on Reddit is not writing the comment. It is finding the threads worth commenting in, and having the discipline to skip most of them.

M
Matthew Diakonov
9 min read
The short answer (verified 2026-05-16)

Reddit marketing for an indie app is not posting your app. It is finding threads that already exist where someone has the problem your app solves, leaving a helpful comment with no link, and skipping the majority of threads you surface. Discovery and restraint are the job. Writing the comment is the easy ten percent.

The discovery mechanism described on this page is real and inspectable. It lives in scripts/find_threads.py of an open-source repo: github.com/m13v/social-autoposter.

The launch post is the move everyone tries first

Here is the script almost every indie app developer follows. You finish a version you are proud of. You write a post: "I built an app that does X, would love feedback." You pick a big general community because big means reach. You hit submit. Within an hour the post has three upvotes and one comment, or it has been removed by a filter you did not know existed, or your account is quietly shadowbanned and you do not find out for a week.

The reason this fails is not that your app is bad or your writing is bad. It is that a self-introducing post from an account with no history is the exact shape Reddit is built to suppress. Reddit is not a distribution channel you broadcast into. It is thousands of small rooms, each with its own immune system, and a stranger walking in to announce a product trips every one of them.

The advice you find online responds to this with the ratio rule: keep nine of every ten contributions non-promotional. That is directionally correct and it quietly assumes the hard problem is already solved. It tells you the ratio. It does not tell you where the nine come from. Finding nine genuinely relevant threads to contribute to, week after week, is the part that actually takes work, and it is the part no guide walks through.

The question every guide skips: where do the threads come from?

"Find relevant subreddits and comment" is a single throwaway line in most articles on this topic. In practice it is the whole machine. If you do it by scrolling your home feed you will comment on whatever is loud today, which is rarely whatever is relevant to your app. Discovery has to be deliberate: a fixed list of communities, pulled fresh, deduped against your own history.

S4L is an open-source engagement pipeline for indie products. Its discovery half is one Python file, scripts/find_threads.py. It is worth understanding even if you never run it, because it makes the shape of the job concrete. Threads flow in from a fixed subreddit list and a public API, get filtered against everything you have already touched and everything you have chosen to avoid, and what comes out the other side is a short list of candidates a human can actually read.

What discovery actually moves

Your subreddit list
Reddit JSON API
Your blocklist
posts table
find_threads.py
Candidate threads
Already posted
Excluded

How the discovery actually works

Two details in the code below are the load-bearing ones, and they are exactly the two no marketing guide mentions.

The first is the source. Discovery hits the free Reddit JSON endpoint at old.reddit.com. Append .json to a subreddit URL and you get its newest threads back as data, no API key, no OAuth, no app registration. To stay inside Reddit's limits the code batches five subreddits into one request using Reddit's multi-subreddit syntax (r/a+b+c+d+e), caps a run at 50 subreddits, and backs off from 4 seconds toward 30 if Reddit returns a 429.

The second is the dedup. Before anything is shown to a human, every candidate is checked against get_already_posted(), which is a single query: every thread_url you have ever commented in. A thread that appears in that set is dropped on the spot. This is what stops you from leaving a second comment in a thread you already engaged, which is the cheapest way to make an account look like a campaign.

find_threads.py

That is the entire discovery half. No model, no scraping browser, just an HTTP call and a set difference. The unglamorous parts are the ones that keep an account alive.

Restraint is the other half of the job

Discovery hands you a list. The list is not a to-do list. Most of it is noise, and your job is to recognize that and walk away. This is the part that feels wrong to a founder, because every thread looks like a chance and skipping a chance feels like leaving growth on the table. It is the opposite. The skip is the product.

0%of candidates got a reply

In one S4L pipeline we measured directly, the one that decides whether to respond to comments left on our own content, only 1,226 of 3,358 depth-one candidates actually got a reply. The other 63.5% were skipped. That is a pipeline running on automation, and it still skips nearly two of every three things it looks at. For cold discovery, where the threads have nothing to do with you yet, your skip rate should be higher still.

The skip reasons are not arbitrary. They are recorded, and they read like a checklist of when not to comment:

Recorded skip reasonCountWhat it means for you
filtered_author282The person is on a do-not-engage list. Stop replying to the same accounts.
too_short255There is nothing real to engage with. A one-word thread is not an opening.
not_directed_at_us196The thread is not about your problem. Forcing a comment in reads as forced.
banned_subreddit160This community removes your kind of comment on sight. Do not spend the account on it.

Notice that none of those skips is about the comment being badly written. They are all about the thread being a bad fit. That is the whole point. By the time you are deciding what words to use, the hard decision, whether to be here at all, is already behind you.

The whole loop, start to finish

Put discovery and restraint together and reddit marketing for an indie app collapses into a five-step loop you can run every day in under half an hour. It is the same loop whether you run it by hand or wire it up.

One day of reddit marketing for an indie app

1

Pull fresh threads from a fixed list of subreddits

Start from the handful of subreddits where your app's problem actually gets discussed. Hit each one's newest threads. The point of starting from a fixed list is that discovery becomes a job you can run, not a feed you doomscroll. You are not looking for your app's name. You are looking for the problem it solves, described by someone who does not know you exist.

2

Drop every thread you have already touched

This is the step nobody mentions and everybody needs. Without it you re-read the same threads every session, and worse, you risk leaving a second comment in a thread you already commented in. Multi-comment threads read as a campaign. The fix is a single set lookup against every thread URL you have posted in before.

3

Drop the blocklist

Some subreddits will remove a founder's comment on sight no matter how good it is. Some authors are serial repliers you have already engaged. Some threads contain words that signal a fight you do not want. A blocklist of subreddits, authors, URLs, and keywords filters those out before you ever read them.

4

Qualify what is left, and expect to throw most of it away

Now read. For each surviving thread, ask one question: does this person have the exact problem my app solves, right now, in a way I can speak to honestly? For most threads the answer is no. That is not a failure of discovery. A high skip rate is the signal that your filter is working.

5

Comment once, with no link, then log the thread

If a thread qualifies, leave one comment that would be useful even if your app did not exist. No link. No product name. Then record the thread URL so step two never surfaces it again. The loop closes. Tomorrow's run starts clean.

What actually goes in the comment

Once a thread clears the filter, the comment itself is the easy part, and it is the part most guides spend all their words on. The short version: be useful to the person asking, write the comment so it would still be worth posting if your app did not exist, do not include a link, do not name your product, and lean on a first-person specific from your own experience rather than a generic take.

If you want the measured version of that, we ran a separate analysis of more than 2,700 tracked comments and what their upvote counts reveal. Replying to the original poster rather than to another commenter, opening in first person, and either staying under one sentence or committing to four or five all move the numbers in ways most advice gets wrong. That breakdown lives in the reddit marketing data analysis, and the question of staying clear of automated-content flags is covered in reddit marketing without AI flagging. This page is about the step before all of that: deciding which threads are even worth a comment.

One honest caveat: even this tool will not launch-post about itself

S4L is a tool that automates Reddit engagement, and it does not post about itself on Reddit. That is not a bug. Its own configuration disables launch-style posting for the S4L product with a recorded reason: posting about an autoposter on Reddit invites anti-bot backlash and risks the account, so it is promoted through other channels instead.

Sit with that for a second, because it is the most honest thing on this page. A tool whose entire job is Reddit engagement looked at its own product and decided the safe move was to not push it on Reddit. The lesson generalizes. Reddit marketing for an indie app is not a volume game you win by being everywhere. It is a fit game. For some apps, in some communities, the right amount of self-promotion is genuinely zero, and the value comes entirely from being a useful presence whose profile happens to point at something. Knowing when the answer is zero is the same skill as knowing which threads to skip. It is the whole discipline, pointed at yourself.

Want the discovery loop pointed at your app's subreddits?

Fifteen minutes: tell us what your app does, and we will show you find_threads.py running against the communities where your problem actually gets discussed.

Common questions from indie app developers

Should I make a launch post for my indie app on Reddit?

Usually not, at least not as your main play. A 'I built X' post in a general subreddit is the single most reported shape of content on Reddit, and a brand-new account posting one is the fastest path to a removal or a shadowban. There are exceptions: subreddits with a dedicated showcase or feedback day, and small niche communities where the mods explicitly invite builders. Read the sidebar rules first. But the durable channel for an indie app is not the launch post. It is showing up in threads that already exist, where someone is describing the problem your app solves, and being genuinely helpful there. That builds an account history that later makes the occasional showcase post survivable.

How do I find threads worth commenting on without reading Reddit all day?

Treat discovery as a batch job, not a feed. Pick the 10 to 40 subreddits where your app's problem actually gets discussed and pull their newest threads in one pass. S4L does this in scripts/find_threads.py: it hits the free Reddit JSON API at old.reddit.com, batching five subreddits into each request (r/a+b+c+d+e), capped at 50 subreddits per run so it stays inside Reddit's rate limits, with exponential backoff if a 429 comes back. The output is a deduped list of candidate threads. You read the list, not the feed. Twenty minutes of reading a curated list beats two hours of scrolling, and it is repeatable.

How often should I actually comment versus skip?

Skip far more than you comment. In one S4L pipeline we measured directly, the one that decides whether to reply to comments left on our own content, only 36.5% of 3,358 depth-one candidates got a reply. The other 63.5% were skipped, with recorded reasons like the author being on a filter list, the comment being too short to engage with, the subreddit being one we do not post in, or the comment not actually being directed at us. For cold discovery, where you are reading threads that have nothing to do with you yet, the skip rate should be even higher. If you are commenting on more than one in three threads you read, your relevance filter is too loose.

Will I get banned if I comment about my app's topic a lot?

Volume itself is not what gets you banned. Pattern is. The signals moderators and Reddit's spam systems watch for are: the same link appearing across many comments, near-identical comments across subreddits, comments that all steer toward one product, and bursts of activity with no gaps. You avoid every one of those by commenting without links, varying what you actually say, only commenting where the thread genuinely fits, and spacing your activity out. A founder who leaves three genuinely useful, link-free comments a day across different communities looks like a Redditor. A founder who drops the same pitch in ten threads in an hour looks like what they are.

Can I put a link to my app in the comment?

Not in the comment that is doing the work. Links in Reddit comments are down-ranked on sight and are the first thing a moderator's spam filter flags. The pattern that survives is: be useful in the comment with zero links, and let people find you through your profile, or through a thread where a link is genuinely on-topic and asked for. If someone replies asking what you use, that is the moment a link is welcome. Leading with one is not. S4L's drafting rules ban URLs and product names from Reddit comments outright for this reason.

Do I need a tool like S4L to do this, or can I do it by hand?

You can absolutely do it by hand, and for your first month you probably should, because doing it manually teaches you which subreddits respond and which ignore you. The two parts that are tedious by hand are discovery (pulling newest threads from 30 subreddits every day) and dedup (remembering every thread you already touched). S4L automates exactly those two: find_threads.py for discovery, a posts table for dedup. The judgment part, deciding whether a thread qualifies and what to say, is the part worth keeping human for as long as you can. The tool exists to remove the grunt work, not the thinking.

Why does S4L's discovery use old.reddit.com instead of the official API?

The old.reddit.com JSON endpoint (append .json to almost any Reddit URL) returns thread listings without an API key, without OAuth, and without an app registration. For read-only discovery of public threads, that is all you need. The official Reddit API works too, but it adds a registration and token-refresh step for a job that is just 'list the newest threads in these subreddits.' find_threads.py keeps it simple: a plain HTTP GET with a descriptive User-Agent, five subreddits per request, and a back-off loop if Reddit pushes back. The dedup and rate-limit logic live in your own database, not in a third-party quota.

s4l.aibooked calls from social
© 2026 s4l.ai. All rights reserved.

How did this page land for you?

React to reveal totals

Comments ()

Leave a comment to see what others are saying.

Public and anonymous. No signup.