Reddit Scraper API: Posts, Comments, Keywords, Subreddits ++ avatar

Reddit Scraper API: Posts, Comments, Keywords, Subreddits ++

Pricing

from $1.49 / 1,000 posts

Go to Apify Store
Reddit Scraper API: Posts, Comments, Keywords, Subreddits ++

Reddit Scraper API: Posts, Comments, Keywords, Subreddits ++

Search Reddit by keyword or subreddit — no login, no API key. Get post metadata plus full nested comment threads (up to 300/post). 5 sort orders, time filters, cursor paging. Pricing: posts $1.49/1K, comments $0.99/1K, $0.005/run. JSON/CSV export.

Pricing

from $1.49 / 1,000 posts

Rating

5.0

(4)

Developer

Socialhz

Socialhz

Maintained by Community

Actor stats

0

Bookmarked

25

Total users

22

Monthly active users

9 days ago

Last modified

Share

Reddit Scraper API: Posts & Comment Threads

Search Reddit by keyword, restrict results to the communities you care about, and optionally pull each post's comment thread with reply nesting preserved.

Built for market research, lead generation, competitor monitoring and content analysis.


What it does

  • Keyword search across Reddit — 25 posts per page, with cursor-based paging
  • Subreddit scoping — restrict to one or many communities
  • Five sort orders — relevance, hot, top score, most recent, most commented
  • Time filtering — hour through to all-time
  • Comment threads — up to 300 comments per post, nested replies preserved, with depth and, where reported, the parent for every comment
  • Honest empty results — a query that matches nothing returns nothing, rather than padding with irrelevant posts

Input

FieldTypeDefaultDescription
querystring—Keywords to search for. Optional if subreddits is set, but one of the two is required
subredditsarray[]Community names without the r/ prefix, e.g. ["startups", "SaaS"]. Empty searches all of Reddit
sortenumrelevancerelevance, hot, top, new, comments
timeFilterenumallhour, day, week, month, year, all. Applies only to top and comments sort orders — see Limits
maxPostsinteger100Upper bound on posts returned. Max 1000
includeCommentsbooleanfalseRetrieve comment threads. Charged separately
maxPostsToCommentinteger25How many of the returned posts get their comments retrieved. Max 500
maxCommentsPerPostinteger100Comments per post, including nested replies. Max 300

Example input

{
"query": "project management software",
"subreddits": ["startups", "SaaS"],
"sort": "relevance",
"timeFilter": "all",
"maxPosts": 100,
"includeComments": true,
"maxPostsToComment": 25,
"maxCommentsPerPost": 100
}

Output

One record per post. Every record has the same shape — comment fields are always present, even when comments were not requested.

FieldTypeDescription
idstringReddit fullname, including the type prefix, e.g. t3_1ps7lis
titlestringPost title
subredditstring | nullCommunity name, without r/. null when the community is not returned with the post
subredditSubscribersnumber | nullCommunity size at time of retrieval
authorstring | nullUsername. null when the account is deleted
scorenumberNet upvotes
upvoteRationumber | nullProportion of votes that are upvotes, 0–1
numCommentsnumberReddit's own comment count. Includes deleted comments, so it is usually higher than commentsRetrieved
postedAtstringISO 8601 UTC
selfTextstring | nullPost body. null for link and media posts
postTypeenumtext, link, image, video
thumbnailUrlstring | nullPreview image
isNsfwbooleanMarked over-18
isSpoilerbooleanMarked spoiler
urlstringThe Reddit thread — use this to reach the discussion
contentUrlstring | nullThe outbound link for link and media posts. null for text posts
commentsarrayComment objects, flattened in thread order. Empty unless requested
commentsRetrievednumberHow many comments this record contains
commentsRemainingbooleantrue if further comments exist that were not retrieved
commentsStatusenumretrieved, skipped_no_comments, skipped_limit, not_requested, unavailable

Comment object

FieldTypeDescription
idstringComment fullname, e.g. t1_fl28mc9
authorstring | nullUsername, null when deleted
textstringComment body
scorenumberNet upvotes
postedAtstringISO 8601 UTC
depthnumber0 is top level, 1 is a reply, 2 a reply to a reply, and so on
parentIdstring | nullThe post or comment this replies to. null when the source data does not include a parent reference
replyCountnumberDirect replies, including any not retrieved

Example output

{
"id": "t3_1ps7lis",
"title": "best project management software 2026 for small teams",
"subreddit": "SaaS",
"subredditSubscribers": 412883,
"author": "Old_Mention_4851",
"score": 17,
"upvoteRatio": 0.89,
"numComments": 52,
"postedAt": "2025-12-21T14:20:48Z",
"selfText": "i'm 29 and managing a small remote team at a startup...",
"postType": "text",
"thumbnailUrl": null,
"isNsfw": false,
"isSpoiler": false,
"url": "https://www.reddit.com/r/SaaS/comments/1ps7lis/best_project_management_software/",
"contentUrl": null,
"comments": [
{
"id": "t1_n2k4xqa",
"author": "YamNo178",
"text": "Linear is solid but for small teams I'd go with Notion first.",
"score": 3,
"postedAt": "2025-12-21T16:02:11Z",
"depth": 0,
"parentId": "t3_1ps7lis",
"replyCount": 2
}
],
"commentsRetrieved": 22,
"commentsRemaining": true,
"commentsStatus": "retrieved"
}

Pricing

Charged per result, plus a small fixed fee when a run starts.

EventPrice
Run start$0.005 per run
Post$1.49 per 1,000 posts
Comment$0.99 per 1,000 comments

Worked examples

Spot check — 100 posts, no comments 100 × $0.00149 + $0.005 = $0.154

Research pull — 100 posts with comments, with maxPostsToComment raised to 100 (≈50 comments each, ≈5,000 comments) 100 × $0.00149 + 5,000 × $0.00099 + $0.005 = $5.10

Bulk — 1,000 posts, no comments 1,000 × $0.00149 + $0.005 = $1.50

Set Maximum cost per run in the run options to cap spend. The Actor stops cleanly at that ceiling and returns everything collected and charged for up to that point.


Tips

  • Scope to subreddits for signal. An unscoped search for "project management" returns results from 17 unrelated communities. Naming two or three relevant subreddits removes almost all of that noise.
  • Leave comments off for discovery. Find the posts first, then re-run with includeComments on a narrower maxPosts for the ones worth reading.
  • Use top + a time window for research, new for recency. Do not combine new with a time window — it has no effect.
  • url is the thread; contentUrl is the outbound link. For an image post, url is the Reddit discussion and contentUrl is the image itself.

Support

Report a problem through the Issues tab on this Actor's page. Issues are reviewed regularly.

When reporting, please include the run ID, the input you used, and what you expected.

For volume enquiries, custom requirements, or anything not specific to a single run, email socialhtz@gmail.com.