Reddit Scraper & API: Posts, Comment Trees, Reddit Monitoring avatar

Reddit Scraper & API: Posts, Comment Trees, Reddit Monitoring

Pricing

from $2.20 / 1,000 posts

Go to Apify Store
Reddit Scraper & API: Posts, Comment Trees, Reddit Monitoring

Reddit Scraper & API: Posts, Comment Trees, Reddit Monitoring

Scrape Reddit posts and comments without login or API key: complete comment trees, searches, subreddits and users. Whole threads as Markdown for LLMs, strict keyword matching, Reddit monitoring with new-only runs on a schedule. Errors and filtered posts are not charged.

Pricing

from $2.20 / 1,000 posts

Rating

0.0

(0)

Developer

Quarra Labs

Quarra Labs

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

9

Monthly active users

4 days ago

Last modified

Share

Reddit Scraper: Posts, Full Comment Threads, Search and Users

Reddit Scraper collects Reddit posts and complete comment threads without login, cookies or API key. Give it subreddits, search queries, post URLs or usernames, and get posts, every comment with its exact parent and depth, user profiles and post or comment history, as JSON, CSV or Excel, or through the Apify API. It works as a Reddit API alternative for anyone who needs the whole conversation and wants to know when something went wrong.

  • Who it is for: brand and market research, lead finding, AI and RAG datasets, academic work, and AI agents that need to read Reddit.
  • What it does that a quick script cannot: opens every "load more comments" and "continue this thread" branch, even on AMAs with tens of thousands of comments, and goes past the 1,000 posts Reddit lists per subreddit sort.
  • Measured on October 21, 2026: a 1,560-comment thread in 34 seconds on Apify, start included; the 2012 Obama AMA with 22,754 comments (Reddit's counter showed 22,717) in under 3 minutes in our tests.

Errors, duplicates and filtered posts are not charged, and a run that collects nothing costs only the start ($0.005 per GB of memory, 1 GB by default).

What you get

  • Complete comment trees: on a 1,650-comment thread, 263 of 263 recent comments down to depth 12, each with parentId, depth and rootCommentId, so the thread can be rebuilt in a spreadsheet.
  • Whole threads as Markdown for LLMs (outputFormat: threadMarkdown): one record per post with its comment tree, 7.2 times fewer characters than the same thread as JSON records, at the same price.
  • Only what is new (onlyNew): schedule the Actor and each run returns and charges only posts and comments that earlier runs did not return.
  • Search that contains your words: strict search keeps only posts with every word of your query, as whole words; rejected posts are not charged. Comment search finds comments anywhere on Reddit or in one subreddit.
  • Media decoded on posts and comments: gallery images in order, MP4/HLS/DASH video URLs, polls, flair, edited and deleted status.

How to scrape Reddit without the API

  1. Add subreddits (technology, r/LocalLLaMA), search queries, post URLs or usernames.
  2. Choose a sort and a time range, and whether to include comments.
  3. Optionally filter by date, flair, post type, keywords to exclude, or turn on strict search.
  4. Run, then export the dataset, or call it from the API, Make, Zapier, n8n or an AI agent through MCP.
  5. To monitor, turn on "Only new since the last run" and add a schedule in Apify Console.

How to get every comment of a Reddit thread, even a huge one

Paste the post URL, turn on Include comments and leave Max comments per post empty. The Actor opens every "load more comments" and "continue this thread" branch. An AMA comes back nearly whole, not cut at the first few thousand comments.

Thread, whole, default settingsComments returnedTime
r/technology, 1,669 on Reddit's counter1,560, every branch opened34 seconds on Apify
The 2012 Obama AMA in r/IAmA, 22,717 on Reddit's counter22,7542 minutes 40 seconds

Measured on October 21, 2026. Reddit's comment counter is an estimate, so the two numbers rarely match exactly.

Input examples

The 50 best posts of a subreddit this week, each with its discussion as Markdown, for an LLM:

{
"subreddits": ["LocalLLaMA"],
"sort": "top",
"timeFilter": "week",
"maxPostsPerSource": 50,
"includeComments": true,
"maxCommentsPerPost": 200,
"outputFormat": "threadMarkdown"
}

Latest posts of two subreddits from the past 7 days, questions only, without giveaways:

{
"subreddits": ["selfhosted", "homelab"],
"sort": "new",
"postedAfter": "7 days",
"maxPostsPerSource": 500,
"flairs": ["Need Help"],
"excludeKeywords": ["giveaway", "\"discount code\""]
}

Output example

A real comment from our benchmark thread, with the author replaced (some fields left out):

{
"type": "comment",
"id": "pd0smho",
"url": "https://www.reddit.com/r/technology/comments/1wu4lnz/palantir_ceo_alex_karp_quietly_purchased_37000/pd0smho/",
"postId": "1wu4lnz",
"postTitle": "Palantir CEO Alex Karp quietly purchased 37,000 acres of forests in Sweden—and locals found out when hunters lost leases to use the property",
"parentId": "t1_pd02xdu",
"parentType": "comment",
"rootCommentId": "pczzr78",
"depth": 3,
"subreddit": "technology",
"author": "example_user",
"body": "Not a Swede, but don’t want him there either. ",
"createdAt": "2026-09-30T15:31:09Z",
"score": 920,
"scorePerHour": 8.72,
"isDeletedOrRemoved": false,
"scrapedAt": "2026-10-05T00:58:22Z"
}

The same kind of data as one Markdown record (threadMarkdown, the 2012 Obama AMA, shortened, commenters replaced):

{
"type": "thread",
"id": "z1c9z",
"title": "I am Barack Obama, President of the United States -- AMA",
"numComments": 22719,
"commentsIncluded": 300,
"threadComplete": false,
"markdown": "# I am Barack Obama, President of the United States -- AMA\nr/IAmA · u/PresidentObama · 216183 points · 22719 comments · 2012-08-29\n[…]\n- u/example1 (2025, 2012-08-30): > By the way, if you want to know what I think about this whole reddit experience - NOT BAD!\n - u/example2 (154, 2012-08-31): He's the president, he knows everything... Like Jesus.\n[…]"
}

Field names stay the same between runs: a value Reddit does not provide is null, not missing. Each failed input gets a free error record with its reason in plain English.

Compared with two of the most used Reddit scrapers

Measured on Apify on October 5, 2026 on real threads; features as described in each Actor's README on October 9, 2026. Both are good tools; other scrapers update often, so these figures are dated.

This ActorAlternative AAlternative B
Recent comments of a 1,650-comment thread263/263, depth 0 to 12245/263, depth 9 max224/263, depth 9 max
Whole thread as one Markdown recordyesnot describednot described
Built-in "only new since last run"yesdeduplicate on stable keys yourselfdeduplicate on stable keys yourself
Comment search by keywordyesnot describedyes

How much does it cost to scrape Reddit?

You pay per result. Platform costs are included.

Apify planPostsCommentsUser or community profiles
Free$2.50 / 1,000$2.50 / 1,000$2.50 / 1,000
Starter (Bronze)$2.40 / 1,000$2.40 / 1,000$2.40 / 1,000
Scale (Silver)$2.30 / 1,000$2.30 / 1,000$2.30 / 1,000
Business (Gold) and above$2.20 / 1,000$2.20 / 1,000$2.20 / 1,000

Plus the start: $0.005 per GB of run memory ($0.005 at the default 1 GB). The Markdown format is charged the same way (one post, plus one comment per comment in the record). In monitoring mode you only pay for what is new. 1,000 posts with all their comments (about 50,000 comments) come to about $127.50 on the Free plan and $112.20 on Business. You can set a maximum charge per run; the Actor stops at that cap and keeps what it collected.

Run it in production

For brand monitoring, lead lists or a feed for an AI agent, keep one saved input and let Apify run it on a schedule.

  1. In Apify Console open Schedules and create a schedule with a cron time (0 6 * * * is every day at 06:00 UTC, 0 6 * * 1 every Monday).

  2. Add this Actor with your input. Turn on Only new since the last run and give a Watch name: runs with the same name share one memory, so you can add or remove a source later without getting old results again. Without a watch name, changing the input starts a new memory and returns everything again.

  3. With Only new, Max posts per subreddit, search or user is the window watched: keep it above the number of new results you expect between two runs. Without Only new, set Posted after to the length of your rhythm (1 day for a daily run, 7 days for a weekly one) and remove the overlap on id in your own storage.

    The same input can carry searches, comment searches, post links or usernames next to the subreddits. What it costs per month (Free plan prices; Business prices in brackets). Each run costs its start ($0.005) plus the posts or comments it returns. With Only new since the last run, only new ones are returned and charged, so the cost follows how much new content there is:

ScheduleNew posts or comments per monthCost per month
Daily (30 runs)1,000$2.65 ($2.35)
Daily (30 runs)10,000$25.15 ($22.15)
Weekly (4 runs)1,000$2.52 ($2.22)

Optional AI analysis adds $0.50 per 1,000 records analyzed. Set Maximum cost per run so that a run never goes over what you planned.

Call it from code. Start a run and wait for the results in one request (this call waits up to 300 seconds, so use it for small jobs):

curl -X POST "https://api.apify.com/v2/acts/quarra~reddit-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"subreddits": ["selfhosted", "homelab"], "sort": "new", "maxPostsPerSource": 100, "onlyNew": true, "watchName": "selfhosted-new"}'

For bigger jobs, start the run, wait for it to end, then read its dataset:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("quarra/reddit-scraper").call(run_input={"subreddits": ["selfhosted", "homelab"], "sort": "new", "maxPostsPerSource": 100, "onlyNew": True, "watchName": "selfhosted-new"})
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())

Connect it. Add a webhook on the event ACTOR.RUN.SUCCEEDED (Console, Integrations tab) to be called when a run ends, then read the dataset of that run. Make, Zapier and n8n have Apify modules: run the Actor, get the dataset items, then send each one to Slack, Google Sheets, Airtable or your CRM. AI agents can call the Actor through Apify's MCP server.

Use cases

  • Brand and product monitoring: posts and comments that name your product, on a schedule, only what is new.
  • LLM and AI agent input: whole threads as compact Markdown, with a typed output schema an agent can read first.
  • Market and audience research: what a community asks about, complains about and recommends.
  • AI and NLP datasets with the reply structure intact, for sentiment analysis, topic modeling or summarization.
  • Finding the people who matter in a niche, with their history, karma and activity.
  • Academic work that needs a reproducible collection and a record of what could not be retrieved.

Send results to Slack, Notion or Discord

Pick one of your Apify MCP connectors in "Send results to your app" (Notion connects in one click), or paste a Slack, Discord, Make, Zapier or n8n webhook URL. After each successful run, a summary lands there: the number of results, the first 25 with their links, and a link to the full dataset. Schedule the Actor with "Only new since the last run (monitoring)" turned on and new results reach your team every day without opening Apify.

Limits

  • Reddit lists about 1,000 posts per subreddit sort and about 250 per search. The "Go beyond Reddit's listing cap" option combines sorts and time ranges (3,000 unique posts from one subreddit in our tests), but a subreddit's full history since its creation is not reachable.
  • Reddit does not serve deleted comments that have no replies; they are counted in the run summary, not returned.
  • Quarantined communities are visible to logged-in accounts only. The Actor reports them and does not log in.
  • Strict search checks words, not relevance; quotes around a phrase fix most false matches.

FAQ

Is there a free Reddit API?

Reddit's official Data API requires an approved app, and commercial use is paid. On September 30, 2026, Reddit announced that it stops accepting new API access requests on October 31, 2026 and closes the remaining public access in March 2027, asking apps to move to its Developer Platform. This Actor reads what anyone can see on Reddit without logging in: no app, no key, no account.

The Actor collects what anyone can see on Reddit without logging in. In hiQ v. LinkedIn, the Ninth Circuit held that scraping publicly accessible pages likely does not violate the US anti-hacking law (CFAA). The results can still contain personal data (usernames, posts) covered by the GDPR and similar laws. Reddit's terms and privacy law apply to how you use the data. Collect what you need for a legitimate purpose, and ask a lawyer if you are unsure.

How do I get only new posts every day?

Turn on "Only new since the last run", then create a schedule in Apify Console (daily or hourly). Add an integration (e-mail, Slack, webhook) to be told when a run returns something.

Which output format should I give an AI agent?

threadMarkdown when it has to read discussions, the default when it has to compute on fields (scores, dates, authors).

How fast is it?

50 posts of a subreddit in 4.7 to 6.0 seconds of run time on Apify, start included. A 1,560-comment thread in 34 seconds, a 22,000-comment AMA in under 3 minutes (October 21, 2026).

Can I get more than 1,000 posts from a subreddit?

Yes. Turn on "Go beyond Reddit's listing cap", and add date filters if you need a precise window.

Why did my run return nothing?

The status message, the free error records and the OUTPUT record give the reason for each input: not found, banned, private, quarantined, nothing in your date window, nothing matching strict search, or, with "Only new", every result already returned to the same watch name. Such a run ends as Succeeded and costs only the start ($0.005 at the default 1 GB of memory).

Something broke, or a field is missing?

Open an issue in the Issues tab. We reply within two business days.

Does the Actor send anything to Quarra?

Only when a run fails or runs out of time: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your input, your results, your account or the run ID.

ActorWhat it does
Reddit Search ScraperPosts and comments by keyword
Reddit Comments Search ScraperComments by keyword, for monitoring
Reddit Comments ScraperAll the comments of Reddit post links, with optional AI analysis
Reddit Subreddit ScraperThe posts of any subreddit
Reddit Post ScraperPosts from their links, or refreshed by ID to follow their score
Reddit Lead FinderThe posts and comments where people ask for a recommendation or show buying intent
Threads ScraperFull post history with view counts, replies, profiles and keyword search on Threads
Google Trends ScraperInterest over time, by region, related queries and the full Trending now list