Reddit Posts Scraper ($0.99/1k posts) avatar

Reddit Posts Scraper ($0.99/1k posts)

Pricing

from $0.49 / 1,000 post saveds

Go to Apify Store
Reddit Posts Scraper ($0.99/1k posts)

Reddit Posts Scraper ($0.99/1k posts)

Scrape Reddit posts from any subreddit or keyword search: title, body, score, upvote ratio, flair, media, author, and community — as structured JSON. No login or Reddit API key needed.

Pricing

from $0.49 / 1,000 post saveds

Rating

3.0

(1)

Developer

Akram

Akram

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

5

Monthly active users

23 days ago

Last modified

Share

Reddit Scraper extracts posts from any subreddit and from Reddit keyword search — and, when you ask for them, the comments underneath those posts. Posts come back with title, body text, score, upvote ratio, comment count, flair, media, author, and community; comments come back with their own score, upvotes, downvotes, controversiality, reply depth, and parent — as structured JSON, CSV, or Excel. Paste a subreddit name, a keyword, or a reddit.com URL you copied from your browser, hit start, and the data lands in a dataset you can download or pull through the API.

No Reddit account, no Reddit API key, no OAuth app registration. You are charged $0.99 per 1,000 posts, and only for posts that actually reach your dataset. Comments are charged per comment saved — see the Pricing tab for the current number.

What data can you extract from Reddit?

Posts and comments are saved into the same dataset, and every row carries a dataType field saying which it is — "post" or "comment". Filter on it to pull one kind out. Two more fields, postViewMarker and commentViewMarker, exist only to power the Posts and Comments views in the Storage tab — they carry no data of their own and are safe to ignore.

Post rows — dataType: "post"

FieldExampleNotes
id1abc234Reddit's post id
titleWhat's your favourite async library?
postTextI've been using asyncio for…Empty on link and media posts
postUrlhttps://www.reddit.com/r/python/comments/…Full permalink
communityNamer/python
authorNamesome_user[deleted] when the account is gone
score1423Upvotes minus downvotes
upVoteRatio0.970–1
commentsCount212What Reddit says the post has
flairDiscussionnull when unflaired
isNSFWfalse
mediaAssets[{"type": "image", "url": "https://i.redd.it/…"}]Galleries, videos, images, GIFs; [] for text posts
externalUrlhttps://example.com/articlenull for text and Reddit-hosted media
createdAt2026-02-14T09:31:07+00:00ISO 8601, UTC
scrapedAt2026-02-18T11:02:44+00:00ISO 8601, UTC

Comment rows — dataType: "comment"

FieldExampleNotes
idp6zlzryReddit's comment id
commentTextDetection is doable, acting on it is not.The body as written
commentUrlhttps://www.reddit.com/r/python/comments/…/p6zlzry/The post's URL plus the comment id
authorNamesome_user
score41Upvotes minus downvotes
upVotes / downVotes41 / 0Reddit reports 0 downvotes on most threads
controversiality01 once the vote split collapses the comment by default
isSubmitterfalseWhether the post's own author wrote it
isEditedfalse
depth10 is a reply to the post itself
parentIdt1_p6vrswrt3_ for a post, t1_ for a comment — with depth, this rebuilds the thread
createdAt2026-02-14T10:02:11+00:00ISO 8601, UTC
postId, postTitle, postUrl1abc234, …The post it was left on, so a comment row reads on its own
communityNamer/python
postScore, postCommentsCount1423, 212The post's figures at scrape time
scrapedAt2026-02-18T11:02:44+00:00ISO 8601, UTC

Features

  • Subreddit listings in the same order reddit.com shows them: Hot, New, Top, Rising.
  • Keyword search across all of Reddit, or confined to the communities you choose, sorted by relevance, hot, top, new, or comment count.
  • Comments for every post scraped — flip one toggle and each post the run saves also has its thread collected, from subreddits, searches and pasted URLs alike.
  • Comments for specific threads — paste post links under Post URLs to scrape just those discussions, with or without the toggle.
  • Full comment metrics — score, upvotes, downvotes, controversiality, whether the poster wrote it, and the reply tree via depth and parentId.
  • Pasted URLs — copy a subreddit or search URL out of your browser and it is scraped exactly as it appears, sort included.
  • NSFW filter, off by default. It covers comments too: an excluded post's comments are excluded with it.
  • Deduplication across sources — scrape three subreddits and two keywords in one run and each post is saved once, even when it matches several of them. Comments are deduplicated the same way.
  • Mixed runs — subreddits, searches, and pasted URLs all in a single run, each with its own budget.
  • Platform extras — schedule runs, get results via API, export to CSV/JSON/Excel, or wire the output into Make, Zapier, n8n, Google Sheets, Slack, and the rest of Apify's integrations.

How to scrape Reddit posts and comments

  1. Click Try for free and sign in to your Apify account.
  2. Type one or more subreddits — names, not links: python, r/python, or python+django for several at once. Or leave that empty and use search terms instead, or paste a reddit.com URL under Scrape a URL you copied.
  3. Pick a sort: Hot, New, Rising, or one of the Top options, which carry their own time window — Top — past week, Top — past year, and so on.
  4. Set the Max posts box in the section you filled in — each section has its own, next to the field it bounds. This is your cost ceiling: 100 posts from each of 5 subreddits is at most 500 posts, or $0.50.
  5. To collect discussions, open Scrape comments and turn on Scrape comments of each post, then set Max comments per post. Read How much do comments cost? below first — comments make a run substantially longer.
  6. Optionally flip the NSFW toggle to keep posts marked over 18; they are skipped by default.
  7. Click Start and watch the log. Results appear in the Storage tab and can be downloaded as JSON, CSV, or Excel.

Input example

{
"subreddits": ["python", "learnpython"],
"sort": "top_week",
"maxPostsPerSubreddit": 100,
"searchTerms": ["fastapi", "async database"],
"searchWithinSubreddits": ["python"],
"searchSort": "new",
"maxPostsPerSearchTerm": 50,
"scrapeComments": true,
"maxCommentsPerPost": 50,
"includeNSFW": false
}

That run scrapes two subreddit listings and two searches confined to r/python, stops at 100 posts per subreddit and 50 per search term, and collects up to 50 comments from each post it saves.

Output example — a post row

{
"dataType": "post",
"id": "1abc234",
"title": "What's your favourite async library in 2026?",
"postText": "I've been using asyncio directly for years, but…",
"postUrl": "https://www.reddit.com/r/python/comments/1abc234/whats_your_favourite_async_library_in_2026/",
"communityName": "r/python",
"authorName": "some_user",
"score": 1423,
"upVoteRatio": 0.97,
"commentsCount": 212,
"flair": "Discussion",
"isNSFW": false,
"mediaAssets": [],
"externalUrl": null,
"createdAt": "2026-02-14T09:31:07+00:00",
"scrapedAt": "2026-02-18T11:02:44+00:00"
}

Output example — a comment row

{
"dataType": "comment",
"id": "p6zlzry",
"commentText": "anyio, every time. One API over asyncio and trio.",
"commentUrl": "https://www.reddit.com/r/python/comments/1abc234/whats_your_favourite_async_library_in_2026/p6zlzry/",
"authorName": "another_user",
"score": 41,
"upVotes": 41,
"downVotes": 0,
"controversiality": 0,
"isSubmitter": false,
"isEdited": false,
"depth": 1,
"parentId": "t1_p6vrswr",
"createdAt": "2026-02-14T10:02:11+00:00",
"postId": "1abc234",
"postTitle": "What's your favourite async library in 2026?",
"postUrl": "https://www.reddit.com/r/python/comments/1abc234/whats_your_favourite_async_library_in_2026/",
"communityName": "r/python",
"postScore": 1423,
"postCommentsCount": 212,
"scrapedAt": "2026-02-18T11:02:44+00:00"
}

How much does it cost to scrape Reddit?

$0.99 per 1,000 posts — $0.00099 per post — charged per post saved to your dataset. Comments are charged per comment saved; see the Pricing tab for the current number. Plus a small platform fee when a run starts.

You wantYou pay
100 posts$0.099
1,000 posts$0.99
10,000 posts$9.90
100,000 posts$99.00

Three things keep the bill honest:

  • Filtered posts are free. NSFW posts you excluded are never saved and never charged.
  • Duplicates are free. A post matching both a subreddit listing and a keyword search in the same run is saved and charged once. So are comments.
  • Silent posts are free. A post with no comments costs no extra request and no extra charge when comments are on.

Apify's free plan comes with monthly usage credit, so you can try a few thousand posts before paying anything. To cap a run hard, set a maximum charge on it in the Console — the scraper stops the moment the limit is reached, mid-run, rather than overshooting it.

How much do comments cost in time?

This is the part worth understanding before you turn comments on. Reddit returns a hundred posts in one request, but one post's comments in one request. Collecting comments therefore makes a run roughly a hundred times more request-hungry, and Reddit's rate limit — not this scraper — sets the pace.

RunWithout commentsWith comments
100 postsunder a minute~12 minutes
1,000 posts~2 minutes~2 hours

Posts still stream into your dataset at full speed; it is the comments that take the time. Two things reduce it: posts with no comments are skipped entirely, and Max comments per post caps how much of each thread is fetched.

How does this compare to other Reddit scrapers?

This scraperTypical alternatives
Price per 1,000 posts$0.99$1.5–$5
Posts and commentsBoth, in one runUsually separate actors
Subreddits and keyword searchBoth, in one runUsually one or the other
Charged forRows savedRows returned, or compute time
Duplicates across sourcesRemoved run-wideOften billed twice
Reddit API key requiredNoSometimes

Limits and troubleshooting

Why can't I get more than about 1,000 posts from a subreddit?

That is Reddit's limit, not the scraper's: a listing stops offering the "next page" cursor at roughly 1,000 posts, and often earlier, because removed and hidden posts count against the limit without being returned. When a run hits it you'll see Listing exhausted at N posts, no further pages offered. in the log — the run keeps going with your other sources.

To pull more than 1,000 posts from one community, use several sources instead of one big one:

  • Scrape the same subreddit under different sorts (New, Top, Hot, Rising) — the windows overlap, and duplicates are removed and only charged once.
  • Scrape Top with several time windows: past week, month, year, all time.
  • Add keyword searches confined to that subreddit; each term is its own 1,000-post budget.

Why did I get fewer comments than the post says it has?

Reddit returns at most 500 comments of a thread in one request, and hands back placeholders for the rest rather than sending them. This scraper keeps what the single request returns instead of chasing those placeholders, because each one costs another request — a 4,500-comment thread would take hundreds of them. On most threads the cap is invisible; on very large ones you get the top of the discussion.

Comment counts can also differ because Reddit counts deleted and removed comments in a post's commentsCount but does not return them.

My dataset looks like it has no comments in it

Check the dataType field, or open the Comments view in the Storage tab, which shows just the comment rows. Posts and comments share one dataset, and posts are saved first — so the first rows of a run are all posts, and the comments follow behind them. Filter on dataType: "comment" to see them.

The run finished with fewer posts than I asked for

Either the source ran out (a small subreddit, a rare keyword), or your filters removed posts, or Reddit's ~1,000-post cap was reached, or a few posts came back in a shape the scraper could not read and were skipped — the summary counts those separately and each one is named in the log.

Which sorts accept a time window?

Reddit applies a time window to the Top sort only, matching reddit.com, so the listing sort carries its window with it: pick Top — past week and you get exactly that. Hot, New, and Rising always span all time. The search time window is its own field, because search does honour it on every search sort.

FAQ

Do I need a Reddit account or API key?

No. The scraper reads Reddit's public data the same way a logged-out visitor does. There is nothing to register, and no credentials to hand over.

Can I scrape comments without scraping posts?

Paste the threads you want under Post URLs and leave the subreddit and search fields empty. Only those discussions are fetched, along with the posts they belong to.

Can I rebuild the reply tree?

Yes. Every comment carries depth and parentId — t3_ prefixes a post, t1_ a comment — so the flat rows reassemble into the original thread structure.

Can I run this on a schedule?

Yes. Schedule the actor in Apify Console (hourly, daily, weekly) and each run appends to a dataset you can poll from the API, push into Google Sheets or Slack, or diff to spot new posts and comments on a keyword.

Can I call it from my own code?

Yes — start runs and read results through the Apify API, the Python client, or the JavaScript client. The dataset is available as JSON, CSV, Excel, or XML.

What can I use Reddit data for?

Market and product research, brand and competitor monitoring, lead generation from communities where your buyers ask questions, trend detection through Rising and New feeds, sentiment analysis on discussions rather than just headlines, academic research, content ideas, and training or evaluation datasets for AI.

Support

Found a bug, or need a field the scraper doesn't return yet? Open an issue on the actor's Issues tab — issues are read and answered. Feature requests are welcome, and custom variants of this scraper can be built on request.