Inspiration
I moderate a few communities and kept running into the same dead end: by the time a bot account was obvious enough to ban, it had already farmed karma, upvoted other bots, and moved on. Every tool I found either required user friction (CAPTCHAs), relied on crowdsourced blocklists that miss new bots entirely, or analysed post content — which introduces language and ideological bias.
I wanted something that worked the way actual forensic analysis works: silently, passively, and based on how someone behaves rather than what they say.
What BotPrints Does
BotPrints fingerprints every user's behavioral metadata across 6 signals — temporal regularity, circadian entropy, engagement ratio, edit absence, burst-silence patterns, and vote correlation — and surfaces suspicious accounts on a mod-only dashboard. No content is ever read or stored.
The key insight that separates BotPrints from a simple anomaly detector: a single unusual signal doesn't mean much. A nurse working night shifts will have unusual circadian patterns. A developer who batch-comments on lunch breaks will have burst-silence spikes. BotPrints only escalates when multiple signals fire simultaneously — which is the actual signature of automated behavior.
Beyond individual scoring, BotPrints detects coordinated inauthentic behavior by cross-correlating posting windows across flagged accounts. Bot farms using the same scheduler are identified automatically, even if each individual account looks borderline on its own.
How I Built It
Built entirely on Devvit 0.12 using TypeScript and Redis. Every post and comment triggers a silent profile update — under 100ms, max 2 Redis operations. The daily scheduler runs the full 6-signal scoring engine, behavioral shift detection, coordinated ring detection, and ban evasion fingerprint matching across all tracked users.
The dashboard is a Devvit custom post (webview) locked to moderators only. It renders radar charts per user, supports 5 moderation actions across 4 escalation tiers, includes a full appeal workflow with configurable timeout and auto-escalation, and tracks an audit log of every automated and manual action.
Challenges
False positives were the hardest problem. After auditing the academic literature on bot detection — particularly Rauchfleisch & Kaiser (2020) on Botometer's limitations — it became clear that additive single-signal scoring produces more false positives than true detections at most thresholds. The co-occurrence gate was the solution: scores above certain thresholds are only reachable when 3+ signals are simultaneously elevated.
Real moderator feedback reshaped the entire action system. Early feedback revealed that the original "Restrict (Mute)" action called Reddit's muteUser API — which only blocks modmail, doing nothing to stop a bot posting in the community. This was a fundamental misunderstanding of how bots actually operate: they target community posts for karma, not modmail. The entire enforcement system was rebuilt around this insight into a proper 4-tier escalation with modqueue filtering, remove + appeal workflow, and ban + spam report.
Devvit's system account behavior required careful handling. Reddit's AutoModerator and deleted accounts trigger post/comment events with userId t2_0 or t2_deleted, which cannot be resolved to usernames. Without guards, this caused silent Redis corruption and gRPC errors on every AutoMod action. The fix required per-trigger guards plus a cleanup pass in the daily scheduler.
What I Learned
Ship to real moderators early. The feedback from actual mods — including the developer of Bot Bouncer, one of Reddit's most established bot-detection tools — was more valuable than any amount of internal testing. Every major architectural decision in the final version came from someone actually using the tool in a live subreddit.
Built With
- automoderator-wiki-api)
- cosine-similarity
- custom-post-webview
- devvit-0.12
- devvit-scheduler
- devvit-triggers-(onpostcreate
- jaccard
- modmail
- oncommentcreate
- onpostupdate)
- reddit-api-(banuser
- redis-(devvit-kv-store)
- reportcontent
- shannon-entropy
- typescript

Log in or sign up for Devpost to join the conversation.