Reddit Scraper - Posts, Comments & Community Data
Pricing
from $2.00 / 1,000 results
Reddit Scraper - Posts, Comments & Community Data
Collect public Reddit posts by subreddit, keyword or topic. Add comment, community and author rows, then export the results. Pay per delivered row plus a start fee.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
26
Total users
3
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Reddit Scraper
Collect public Reddit posts, comments and community details as rows you can export for research and monitoring.
- Browse subreddit feeds or search for keywords across Reddit.
- Get post text, links, scores, authors, flair and timestamps.
- Add separately billed comment, subreddit and user rows when needed.
- Export results or read them through the Apify API and AI tools.
- Pay only for the rows you receive: $2 per 1,000 rows on the Free plan, plus a small start fee.
What does Reddit Scraper do?
Reddit Scraper collects public content from reddit.com. Use it to find hiring discussions, research community interests or monitor mentions. It returns one entity per row, identified by rowType.
- Subreddit feeds: fill
subredditsto browse posts sorted bynew,hotortop. - Keyword search: fill
searchQueries; addsubredditsto search within selected communities, or leave them empty for site-wide search. - Topic catalog: choose
subredditCatalogto use a built-in list of communities. - Optional rows:
includeComments,includeSubredditMetaandincludeUserMetaare off by default. Each added row is billed at the same price as a post and shares the row limit.
What data can you extract from Reddit?
Fields depend on the row type and what Reddit supplies. Optional fields can be absent; an empty field does not mean zero.
Post rows
| Field | Description | Example |
|---|---|---|
rowType | Kind of row | post |
id | Identifier for this row | examplepost |
postId | Reddit post identifier | examplepost |
subreddit | Community without the prefix | forhire |
title | Post title | Example hiring discussion |
url | Link to the Reddit thread | https://www.reddit.com/r/forhire/comments/examplepost/ |
author | Public username | example_user |
body | Self-post text | Example post text. |
score | Observed score, not an exact vote count | 12 |
upvoteRatio | Observed positive-vote ratio | 0.9 |
numComments | Comment count reported by Reddit | 8 |
createdAt | Creation time in UTC | 2026-10-20T09:00:00Z |
scrapedAt | Collection time in UTC | 2026-10-24T09:00:00Z |
Comment rows
| Field | Description | Example |
|---|---|---|
rowType | Kind of row | comment |
postId | Parent post identifier | examplepost |
postAuthor | Parent post's author | example_user |
body | Comment text | Example reply. |
parentId | Parent post or comment identifier | t3_examplepost |
depth | Zero for top-level comments; higher for replies | 0 |
commentTreeComplete | Whether the returned comment slice was complete | false |
Subreddit rows
| Field | Description | Example |
|---|---|---|
rowType | Kind of row | subreddit |
displayName | Community display name | forhire |
subscribers | Reported subscriber count | 100000 |
publicDescription | Community introduction | Example community description. |
User rows
These describe authors of collected posts, not an independent username search.
| Field | Description | Example |
|---|---|---|
rowType | Kind of row | user |
author | Public username | example_user |
authorFullname | Identifier for joining author records | t2_exampleuser |
linkKarma | Reported post karma | 250 |
commentKarma | Reported comment karma | 800 |
How to scrape Reddit
- Open Reddit Scraper in Apify Console. A free Apify account is enough to try it.
- Fill a target field, such as
subredditswithforhire. - Set
maxResultsto5for your first run. - Click Start and wait for the run to finish.
- Download the dataset or read it through the API.
An empty input {} starts an example run using r/forhire, sort="new", timeFilter="week" and at most 3 rows. Comments and metadata are off. Normal start and row charges apply. Filling a target field selects the matching collection behaviour automatically; there is no mode selector.
Browse subreddit feeds
Fill subreddits with names, with or without r/, and leave searchQueries empty. Choose top for highest-scored posts within timeFilter. That time filter does not restrict new or hot feeds.
Search selected communities
Fill both subreddits and searchQueries. Each community is searched for the supplied terms. Duplicate posts are removed from the delivered results.
Search across Reddit
Use searchQueries with subreddits=[]. A searchQueries-only input also searches site-wide. In Console, clear the sample r/forhire value if you want site-wide results.
Use a topic catalog
Fill subredditCatalog with a supported topic. Its community list is combined with any explicit subreddits, without duplicates. This can select several communities, so start with a small row limit and maximum cost.
Collect specific posts
Fill postIds with post ids, t3_ fullnames or post links. Each id becomes one row with the post's comments count, gallery, flair, awardings and full self-text. Ids Reddit no longer serves are reported and are not billed. This mode returns details for the ids you named, so it does not browse feeds: do not combine it with subreddits, searchQueries or subredditCatalog.
What to fill in
| Field | What to enter | Default |
|---|---|---|
subreddits | Community names; empty with keywords means site-wide | No default; sample forhire |
searchQueries | Search terms; empty means browse feeds | Empty |
postIds | Post ids, t3_ fullnames or post links for detail mode; not combined with feeds or searches | Empty |
subredditCatalog | hiring, programming, housing, tickets, local, classifieds, remote_jobs, startups | Unset |
maxResults | Rows per subreddit, or per site-wide query; 1–5000 | 70; form sample 3 |
sort | new, hot, top, relevance; relevance is search-only | new |
timeFilter | hour, day, week, month, year, all; applies to search and top feeds | week |
includeComments | Add comment rows, including available nested replies | false |
maxComments | Comments per post, 1–100, within the remaining row limit | 10 |
expandCommentSubtrees | Extra requests spent filling replies the comment page left out, 0–25; 0 is off | 0 |
includeSubredditMeta | Add public community details as billed rows | false |
includeUserMeta | Add public post-author details as billed rows | false |
expandRelatedSubreddits | Expand topic names entered in subreddits into catalog communities | false |
allowListingFallback | Retry an empty top/week feed as new, without a time restriction | false |
Subreddit feed:
{"subreddits": ["forhire"],"maxResults": 5}
Search selected communities:
{"subreddits": ["forhire"],"searchQueries": ["python jobs"],"timeFilter": "month","maxResults": 5}
Site-wide search:
{"subreddits": [],"searchQueries": ["python jobs"],"maxResults": 5}
Topic catalog:
{"subredditCatalog": "programming","maxResults": 3}
maxItemsandlimitare accepted as aliases formaxResults.- Close field-name misspellings are corrected; other unknown fields are ignored with a note. Invalid
sortandtimeFiltervalues are ignored in favour of defaults. - Unusable input stops before any rows are charged, with a message such as
INVALID_INPUT: <field> — <how to fix>. INPUT_REPORTin the run's key-value store records fields filled, corrected or ignored. Check it if the interpreted input differs from what you expected.- Without search terms,
relevancebecomesnew. Relative time windows do not automatically widen.
Output example
Illustrative post row with a placeholder author and identifier:
{"rowType": "post","id": "examplepost","postId": "examplepost","subreddit": "forhire","title": "Example hiring discussion","url": "https://www.reddit.com/r/forhire/comments/examplepost/","author": "example_user","body": "Example post text.","score": 12,"numComments": 8,"createdAt": "2026-10-20T09:00:00Z","scrapedAt": "2026-10-24T09:00:00Z"}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. Filter by rowType when you need only posts, comments, communities or users.
Why use this Reddit scraper?
- Pay per delivered row. Collection attempts do not count as rows.
- Keep delivered results. Rows already written remain available if a later step fails or the run stops. Available partial results can also be delivered; inspect
RUN_SUMMARYfor partial completion. - Understand failures. Input errors name the field to fix;
ERROR_SUMMARYrecords collection failures. - Avoid invented values. Missing optional data stays absent or empty.
- Handle several inputs. Collect across communities or keywords in one run.
- No Reddit account setup. You do not need a Reddit login, Reddit API key or proxy setup.
How much does it cost to scrape Reddit?
Pricing is pay per event: $0.005 per start event and $0.002 per delivered row. The start fee is one event per GB of Actor memory, with a minimum of one event. At the configured memory range of 512–1,024 MB, that is $0.005 per start.
| Apify plan | Price per row | Price per 1,000 rows |
|---|---|---|
| Free | $0.002 | $2.00 |
| Starter | $0.002 | $2.00 |
| Scale | $0.002 | $2.00 |
| Business | $0.002 | $2.00 |
The supplied pricing is the same across plans. Post, comment, subreddit and user rows all count at the same rate.
maxResultsapplies to each subreddit, or each query when searching site-wide. The default is70; larger requests are collected in parts of 70.- Optional rows share that limit; enabling them can reduce the number of posts delivered.
- Free-plan users are limited to 200 rows per run and 10 runs of this Actor. These are developer-set limits. Paid plans do not have the 10-run cap.
- Set Maximum cost per run in run options (
maxTotalChargeUsdin the API) to cap the whole run, regardless of input count.
Example: 3 subreddits returning 50 rows each produce 150 rows. On the Free plan, those rows cost 150 × $0.002 + $0.005 for one start = $0.305. Fewer delivered rows mean fewer row charges; the start fee still applies.
What happens when the run timeout is too short
Some searches take longer than the selected timeout. The run can pause with a message beginning "Queued on the collection backend; this run will resume automatically" and an estimated wait. It temporarily shows ABORTED. When results are ready, the same run resumes, reports Resumed: delivering N rows., writes to the same dataset and finishes as SUCCEEDED if delivery succeeds.
Already delivered rows are skipped rather than delivered or charged twice. Automatic pauses can happen at most 3 times per run. Keep the default timeout of 1,800 seconds to reduce the chance of a pause.
Synchronous endpoints (run-sync, run-sync-get-dataset-items) wait at most 300 seconds and may return an empty dataset while the run is paused. For longer jobs, start asynchronously and read the dataset after SUCCEEDED, or use a succeeded-event webhook. An unrelated error or manual abort is not a promise of automatic recovery.
Use with AI agents and the API
Apify MCP server (Claude, ChatGPT, Cursor, VS Code)
Add this Actor in an MCP client that supports remote servers:
https://mcp.apify.com?tools=lentic_clockss/reddit-scraper
Sign in with Apify through OAuth when asked, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; the agent reads the rows with get-dataset-items. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/reddit-scraper with APIFY_TOKEN set.
Example prompt: "Find five posts in r/forhire mentioning python jobs from the past month. Return their titles and links, without comments."
Apify API
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/reddit-scraper").call(run_input={"subreddits": ["forhire"], "maxResults": 5})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/reddit-scraper').call({subreddits: ['forhire'], maxResults: 5,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For asynchronous HTTP access, send the input as JSON to POST https://api.apify.com/v2/acts/lentic_clockss~reddit-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Integrations
Use the Actor's Integrations tab to connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable or a webhook. Apify Schedules can trigger recurring runs.
FAQ
Q: Is it legal to scrape Reddit?
Public availability is not permission for every use. Check Reddit's terms and applicable data-protection law. You are responsible for how you collect and use the data; processing personal data needs a lawful basis.
Q: Why did my run end as ABORTED?
Check the status message. The automatic-resume message means a temporary pause while results are prepared. Other aborts may require investigation; see the timeout section above.
Q: How many results can I get?
Set maxResults from 1 to 5000 per input. This is a ceiling, not a guarantee. Availability, the maximum cost and free-plan limits can reduce delivery.
Q: Why are some fields empty?
Fields vary by row type and source availability. Link posts may have no body text, authors may be unavailable, and scores may be hidden. Missing values are not filled with guesses.
Q: Are comments included in the price?
Each comment is a separately billed row at the same price as a post. Comments count toward maxResults together with posts and enabled metadata rows. maxComments limits comments per post; it does not add extra capacity.
Q: Does this return every comment?
No. Available nested replies can be included, but collection is bounded by maxComments and the remaining row limit. Set expandCommentSubtrees above 0 to spend a few extra requests filling replies that the comment page left out for comments that report children it did not deliver. Whatever stays unexpanded is reported in the completeness flags, which describe the returned slice, not every comment ever posted.
Q: Do I need a Reddit API key or account?
No Reddit credentials are required. You need an Apify account to run the Actor and an Apify token for API access.
Q: Can I search across multiple subreddits?
Yes. List them in subreddits; add searchQueries to restrict results by keyword. For site-wide search, clear the sample subreddit or send subreddits=[].
Limitations
- Public, accessible content only; private communities and restricted content are not supported targets.
- Search results are not a complete historical archive or a real-time stream.
- Deleted or removed comment bodies are skipped. Missing author details and hidden scores can reduce available fields.
- Comment and metadata collection can fail independently of post collection. A post row does not guarantee accompanying optional rows.
timeFilterdoes not filterneworhotfeeds. EnablingallowListingFallbackcan replace an empty weekly top feed with unrestricted new posts.- Source availability, duplicate removal and row limits can leave fewer rows than requested. Read the run summary before treating a short result as exhaustive.
Related scrapers
More social media and video scrapers from the same publisher:
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Found a problem or need another field? Open an issue in the Issues tab of this Actor's page and include the run ID and the input you used.