Reddit Scraper - Posts, Comments, Subreddits & Users avatar

Reddit Scraper - Posts, Comments, Subreddits & Users

Pricing

from $2.45 / 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 $2.45 / 1,000 results

Rating

0.0

(0)

Developer

Silkline

Silkline

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

5 hours ago

Last modified

Security

Limited permissions

Share

Reddit Scraper works as a Reddit API for public data and returns clean, flat JSON from Reddit. As a subreddit scraper it covers posts by keyword, the posts of any subreddit (hot, new, top or most comments), the Reddit comments under any post (optionally with the replies hidden behind "load more"), the post and comment history of any user, Reddit's popular, home, news and games feeds, subreddit details and user profiles. 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.00005 on paid Apify plans); comments, subredditInfo and userProfile modes charge one more start fee for each input after the first. 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
feeda feed: popular, home, news or games (optional: sort, time range)the posts currently in that feed
subredditInfosubreddit names or linksone record per subreddit: description, members, weekly activity, creation date
userProfileusernames or profile linksone record per user: bio, karma, post and comment counts, account age

Fields

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

FieldItem typeWhat it contains
typeallRecord type: post, comment, subreddit or user
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
name, subredditId, description, sidebar, subscribers, weeklyActiveUsers, weeklyContributions, subredditType, isQuarantined, language, iconUrl, topicssubredditName, ID, short description, sidebar text (Markdown), members, visitors and contributions in the past week, type, quarantine flag, language, icon and the topics Reddit files it under
username, userId, displayName, bio, avatar, totalKarma, postKarma, commentKarma, postCount, trophyCount, accountType, isVerified, isEmployee, isGildeduserPublic profile: names, bio, avatar, karma, number of posts and trophies, account type and badges
commentCountuserNumber of comments the user has written (on posts it is the number of comments on the post)
bannerUrl, createdAt, url, title, isNsfwsubreddit, userBanner image, creation time, link to reddit.com, title (subreddit) and NSFW flag

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, comments of users, a feed, subreddit info or user profiles.
  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, userComments, feed, subredditInfo or userProfilesearch
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, subreddit and the popular and games feeds of feed: all, year, month, week, day, hour. Most useful with Top.all
subredditsarray of stringsfor subreddit, subredditInfoSubreddit 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, userComments, userProfileUsernames (spez), u/spez, or reddit.com/user/<name> linksnone (prefill: spez)
userSortstringoptionalOrder of each user's posts or comments: new, top, hot, controversialnew
expandRepliesbooleanoptionalFor comments: also fetch the replies hidden behind "load more" links. Every reply delivered is charged as a result.false
feedTypestringoptionalFor feed: popular, home, news or gamespopular
feedSortstringoptionalOrder of the popular and games feeds: hot, best, new, top, rising. The home and news feeds have a fixed order.hot
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 Reddit posts by keyword

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

Top Reddit posts of subreddits

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

Reddit comments of a post

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

Reddit replies of a post

{
"mode": "comments",
"posts": ["1wwv97o"],
"expandReplies": true,
"maxResults": 200
}
{
"mode": "feed",
"feedType": "popular",
"feedSort": "top",
"timeRange": "day",
"maxResults": 50
}

Subreddit details and Reddit user profiles

{
"mode": "subredditInfo",
"subreddits": ["python", "r/learnpython"]
}
{
"mode": "userProfile",
"users": ["spez", "u/kn0thing"]
}

Reddit posts of users

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

Reddit comments of users

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

Output example

The values below are illustrative samples.

Reddit 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
}

Subreddit details (mode subredditInfo)

{
"type": "subreddit",
"subredditId": "2qh0y",
"name": "Python",
"url": "https://www.reddit.com/r/Python/",
"title": "Python",
"description": "The largest Python community for Reddit!",
"sidebar": "####[The Python Discord](https://discord.gg/python)",
"subscribers": 1519702,
"weeklyActiveUsers": 111449,
"weeklyContributions": 876,
"createdAt": "2008-01-25T03:14:39Z",
"subredditType": "PUBLIC",
"isNsfw": false,
"isQuarantined": false,
"language": "en",
"iconUrl": "https://styles.redditmedia.com/t5_2qh0y/styles/communityIcon_example.png",
"bannerUrl": null,
"topics": ["Programming"]
}

Reddit user profile (mode userProfile)

{
"type": "user",
"userId": "1w72",
"username": "spez",
"url": "https://www.reddit.com/user/spez/",
"displayName": "spez",
"bio": "Reddit CEO",
"createdAt": "2005-06-06T04:00:00Z",
"avatar": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_example.png",
"bannerUrl": null,
"totalKarma": 941124,
"postKarma": 184586,
"commentKarma": 756538,
"postCount": 849,
"commentCount": 3219,
"trophyCount": 54,
"accountType": "USER",
"isVerified": true,
"isEmployee": true,
"isGilded": true,
"isNsfw": false
}

Reddit 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/"
}

Reddit user 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, comment, subreddit record or user profile returned. In comments, subredditInfo and userProfile modes every input after the first (post, subreddit or user) also pays one more start fee, charged before its first request.

Charge eventBronzeSilverGold, Platinum, Diamond
Run start (once per run)$0.00005$0.00005$0.00005
Result (each post, comment, subreddit record or user profile returned)$0.003$0.002707$0.002446

Worked examples:

  • 100 results on Bronze: $0.00005 + 100 × $0.003 = $0.30005.
  • 1,000 results on Bronze: $0.00005 + 1,000 × $0.003 = $3.00005.
  • Comments of 3 posts, 100 comments in total: 3 × $0.00005 start fees (one per post) + 100 × $0.003 = $0.30015.

On the free Apify plan you get 2 free trial runs of this Actor with your own input, up to 10 results each, and nothing is charged; after that, runs return a stored sample dataset (a real result of the prefilled input). Use any paid Apify plan for full runs.

The run-start fee is charged when the first request succeeds, even if that request returns nothing. It is not charged when the run 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.

Why use this Reddit scraper

  • No account, no cookies, no proxies. You give keywords, links or IDs; the Actor does the rest.
  • You pay for data you get. Per-result fees are charged only for records delivered to your dataset. A failed or empty run tells you why in its status message and whether anything was charged.
  • It runs. In the 30 days to 2 November 2026, 30 of 30 public runs succeeded (100%, Apify run statistics).
  • Try before paying. On a free Apify plan you get 2 free trial runs with your own input, up to 10 results each, nothing charged.
  • Flat JSON records ready for spreadsheets, databases and AI pipelines; export as JSON, CSV or Excel.

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)

Use it from AI agents (MCP, n8n, Make)

This Actor works as a tool for AI agents through the Apify MCP server. Add it to Claude, Cursor or any MCP client with https://mcp.apify.com?tools=clover_folktale/reddit-scraper, and the agent can search Reddit and read the results itself. It also has ready-made integrations for n8n, Make and Zapier on the Apify platform.

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 unless you turn on expandReplies; with it, replies are fetched only while the comments already delivered cover the extra requests, so a very deep thread may come back with some replies still folded. 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.
  • 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.
  • Feeds: popular and games take a sort (and a time range with Top); home and news have a fixed order. Pages hold about 7-9 posts, and the next page of a feed is requested only when the previous page had at least 3 safe posts (repeats included) and at least 1 new one. The news and games feeds come as the app's layout cells, so their posts have no text, flair, isLocked or isSelfPost, and authorAvatar is empty. Feeds change all the time: two runs rarely give the same posts.
  • Subreddit and user records: an unknown name returns nothing and has no result fee (inputs after the first still pay their start fee). NSFW subreddits and NSFW profiles are left out like NSFW posts.
  • 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.
  • Unreadable entries. If one entry of an ID or link list cannot be read (a typo, a stray cell, a link to the wrong kind of page), it is skipped and named in the log, and the status message says how many were skipped; the other entries still run and nothing is charged for a skipped one. Only a list with no readable entry stops the run with an input error.
  • Free plan. On the free Apify plan you get 2 free trial runs of this Actor with your own input, up to 10 results each, and nothing is charged; after that, runs return a stored sample dataset (a real result of the prefilled input). Use any paid Apify plan for full runs.

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.

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.

Support

Found a bug, a missing field or a mode you need? Open an issue on the Issues tab. We reply within 24 hours, and a mode that stops working is fixed within 24 hours. What changed and when is listed on the Changelog tab.

Other tools by Silkline

Every tool below charges per result and needs no login or cookies.

Global platforms

More from Silkline