Reddit Scraper - Posts, Comments, Subreddits & Users avatar

Reddit Scraper - Posts, Comments, Subreddits & Users

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Reddit Scraper - Posts, Comments, Subreddits & Users

Reddit Scraper - Posts, Comments, Subreddits & Users

Scrape Reddit posts by keyword, the hot, new or top posts of any subreddit, the comments under any post, and any user's posts and comments. Get score, upvote ratio, comment count, flair and author user ID. No login, cookies or API keys needed. Export to JSON, CSV or Excel.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Silkline

Silkline

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

Reddit Scraper returns clean, flat JSON from Reddit. It covers posts by keyword, the posts of any subreddit (hot, new, top or most comments), the comments under any post, and the post and comment history of any user. It is built for researchers, marketers, analysts and AI or data teams who need Reddit text with clean metadata. No Reddit account, API keys, proxies or cookies are needed.

Pricing is pay-per-event: $0.003 per post or comment returned, plus a small start fee per run ($0.005 on paid Apify plans). The full price list is in the "How much does it cost?" section below.

What data can you get?

Modes

ModeGive itYou get
searcha keyword (optional: sort, time range)posts matching the keyword across Reddit
subredditsubreddit names or links (optional: keyword, sort, time range)the hot, newest, top or most-commented posts of each subreddit, optionally only those matching a keyword
commentspost links, redd.it links or post IDs (optional: comment sort)the comments under each post, with depth and parent comment
userPostsusernames or profile links (optional: sort)the posts each user has written, newest first by default
userCommentsusernames or profile links (optional: sort)the comments each user has written, with the title of the post they were written under

Fields

Every item has "type": "post" or "type": "comment". Posts and comments share some fields; others are only on one item type.

FieldItem typeWhat it contains
typepost, commentRecord type: post or comment
titlepostPost title
textpost, commentPost body or comment text in Markdown
scorepost, commentNet votes; null when Reddit hides the score
upvoteRatiopostShare of upvotes, for example 0.89
commentCountpostNumber of comments on the post
subredditpostSubreddit name; a post on a user's own profile has u_<name>
flairpostPost flair text
createdAtpost, commentCreation time, ISO 8601 UTC
urlpost, commentLink to the post or comment on reddit.com
authorpost, commentPublic username; null when the account is deleted
authorIdpost, commentAuthor's Reddit user ID (the part after t2_); null when the account is deleted
authorAvatarpost, commentAuthor's avatar image URL; null when the account is deleted
authorAccountTypepost, commentAuthor's account type, for example USER; null when the account is deleted
postIdpost, commentPost ID (the part after t3_); on comments, the post they belong to
commentIdcommentComment ID
parentCommentIdcommentID of the comment this one replies to; null for top-level comments
depthcommentNesting level of a comment, 0 = top level
postTitlecomment (userComments mode)Title of the post the comment was written under
linkUrlpostTarget of a link post; null for text posts
imageUrlpostPreview image of a link or image post
isSelfPostposttrue for text (self) posts
isNsfwpostNSFW flag
isLockedpostWhether the post is locked
isStickiedpost, commentWhether the item is stickied

Public author profiles come with posts and comments: username, user ID, avatar and account type, for post authors and commenters alike (see "Tips and limits" for the userComments exception).

How to use Reddit Scraper

  1. Open Reddit Scraper on Apify and click Try for free (or Start if you already use it).
  2. Choose a Mode: search posts by keyword, subreddit posts, comments of posts, posts of users, or comments of users.
  3. Fill in the inputs for that mode: a keyword, subreddit names, post links or usernames. Pick a sort order and time range if you need them.
  4. Set Max results to the total number of items you want for the run.
  5. Click Start. The run stops as soon as it reaches maxResults.
  6. Open the dataset and export it as JSON, CSV, Excel or another format, or read it through the Apify API.

An empty input {} works too: it searches posts for "python".

Input

FieldTypeRequiredWhat it doesDefault
modestringrequiredsearch, subreddit, comments, userPosts or userCommentssearch
keywordstringoptionalSearch keyword. In search mode it falls back to "python" when empty. In subreddit mode it narrows the subreddit's posts to those matching it.none
sortstringoptionalSort for search: relevance, hot, top, new, commentsrelevance
subredditSortstringoptionalSort for subreddit: hot, new, top, comments. Top works with the time range.hot
timeRangestringoptionalFor search and subreddit: all, year, month, week, day, hour. Most useful with Top.all
subredditsarray of stringsfor subredditSubreddit names (python), r/python, or subreddit linksnone (prefill: python)
postsarray of stringsfor commentsPost links (https://www.reddit.com/r/<subreddit>/comments/<id>/...), redd.it links, or post IDsnone
commentSortstringoptionalOrder of top-level comments: best, top, new, controversial, oldbest
usersarray of stringsfor userPosts, userCommentsUsernames (spez), u/spez, or reddit.com/user/<name> linksnone (prefill: spez)
userSortstringoptionalOrder of each user's posts or comments: new, top, hot, controversialnew
maxResultsintegeroptionalMaximum number of items in total for the run (1 to 5,000). You are charged per item returned.20

maxResults is the total across all subreddits, posts or users in the run; a run stops as soon as it is reached.

Search posts by keyword

{
"mode": "search",
"keyword": "web scraping",
"sort": "new",
"timeRange": "week",
"maxResults": 50
}

Top posts of subreddits

{
"mode": "subreddit",
"subreddits": ["python", "r/learnpython"],
"subredditSort": "top",
"timeRange": "month",
"maxResults": 100
}

Comments of a post

{
"mode": "comments",
"posts": ["https://www.reddit.com/r/Python/comments/1wwv97o/my_python_magic_is_gone/"],
"commentSort": "top",
"maxResults": 100
}

Posts of users

{
"mode": "userPosts",
"users": ["spez", "u/kn0thing"],
"userSort": "top",
"maxResults": 50
}

Comments of users

{
"mode": "userComments",
"users": ["spez"],
"userSort": "new",
"maxResults": 50
}

Output example

The values below are illustrative samples.

Post (modes search, subreddit, userPosts)

{
"type": "post",
"postId": "1abc23d",
"url": "https://www.reddit.com/r/Python/comments/1abc23d/example_post_title/",
"title": "Example post title",
"text": "I've been coding for a long time ...",
"subreddit": "Python",
"author": "example_user",
"authorId": "1a2b3c4d5e",
"authorAvatar": "https://www.redditstatic.com/avatars/defaults/v2/avatar_default_0.png",
"authorAccountType": "USER",
"score": 820,
"upvoteRatio": 0.89,
"commentCount": 286,
"createdAt": "2026-10-03T19:08:43Z",
"flair": "Discussion",
"linkUrl": null,
"imageUrl": null,
"isSelfPost": true,
"isNsfw": false,
"isLocked": false,
"isStickied": false
}

Comment (mode comments)

{
"type": "comment",
"commentId": "k9x8y7z",
"postId": "1abc23d",
"parentCommentId": "k9x1a2b",
"text": "Same here. Try building something small just for fun.",
"author": "sample_commenter",
"authorId": "9z8y7x6w5v",
"authorAvatar": "https://www.redditstatic.com/avatars/defaults/v2/avatar_default_3.png",
"authorAccountType": "USER",
"score": 41,
"depth": 1,
"createdAt": "2026-10-03T21:15:02Z",
"isStickied": false,
"url": "https://www.reddit.com/r/Python/comments/1abc23d/example_post_title/k9x8y7z/"
}

Comment (mode userComments)

userComments items are comments with the same fields plus postTitle. depth, parentCommentId, isStickied, authorId, authorAvatar and authorAccountType are always empty here.

{
"type": "comment",
"commentId": "m1n2o3p",
"postId": "1def45g",
"postTitle": "Example discussion thread",
"parentCommentId": null,
"text": "Thanks for the feedback, we are looking into it.",
"author": "example_user",
"authorId": null,
"authorAvatar": null,
"authorAccountType": null,
"score": 15,
"depth": null,
"createdAt": "2026-10-05T08:30:00Z",
"isStickied": null,
"url": "https://www.reddit.com/comments/1def45g/_/m1n2o3p/"
}

How much does it cost?

Reddit Scraper uses pay-per-event pricing. You pay a start fee for each run and a fee for each post or comment returned.

Charge eventFree Apify planPaid Apify plans (Bronze and above)
Run start (once per run)$0.02$0.005
Result (each post or comment returned)$0.003$0.003

Worked examples:

  • 100 results on a paid plan: $0.005 + 100 × $0.003 = $0.305.
  • 1,000 results on a paid plan: $0.005 + 1,000 × $0.003 = $3.005.
  • 20 results on the free plan: $0.02 + 20 × $0.003 = $0.08.

On the free Apify plan, a run returns at most 20 results in total; any paid Apify plan removes the limit. On the free Apify plan each account can run this Actor up to 3 times per 24 hours and 10 times per 7 days, within a small lifetime free allowance shared across all our Actors, and all free accounts share a daily free budget. When any of these limits is reached, the run stops before fetching anything and nothing is charged.

The run-start fee is charged when the first request to the data source succeeds, even if that request returns nothing. It is not charged when the data source fails from the start or rejects the IDs, or when the spending limit cannot cover it. You never pay for more than maxResults items, and items that were not delivered are never charged. The run stops by itself if your spending limit is reached.

Use cases

  • Market and product research: collect what people say about a product, a competitor or a problem, in their own words, with score and comment count to see what gets attention.
  • Brand and trend monitoring: pull new posts about a topic every day with sort: new, or the top posts of a subreddit this week with subredditSort: top and timeRange: week.
  • Lead and idea discovery: find the questions people ask in niche communities by searching a keyword inside specific subreddits.
  • Discussion analysis: export full comment threads with depth and parentCommentId to rebuild who replied to whom.
  • User activity research: list the posts or comments a public user has written, with the subreddit or post title for each.
  • AI and data projects: Reddit text in Markdown with clean metadata for LLM training sets, sentiment analysis and summaries.

Integrations and API

You can start runs from your own code through the Apify API, schedule runs (for example daily monitoring of a keyword or subreddit), and send results to other tools with Apify integrations and webhooks. Results are stored in an Apify dataset that you can download as JSON, CSV, Excel and other formats.

Python example with apify-client:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("clover_folktale/reddit-scraper").call(run_input={
"mode": "subreddit",
"subreddits": ["python", "r/learnpython"],
"subredditSort": "top",
"timeRange": "month",
"maxResults": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Tips and limits

  • Stability: the Actor retries transient errors on its own (and empty pages in search and subreddit modes) and stops cleanly instead of failing half-way.
  • Page sizes and speed: pages hold up to 7 posts (search and subreddit modes) or up to about 8 comments (comments mode, often fewer), so large runs make many requests; expect roughly 2-5 seconds per page. userPosts and userComments pages hold about 23-25 items.
  • Comments mode: comments come in the order Reddit gives them for your sort: one top-level comment per page together with its visible replies. Replies hidden behind "load more" are not expanded. Removed and deleted comments are skipped and not charged. The post is looked up first, so an unknown post is skipped.
  • Subreddit mode: sorts are hot, newest, top (combine with a time range) and most comments. Unknown subreddits are skipped; if too many inputs return nothing, the run stops to protect your budget.
  • User modes: comment text in userComments is cut by Reddit at 300 characters. The url of these comments opens the comment through its post. Comments of users carry no NSFW flag, so unlike posts they are not filtered. An unknown or empty user is skipped and not charged. In userPosts, a post on the user's own profile has u_<name> as its subreddit.
  • NSFW: NSFW posts are left out, and the comments of an NSFW post are not fetched; none of this is charged.
  • Freshness: scores and counts are what Reddit shows at the time of the run.
  • Fields that are often empty:
    • In search, imageUrl is empty for text-only posts and linkUrl is null for self-posts.
    • In subreddit and userPosts modes, text is empty for link posts, which have no body.
    • In userComments, depth, parentCommentId, isStickied, authorId, authorAvatar and authorAccountType are always empty.
    • author, authorId, authorAvatar and authorAccountType are null when the account is deleted.
    • score is null when Reddit hides the score.
  • Free plan: a run returns at most 20 results in total; any paid Apify plan removes the limit.

FAQ

Do I need a Reddit account, login or API key?

No. You do not need a Reddit account, API keys, proxies or cookies. Enter a keyword, subreddit, post link or username and run.

Can I use it as a Reddit API alternative?

It returns public Reddit posts and comments as structured JSON without a Reddit API key, which covers many common API use cases such as search, subreddit listings, comment threads and user history. It is an independent tool and is not affiliated with Reddit.

The Actor returns only public data: public posts, public comments and public profile data (username, user ID, avatar and account type). It does not return private data such as private messages or email addresses. You are responsible for how you use the data and for following the laws and rules that apply to you.

How fresh is the data?

Data is collected live when you run the Actor. Scores and counts are what Reddit shows at the time of the run.

Why are some fields empty?

Some fields do not exist for some items. Text posts have no linkUrl, link posts have no text, deleted accounts have no author data, and userComments items have no depth, parent comment or author ID/avatar. See "Tips and limits" for the full list.

How many results can I get?

Up to 5,000 items per run, set with maxResults. The limit is the total across all subreddits, posts or users in the run. On the free Apify plan a run returns at most 20 results.

Can I schedule runs and export the data?

Yes. You can schedule runs in Apify, start them through the API, and export each dataset as JSON, CSV, Excel and other formats.

A field or mode is missing. What can I do?

Open an issue from the Actor page and it will be looked at.

More tools from the same developer