Reddit Scraper - Posts, Comments & Community Data avatar

Reddit Scraper - Posts, Comments & Community Data

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Reddit Scraper - Posts, Comments & Community Data

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

kane liu

Maintained by Community

Actor stats

1

Bookmarked

26

Total users

3

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

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 subreddits to browse posts sorted by new, hot or top.
  • Keyword search: fill searchQueries; add subreddits to search within selected communities, or leave them empty for site-wide search.
  • Topic catalog: choose subredditCatalog to use a built-in list of communities.
  • Optional rows: includeComments, includeSubredditMeta and includeUserMeta are 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

FieldDescriptionExample
rowTypeKind of rowpost
idIdentifier for this rowexamplepost
postIdReddit post identifierexamplepost
subredditCommunity without the prefixforhire
titlePost titleExample hiring discussion
urlLink to the Reddit threadhttps://www.reddit.com/r/forhire/comments/examplepost/
authorPublic usernameexample_user
bodySelf-post textExample post text.
scoreObserved score, not an exact vote count12
upvoteRatioObserved positive-vote ratio0.9
numCommentsComment count reported by Reddit8
createdAtCreation time in UTC2026-10-20T09:00:00Z
scrapedAtCollection time in UTC2026-10-24T09:00:00Z

Comment rows

FieldDescriptionExample
rowTypeKind of rowcomment
postIdParent post identifierexamplepost
postAuthorParent post's authorexample_user
bodyComment textExample reply.
parentIdParent post or comment identifiert3_examplepost
depthZero for top-level comments; higher for replies0
commentTreeCompleteWhether the returned comment slice was completefalse

Subreddit rows

FieldDescriptionExample
rowTypeKind of rowsubreddit
displayNameCommunity display nameforhire
subscribersReported subscriber count100000
publicDescriptionCommunity introductionExample community description.

User rows

These describe authors of collected posts, not an independent username search.

FieldDescriptionExample
rowTypeKind of rowuser
authorPublic usernameexample_user
authorFullnameIdentifier for joining author recordst2_exampleuser
linkKarmaReported post karma250
commentKarmaReported comment karma800

How to scrape Reddit

  1. Open Reddit Scraper in Apify Console. A free Apify account is enough to try it.
  2. Fill a target field, such as subreddits with forhire.
  3. Set maxResults to 5 for your first run.
  4. Click Start and wait for the run to finish.
  5. 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

FieldWhat to enterDefault
subredditsCommunity names; empty with keywords means site-wideNo default; sample forhire
searchQueriesSearch terms; empty means browse feedsEmpty
postIdsPost ids, t3_ fullnames or post links for detail mode; not combined with feeds or searchesEmpty
subredditCataloghiring, programming, housing, tickets, local, classifieds, remote_jobs, startupsUnset
maxResultsRows per subreddit, or per site-wide query; 1–500070; form sample 3
sortnew, hot, top, relevance; relevance is search-onlynew
timeFilterhour, day, week, month, year, all; applies to search and top feedsweek
includeCommentsAdd comment rows, including available nested repliesfalse
maxCommentsComments per post, 1–100, within the remaining row limit10
expandCommentSubtreesExtra requests spent filling replies the comment page left out, 0–25; 0 is off0
includeSubredditMetaAdd public community details as billed rowsfalse
includeUserMetaAdd public post-author details as billed rowsfalse
expandRelatedSubredditsExpand topic names entered in subreddits into catalog communitiesfalse
allowListingFallbackRetry an empty top/week feed as new, without a time restrictionfalse

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
}
  • maxItems and limit are accepted as aliases for maxResults.
  • Close field-name misspellings are corrected; other unknown fields are ignored with a note. Invalid sort and timeFilter values 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_REPORT in 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, relevance becomes new. 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_SUMMARY for partial completion.
  • Understand failures. Input errors name the field to fix; ERROR_SUMMARY records 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 planPrice per rowPrice 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.

  • maxResults applies to each subreddit, or each query when searching site-wide. The default is 70; 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 (maxTotalChargeUsd in 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 ApifyClient
client = 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.
  • timeFilter does not filter new or hot feeds. Enabling allowListingFallback can 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.

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.