Reddit Comments Search Scraper avatar

Reddit Comments Search Scraper

Pricing

from $4.00 / 1,000 comment founds

Go to Apify Store
Reddit Comments Search Scraper

Reddit Comments Search Scraper

Search public Reddit comments by keyword and get clean, structured records for social listening and research. Works with Apify MCP and the API.

Pricing

from $4.00 / 1,000 comment founds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

a day ago

Last modified

Share

What is Reddit Comments Search Scraper?

Reddit Comments Search Scraper finds public Reddit comments by keyword and returns one structured record per comment. It is a good fit for social listening, product research, and discussion discovery when you want clean fields such as comment text, author, subreddit, post title, score, timestamps, and source. The output is one record per matched comment, so each item represents a single public comment that matched one of your search phrases.

Best fit and connected workflows

Use this Actor when your starting point is a keyword or phrase and your goal is to discover public Reddit comments around that topic. It works well for:

  • social listening on product names, features, or category language
  • research on how people discuss a topic across Reddit
  • discovery workflows that start broad and then narrow to selected comments
  • AI agent pipelines that need structured public comment data for summarization, clustering, or review

For connected workflows, the returned public comment URLs and post identifiers can move into downstream Reddit enrichment Actors when you need more context around selected records. Verified downstream options:

Practical scenario

Maya, a product researcher, starts with the phrase "AI coding assistant" and a target community such as MachineLearning. She runs the Actor with sort set to new, time set to month, and responseFormat set to concise. The dataset returns records with body, author, subreddit, postTitle, commentUrl, score, createdAt, searchQuery, and source. Maya reviews the comment text and score, selects the comments that mention evaluation workflows, and sends those comment URLs to a downstream enrichment Actor for follow-up analysis.

Inputs

InputPurpose
queriesOne or more public comment search phrases, with up to 20 distinct phrases.
subredditOne public subreddit to focus the search, such as MachineLearning.
maxCommentsMaximum unique comments stored across all queries, from 1 to 1,000.
sortReddit ordering: relevance, new, top, or legacy comments (direct fallback uses relevance).
timeSearch window: hour, day, week, month, year, or all. Direct fallback maps hour to day and warns; inspect timestamps for exact cutoffs.
includeNsfwKeeps public results explicitly marked NSFW when that fits the research task.
responseFormatconcise for core fields or detailed for moderation and award metadata.

Example input

{
"queries": ["AI coding assistant", "LLM evaluation"],
"subreddit": "MachineLearning",
"maxComments": 100,
"sort": "new",
"time": "month",
"includeNsfw": false,
"responseFormat": "concise"
}

Output fields

FieldMeaning
recordTypeAlways comment for this focused Actor.
commentIdReddit comment identifier, usually with the t1_ prefix.
commentUrlCanonical public Reddit URL for the comment.
bodyPlain-text public comment body when available.
authorReddit author name without u/, or null for deleted authors.
authorUrlCanonical public Reddit profile URL when available.
subredditCanonical public community label with the r/ prefix.
subredditUrlCanonical public community URL.
postIdReddit post identifier that contains the comment.
postTitleContaining post title when Reddit returns it.
postUrlCanonical public URL for the containing post when available.
parentIdParent comment or post identifier when Reddit returns it.
scoreReddit score at retrieval time.
awardsCountTotal awards Reddit reports for the comment.
createdAtISO-8601 creation time when Reddit returns it.
editedAtISO-8601 edit time when Reddit returns it.
isNsfwWhether Reddit explicitly marks the result as adult content.
isStickiedWhether Reddit marks the comment as stickied.
searchQueryInput phrase that matched the comment.
sourceRetrieval route: reddit-oauth, reddit-public-json, or the provider label fallback.
scrapedAtISO-8601 normalization time.
distinguishedReddit moderation distinction in detailed mode.
controversialityReddit controversiality flag in detailed mode.

Example output record

{
"recordType": "comment",
"commentId": "t1_abc123",
"commentUrl": "https://www.reddit.com/r/MachineLearning/comments/postid/commentid/",
"body": "I have been using the model as a coding assistant for evaluation tasks.",
"author": "example_user",
"authorUrl": "https://www.reddit.com/user/example_user/",
"subreddit": "r/MachineLearning",
"subredditUrl": "https://www.reddit.com/r/MachineLearning/",
"postId": "postid",
"postTitle": "Thoughts on AI coding assistants",
"postUrl": "https://www.reddit.com/r/MachineLearning/comments/postid/thoughts_on_ai_coding_assistants/",
"parentId": "t1_parent123",
"score": 42,
"awardsCount": 1,
"createdAt": "2024-01-10T12:34:56Z",
"editedAt": null,
"isNsfw": false,
"isStickied": false,
"searchQuery": "AI coding assistant",
"source": "reddit-oauth",
"scrapedAt": "2024-01-10T12:40:00Z",
"distinguished": null,
"controversiality": null
}

How it works

This Actor searches public Reddit comments by the phrases in queries and stores clean one-row-per-comment records in the default dataset. It supports one optional subreddit filter, Reddit ordering and time-window controls, a maximum unique comment ceiling, and a choice between concise and detailed response formats. It tries Reddit OAuth and public JSON first. If those routes cannot supply comments, an owner-managed direct comment search checks at most two pages per phrase, applies the subreddit filter, and verifies that each comment body contains the phrase. If direct search fails, a secondary fallback discovers relevant public posts, retrieves their public comments, and applies the same phrase check. Confirmed empty searches do not trigger another paid route. Fallback coverage is limited to the first page of comments from at most three candidate posts per phrase. Unavailable comment text and unread pages are reported as incomplete coverage. Owner-managed encrypted environment bindings provide credentials for these routes. The legacy comments order maps to relevance on direct search, and hour maps to the provider day window with a warning; neither exact date filtering nor containing-post ranking is guaranteed.

Pricing

Reddit Comments Search Scraper uses Pay per event pricing plus Apify platform usage. The live pricing tab is the source of truth for current billing details.

Event-based charging uses two recorded events:

  • Actor start: $0.00005 per startup event, with one event per GB of run memory and a minimum of one event.
  • Comment found: charged once for each validated public Reddit comment stored in the dataset.

For a simple example, a run using at most 1 GB that stores one hundred comments creates one startup event and one hundred comment-found events. Larger memory settings add startup events. maxComments also acts as the ceiling for comment-event charges. Apify platform usage is billed separately from event charges.

Use with AI agents (MCP)

This Actor is usable through Apify MCP as a tool for searching public Reddit comments by keyword and returning structured records for agent workflows.

Exact Actor identity: khadinakbar/reddit-comments-search-scraper

Tool description: search public Reddit comments by keyword, optionally narrow to one subreddit and a time window, and return comment-level records with text, authorship, scores, links, and metadata for downstream reasoning.

Search public Reddit comments for "AI coding assistant" in r/MachineLearning, keep the newest matches from the past month, return concise records, and give me the dataset items plus a short summary of the most relevant comment URLs.

Output interpretation:

  • comments points to the dataset items for row-level comment records.
  • output points to the run outcome record in the key-value store.
  • runSummary points to the run summary record in the key-value store.

Provenance:

  • Each dataset row includes the matched query in searchQuery.
  • commentUrl, subredditUrl, and optional postUrl preserve public Reddit references.
  • source shows whether the record came from reddit-oauth, reddit-public-json, or the provider label fallback.

Scope:

  • The Actor searches public comments returned by Reddit search.
  • It returns one record per comment and focuses on comment-level discovery rather than full-thread extraction.

Pagination and cost guidance:

  • maxComments sets the maximum number of unique stored comments across all queries.
  • Each stored comment corresponds to a Comment found event.
  • The live Pricing tab remains the suitable place to review current billing details.

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const input = {
queries: ['AI coding assistant'],
subreddit: 'MachineLearning',
maxComments: 20,
sort: 'new',
time: 'month',
includeNsfw: false,
responseFormat: 'concise',
};
const run = await client.actor('khadinakbar/reddit-comments-search-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log('First items:', items.slice(0, 3));

Best results and outcome guidance

Start with a short list of focused phrases, then narrow with subreddit when you already know the community. Use new for recent discussion, top for highly scored matches, and relevance for a broader search view. If the agent context needs to stay compact, choose concise; if you want moderation and award metadata, choose detailed. Keep maxComments aligned with the number of records you actually need, since it defines the storage ceiling and the comment-event ceiling.

Design note

I found that the dataset contract always includes recordType, commentId, commentUrl, subreddit, subredditUrl, isNsfw, isStickied, searchQuery, source, and scrapedAt in every record. That made it straightforward to describe the one-record meaning and the minimum reliable output shape.

FAQ

When should I use this Actor instead of a Reddit post scraper?

Use this Actor when your starting point is a keyword or phrase and you want public comment matches. If your workflow starts from a specific post or later needs broader post-level analytics, a downstream Reddit posts or comments scraper can fit the next step.

Can I limit results to one community?

Yes. Set subreddit to a single public community name such as MachineLearning or r/MachineLearning.

What if I want recent discussion only?

Set time to hour, day, week, month, or year, and pair it with sort: "new" for a recent-match view.

How do I get richer metadata?

Use responseFormat: "detailed" to include the moderation and controversiality fields that Reddit exposes in the dataset contract.

How do I connect this with another Reddit Actor?

A natural next step is to pass selected commentUrl or comment IDs into a verified downstream Actor such as Reddit Comments Scraper or Reddit Posts, Comments & Subreddit Analytics Scraper.

Responsible use

Use public Reddit comment data for lawful research, analysis, and automation that aligns with Reddit's rules and applicable data-protection requirements. Keep collection focused on the comments you need, respect public context, and review any downstream use of the records before sharing or publishing them.

Saved comments and their named event use the SDK write-and-charge operation. An unconfirmed write stops further delivery and leaves a DELIVERY_LEDGER checkpoint. Automatic replay of a checkpointed run is blocked; inspect its Dataset and charges, then start a fresh run if needed. A failed comment endpoint or malformed response is reported as a retrieval failure, rather than a confirmed empty search.

TERMINAL_FENCE.state must be DONE before consuming terminal records. Its SHA-256 covers JSON.stringify({ output, summary }) in that order. A pending or mismatched fence means completion is unconfirmed. If no useful comments were saved and the required data service returns HTTP 402, the Actor fails with an owner allowance diagnostic and no comment fees; retrying does not restore that service allowance.