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/SaaSr/saas). Pass the casing from the URL.

Routes

GoalRouteSDK
Global postsGET /v1/reddit/searchclient.reddit.search({ query, sortBy?, timeframe?, cursor? })
Subreddit metadataGET /v1/reddit/subredditsclient.reddit.getSubreddit({ subreddit })
Subreddit feedGET /v1/reddit/subreddits/{subreddit}/postsclient.reddit.listSubredditPosts({ subreddit, sort?, timeframe? })
Search inside a subredditGET /v1/reddit/subreddits/searchclient.reddit.searchSubreddit({ subreddit, query?, … })
CommentsGET /v1/reddit/posts/commentsclient.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.

On this page