Reddit Scraper - Posts, Comments, Users & Search avatar

Reddit Scraper - Posts, Comments, Users & Search

Pricing

from $2.40 / 1,000 results

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

Reddit Scraper - Posts, Comments, Users & Search

Scrape public Reddit posts, comments, user activity, subreddits, and search results through Reddit's app-only OAuth API. Export nested threads, scores, media, Markdown, and token counts to JSON, CSV, or Excel. No Reddit login or user-supplied API key required.

Pricing

from $2.40 / 1,000 results

Rating

5.0

(2)

Developer

Ben

Ben

Maintained by Community

Actor stats

7

Bookmarked

179

Total users

17

Monthly active users

3 hours ago

Last modified

Share

Reddit Scraper: posts, comments, users and search

Extract Reddit posts, comments, user history and search results as clean, structured data, with a selected Markdown, HTML or plain-text content field on each post, comment and nested reply. Original text fields and word/token counts remain available. No Reddit login or user-supplied API key: point it at a subreddit, a post URL, a username or a search query and get back the available posts and comments with scores, images and nested comment hierarchies. Source access and complete-thread availability vary. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

Transparent pricing: $0.003 per dataset row plus a $0.00005 run-start event per GB of allocated memory (minimum one). Posts and top-level comments are separate rows; nested replies stay inside their parent comment's replies field. A 10-post run at 1 GB costs $0.03005 before account discounts.

Choose the amount of data first: start with includeComments: false for a post list. Enabling comments adds top-level dataset rows and result charges; nested replies remain inside the parent row. Use a small post/comment limit and inspect partial-thread coverage before scheduling a larger run.

Quick start

Open the tested Python-posts example or start with three posts and no comment expansion:

{
"mode": "subreddit",
"subreddit": "Python",
"sort": "top",
"timeFilter": "week",
"maxPosts": 3,
"includeComments": false,
"outputFormat": "text",
"includeImages": false
}

Use content for the selected representation and content_format to identify it. The Full Content dataset view displays both fields. The original selftext, selftext_markdown, selftext_html, body, body_markdown and body_html fields remain available to existing integrations. A link-only post can have empty content; its title and destination URL remain separate.

text removes markup from source HTML while retaining paragraph/list boundaries. When source HTML is missing, it preserves the original text, which may still contain Markdown. html decodes Reddit's outer HTML encoding; if HTML is absent, it escapes the original text inside a paragraph. This field contains source markup, not a sanitized webpage component. markdown uses the existing Markdown representation.

includeImages: false clears the images array and sets thumbnail to null. It does not rewrite a post's URL or remove links from its original content.

๐Ÿค– What is the Reddit Scraper?

It turns any Reddit page into a structured dataset. Choose one of four modes โ€” subreddit, single post + comments, user posts or a Reddit search โ€” add optional filters for sort order, time range, date and result caps, then Run. The Actor reads Reddit's public OAuth API (no browser or user login needed), paginates automatically, and can expand Reddit's "load more comments" and "continue this thread" stubs. The returned count may be below num_comments because of your cap, removed content or source limits. Posts and top-level comments are dataset rows; nested replies retain their hierarchy inside those rows.

What data does it extract?

  • Post title, body and content in markdown, html or text (whichever you pick)
  • Scores & engagement โ€” score, upvote_ratio, num_comments, total awards
  • Author & subreddit (with subreddit ID) and the post permalink + url
  • Nested comment threads with full hierarchy, depth, scores and timestamps
  • User post history across any public account
  • Images & media โ€” image URLs with width/height, plus thumbnails
  • Post type & flags โ€” self/video, NSFW, spoiler, stickied, locked, post hint, domain
  • Flair (link_flair_text) and timestamps (created_utc)
  • AI-ready stats โ€” word_count and estimated token_count for every post and comment

โฌ‡๏ธ Input

Run it four ways โ€” pick a mode and fill in the matching field:

FieldDescription
modesubreddit, post, user, or search
subredditSubreddit to scrape, e.g. python or r/python (subreddit mode)
postUrlFull URL of a Reddit post (post mode)
usernameReddit username to pull posts from (user mode)
searchQuerySearch term to find posts (search mode)
searchSubredditOptionally limit a search to one subreddit
sorthot, new, top, rising, controversial, or relevance (search)
timeFilterhour, day, week, month, year, all (for top/controversial)
maxPostsMax posts to scrape, 0 = unlimited (up to 10,000)
maxCommentsMax comments per post, 0 = unlimited
includeCommentsAlso scrape comments for each post in subreddit mode
expandMoreCommentsResolve "load more" / "continue thread" stubs (on by default)
sinceDateSubreddit mode only: posts on or after this UTC date (YYYY-MM-DD)
outputFormatmarkdown, html, or text, returned in content throughout the comment tree
includeImagesfalse returns images: [] and thumbnail: null; default true preserves them
delaySecondsDelay between requests to respect rate limits

Example input

{
"mode": "subreddit",
"subreddit": "ArtificialInteligence",
"sort": "top",
"timeFilter": "week",
"maxPosts": 100,
"includeComments": true,
"maxComments": 200,
"outputFormat": "markdown",
"includeImages": true
}

โฌ†๏ธ Output

Posts and top-level comments are dataset rows; nested replies remain inside replies. Export JSON to preserve the tree, or CSV/Excel for a flat view of top-level rows.

A post has the following shape. This is an illustrative record, not a live result:

{
"id": "abc123",
"title": "How I built an AI agent that scrapes Reddit",
"url": "https://www.reddit.com/r/ArtificialInteligence/comments/abc123/how_i_built_an_ai_agent/",
"permalink": "/r/ArtificialInteligence/comments/abc123/how_i_built_an_ai_agent/",
"selftext": "Here's my complete guide to building a scraping agent...",
"selftext_markdown": "Here's my complete guide to building a **scraping agent**...",
"content": "Here's my complete guide to building a **scraping agent**...",
"content_format": "markdown",
"author": "ai_developer",
"subreddit": "ArtificialInteligence",
"subreddit_id": "t5_2qh0y",
"score": 1250,
"upvote_ratio": 0.97,
"num_comments": 89,
"is_self": true,
"is_video": false,
"post_hint": "self",
"domain": "self.ArtificialInteligence",
"thumbnail": "https://b.thumbs.redditmedia.com/example.jpg",
"images": [
{ "url": "https://i.redd.it/example.jpg", "width": 1200, "height": 800, "caption": null }
],
"created_utc": "2026-06-20T10:30:00",
"total_awards_received": 3,
"link_flair_text": "Discussion",
"over_18": false,
"spoiler": false,
"stickied": false,
"locked": false,
"word_count": 850,
"token_count": 1200
}

An illustrative comment, returned in post mode or in subreddit mode with includeComments:

{
"id": "xyz789",
"post_id": "abc123",
"parent_id": "t3_abc123",
"permalink": "/r/ArtificialInteligence/comments/abc123/how_i_built_an_ai_agent/xyz789/",
"body": "This is brilliant โ€” how do you handle rate limits?",
"body_markdown": "This is brilliant โ€” how do you handle rate limits?",
"content": "This is brilliant โ€” how do you handle rate limits?",
"content_format": "markdown",
"author": "curious_dev",
"score": 42,
"ups": 42,
"downs": 0,
"created_utc": "2026-06-20T11:05:00",
"edited": false,
"is_submitter": false,
"stickied": false,
"depth": 0,
"replies": [],
"total_awards_received": 0,
"word_count": 8,
"token_count": 11
}

๐Ÿ’ก Use cases

  • ๐Ÿค– AI & LLM training data: pull real human conversations and expert Q&A from any community as clean Markdown with token counts, ready for fine-tuning and RAG pipelines.
  • ๐Ÿ“Š Market & brand research: track mentions, pain points and product feedback across subreddits to understand what people actually think.
  • ๐Ÿ˜Š Sentiment analysis: scrape thousands of comments on a launch, brand or topic and feed scores, text and threads straight into your model.
  • โœ๏ธ Content & trend research: mine top posts in your niche for viral angles, headlines and audience questions worth writing about.

โ“ FAQ

How do I scrape a subreddit? Set mode to subreddit, enter the subreddit name (e.g. python), pick a sort and maxPosts, then Run. You get every matching post with scores, flair, images and AI-ready text. Flip on includeComments to also pull each post's comments.

Can I scrape all the comments on a single post? Use mode: post, paste the postUrl, and set maxComments (0 removes the requested cap). With expandMoreComments on (the default), the Actor attempts to expand more-comment stubs. A complete thread is not guaranteed. The cap includes nested replies, while dataset rows and result charges count only posts and top-level comments. Export JSON to retain the nested replies objects.

Can I search Reddit or scrape a user's posts? Yes. Use mode: search with a searchQuery (optionally limited to one subreddit via searchSubreddit), or mode: user with a username to pull that account's public post history.

Do I need an API key? No. You do not provide a Reddit login, client ID, or secret. The Actor obtains an anonymous app-only OAuth token internally, then reads public Reddit data.

Where is my chosen format? Read content and content_format on each post, comment and nested reply. Existing fields retain their original meanings. The word and token counts describe the original source text, not the selected representation.

Can I get only recent posts? Use sort: top or controversial with a timeFilter (hour/day/week/month/year/all). In subreddit mode, sinceDate (YYYY-MM-DD) keeps posts on or after midnight UTC on that date. Old pinned or ranked posts are skipped without stopping pagination. Invalid calendar dates and sinceDate in other modes fail before scraping. This filter checks the posts Reddit exposes; it does not search a complete archive.

Can I run it on a schedule or via API? Yes โ€” schedule recurring runs in Apify, call it via the API/SDK, or connect it to Make, Zapier or n8n to push fresh Reddit data into your stack.

Can it scrape private or deleted content? No. Only public posts and comments are available โ€” deleted/removed items and private subreddits can't be accessed without authentication.

How many posts can it return? Up to your maxPosts cap (or unlimited with 0); it paginates automatically. For very large jobs, batch with date ranges to keep runs manageable.

Is scraping Reddit legal? It extracts publicly available data through Reddit's OAuth API and paces requests to respect rate limits. Use it responsibly for research and analysis, and follow applicable laws and Reddit's terms.

Does this supply a registered app or source approval? No. If your organization requires a registered Reddit application or an approved data agreement, confirm that requirement before adopting the Actor. A successful run does not establish approval for your intended use.

๐Ÿ”— You might also like


Keywords: reddit scraper, reddit api, scrape reddit, reddit data extraction, reddit comments scraper, subreddit scraper, reddit search api, reddit user scraper, reddit posts, AI training data, LLM training data, sentiment analysis, social media scraping, markdown export, reddit json api, no api key, market research, content research.