Reddit Scraper V2 — Posts, Comments, Users & Subreddits (11) avatar

Reddit Scraper V2 — Posts, Comments, Users & Subreddits (11)

Pricing

from $1.99 / 1,000 results

Go to Apify Store
Reddit Scraper V2 — Posts, Comments, Users & Subreddits (11)

Reddit Scraper V2 — Posts, Comments, Users & Subreddits (11)

Scrape Reddit at scale: single posts, comment trees, user profiles, subreddit feeds, and detailed comment lookups (Get Comment by ID + Linked Comment Info). 11 endpoints, no Reddit account or proxy required. For bulk-by-ID lookups see the c

Pricing

from $1.99 / 1,000 results

Rating

5.0

(4)

Developer

Red Crawler

Red Crawler

Maintained by Community

Actor stats

4

Bookmarked

10

Total users

2

Monthly active users

16 days ago

Last modified

Share

Reddit Scraper V2

Endpoints Auth Proxy Pricing

Scrape Reddit at scale — single posts, comment trees, user profiles, subreddit feeds, and detailed comment lookups. 11 self-contained endpoints in one actor. No Reddit account or proxy required.

Pick the endpoint, fill the matching section, hit Start.

Looking for bulk-by-ID lookups? They live in the companion actor Reddit Bulk Scrape V2 — paste up to 500 IDs/usernames (5000 for comments) per run and get one full record per item.


Endpoints at a glance

#EndpointRecords returnedBest for
1Post Commentsup to 1500 (or all)sentiment, debate threads, archives, training data
2Post by ID1 recordsingle-post deep dive
3Profile (Full)1 recordfull-profile dashboards, lead enrichment
4Profile (Details)1 recordmoderation tooling, contributor audits
5Profile Postsup to 1250author monitoring, content audits
6Profile Commentsup to 1250brand-mention tracking, reputation monitoring
7User Info1 recordfilling field gaps from Profile (Full)
8Community Info1 recordcommunity discovery, audience sizing
9Community Feedup to 1250content scraping, trending posts
10Get Comment by ID1 recordquoting, refreshing one comment
11Linked Comment Info1 recordcomment with parent post + author context

Inputs accept the most-permissive format Reddit uses for each entity:

EntityAccepted
postURL · t3_ fullname · raw ID
commentURL · t1_ fullname · raw ID
userusername · u/name
subredditname · r/name · subreddit URL

What you can fetch

1. Post Comments

Every comment on a single post, with control over how the tree is traversed.

Inputs

FieldTypeDefaultNotes
poststring(required)URL or post ID.
sortenumbestbest / confidence / top / new / controversial / old / qa.
modeenumcustomcustom (capped) / top_level / all (uncapped).
limitint1001 – 1500. Used by custom mode.

Returns per comment — ID, fullname, parent comment / parent post IDs, author, body (markdown + HTML), score, depth, OP flag, all comment flags, subreddit, awards, created + edited timestamps, permalink.

Use it when — sentiment, debate threads, support-ticket mining, comment archives, training data.

Optional flag: post_comments_deep (boolean, default false). Only used when Comment mode is all. Runs a second pass to surface a few more hidden deep replies — adds ~10 extra seconds for ~2% more coverage. Leave off unless you're chasing the last few buried replies in a giant thread.

Example

Input

{
"endpoint": "post_comments",
"post_comments_post": "https://www.reddit.com/r/Wordpress/comments/1s4a4j6/",
"post_comments_sort": "best",
"post_comments_mode": "custom",
"post_comments_limit": 100
}

Output (one dataset record per comment; truncated)

{
"endpoint": "post_comments",
"id": "t1_ocls9cs",
"post_id": "t3_1s4a4j6",
"parent_id": null,
"author": "evanmac42",
"author_id": "t2_ebufp",
"score": 49,
"created_at": "2026-03-26T16:12:49.561000+0000",
"edited_at": null,
"depth": 0,
"permalink": "/r/Wordpress/comments/1s4a4j6/serious_question_which_group_smokes_more_crack/ocls9cs/",
"body": "Microsoft experiments on users.\n\nWordPress experiments on developers.\n\nPick your poison.",
"is_locked": false,
"is_stickied": false,
"is_score_hidden": false,
"is_archived": false,
"is_removed": false,
"is_admin_takedown": false,
"removed_by_category": null,
"distinguished_as": null,
"rate_limit_used": 2,
"rate_limit_remaining": 1798,
"rate_limit_reset_at": "2026-05-13T17:20:00Z"
}

2. Post by ID

Full payload of a single post.

Inputs

FieldNotes
postURL or post ID.

Returns — title, body, score, comment count, awards, flair, media (images / video / gallery), all post flags, subreddit, author, created timestamp.

Use it when — single-post deep dive, refreshing a stored post, importing one thread into your DB.

Example

Input

{
"endpoint": "post_by_id",
"post_by_id_post": "1s4a4j6"
}

Output (one dataset record; truncated)

{
"endpoint": "post_by_id",
"id": "t3_1s4a4j6",
"postTitle": "Serious question: Which group smokes more crack? The new features team at Microsoft OR the wordpress team that created the block editor?",
"createdAt": "2026-03-26T15:09:23.098000+0000",
"editedAt": null,
"score": 48,
"commentCount": 130,
"upvoteRatio": 0.82,
"url": "https://www.reddit.com/r/Wordpress/comments/1s4a4j6/serious_question_which_group_smokes_more_crack/",
"permalink": "/r/Wordpress/comments/1s4a4j6/serious_question_which_group_smokes_more_crack/",
"domain": "self.Wordpress",
"isNsfw": false,
"isSpoiler": false,
"isLocked": false,
"isStickied": false,
"isArchived": false,
"isSelfPost": true,
"isVideo": false,
"content": {
"markdown": "MS - The new features team at Microsoft\n\nOR\n\nWPBE - the wordpress team that created the block editor",
"preview": "MS - The new features team at Microsoft OR WPBE - the wordpress team that created the block editor",
"...": "..."
},
"subreddit": { "id": "t5_2qhjq", "name": "Wordpress", "prefixedName": "r/Wordpress", "subscribersCount": 303111, "...": "..." },
"authorInfo": { "id": "t2_...", "name": "cwatty55", "...": "..." },
"flair": null,
"media": null,
"gallery": null,
"removedByCategory": null,
"rate_limit_used": 3,
"rate_limit_remaining": 1797,
"rate_limit_reset_at": "2026-05-13T17:20:00Z"
}

3. Profile (Full)

Full Redditor identity with the richest set of profile fields.

Inputs

FieldNotes
usernameRaw or u/name.

Returns — karma split into post / comment / award / awardee, account creation date, snoovatar, banner, social links, accepted-DMs flag, accepted-chats flag, accepted-followers flag, mod info, employee / verified flags, premium status, trophy-case totals.

Use it when — full-profile dashboards, lead enrichment, account-quality scoring, brand-monitor profile cards.

Example

Input

{
"endpoint": "profile_full",
"profile_full_username": "spez"
}

Output (one dataset record; truncated)

{
"endpoint": "profile_full",
"id": "t2_1w72",
"name": "spez",
"prefixedName": "u/spez",
"accountType": "USER",
"isEmployee": true,
"isAcceptingChats": false,
"isAcceptingFollowers": true,
"isAcceptingPMs": false,
"isBlocked": false,
"isFriend": false,
"profile": {
"createdAt": "2005-06-06T04:00:00.000000+0000",
"title": "spez",
"publicDescriptionText": "Reddit CEO",
"path": "/user/spez/",
"isNsfw": false,
"isUserBanned": false,
"isDefaultIcon": false,
"isDefaultBanner": false,
"socialLinks": [],
"styles": { "icon": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png?...", "...": "..." },
"...": "..."
},
"karma": { "...": "..." },
"rate_limit_used": 4,
"rate_limit_remaining": 1796,
"rate_limit_reset_at": "2026-05-13T17:20:00Z"
}

4. Profile (Details)

Profile-as-subreddit settings (every Reddit profile is also a subreddit u_username).

Inputs

FieldNotes
usernameRaw or u/name.

Returns — post permissions, flair settings, mod permissions, contributor / subscriber state, whitelist status, NSFW flag, the user's authorFlair on their own profile.

Use it when — moderation tooling, contributor / whitelist audits, profile-page gating logic.

Example

Input

{
"endpoint": "profile_details",
"profile_details_username": "spez"
}

Output (one dataset record; truncated)

{
"endpoint": "profile_details",
"id": "t5_3k30p",
"name": "u_spez",
"title": "spez",
"publicDescriptionText": "Reddit CEO",
"description": null,
"createdAt": "2005-06-06T04:00:00.000000+0000",
"path": "/user/spez/",
"subscribersCount": 0,
"isNsfw": false,
"isQuarantined": false,
"isUserBanned": false,
"isContributor": false,
"isSubscribed": false,
"isFavorite": false,
"isCrosspostingAllowed": true,
"isSpoilerAvailable": true,
"whitelistStatus": "NO_ADS",
"allowedPostTypes": [],
"modPermissions": null,
"authorFlair": null,
"authorFlairSettings": { "isEnabled": true, "isSelfAssignable": false },
"postFlairSettings": { "isEnabled": true },
"redditorInfo": {
"attributes": {
"redditHandleInfo": { "username": "spez", "prefixedUsername": "u/spez", "displayName": "spez" },
"redditorType": "USER",
"verificationStatus": "PROFILE_VERIFIED"
},
"prefixedName": "u/spez"
},
"styles": { "icon": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_...", "...": "..." },
"rate_limit_used": 5,
"rate_limit_remaining": 1795,
"rate_limit_reset_at": "2026-05-13T17:20:00Z"
}

5. Profile Posts

The user's submitted posts.

Inputs

FieldTypeDefaultNotes
usernamestring(required)Raw or u/name.
sortenumnewhot / new / top / controversial.
timeenum(none)Used with top / controversial.
limitint251 – 1250.

Returns per post — same rich post record as Post by ID.

Use it when — author monitoring, content audits, building feeds of a creator's submissions.

Example

Input

{
"endpoint": "profile_posts",
"profile_posts_username": "spez",
"profile_posts_sort": "new",
"profile_posts_limit": 25
}

Output (one dataset record per post; truncated)

{
"endpoint": "profile_posts",
"id": "1t4nr7v",
"name": "t3_1t4nr7v",
"title": "Reddit looked old the day it was born. I joined my friend D. Scott Phoenix on the Progress podcast to discuss communities, AI, and what makes the internet feel human.",
"authorName": "u/spez",
"detailsLink": "spez",
"createdAt": "2026-05-05T18:19:02.142000+0000",
"score": 47,
"commentCount": 35,
"shareCount": 50,
"voteState": "NONE",
"isScoreHidden": false,
"isVisited": false,
"isTranslatable": false,
"isTranslated": false,
"isShareButtonHidden": false,
"isModeratable": false,
"statusIndicators": ["ADMIN", "PROFILE_VERIFIED_AUTHOR"],
"iconPath": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_...",
"iconShape": "ROUND",
"isJoinButtonShown": false,
"isBrandAffiliate": false,
"mediaPath": null,
"mediaDomain": null,
"rate_limit_used": 6,
"rate_limit_remaining": 1794,
"rate_limit_reset_at": "2026-05-13T17:20:00Z"
}

6. Profile Comments

The user's comment history.

Inputs — same controls as Profile Posts (sort / time / limit 1–1250).

Returns per comment — same record as Post Comments.

Use it when — brand-mention tracking, reputation monitoring, conversation mining on a single user.

Example

Input

{
"endpoint": "profile_comments",
"profile_comments_username": "spez",
"profile_comments_sort": "new",
"profile_comments_limit": 25
}

Output (one dataset record per comment; truncated)

{
"endpoint": "profile_comments",
"id": "t1_okpklb6",
"__typename": "Comment",
"createdAt": "2026-05-08T20:48:30.912000+0000",
"score": 24,
"voteState": "NONE",
"content": {
"preview": "Ding ding ding",
"richtextMedia": []
},
"postInfo": {
"id": "t3_1t7d1gy",
"title": "Please Fire Vollero for Buyback Mismanagement",
"subreddit": { "prefixedName": "r/redditstock" }
},
"rate_limit_used": 7,
"rate_limit_remaining": 1793,
"rate_limit_reset_at": "2026-05-13T17:20:00Z"
}

7. User Info

Alternate user-info read with a different field set than Profile (Full) — useful for filling gaps.

Inputs

FieldNotes
usernameRaw or u/name.

Returns — complementary profile fields.

Use it when — Profile (Full) is missing fields you need; combining both gives the most complete record.

Example

Input

{
"endpoint": "profile_info",
"profile_info_username": "spez"
}

Output (one dataset record; truncated)

{
"endpoint": "profile_info",
"id": "t2_1w72",
"prefixedName": "u/spez",
"icon": {
"url": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png"
},
"rate_limit_used": 8,
"rate_limit_remaining": 1792,
"rate_limit_reset_at": "2026-05-13T17:20:00Z"
}

8. Community Info

Subreddit metadata.

Inputs

FieldNotes
subredditName / r/name / URL.

Returns — subscriber count, public + full description, rules summary, theme (banner, icon, colors), allowed submission types, NSFW flag, type (public / private / restricted), created timestamp.

Use it when — community discovery, sizing audiences, sidebar / theme audits.

Example

Input

{
"endpoint": "community_info",
"community_info_name": "Wordpress"
}

Output (one dataset record; truncated)

{
"endpoint": "community_info",
"id": "t5_2qhjq",
"name": "Wordpress",
"prefixedName": "r/Wordpress",
"title": "WordPress",
"type": "PUBLIC",
"isNsfw": false,
"isQuarantined": false,
"description": {
"markdown": "###Welcome to r/WordPress\n>The place for news, articles and discussion regarding WordPress.\n\n...",
"...": "..."
},
"publicDescription": { "markdown": "A subreddit for sharing WordPress news, ...", "...": "..." },
"styles": {
"primaryColor": "#00749A",
"icon": "https://styles.redditmedia.com/t5_2qhjq/styles/communityIcon_x99vhgjrq6i31.png?...",
"bannerBackgroundImage": "https://styles.redditmedia.com/t5_2qhjq/styles/bannerBackgroundImage_pus3p9f9cdt41.png",
"...": "..."
},
"rules": [ { "...": "..." } ],
"allowedPostTypes": ["TEXT", "LINK", "IMAGE", "..."],
"rate_limit_used": 9,
"rate_limit_remaining": 1791,
"rate_limit_reset_at": "2026-05-13T17:20:00Z"
}

9. Community Feed

A subreddit's post feed with all 6 sort modes.

Inputs

FieldTypeDefaultNotes
subredditstring(required)Name / r/name / URL.
sortenumhotbest / hot / new / top / rising / controversial.
timeenum(none)Used with top / controversial.
limitint251 – 1250.

Returns per post — same rich post record as Post by ID.

Use it when — content scraping, trending-post tracking, building feeds of a niche community.

Example

Input

{
"endpoint": "community_feed",
"community_feed_name": "Wordpress",
"community_feed_sort": "hot",
"community_feed_limit": 25
}

Output (one dataset record per post; truncated)

{
"endpoint": "community_feed",
"id": "1r80vkz",
"name": "t3_1r80vkz",
"title": "Monthly AMA - Suggestions wanted!",
"authorName": "u/RealKenshino",
"detailsLink": "RealKenshino",
"createdAt": "2026-02-18T11:48:13.247000+0000",
"score": 29,
"commentCount": 12,
"shareCount": 5,
"voteState": "NONE",
"isScoreHidden": false,
"isVisited": false,
"isModeratable": false,
"statusIndicators": ["MOD", "PINNED"],
"iconPath": "https://styles.redditmedia.com/t5_2s1zfc/styles/profileIcon_...",
"iconShape": "ROUND",
"isBrandAffiliate": false,
"text": "We're launching a monthly AMA series featuring people from across the WordPress ecosystem...",
"isRead": false,
"rate_limit_used": 10,
"rate_limit_remaining": 1790,
"rate_limit_reset_at": "2026-05-13T17:20:00Z"
}

10. Get Comment by ID

Full payload of a single comment.

Inputs

FieldNotes
commentURL, t1_ fullname, or raw ID.

Returns — body, score, author, flair, awards, parent post / comment IDs, created timestamp, permalink.

Use it when — quoting a comment, refreshing one stored row, importing a single comment into your DB.

Example

Input

{
"endpoint": "get_comment_byid",
"get_comment_byid_id": "lwbnv0t"
}

Output (one dataset record; truncated)

{
"endpoint": "get_comment_byid",
"id": "t1_lwbnv0t",
"createdAt": "2024-11-09T22:56:36.609000+0000",
"editedAt": null,
"isRemoved": false,
"isAdminTakedown": false,
"isLocked": false,
"isInitiallyCollapsed": false,
"initiallyCollapsedReason": null,
"isTranslatable": false,
"languageCode": null,
"parent": null,
"content": {
"markdown": "Can't stand her",
"preview": "Can't stand her",
"typeHint": "TEXT",
"richtextMedia": [],
"...": "..."
},
"postInfo": {
"id": "t3_1gnhjun",
"title": "Loved Ree imitating the googly eyes of the cookie frog on the Christmas Cookie Challenge.",
"isNsfw": false,
"subreddit": { "id": "t5_2safc", "name": "foodnetwork", "prefixedName": "r/foodnetwork", "...": "..." }
},
"authorInfo": {
"id": "t2_12kaksynmp",
"name": "noprisoners5",
"isBlocked": false,
"isCakeDayNow": false,
"...": "..."
},
"rate_limit_used": 11,
"rate_limit_remaining": 1789,
"rate_limit_reset_at": "2026-05-13T17:20:00Z"
}

11. Linked Comment Info

Comment payload plus the parent post and the comment author profile in a single record — handy when you need full conversation context without firing three separate calls.

Inputs

FieldNotes
commentURL, t1_ fullname, or raw ID.

Returns — full comment record + parent post (title, subreddit, created, score, flair) + author profile snapshot (karma, account age, flags).

Use it when — building rich comment cards, audit trails, moderation tooling, or any flow that needs the comment alongside its post and author in one row.

Example

Input

{
"endpoint": "linked_comment_info",
"linked_comment_info_id": "lwbnv0t"
}

Output (one dataset record; truncated)

{
"endpoint": "linked_comment_info",
"commentById": {
"id": "t1_lwbnv0t",
"score": 25,
"isRemoved": false,
"content": {
"preview": "Can't stand her",
"richtextMedia": []
},
"postInfo": {
"id": "t3_1gnhjun",
"createdAt": "2024-11-09T19:15:34.545000+0000",
"title": "Loved Ree imitating the googly eyes of the cookie frog on the Christmas Cookie Challenge.",
"removedByCategory": null,
"subreddit": { "type": "PUBLIC", "prefixedName": "r/foodnetwork" }
},
"authorInfo": {
"id": "t2_12kaksynmp",
"displayName": "noprisoners5",
"icon": { "url": "https://styles.redditmedia.com/t5_br1f8s/styles/profileIcon_wxwzzhofgjfg1.png" },
"attributes": {
"redditHandleInfo": { "username": "noprisoners5", "prefixedUsername": "u/noprisoners5", "displayName": "noprisoners5" },
"redditorType": "USER",
"verificationStatus": "NONE"
}
}
},
"rate_limit_used": 12,
"rate_limit_remaining": 1788,
"rate_limit_reset_at": "2026-05-13T17:20:00Z"
}

How to run

  1. Pick an endpoint in the "What to fetch" dropdown.
  2. Open the matching section and fill its fields. Each section is independent.
  3. Click Start.

Default endpoint is Community Feed on r/python so the actor runs out of the box.


Output

Results are pushed to the actor's default dataset. View as a table or download as JSON / CSV / Excel / XML.

Endpoint kindRows pushed
Single-record (Post by ID, Profile (Full), Community Info, Get Comment by ID, Linked Comment Info, etc.)1 record
Feed (Post Comments, Profile Posts / Comments, Community Feed)up to your limit

Every record carries an endpoint field. Most useful columns (id, title / name, score / karma, created date) are placed first.


Common edge cases

  • Removed / banned subreddits return zero records.
  • Suspended / deleted accounts return minimal data; expect most fields to be null.
  • Long Post Comments threadsall mode (uncapped) on huge threads can return tens of thousands of records.
  • ID format flexibility — raw IDs, prefixed (t1_, t3_), and full Reddit URLs are all accepted.
  • Bulk-by-ID lookups live in the companion actor Reddit Bulk Scrape V2 — use it when you have a list of post / comment / subreddit / user IDs to hydrate in a single call.
  • NSFW content — fully supported; the over_18 flag tells you if a post is age-gated.

Status & error reference

Run status (Apify-side, shown on the run page)

StatusApify messageMeaningWhat to do
Succeeded"Actor succeeded with N results in the dataset"Run finished. Some or zero records pushed.Open the dataset to view results.
Failed"The Actor process failed…"Validation error or upstream Reddit fault.Check the run log. You are NOT charged for failed runs.
Timed out"The Actor timed out. You can resurrect it with a longer timeout to continue where you left off."Run exceeded its timeout.Re-run with a smaller limit or fewer inputs.
Aborted"The Actor process was aborted. You can resurrect it to continue where you left off."You stopped the run manually.No charge for unpushed results.

Common in-run conditions (visible in run log)

ConditionCauseResult
Empty result setUsername / post / subreddit doesn't exist or is banned.Run SUCCEEDED, 0 records, no charge.
Removed post stubPost was removed; partial metadata returned.Run SUCCEEDED, includes removed_by_category.
Suspended accountUsername is suspended.Run SUCCEEDED, mostly-null record.

Why this actor is fast

  • Speed — 1–3 seconds per call, end-to-end. Pure HTTP to Reddit's API. No browser to boot, no Playwright / Selenium / Puppeteer overhead. Competing browser-based scrapers typically take 15–60 seconds per call.
  • Reliability — zero browser flakiness. No headless-Chromium crashes. No JS-render timeouts. No captcha pages. No surprise mid-run failures from a browser quirk.
  • Footprint: see memory profile below.

Runs in Apify's lowest 128 MB tier — typically peaks around 45 MB (~35% of the allocation).

Built for reliability behind the scenes — just paste your inputs and run.

Run profilePeak memory observed
Single post / comment / profile lookup~45 MB
Linked Comment Info (comment + post + author in one row)~46 MB
Subreddit feed (up to 1250 posts)~48 MB

That gives ~64% headroom inside 128 MB. You can leave the Memory field at the default and never think about it. If you want extra margin (e.g. unusually large all-mode comment threads), bumping to 256 MB is supported and costs more compute units per second on Apify's side — most users won't need it.


Pricing

Pay-per-result. You're only charged for records actually pushed to the dataset — failed runs, validation errors, and empty results cost nothing.

EventTriggerPrice (per 1,000)
resultEach post / comment / profile / community record pushed to the dataset$1.99
OutcomeCharged?
SUCCEEDED with resultsYes — per record pushed.
SUCCEEDED with zero recordsNo.
FAILED (validation / upstream)No.
ABORTEDOnly for records already pushed before you stopped.

Support and feedback

Found a bug, want a feature, or hit a Reddit error code we don't translate clearly? Open an issue via the actor's Apify Console feedback link, or reach out at the RedCrawler support channel.


Reddit Scraper V2 is part of the RedCrawler family of Reddit actors. RedCrawler is independent — not affiliated with, endorsed by, or sponsored by Reddit, Inc. Use it within Reddit's API terms.