Reddit research / listening pulse
Global Reddit search, subreddit-scoped queries, and comment pulls for a product or brand listening pulse
Use Reddit for switching stories, competitor mentions, and early complaint signal. Start with a global keyword sweep, narrow to the communities that matter, then pull comments on high-signal threads.
You'll need an API key and the TypeScript SDK. Platform hub: Reddit.
Credit budget
What this costs
Global search, subreddit search, subreddit post lists, and comment pages are 1 credit per successful page. A sprint with 12 query variants × 2 pages + 20 comment pulls is roughly 44 credits before dedupe. Empty completed searches still bill.
Subreddit names are case-sensitive (r/SaaS ≠ r/saas). Pass the casing from the URL.
Routes
| Goal | Route | SDK |
|---|---|---|
| Global posts | GET /v1/reddit/search | client.reddit.search({ query, sortBy?, timeframe?, cursor? }) |
| Subreddit metadata | GET /v1/reddit/subreddits | client.reddit.getSubreddit({ subreddit }) |
| Subreddit feed | GET /v1/reddit/subreddits/{subreddit}/posts | client.reddit.listSubredditPosts({ subreddit, sort?, timeframe? }) |
| Search inside a subreddit | GET /v1/reddit/subreddits/search | client.reddit.searchSubreddit({ subreddit, query?, … }) |
| Comments | GET /v1/reddit/posts/comments | client.reddit.listPostComments({ url, cursor? }) |
Listening pulse
import { SocialFetchClient } from "@socialfetch/sdk";
const client = new SocialFetchClient({
apiKey: process.env.SOCIALFETCH_API_KEY!,
});
const QUERIES = [
"acme alternative",
"switching from acme",
"acme too expensive",
];
const SUBREDDITS = ["SaaS", "startups", "ProductManagement"];
async function redditPulse() {
const hits = [];
for (const query of QUERIES) {
const global = await client.reddit.search({
query,
sortBy: "new",
timeframe: "week",
});
if (!global.ok) {
console.error(global.error.code, global.error.requestId);
continue;
}
hits.push({
scope: "global" as const,
query,
posts: global.value.data.posts ?? [],
creditsCharged: global.value.meta.creditsCharged,
requestId: global.value.meta.requestId,
});
}
for (const subreddit of SUBREDDITS) {
const scoped = await client.reddit.searchSubreddit({
subreddit,
query: "acme",
sort: "new",
timeframe: "week",
});
if (!scoped.ok) {
console.error(scoped.error.code, scoped.error.requestId);
continue;
}
hits.push({
scope: "subreddit" as const,
subreddit,
query: "acme",
posts: scoped.value.data.posts ?? [],
creditsCharged: scoped.value.meta.creditsCharged,
requestId: scoped.value.meta.requestId,
});
}
return hits;
}Pull comments on top threads
async function enrichWithComments(postUrl: string) {
const comments = await client.reddit.listPostComments({
url: postUrl,
});
if (!comments.ok) {
return { ok: false as const, error: comments.error };
}
return {
ok: true as const,
lookupStatus: comments.value.data.lookupStatus,
comments: comments.value.data.comments ?? [],
creditsCharged: comments.value.meta.creditsCharged,
requestId: comments.value.meta.requestId,
};
}Dedupe by post id across query variants. Store capturedAt — Reddit ranking moves; each poll is a snapshot.
For brand monitors that also cover TikTok / X / YouTube, pair this recipe with Brand monitoring. Full research sprint: Reddit product research.
Agents
MCP: connect MCP, then call Reddit tools by name or discover with nl_ask_post ("Search Reddit for switching from Notion"). Prefer typed tools once routed.