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

Reddit RSS ends Nov 13, 2026: a scheduled run with onlyNew and a watchName returns only the new posts of each subreddit, readable as RSS. Also scrapes public posts, comments, users and search with scores and media to JSON, CSV or Excel. No Reddit login or API key.

Pricing

from $2.40 / 1,000 results

Rating

5.0

(2)

Developer

Ben

Ben

Maintained by Community

Actor stats

7

Bookmarked

226

Total users

38

Monthly active users

2 hours ago

Last modified

Share

Reddit Scraper: posts, comments, users and search

Reddit RSS ends Nov 13, 2026: a scheduled run with onlyNew and a watchName returns only the new posts of a subreddit, readable as RSS, no Reddit login. Replace a Reddit RSS feed in 3 steps.

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.

📰 Reddit RSS ends November 13, 2026: how to keep a feed of new subreddit posts

Checked against Reddit's own announcements on October 26, 2026.

What Reddit is changing, and when

Reddit announced these dates on September 30, 2026 in r/modnews and r/redditdev (news coverage: TechWyse, TechRepublic):

DateWhat happens (Reddit's wording, shortened)
October 31, 2026New requests for public API access are no longer accepted
November 13, 2026Reddit stops supporting RSS feeds
November 30, 2026Registration closes for the app migration bounty program
January 12, 2027API access starts to close for apps and users that have not registered
March 2027Public access closes for all remaining apps and users

For moderators Reddit points to Devvit apps such as Discord Relay. For everyone else it says: "If you use RSS for feeds outside of a community you moderate, there is no replacement."

Replace a Reddit RSS feed in 3 steps

  1. Paste the subreddit. Your old feed link names it: https://www.reddit.com/r/selfhosted/.rss (or /r/selfhosted/new/.rss) is the subreddit selfhosted. You can type the name or paste the whole old link into the subreddit field; the Actor reads the name out of it. A search feed (/search.rss?q=…) maps to mode: search with searchQuery, a user feed (/user/<name>/.rss) to mode: user with username.

  2. Turn on onlyNew and give the watch a name, then run it once:

    {
    "mode": "subreddit",
    "subreddit": "selfhosted",
    "sort": "new",
    "maxPosts": 100,
    "onlyNew": true,
    "watchName": "selfhosted-feed",
    "includeComments": false,
    "outputFormat": "text"
    }

    The first run returns the newest posts and marks where the watch begins (the log says Watch: first run, … posts). Every later run returns only posts that no earlier run of this watch returned, oldest first.

  3. Schedule it hourly. Save the input as a Task (the Save as a new task button under the input), then Console → Schedules → Create new, add the Task and choose @hourly (or */15 * * * * for every 15 minutes).

Read it as RSS. Point your feed reader at the Task's last successful run: https://api.apify.com/v2/actor-tasks/<TASK_ID>/runs/last/dataset/items?format=rss&status=SUCCEEDED&token=<YOUR_TOKEN>. Each run holds only that run's new posts, so let the reader check at least as often as the schedule runs, and use a token limited to this Task (Console → Settings → API & Integrations). Or have new posts pushed to you: in the Task's Integrations tab, send each successful run to Slack, email or a webhook instead of polling.

Tips: set maxPosts above the number of posts the target gets between two runs (the log warns when every post read was new, which means some may have been missed). Two schedules on the same subreddit need different watchName values. A run with nothing new saves no rows, so it costs only its start event.

A keyword or brand watch, no Reddit login and no API key. Reddit's search also returns posts that only relate to your words: in New order, 15 of the 30 newest results for "home assistant" lacked one of the words (October 26, 2026). Add strictMatch: true and a post is kept only when its title or text contains every word of the query; the posts left out are not saved and not charged. At $0.003 a post, 300 real mentions a month cost $0.90:

{
"mode": "search",
"searchQuery": "home assistant",
"maxPosts": 100,
"onlyNew": true,
"strictMatch": true,
"watchName": "home-assistant-mentions",
"outputFormat": "text"
}

When to use a sibling Actor instead

You wantUse
A feed of one subreddit, one search or one userThis Actor with onlyNew (above)
New posts from many subreddits in one run, or a date rangeSubreddit Scraper (onlyNew, monitorId)
New posts that mention a keyword anywhere on Reddit, past Reddit's ~240 results per searchReddit Search Scraper (onlyNew, monitorId, strictMatch)
Older posts and comments by date, for a backfill or a RAG datasetReddit Archive Scraper

What the API closure means for this Actor

This Actor reads posts, searches and user lists from Reddit's API, and since October 22, 2026 it reads comment threads from the public Arctic Shift archive. Reddit's closure of public API access (from January 12, 2027, fully in March 2027) will reach the route it uses for posts. We will update this README with what still works as each date passes. The Reddit Archive Scraper reads public archive projects instead of Reddit's API; how fresh and complete those archives stay after March 2027 depends on those projects, so test with a small run before relying on them.

🤖 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
strictMatchSearch mode: keep only posts whose title or text contains every word of the query. Off by default
sorthot, new, top, rising, controversial, or relevance (search)
timeFilterhour, day, week, month, year, all (for top/controversial)
maxPostsMax posts to save; 0 = as many as Reddit's list gives. One subreddit feed ends after about 950 posts, one search after about 240
deepScrapeRead past that end: the other orders and time ranges of the same subreddit or search are read too and every post is saved once, until maxPosts. Off by default
onlyNewMonitoring: each run returns only the posts earlier runs have not returned (subreddit, search and user mode). Off by default
watchNameOptional name that keeps two watches on the same target apart
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.

Where do comments come from? Since October 22, 2026 Reddit refuses comment threads to visitors without a login. The Actor then reads a post's comments from the public Arctic Shift Reddit archive, which holds them minutes after they are written: same fields, top-level comments ordered by score, and a comment deleted on Reddit after it was archived can still appear. Posts, search and subreddit lists come from Reddit itself as before.

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. A private, quarantined, banned or missing subreddit, a deleted post and a suspended account end the run right away as a success with zero rows; the log and the status message name the reason.

How many posts can it return? Up to your maxPosts cap, as far as Reddit's lists go. Reddit ends a subreddit feed after about 950 posts and a search after about 240, and by default the Actor pages to the end of the one list you chose; the status message then says that more is available. With deepScrape: true it goes on with the other orders and time ranges of the same subreddit or search and saves every post once: 2,451 posts of r/python instead of 999, and 1,000 posts for the query "home assistant" instead of 240 in our tests. The chosen list comes first, the further posts follow in the order they were found. Every further list is read to its end, so such a run takes longer: a 600-post search that read three lists took 52 seconds. Near the run's timeout the Actor stops reading and saves what it has. Many subreddits or queries in one run, a date range and an only-new mode are in the Subreddit Scraper and the Reddit Search Scraper; for complete history by date use the Reddit Archive Scraper.

Does this replace a Reddit RSS feed? For new posts, yes. Reddit stops supporting RSS feeds on November 13, 2026. A scheduled run with onlyNew returns each new post of a subreddit, search or user once, with title, author, link, text, score, comment count and date, and Apify serves the run's rows as RSS (format=rss). It does not return posts from private, quarantined or banned subreddits, and it does not deliver new comments as a feed. Set up: see Replace a Reddit RSS feed in 3 steps.

Will it keep working after Reddit closes its public API? Reddit says public API access starts to close on January 12, 2027 for apps that have not registered and closes for all remaining apps and users in March 2027. This Actor reads posts, searches and user lists from that API, so that closure will reach it. We will say in this README what still works as each date passes; we cannot promise more than that today.

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.