Reddit Growth
Grow a brand's presence on Reddit the way Reddit actually rewards: find the communities that fit, match a specific piece of content to the best ones with a tailored angle, and rewrite it in native Reddit voice — then hand it to the human to review and post.
When to Use
Use this skill when a user wants to find subreddits that fit their brand, match an existing piece of content (blog post, post draft) to the best-fit communities with a posting angle, or get a Reddit-native rewrite of content before posting it themselves.
When NOT to Use
Not for automatically publishing to Reddit — PostKing never posts on the brand's behalf; this skill only prepares review-ready drafts. Not for other-platform content generation or scheduling — that's postking-social/postking. Not for applying a saved voice profile in general — that's postking-brand-voice (this skill only consumes a voiceId from it).
Minimal tool subset
This skill needs only these tools out of PostKing's 200+:
reddit_generate_pool — crawl Reddit and build the brand's fit-scored subreddit pool from brand signals (async).
reddit_get_pool — read the saved pool, sorted most-relevant first; each row includes posting_style and no_promotion_reason.
reddit_discover_subreddits — search Reddit with explicit queries for candidates beyond the brand-signal pool (sync, 15 credits flat).
reddit_add_to_pool — add chosen subreddits to the pool by name (sync, 0 credits).
reddit_remove_from_pool — prune subreddits from the pool by name (sync, 0 credits).
reddit_suggest — match a piece of content to up to 8 best-fit subreddits with posting angles (sync, 0 credits).
reddit_rewrite — natively rewrite a post for a specific subreddit, optionally in a saved voice.
reddit_list_posts — list previously rewritten Reddit posts.
list_voices — get a voiceId to pass into reddit_rewrite.
get_job — poll reddit_generate_pool.
Optional: reddit_global_pool — informational stats on the global known-subreddit dataset (not brand-specific). get_post — fallback poll if reddit_rewrite times out and returns a postId instead of a finished draft.
Prerequisites
- Authenticated with credits — see the
postking-getting-started skill.
- A brand already onboarded — see the
postking-getting-started skill.
Procedure
"Find subreddits for us and turn this blog post into a Reddit post."
Async tools return { operationId, status } — poll get_job({ operationId }) until state is completed, failed, partially_failed, or cancelled.
- Build the pool.
reddit_generate_pool({ brandId }) → async, poll get_job. Crawls Reddit and builds the brand's fit-scored subreddit pool from brand signals alone. Only needs to run once per brand (re-run occasionally to refresh). See "Manual subreddit curation" below for the alternative/companion path when the user wants to search in a specific direction instead of (or in addition to) this brand-signal crawl.
- Review the pool.
reddit_get_pool({ brandId, top }) — the fit-scored subreddit pool, most relevant first. This is the brand-level match: no content needed yet. Each row's posting_style and no_promotion_reason fields are where you read a community's posting norms and promo tolerance — there is no separate "get subreddit rules" tool, it's surfaced here.
- Match content.
reddit_suggest({ postId }) (an existing BlogArticle id) or reddit_suggest({ title, content, detail: "medium" }) (pasted content) — returns up to 8 best-fit subreddits from the pool, each with 2–3 posting angles (angle type + tailored title + framing hook), match_score, promotion_mode, buyer_intent, reason, and rule_to_watch. Use detail: "medium" to get all angles plus reason/rule_to_watch. Requires the pool from step 1 to exist.
- (Optional) Pick a voice.
list_voices({}) → get a voiceId, or use "none" for no voice. See the postking-brand-voice skill for details on managing voice profiles.
- Rewrite natively.
reddit_rewrite({ subreddit, voiceId, sourcePostId, angle, length, variations }) (or sourceContent + optional sourceTitle instead of sourcePostId) — subreddit and angle should come from reddit_suggest's results; voiceId is required. Usually returns the finished post inline; if it returns a postId instead, poll get_post({ postId }) until operationStatus is COMPLETED.
- Review saved posts.
reddit_list_posts({ brandId }) — cursor-paginated list of past rewrites, each with outputData (redditTitle, body, notes, wordCount, angle, length, subreddit).
Important — Reddit is repurpose-to-review, not scheduled publishing. PostKing does not post to Reddit on the brand's behalf. reddit_rewrite produces a review-ready native draft; the human copies it into Reddit and posts it themselves. Always surface the suggested rule_to_watch and promotion_mode to the user before they post, so they don't get a post removed for breaking a community's rules.
Manual subreddit curation
reddit_generate_pool only finds subreddits from brand signals. Use this path instead (or alongside it) when the user wants to search in a specific direction — a competitor's niche, a product category, a named community they've heard of.
- Discover.
reddit_discover_subreddits({ queries, context, minSubs }) — 1–8 explicit search queries, sync, 15 credits flat per call regardless of cache state. Pass context to disambiguate ambiguous terms (e.g. a brand name that also means something else). Returns candidates sorted by subscriber count, each flagged already_in_pool and already_cached. This only returns candidates — it does not add anything to the pool.
- Add.
reddit_add_to_pool({ names }) — add the user's picks by name, 1–25 per call, free. Each name is resolved live against Reddit and merged into the pool. Partial success is normal, not an error: check the returned failed array — retryable: true means a transient lookup failure (retry the call), retryable: false means the subreddit itself can't be added (nonexistent/banned/private).
- Remove.
reddit_remove_from_pool({ names }) — prune by name, 1–50 per call, free, case-insensitive. Brand-scoped unsubscribe only — it never touches the platform's global subreddit cache, so re-adding later is cheap. Names not currently in the pool come back in notFound, which is still success.
Note: reddit_rewrite auto-adds whatever subreddit(s) it targets to the pool at rewrite time, before the draft is even reviewed — so reddit_add_to_pool isn't a prerequisite for rewriting. Use it when curating the pool ahead of time, independent of any single rewrite, and use reddit_remove_from_pool afterward to prune anything a rewrite auto-added that the user doesn't want kept.
CLI fast path
The reddit_* tools are MCP-only today — there is no pking CLI equivalent.
Expected Output
A fit-scored subreddit pool for the brand, a shortlist of best-fit communities with tailored angles for a given piece of content, and a Reddit-native rewritten draft (with rule/promotion-mode guidance) ready for human review and posting.
Pitfalls
- Empty pool / "no subreddit pool yet" on
reddit_suggest or reddit_rewrite — run reddit_generate_pool and poll get_job to completion first.
- Expecting
reddit_discover_subreddits to save results — it only returns candidates; call reddit_add_to_pool with the chosen names to actually add them.
- Subreddit not in pool on
reddit_rewrite — pick a subreddit value from reddit_get_pool or a reddit_suggest result rather than typing one in.
INSUFFICIENT_CREDITS — surface the checkoutUrl from the error envelope and stop, or hand off to the postking-getting-started skill's billing section (billing_list_packs → billing_topup).
RATE_LIMITED — back off using the retryAfter value from the error envelope before retrying.
UNAUTHORIZED — re-run the login flow described in the postking-getting-started skill.
Verification
reddit_get_pool({ brandId }) should return a non-empty pool after reddit_generate_pool completes.
reddit_list_posts({ brandId }) should include the new draft after reddit_rewrite finishes.
1---2name: postking-reddit3description: Build a fit-scored subreddit pool for a brand, match content to the best communities with posting angles, and natively rewrite a post for a specific subreddit before a human posts it.4license: MIT5---67# Reddit Growth89Grow a brand's presence on Reddit the way Reddit actually rewards: find the communities that fit, match a specific piece of content to the best ones with a tailored angle, and rewrite it in native Reddit voice — then hand it to the human to review and post.1011## When to Use1213Use this skill when a user wants to find subreddits that fit their brand, match an existing piece of content (blog post, post draft) to the best-fit communities with a posting angle, or get a Reddit-native rewrite of content before posting it themselves.1415## When NOT to Use1617Not for automatically publishing to Reddit — PostKing never posts on the brand's behalf; this skill only prepares review-ready drafts. Not for other-platform content generation or scheduling — that's `postking-social`/`postking`. Not for applying a saved voice profile in general — that's `postking-brand-voice` (this skill only consumes a `voiceId` from it).1819## Minimal tool subset2021This skill needs only these tools out of PostKing's 200+:2223- `reddit_generate_pool` — crawl Reddit and build the brand's fit-scored subreddit pool from brand signals (async).24- `reddit_get_pool` — read the saved pool, sorted most-relevant first; each row includes `posting_style` and `no_promotion_reason`.25- `reddit_discover_subreddits` — search Reddit with explicit queries for candidates beyond the brand-signal pool (sync, 15 credits flat).26- `reddit_add_to_pool` — add chosen subreddits to the pool by name (sync, 0 credits).27- `reddit_remove_from_pool` — prune subreddits from the pool by name (sync, 0 credits).28- `reddit_suggest` — match a piece of content to up to 8 best-fit subreddits with posting angles (sync, 0 credits).29- `reddit_rewrite` — natively rewrite a post for a specific subreddit, optionally in a saved voice.30- `reddit_list_posts` — list previously rewritten Reddit posts.31- `list_voices` — get a `voiceId` to pass into `reddit_rewrite`.32- `get_job` — poll `reddit_generate_pool`.3334Optional: `reddit_global_pool` — informational stats on the global known-subreddit dataset (not brand-specific). `get_post` — fallback poll if `reddit_rewrite` times out and returns a `postId` instead of a finished draft.3536## Prerequisites37381. Authenticated with credits — see the `postking-getting-started` skill.392. A brand already onboarded — see the `postking-getting-started` skill.4041## Procedure4243> "Find subreddits for us and turn this blog post into a Reddit post."4445Async tools return `{ operationId, status }` — poll `get_job({ operationId })` until `state` is `completed`, `failed`, `partially_failed`, or `cancelled`.46471. **Build the pool.** `reddit_generate_pool({ brandId })` → async, poll `get_job`. Crawls Reddit and builds the brand's fit-scored subreddit pool from brand signals alone. Only needs to run once per brand (re-run occasionally to refresh). See "Manual subreddit curation" below for the alternative/companion path when the user wants to search in a specific direction instead of (or in addition to) this brand-signal crawl.482. **Review the pool.** `reddit_get_pool({ brandId, top })` — the fit-scored subreddit pool, most relevant first. This is the brand-level match: no content needed yet. Each row's `posting_style` and `no_promotion_reason` fields are where you read a community's posting norms and promo tolerance — there is no separate "get subreddit rules" tool, it's surfaced here.493. **Match content.** `reddit_suggest({ postId })` (an existing BlogArticle id) or `reddit_suggest({ title, content, detail: "medium" })` (pasted content) — returns up to 8 best-fit subreddits from the pool, each with 2–3 posting angles (angle type + tailored title + framing hook), `match_score`, `promotion_mode`, `buyer_intent`, `reason`, and `rule_to_watch`. Use `detail: "medium"` to get all angles plus `reason`/`rule_to_watch`. Requires the pool from step 1 to exist.504. **(Optional) Pick a voice.** `list_voices({})` → get a `voiceId`, or use `"none"` for no voice. See the `postking-brand-voice` skill for details on managing voice profiles.515. **Rewrite natively.** `reddit_rewrite({ subreddit, voiceId, sourcePostId, angle, length, variations })` (or `sourceContent` + optional `sourceTitle` instead of `sourcePostId`) — `subreddit` and `angle` should come from `reddit_suggest`'s results; `voiceId` is required. Usually returns the finished post inline; if it returns a `postId` instead, poll `get_post({ postId })` until `operationStatus` is `COMPLETED`.526. **Review saved posts.** `reddit_list_posts({ brandId })` — cursor-paginated list of past rewrites, each with `outputData` (redditTitle, body, notes, wordCount, angle, length, subreddit).5354**Important — Reddit is repurpose-to-review, not scheduled publishing.** PostKing does not post to Reddit on the brand's behalf. `reddit_rewrite` produces a review-ready native draft; the human copies it into Reddit and posts it themselves. Always surface the suggested `rule_to_watch` and `promotion_mode` to the user before they post, so they don't get a post removed for breaking a community's rules.5556## Manual subreddit curation5758`reddit_generate_pool` only finds subreddits from brand signals. Use this path instead (or alongside it) when the user wants to search in a specific direction — a competitor's niche, a product category, a named community they've heard of.59601. **Discover.** `reddit_discover_subreddits({ queries, context, minSubs })` — 1–8 explicit search queries, sync, 15 credits flat per call regardless of cache state. Pass `context` to disambiguate ambiguous terms (e.g. a brand name that also means something else). Returns candidates sorted by subscriber count, each flagged `already_in_pool` and `already_cached`. **This only returns candidates — it does not add anything to the pool.**612. **Add.** `reddit_add_to_pool({ names })` — add the user's picks by name, 1–25 per call, free. Each name is resolved live against Reddit and merged into the pool. Partial success is normal, not an error: check the returned `failed` array — `retryable: true` means a transient lookup failure (retry the call), `retryable: false` means the subreddit itself can't be added (nonexistent/banned/private).623. **Remove.** `reddit_remove_from_pool({ names })` — prune by name, 1–50 per call, free, case-insensitive. Brand-scoped unsubscribe only — it never touches the platform's global subreddit cache, so re-adding later is cheap. Names not currently in the pool come back in `notFound`, which is still success.6364Note: `reddit_rewrite` auto-adds whatever subreddit(s) it targets to the pool at rewrite time, before the draft is even reviewed — so `reddit_add_to_pool` isn't a prerequisite for rewriting. Use it when curating the pool ahead of time, independent of any single rewrite, and use `reddit_remove_from_pool` afterward to prune anything a rewrite auto-added that the user doesn't want kept.6566## CLI fast path6768The `reddit_*` tools are MCP-only today — there is no `pking` CLI equivalent.6970## Expected Output7172A fit-scored subreddit pool for the brand, a shortlist of best-fit communities with tailored angles for a given piece of content, and a Reddit-native rewritten draft (with rule/promotion-mode guidance) ready for human review and posting.7374## Pitfalls7576- Empty pool / "no subreddit pool yet" on `reddit_suggest` or `reddit_rewrite` — run `reddit_generate_pool` and poll `get_job` to completion first.77- Expecting `reddit_discover_subreddits` to save results — it only returns candidates; call `reddit_add_to_pool` with the chosen names to actually add them.78- Subreddit not in pool on `reddit_rewrite` — pick a `subreddit` value from `reddit_get_pool` or a `reddit_suggest` result rather than typing one in.79- `INSUFFICIENT_CREDITS` — surface the `checkoutUrl` from the error envelope and stop, or hand off to the `postking-getting-started` skill's billing section (`billing_list_packs` → `billing_topup`).80- `RATE_LIMITED` — back off using the `retryAfter` value from the error envelope before retrying.81- `UNAUTHORIZED` — re-run the login flow described in the `postking-getting-started` skill.8283## Verification8485- `reddit_get_pool({ brandId })` should return a non-empty pool after `reddit_generate_pool` completes.86- `reddit_list_posts({ brandId })` should include the new draft after `reddit_rewrite` finishes.