How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
apifyin Subreddits. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Scrape public Reddit posts and comments from subreddits, Reddit search, post URLs and user profiles. You get one row per post or comment with its real score, comment count, clean text, author, links and thread IDs. No login and no Reddit API key.
subreddit— posts from one or more subreddits (new, hot, top or rising);search— posts that match keywords, across all public subreddits;post— single posts by URL or ID, usually with their comments;user— posts submitted by a user.
Good for
- Watch what people say about a brand, product or topic in a subreddit or in search.
- Collect posts and comment threads for market research or a text dataset (AI, RAG, sentiment).
- Export the posts of known users or a list of posts to a spreadsheet.
Not a good fit
- Only public content. No login, no private, banned or quarantined subreddits, no private messages.
- In
usermode only the user's posts are collected, not their comments. - Reddit itself shows at most about 1,000 posts per listing or search, so one target returns up to about 970–995 posts.
- This is not the official Reddit API. Reddit can change its pages; the Actor reports missing text or score in the run summary when that happens.
Who uses it
Market researchers
Learn what people really say about a product or topic.
AI and data teams
Build text datasets with full comment threads.
Brand managers
Watch a subreddit or a keyword on a schedule.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.02 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Reddit post | $0.0015 (from $0.00125 on paid Apify plans) | One saved Reddit post with score, comment count, text, subreddit, URL and fetch time. |
| Reddit comment | $0.0008 (from $0.00065 on paid Apify plans) | One saved Reddit comment with author, score, text, parent ID and depth. |
Examples
- One result: about $0.02.
- 1,000 results: about $1.52.
- Every day 100 results, for 30 days: about $5.10 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 3,200 results.
Prices checked on 24 October 2026. See the current price on Apify.
Questions
Do I need Reddit API access?
No. The tool reads public pages without login, cookies or an API key.
How many posts can I get from a subreddit?
Reddit shows about 1,000 posts per listing or search.
Does user mode get comments too?
No. User mode collects the user's posts only.
Do I need a Reddit account or API key?
No. The Actor reads public pages without login, cookies or an API key.
Why are upvoteRatio and postType empty in search?
Reddit does not show them on search results and single post pages. They are filled in subreddit and user modes.
Is the data fresh?
Yes. Each row is read at run time; fetchedAt shows when. Scores and comment counts change on Reddit after that.
How does it read Reddit, and is it allowed?
The Actor reads only pages that anyone can open without an account. It uses a browser-like HTTP client and Apify residential proxies. It does not log in, does not use your cookies and does not solve CAPTCHAs or browser challenges; if Reddit asks for a login or shows a challenge, that target gets an error row.
Details
Step by step on Apify
- Open the Input tab.
- Keep Mode =
Posts from subredditsand type a subreddit in Subreddits, for exampleapify. - Keep Max posts per target = 10 and Max comments per post = 0 (the prefill).
- Click Start.
- Open the Output tab and check
title,scoreandnumCommentsof the first rows.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Brand or topic monitoring | mode: search, searchQueries, sort: new | post | title, text, subreddit, score, createdAt | schedule the run, export CSV |
| Community research | mode: subreddit, subreddits, sort: top, timeFilter: month | post + comment | score, numComments, text, parentId | spreadsheet or BI tool |
| Discussion analysis | mode: post, postUrls, maxCommentsPerPost | post + comment | text, depth, parentId, score | sentiment or AI pipeline |
| Author research | mode: user, usernames | post | subreddit, title, score, createdAt | spreadsheet |
Tips for better results
- Use top with a time range to find the best posts of a month.
- Use parent IDs to rebuild comment threads.
- Set a maximum cost per run in the run options.
Limits and good to know
statusrows (not_found,no_results,error) are free- The start event is charged once per run up to 1 GB of memory. The Actor picks 256–1024 MB itself; if you set 2048 MB, the start is charged twice
- Set Maximum cost per run in run options to cap spending. When the cap is reached, the run stops, keeps the saved rows and ends as SUCCEEDED with
partialinRUN_SUMMARY - Up to 50 subreddits, queries, posts or users per run; up to 1,000 posts per target and 500 comments per post
- Reddit shows at most about 1,000 posts per listing or search (970–995 in our tests); the run summary warns when it lists fewer than
maxPosts - Large searches can take several minutes. The default run timeout is 1 hour; the Actor stops 20 seconds before the timeout and keeps all saved rows
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"type": "post",
"id": "t3_1x64f49",
"postId": "t3_1x64f49",
"parentId": null,
"depth": null,
"subreddit": "apify",
"title": "Weekly: job board",
"text": "Are you expanding your team or looking to hire a freelancer for a project? ...",
"author": "<username>",
"score": 1,
"upvoteRatio": 1,
"numComments": 0,
"url": "https://www.reddit.com/r/apify/comments/1x64f49/weekly_job_board/",
"linkUrl": null,
"postType": "text",
"createdAt": "2026-10-14T22:00:47.863Z",
"mode": "subreddit",
"input": "apify",
"source": "Reddit",
"fetchedAt": "2026-10-15T04:02:10.190Z"
}Use it from code
Actor ID: cliqtomedia/reddit-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/reddit-scraper").call(run_input={
"mode": "subreddit",
"subreddits": [
"apify"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~reddit-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "subreddit", "subreddits": ["apify"]}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/reddit-scraper")
result = tool.invoke({"run_input": {"mode": "subreddit", "subreddits": ["apify"]}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (24)
| Field | Type | Meaning |
|---|---|---|
type | string | Row type: post, comment, or status (free row that explains a target without data). |
id | string | Reddit ID with prefix: t3_... for posts, t1_... for comments. |
postId | string | t3_ ID of the post (for a comment: the post it belongs to). |
parentId | string | Comments: t3_ post ID for a top-level comment, t1_ comment ID for a reply. Posts: null. |
depth | integer | Comments: 0 for top-level, 1 for a reply, and so on. Posts: null. |
subreddit | string | Subreddit name without r/. |
title | string | Post title. On comment rows, the title of the post the comment belongs to. |
text | string | Post body or comment text as plain text, HTML entities decoded. null for link, image and video posts without a body. |
author | string | Username of the author; null for deleted or removed authors. |
authorId | string | t2_ ID of the post author (posts only). |
score | integer | Score (upvotes minus downvotes) as Reddit shows it. null when Reddit hides it (for example, very new comments). |
upvoteRatio | number | Share of upvotes, 0–1 (posts only). Filled in subreddit and user modes; null in search and post modes, where Reddit does not show it. |
numComments | integer | Number of comments on the post (posts only). |
url | string | Link to the post or comment on reddit.com; null for a deleted comment that has no link. |
linkUrl | string | Link, image, video or gallery URL the post points to; null for text-only posts. A post can have both linkUrl and text (for example an image with a caption). |
postType | string | Post kind as Reddit reports it: text, link, image, video, gallery, multi_media and others. Filled in subreddit and user modes; null in search and post modes, where Reddit does not show it. |
createdAt | string | Time the post or comment was created, ISO 8601 UTC. |
status | string | Status rows only: not_found = post or subreddit does not exist, was removed, banned or is private; no_results = Reddit returned no posts (empty listing for these settings, user without posts, query without results); error = invalid input or source failure. |
message | string | Status rows only: what happened, in plain words. |
errorCode | string | Status rows only: machine code (INVALID_INPUT, SOURCE_BLOCKED, ...); null for not_found and no_results. |
mode | string | Mode of the run. |
input | string | Your subreddit, query, post URL or username as given. |
source | string | Data source: Reddit. |
fetchedAt | string | Time this row was read from Reddit, ISO 8601 UTC. |
Input settings (11)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Mode required | mode | string | "subreddit" |
| Subreddits | subreddits | array | ["apify"] |
| Search queries | searchQueries | array | |
| Post URLs | postUrls | array | |
| Usernames | usernames | array | |
| Max posts per target | maxPosts | integer | 10 |
| Max comments per post | maxCommentsPerPost | integer | 0 |
| Post sort | sort | string | "new" |
| Time range (top and search) | timeFilter | string | "all" |
| Comment sort | commentSort | string | "top" |
| Proxy | proxy | object | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"} |
Use cases with this tool
Each guide shows all the steps and the other tools.