For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Connect
DocumentationAPI ReferenceKnowledge Base
DocumentationAPI ReferenceKnowledge Base
  • Get Started
    • Welcome
    • Introduction
    • Quickstart
  • Core Concepts
    • Admin Tools
    • LinkedIn Tools
    • Reddit Tools
    • Email Tools
    • Signals Tools
    • Tokens & Billing
  • Integrations
    • Agent Onboarding
    • MCP
    • REST API
    • CLI
    • Browser Extension
  • Skills
    • Outbound Sales
    • LinkedIn Copywriter
    • Reddit Community Manager
  • Guides
    • Outbound
    • Results Ranking Optimization
  • Best Practices
    • Tool Selection
    • Token Efficiency
  • Examples
    • Lead Enrichment
    • Signal Pipeline
  • Resources
    • FAQ
    • Community
Connect
LogoLogo
On this page
  • Tools
  • Sessions: the browser extension
  • Reading a thread
  • Posting and commenting
  • Voting
  • Inbox
  • Outreach
  • Discover
  • Evaluate
  • Follow up
  • Organize
  • Next steps
Core Concepts

Reddit Tools

Full Reddit automation — discover threads, evaluate posters, post + comment, vote, follow, organize, DM via Reddit Chat

Was this page helpful?
Previous

Email Tools

SMTP-verified professional email finding

Next
Built with

The Reddit category covers the full Reddit-engagement loop. 21 tools organized by workflow stage — discover relevant threads, evaluate posters before engaging, post + comment + vote, follow up on conversations, and organize subscriptions + custom feeds. Every write action — and every read that Reddit gates from cloud-datacenter IPs — runs through a logged-in session shared via the browser extension, so the same identity (and karma) persists across calls.

New to Reddit outreach? Read the Results Ranking Optimization guide first — it covers the should-I-reply gate, anti-spam rules, and the engagement style that doesn’t get accounts shadowbanned.

Tools

ToolTokensDescription
Account
list_connected_reddit_accounts0List connected Reddit accounts
Discover
search_reddit_posts2Search Reddit posts by keyword (optionally restricted to a subreddit)
list_subreddit_posts1List posts from a subreddit (hot / new / top / rising / controversial / best)
search_reddit_subreddits1Search subreddits by name or description
get_subreddit_about1Get a subreddit’s metadata + rules (compliance check before posting)
Evaluate
get_reddit_post1Get a Reddit post and its full comment tree
get_reddit_user1Get a user’s karma, account age, and verified flags (credibility check)
list_reddit_user_posts1List a user’s recent posts and/or comments
Engage
create_reddit_comment5Reply to a Reddit post or comment
create_reddit_post5Submit a new post to a subreddit (text or link)
vote_reddit1Upvote, downvote, or clear a vote on a post or comment
send_reddit_message5Send a direct message to a Reddit user
Follow up
follow_reddit_post1Follow/unfollow a post for new-comment notifications (best-effort)
save_reddit_thing1Save (or unsave) a post/comment to your engagement queue
list_reddit_saved1List saved posts and comments
list_reddit_inbox1Read DMs, comment replies, post replies, and mentions
Organize
subscribe_reddit_subreddit1Bulk subscribe/unsubscribe to subreddits
list_reddit_subscriptions1List subreddits the connected account is subscribed to
list_reddit_custom_feeds1List the connected account’s custom feeds (multireddits)
list_reddit_custom_feed_posts1List posts from a custom feed, merged across subreddits
create_reddit_custom_feed5Create a custom feed (multireddit) from a list of subreddits

Sessions: the browser extension

Write tools (create_reddit_comment, create_reddit_post, vote_reddit, send_reddit_message) and the personal read tool (list_reddit_inbox) need a logged-in Reddit session. get_reddit_post also routes through a pooled session — Reddit 403s unauthenticated reads from cloud-datacenter IPs even for fully public threads, so the tool uses any pooled bearer to route the read through oauth.reddit.com (authenticated reads work from any IP).

The session is shared through the GTM Tools browser extension: install it, press Connect, and stay logged into Reddit in that browser. The pool re-syncs the moment Reddit rotates the session token, so the bearer the tools use always tracks your live browser.

list_connected_reddit_accounts shows which accounts are active in the workspace pool. Each row carries:

  • reddit_username — pass this to any write tool as senderUsername
  • connected_by — the teammate whose browser contributed the session
  • last_synced — when the cookies were last refreshed
  • status — ready (account is usable) or stale (cookies present but Reddit’s /api/me.json doesn’t recognize them; reopen reddit.com to refresh)

Reading a thread

get_reddit_post returns the post and the full comment tree in a single call — Reddit’s /comments/<id>.json endpoint does both at once, so we don’t split it into a separate list_reddit_post_comments tool the way LinkedIn does.

$curl -X POST https://api.gtm-tools.sh/api/v0/get_reddit_post \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"url": "https://www.reddit.com/r/SaaS/comments/1abcde/some_slug/"}'

The response shape:

1{
2 "status": "ok",
3 "post": {
4 "id": "1abcde",
5 "title": "...",
6 "author": "rlnerd",
7 "subreddit": "SaaS",
8 "body": "...", // selftext for text posts
9 "url": "...", // external URL for link posts
10 "permalink": "https://www.reddit.com/r/SaaS/comments/1abcde/some_slug/",
11 "score": 42,
12 "num_comments": 38,
13 "created_utc": 1735000000,
14 "over_18": false,
15 "flair": null
16 },
17 "comments": [
18 {
19 "id": "abc123",
20 "author": "u1",
21 "body": "...",
22 "score": 8,
23 "created_utc": 1735000100,
24 "url": "https://www.reddit.com/r/SaaS/comments/1abcde/some_slug/abc123/",
25 "replies": [ /* recursive */ ],
26 "more_replies": 5 // unloaded child replies, if Reddit truncated
27 }
28 ],
29 "more_top_level": 0 // unloaded top-level comments, if any
30}

Each comment’s url is a permalink ready to pass back to create_reddit_comment for a threaded reply. more_replies and more_top_level surface truncation when a thread is too deep / long for a single response — Reddit returns “more” placeholders rather than hiding them, and so do we.

Accepted URL shapes for get_reddit_post:

  • https://www.reddit.com/r/<sub>/comments/<post>/<slug>/
  • https://www.reddit.com/r/<sub>/comments/<post>/<slug>/<commentId>/ (comment URL — resolves to the same post)
  • https://old.reddit.com/r/<sub>/comments/<post>/<slug>
  • https://www.reddit.com/comments/<post>
  • https://redd.it/<post>

Posting and commenting

create_reddit_comment works for both top-level replies on a post and threaded replies on a specific comment — the URL shape decides:

URL patternResulting reply
Post URL (/comments/<post>/<slug>/)Top-level comment on the post (thing_id=t3_<post>)
Comment URL (/comments/<post>/<slug>/<commentId>/)Threaded reply to that comment (thing_id=t1_<commentId>)
$# Top-level comment on a post
$curl -X POST https://api.gtm-tools.sh/api/v0/create_reddit_comment \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "senderUsername": "arnaudjnn",
> "url": "https://www.reddit.com/r/SaaS/comments/1abcde/some_slug/",
> "body": "+1 on the multi-room point — that's the underrated bit."
> }'

create_reddit_post submits either a text post (body, Markdown supported) or a link post (linkUrl) — provide exactly one. The subreddit field accepts hermesagent, r/hermesagent, or /r/hermesagent (the r/ prefix is stripped). Optional flags: nsfw, spoiler, sendReplies (default true — Reddit DMs you when people reply).

$# Text post
$curl -X POST https://api.gtm-tools.sh/api/v0/create_reddit_post \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "senderUsername": "arnaudjnn",
> "subreddit": "u_arnaudjnn",
> "title": "Shipped a new Reddit MCP",
> "body": "We just added 7 Reddit tools to gtm-tools. Markdown works here."
> }'
$
$# Link post
$curl -X POST https://api.gtm-tools.sh/api/v0/create_reddit_post \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "senderUsername": "arnaudjnn",
> "subreddit": "SaaS",
> "title": "Reddit Chat is built on Matrix",
> "linkUrl": "https://gtm-tools.sh/documentation/core-concepts/reddit-tools"
> }'

To post to your own profile (Reddit treats user profiles as a special subreddit), use u_<username> as the subreddit name.

Voting

vote_reddit takes a post or comment URL and a direction:

directionReddit’s dirEffect
up1Upvote
down-1Downvote
none0Clear any existing vote
$curl -X POST https://api.gtm-tools.sh/api/v0/vote_reddit \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "senderUsername": "arnaudjnn",
> "url": "https://www.reddit.com/r/SaaS/comments/1abcde/some_slug/abc123/",
> "direction": "up"
> }'

Reddit silently returns {} on success; the tool surfaces {status: "ok", thing_id, direction} so you have something concrete to log against.

Inbox

list_reddit_inbox reads any of the 6 Reddit inbox tabs via a filter enum:

filterReddit endpointWhat it returns
all (default)/message/inboxEverything: DMs + comment replies + post replies + mentions
unread/message/unreadOnly unread items
messages/message/messagesDMs only (legacy PM thread items)
comment_replies/message/commentsReplies to your comments
post_replies/message/selfreplyReplies to your posts
mentions/message/mentionsUsername mentions

Each item carries:

FieldTypeNotes
idstringFullname: t4_<x> for DMs, t1_<x> for comment-derived items
typeenummessage / comment_reply / post_reply / mention
authorstringSender username
subjectstring?DMs only
bodystringMessage body
created_utcnumberUnix timestamp
unreadbooleanRead state at fetch time
subredditstring?Comment-derived items only
link_titlestring?Comment-derived items only — the parent post’s title
context_urlstring?Permalink to the comment in-thread — pass to create_reddit_comment to reply
parent_idstring?DM thread parent
first_message_idstring?First message in a DM thread
$# Read recent comment replies and mentions without marking them read
$curl -X POST https://api.gtm-tools.sh/api/v0/list_reddit_inbox \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"username": "arnaudjnn", "filter": "comment_replies", "limit": 20}'

markRead defaults to false so an agent can peek without mutating state. Pass markRead: true to flip items to read on fetch.

Outreach

send_reddit_message sends a direct message that lands in the recipient’s “Chats” tab. It works for every Reddit account — modern and legacy — because under the hood it targets Reddit’s chat infrastructure (Matrix Client-Server API against matrix.redditspace.com) rather than the deprecated /api/compose PM endpoint, which newer accounts can’t receive.

ParameterTypeRequiredDescription
senderUsernamestringYesThe connected Reddit account to send as (reddit_username from list_connected_reddit_accounts)
recipientUsernamestringYesReddit username of the recipient (with or without u/ prefix)
messagestringYesMessage body in plain text (max 10000 chars; Reddit Chat does not render Markdown)
$curl -X POST https://api.gtm-tools.sh/api/v0/send_reddit_message \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "senderUsername": "arnaudjnn",
> "recipientUsername": "SienaCX",
> "message": "Hey — saw your post on agent gateways. Worth a 15-min chat?"
> }'

On success the tool returns {status: "ok", event_id, room_id, recipient, recipient_matrix_id}. If a DM room with the recipient already exists, the message lands there; otherwise the tool creates a direct room (preset trusted_private_chat) and registers it as a DM so Reddit’s UI groups it correctly.

Why Matrix? Reddit migrated chat off Sendbird onto a Matrix homeserver at matrix.redditspace.com. The Reddit token_v2 cookie is the Matrix access token — no separate login or token exchange. User IDs are @t2_<reddit_account_id>:reddit.com. E2EE is off by default. This is why send_reddit_message works universally while the legacy PM system fails for the majority of modern accounts.

Discover

The discovery stage finds threads worth engaging with. Four tools cover keyword surveillance, subreddit shortlisting, daily monitoring, and the all-important compliance check.

$# Search for threads matching a query (workhorse — start most workflows here)
$curl -X POST https://api.gtm-tools.sh/api/v0/search_reddit_posts \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"query":"signal vs matrix self-hosted","subreddit":"selfhosted","sort":"relevance","time_window":"month","limit":25}'
$
$# Daily monitoring scan — `rising` finds threads with momentum (good for being first to comment)
$curl -X POST https://api.gtm-tools.sh/api/v0/list_subreddit_posts \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"subreddit":"selfhosted","sort":"rising","limit":25}'
$
$# Shortlist relevant subreddits before subscribing or monitoring
$curl -X POST https://api.gtm-tools.sh/api/v0/search_reddit_subreddits \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"query":"agent automation","sort":"relevance","limit":10}'
$
$# **Compliance gate** — call this before posting in a new subreddit
$curl -X POST https://api.gtm-tools.sh/api/v0/get_subreddit_about \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"subreddit":"selfhosted"}'
$# Returns: { about: {name, subscribers, allow_images, restrict_posting, ...},
># rules: [{name, description, applies_to: "all|link|comment", priority}] }

get_subreddit_about returns both the subreddit’s metadata and its rules. Reddit playbooks unanimously flag rule-violations as the #1 shadowban trigger — create_reddit_post and create_reddit_comment won’t check rules for you, the agent has to.

Evaluate

Before engaging, confirm the poster is your ICP (not a bot, not a serial promoter). Two tools cover the credibility check + posting history.

$# Credibility check — karma, account age, verified email
$curl -X POST https://api.gtm-tools.sh/api/v0/get_reddit_user \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"username":"rlnerd"}'
$
$# Posting history — which subreddits, what they talk about
$curl -X POST https://api.gtm-tools.sh/api/v0/list_reddit_user_posts \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"username":"rlnerd","type":"overview","sort":"new","limit":25}'

Red flags to filter out: very young account (under 30 days) with disproportionately high karma; lopsided ratio of posts to comments (real users do both); posting concentrated in known promotional subs.

Follow up

After engaging, you want notifications and a queue. save_reddit_thing doubles as a CRM-style queue via the optional category label.

$# Follow a post for new-comment notifications
$curl -X POST https://api.gtm-tools.sh/api/v0/follow_reddit_post \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"senderUsername":"arnaudjnn","url":"https://www.reddit.com/r/...","follow":true}'
$
$# Save a post with a CRM-stage category
$curl -X POST https://api.gtm-tools.sh/api/v0/save_reddit_thing \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"senderUsername":"arnaudjnn","url":"https://www.reddit.com/r/...","action":"save","category":"p0-reply"}'
$
$# Read the engagement queue back
$curl -X POST https://api.gtm-tools.sh/api/v0/list_reddit_saved \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"senderUsername":"arnaudjnn","limit":50}'

follow_reddit_post is best-effort. Reddit’s /api/follow_post endpoint is used by the mobile/web clients but isn’t part of Reddit’s documented API. The tool surfaces a clean error if Reddit returns 404; fall back to polling get_reddit_post on a schedule if that happens.

Organize

Custom feeds (Reddit calls them “multireddits”) bundle multiple subreddits into a single stream — one feed per ICP / persona / monitoring theme, then list_reddit_custom_feed_posts reads the merged stream in one call.

$# Bulk-subscribe to your shortlist (also a credibility signal — moderators
># check whether new accounts have organic subscriptions)
$curl -X POST https://api.gtm-tools.sh/api/v0/subscribe_reddit_subreddit \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"senderUsername":"arnaudjnn","subreddits":["selfhosted","privacy","Matrix","HomeNetworking"],"action":"sub"}'
$
$# Audit current subscriptions
$curl -X POST https://api.gtm-tools.sh/api/v0/list_reddit_subscriptions \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"senderUsername":"arnaudjnn","limit":100}'
$
$# Create a "self-hosted infra" monitoring feed
$curl -X POST https://api.gtm-tools.sh/api/v0/create_reddit_custom_feed \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "senderUsername":"arnaudjnn",
> "name":"selfhost_infra",
> "subreddits":["selfhosted","homelab","HomeNetworking","privacy","Matrix"],
> "visibility":"private",
> "description":"Monitoring feed for self-hosted infra discussions"
> }'
$
$# Daily read — merged feed across all 5 subreddits in one call
$curl -X POST https://api.gtm-tools.sh/api/v0/list_reddit_custom_feed_posts \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"senderUsername":"arnaudjnn","feed_name":"selfhost_infra","sort":"rising","limit":50}'

Next steps

LinkedIn Tools

LinkedIn automation — the cross-platform counterpart to Reddit outreach.

Email Tools

Verify professional emails for prospects you find via Reddit.

Browser Extension

Install the extension and connect your Reddit session.