Reddit Comment Generator V5 — User Prompt
This user prompt is designed to pair with the V5 unified system prompt (reddit-comment-system-prompt-v5-unified.md). It provides the post details and additional context the model needs for both safety classification and comment generation.
V5 covers BOTH karma-farming subreddits AND GrowReach ICP subreddits (business, startup, marketing, sales, LinkedIn, agency). The JSON input schema is identical to V4 — the RPA builds this JSON the same way regardless of subreddit type. V5 adds the top_comments field — the RPA builds this JSON the same way regardless of subreddit type.
Input Format
Send the following JSON as the user message. All fields are required unless marked optional.
{
"subreddit": "subreddit_name",
"post_title": "The post title",
"post_content": "The post body or text content. For image/video posts, include any caption or description.",
"post_age_minutes": 45,
"existing_comments": 12,
"post_author": "username",
"post_type": "text",
"profile_username": "our_account_username",
"profile_karma": 180,
"profile_age_days": 52,
"profile_timezone": "EDT",
"current_hour": 14
,
"top_comments": [
{
"score": 482,
"body": "full top comment (by highest no of upvotes) text"
},
{
"score": 210,
"body": "full top comment (by 2nd highest no of upvotes) text"
}
]
}Field Descriptions
| Field | Required | Type | Description |
|---|---|---|---|
subreddit | ✅ Yes | string | The subreddit name without r/ prefix (e.g., “Advice”, “CasualConversation”, “GirlDinnerDiaries”, “sales”, “LinkedInLunatics”) |
post_title | ✅ Yes | string | The full post title |
post_content | ✅ Yes | string | The post body, text content, or caption. For image/video posts, describe what’s visible if available |
post_age_minutes | ✅ Yes | integer | How many minutes ago the post was made. 0 if brand new. Helps the model decide if the post is still worth commenting on |
existing_comments | ✅ Yes | integer | How many comments already exist on the post. Helps the model decide if the post is too crowded |
post_author | ❌ No | string | The Reddit username of the post author. Used for context only |
post_type | ❌ No | string | One of: “text”, “image”, “video”, “link”. Defaults to “text” if omitted |
profile_username | ❌ No | string | Our account’s Reddit username. Used for context (e.g., avoiding commenting on the same post twice) |
profile_karma | ❌ No | integer | Our account’s current total karma. Some subreddits have karma thresholds |
profile_age_days | ❌ No | integer | Our account’s age in days. Newer accounts may need to avoid certain subreddits |
profile_timezone | ❌ No | string | Our account’s timezone (e.g., “EDT”, “BST”, “AEST”). Used to determine if the current hour is appropriate |
current_hour | ❌ No | integer | Current hour in the profile’s timezone (0-23). Helps the model avoid posting at odd hours |
top_comments | ❌ No | array | Top 2 comments by score on the post. Each entry: {score: int, body: string}. [] when post has < 2 comments. Full comment text (not truncated) |
Example Input
{
"subreddit": "GirlDinnerDiaries",
"post_title": "This 21 year old got me wanting to act feral",
"post_content": "Ok so I'm 26 and I got out of a 5 year relationship a few months ago. He is a very controlling narcissistic man. He wouldn't allow me to go out with friends, have Instagram, go to the gym, etc.\n\nAnyways, while planning my exit I started noticing this really cute guy that works at my local grocery store and honestly I thought he was 24/25, he always was helpful and friendly, after a few times of seeing him and breaking up with my ex I decided to ask him for his number. He shut me down and said he couldn't cause he was already with someone.\n\nWell fast forward to this past weekend, I ran into him in town while we were both out with friends, he came up to me and asked me for my number and said he was now single and left a toxic relationship, that he did want to give me his number back then but out of respect for the girl he couldn't. Now we've been talking non stop and went on a date last night, he wanted to kiss me but I didn't and now I regret it! But omgggg he makes me want to act feral!!!! Idk if it's too soon or not but man he looks sooo fine!! We're going on another date tomorrow night so I definitely plan on kissing him but don't know if to just leave it at that!!\n\nEdit: I found out he's 21 last night, I've never dated anyone younger than me before so idk if this is bad that I'm into someone that much younger than me but our goals and mindsets are very similar so so far so good.\n\nAlso he met my dog and she loved him! He was so gentle and sweet to her!",
"post_age_minutes": 35,
"existing_comments": 18,
"post_author": "ThrowRA_feralgirl",
"post_type": "text",
"profile_username": "hailybarnes37",
"profile_karma": 197,
"profile_age_days": 144,
"profile_timezone": "AEST",
"current_hour": 19
}Example Input (Image Post)
{
"subreddit": "mildlyinteresting",
"post_title": "Found a 50 year old unopened bag of chips in my grandpa's basement",
"post_content": "Image shows a vintage potato chip bag from 1976, still sealed. The packaging design is clearly from the 70s with retro fonts and colors.",
"post_age_minutes": 120,
"existing_comments": 45,
"post_type": "image",
"profile_username": "Reasonable_Owl_3998",
"profile_karma": 103,
"profile_age_days": 47,
"profile_timezone": "EDT",
"current_hour": 15
}Example Input (Advice Post)
{
"subreddit": "Advice",
"post_title": "My ex-wife has asked me to buy school supplies for all her kids and I said no but should I?",
"post_content": "My ex-wife and I have two kids together. We divorced when they were 2 and 11 months old. Co-parenting is 50/50 and I pay a small amount of child support because I make a little more than she does. She married a man with five children already and had two more children with him. She also may or may not be expecting again. I don't always trust what comes out of her mouth because she has been crazy since meeting her husband.",
"post_age_minutes": 180,
"existing_comments": 62,
"post_author": "DadWunndy",
"post_type": "text",
"profile_username": "Key_Character6482",
"profile_karma": 532,
"profile_age_days": 51,
"profile_timezone": "EDT",
"current_hour": 10
}Example Input (ICP Sales Subreddit)
{
"subreddit": "sales",
"post_title": "The reason you suck at sales is because people don't trust you",
"post_content": "I've been in sales for 6 years and I've noticed something. The reps who struggle the most are always the ones trying to sound smart, using buzzwords, pitching features nobody asked about. Meanwhile the reps who close deals just talk like normal humans. People buy from people they trust, and you can't trust someone who sounds like a walking brochure.",
"post_age_minutes": 42,
"existing_comments": 28,
"post_author": "closersmindset",
"post_type": "text",
"profile_username": "hailybarnes37",
"profile_karma": 197,
"profile_age_days": 144,
"profile_timezone": "EDT",
"current_hour": 14
}Example Input (ICP LinkedIn Snark Subreddit)
{
"subreddit": "LinkedInLunatics",
"post_title": "I reached out to 500 CEO's on LinkedIn and here's what I learned",
"post_content": "Day 47 of my journey. I sent 500 cold DMs to CEOs and got 3 responses. Two told me to stop messaging them. One said 'interesting, send a proposal' and then ghosted me. The lesson? Consistency is key. I will send 500 more next week. If you're not getting rejected, you're not trying hard enough. Comment 'IN' below and I'll send you my free PDF on cold outreach.",
"post_age_minutes": 65,
"existing_comments": 89,
"post_author": "grindsetceo",
"post_type": "text",
"profile_username": "hailybarnes37",
"profile_karma": 197,
"profile_age_days": 144,
"profile_timezone": "EDT",
"current_hour": 11
}Example Input (ICP Subreddit with Top Comments)
{
"subreddit": "sales",
"post_title": "Is anyone else seeing AI SaaS tools flooding the market?",
"post_content": "Every time I open LinkedIn or Reddit it's someone pitching their AI tool. Has the market always been this saturated or is it just me?",
"post_age_minutes": 42,
"existing_comments": 28,
"post_type": "text",
"profile_username": "hailybarnes37",
"profile_karma": 197,
"profile_age_days": 144,
"profile_timezone": "EDT",
"current_hour": 14,
"top_comments": [
{
"score": 700,
"body": "You and everyone's grandma is selling some AI solution dude"
},
{
"score": 465,
"body": "You don't count hours in sales. You get paid to produce revenue not to perform a function for a set amount of time"
}
]
}How the Backend Should Use This
- Fetch post data from Reddit API (rdt-curl or Composio)
- Enrich with profile context from the metrics database (profile_karma, profile_age_days, profile_timezone)
- Calculate post_age_minutes = current_time - post.created_utc
- Count existing_comments from the post’s comment count
- Build the JSON as shown above
- Send as user message alongside the V5 system prompt
- Parse the response — check
actionfield first. If “SKIP”, move to next post. If “SAFE”, extractcommentand post it. - Log the response — store all output fields (categories, quality_score, upvote_triggers, subreddit_template_used, word_count, strategy_used) in the metrics database alongside the comment_id and score
Data Collection for Quality Evaluation
To build the feedback loop, the backend should store these fields from every V5 response alongside the comment’s actual upvote score:
| Field | Source | Why |
|---|---|---|
action | V4 response | Track SKIP vs SAFE ratio per subreddit |
categories | V4 response | Which categories trigger SKIP most often |
sensitive | V4 response | How many sensitive posts pass through |
comment | V4 response | The actual comment text |
word_count | V4 response | Correlate with actual score to find optimal length |
subreddit_template_used | V4 response | Validate template selection accuracy |
upvote_triggers | V4 response | Find which triggers work per subreddit |
quality_score | V4 response | Calibrate model self-assessment vs real scores |
quality_notes | V4 response | Qualitative signal for prompt iteration |
strategy_used | V5 response | Which Thread Engagement strategy was used (new_angle, contrarian_take, quote_rebuttal, post_only) — correlate with actual score per subreddit |
actual_score | Reddit API (after 24h) | The ground truth — compare against quality_score |
prompt_version | Backend constant | ”v5-unified” — enables A/B testing |
Backend Processing Logic
1. Receive post from Reddit feed
2. Build user prompt JSON (subreddit + post + profile context)
3. Send system prompt + user prompt to AI model
4. Parse JSON response
5. If action == "SKIP":
- Log skip reason + categories
- Move to next post
6. If action == "SAFE":
- Log all output fields to metrics DB
- Post comment via AdsPower RPA
- After 24h, fetch actual score from Reddit
- Store actual_score alongside quality_score for comparison
7. Periodically run analyze_reddit_metrics.py to generate insights
Version History
| Version | Date | Changes |
|---|---|---|
| v3-unified | 2026-08-03 | Initial release. Unified classifier + generator in one pass. Added subreddit field, profile context, post_age_minutes, existing_comments. Structured JSON output with quality_score, upvote_triggers, subreddit_template_used. |
| v4-unified | 2026-08-07 | Added ICP subreddit templates to companion system prompt (25 business/startup/marketing/sales/LinkedIn/agency communities built from 1,748-comment analysis). Expanded Subreddit On-Topic Guide with all 25 ICP subs. Added 2 ICP example inputs (r/sales, r/LinkedInLunatics). Added quote-rebuttal, credential-take, and meta-observation fallback structures. JSON input/output schema unchanged. |
| v5-unified | 2026-08-11 | Added top_comments input field (top 2 comments by score). Added Thread Engagement strategy section with strategy_used output field (new_angle, contrarian_take, quote_rebuttal, post_only). Added anti-convergence rules to Universal Writing Rules (vary opener, don’t default to first obvious anecdote, treat optional questions as usually no). JSON schema additive only — all existing fields unchanged. |