Search Reddit comments by keyword
Search comments across all of Reddit by keyword, author or subreddit, each with its post title, subreddit and score. 10 credits per page.
To search Reddit comments by keyword, call GET /v1/reddit/search/comments with a query. Each match comes back with the comment's text, author, score and time, plus the post it sits under: the post's title, URL, score, comment count and subreddit. It costs 10 credits a page. Reddit's search operators work in the query, so author:username lists one account's comments and subreddit:name terms keeps the search inside one community.
Cost
10 credits per page (24 comments in our test). Reading 10 pages costs 100 credits. Asking for the same page again within 1 hour is answered from the shared cache for 2 credits. Failed calls and empty results are free.
How do I write the query?
The query is the same text you would type in Reddit's search box, with three operators:
| Query | Finds |
|---|---|
best project management software | Comments that match these words |
"project management software" | Comments with the exact phrase |
subreddit:projectmanagement jira | Comments about Jira in r/projectmanagement only |
author:example_user | Comments by one account |
Add sort to choose the order: relevance, top or new.
Make the request
curl -G "https://api.insightsocial.app/v1/reddit/search/comments" \
--data-urlencode "query=best project management software" \
-H "x-api-key: $INSIGHTSOCIAL_API_KEY"What comes back
A real response from 2026-10-14, shortened: one comment instead of 24, the text and post title shortened, long URLs and the cursor cut, and Reddit usernames replaced with placeholders.
{
"success": true,
"endpoint": "/v1/reddit/search/comments",
"schema_version": "2",
"data": {
"items": [
{
"comment": {
"id": "pfc2aq6",
"url": "https://www.reddit.com/r/BetterOffline/comments/1x3l1fn/comment/pfc2aq6/",
"parent_id": null,
"post_id": "1x3l1fn",
"text": "I look forward to people rediscovering software engineering methods from 20 years ago…",
"author": { "id": "t2_…", "username": "example_user", "display_name": null, "avatar_url": "https://styles.redditmedia.com/…" },
"engagement": { "likes": 174, "replies": null },
"flags": { "pinned": null, "deleted": false },
"published_at": "2026-10-11T22:18:34.073Z",
"language": "en",
"ext": {
"post_title": "The people who doubted me now ask me to clean up their LLM mess…",
"post_url": "https://www.reddit.com/r/BetterOffline/comments/t3_1x3l1fn/",
"subreddit": "BetterOffline",
"subreddit_subscribers": 58872,
"post_score": 523,
"post_comment_count": 156,
"post_author": "example_poster",
"post_published_at": "2026-10-11T22:11:46.852Z"
}
}
}
],
"total": null,
"truncated": null
},
"pagination": { "next_cursor": "v2c.yQV705tt…", "has_more": true, "page_size": 24 },
"unavailable": ["items[].comment.engagement.replies"],
"credits_used": 10
}| Field | What it holds |
|---|---|
data.items[].comment | One matching comment in the shared comment shape: text, author, score, time, link. |
comment.engagement.likes | The comment's score as Reddit shows it. |
comment.post_id | The ID of the post the comment is under. |
comment.ext.post_title, post_url, post_score, post_comment_count | The parent post, inline, so you don't need a second call to see what thread the comment is in. |
comment.ext.subreddit, subreddit_subscribers | The community and its size. |
comment.language | The detected language, or und when it could not be determined. |
How do I get more than one page?
Send pagination.next_cursor back as cursor, with the same query and sort, and stop when pagination.has_more is false. Each page is 10 credits.
import os
import requests
BASE = "https://api.insightsocial.app/v1"
HEADERS = {"x-api-key": os.environ["INSIGHTSOCIAL_API_KEY"]}
params = {"query": "best project management software", "sort": "new"}
comments = []
for _ in range(10):
body = requests.get(f"{BASE}/reddit/search/comments", params=params, headers=HEADERS, timeout=120).json()
comments += [item["comment"] for item in body["data"]["items"]]
if not body["pagination"]["has_more"]:
break
params["cursor"] = body["pagination"]["next_cursor"]See Pagination for the full rules.
What are the limits?
- No thread position.
parent_idisnullon every row: you know which post a comment is under, not which comment it replied to. UseGET /v1/reddit/post/commentswith the post's URL to see the whole thread. - No reply counts.
engagement.repliesisnull, which means unknown, not zero. - Relevance is loose. Without quotes, matches share some of the words rather than the whole phrase: our test for "best project management software" also returned comments about software careers and game sales. Quote the phrase or add
subreddit:to tighten it. - No total.
data.totalisnull, so you can't know the number of matches up front.
What can I build with it?
- Brand and competitor mentions. Many product recommendations live in replies, not post titles. Search your brand and competitors' names with
sort=newevery day to catch new mentions. The brand mention monitoring recipe shows the full loop. - Customer research. Search a problem phrase ("switching from Jira", "too expensive for a small team") and read what people say, grouped by
ext.subreddit. - Account history.
author:usernamelists what one account has said across Reddit, useful for checking a prospect or a reviewer.
Related
GET /v1/reddit/search/commentsreference: every parameter and field.GET /v1/reddit/search: search Reddit posts instead of comments.GET /v1/reddit/post/comments: every comment in one thread.- Reddit endpoints: everything the API covers on Reddit.
Get a YouTube channel's business email
Read the address behind a YouTube channel's "View email address" button, plus its country and profile, by handle. 250 credits per channel.
Get Pinterest Trends for a country
List the top Pinterest search terms for one of 23 countries, with rank, search index and change, growing or seasonal. 100 credits per call.