Reddit Scraper V2 — Posts, Comments, Users & Subreddits (11)
Pricing
from $1.99 / 1,000 results
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
Maintained by CommunityActor stats
4
Bookmarked
10
Total users
2
Monthly active users
16 days ago
Last modified
Categories
Share
Reddit Scraper V2
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
| # | Endpoint | Records returned | Best for |
|---|---|---|---|
| 1 | Post Comments | up to 1500 (or all) | sentiment, debate threads, archives, training data |
| 2 | Post by ID | 1 record | single-post deep dive |
| 3 | Profile (Full) | 1 record | full-profile dashboards, lead enrichment |
| 4 | Profile (Details) | 1 record | moderation tooling, contributor audits |
| 5 | Profile Posts | up to 1250 | author monitoring, content audits |
| 6 | Profile Comments | up to 1250 | brand-mention tracking, reputation monitoring |
| 7 | User Info | 1 record | filling field gaps from Profile (Full) |
| 8 | Community Info | 1 record | community discovery, audience sizing |
| 9 | Community Feed | up to 1250 | content scraping, trending posts |
| 10 | Get Comment by ID | 1 record | quoting, refreshing one comment |
| 11 | Linked Comment Info | 1 record | comment with parent post + author context |
Inputs accept the most-permissive format Reddit uses for each entity:
| Entity | Accepted |
|---|---|
| post | URL · t3_ fullname · raw ID |
| comment | URL · t1_ fullname · raw ID |
| user | username · u/name |
| subreddit | name · 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
| Field | Type | Default | Notes |
|---|---|---|---|
post | string | (required) | URL or post ID. |
sort | enum | best | best / confidence / top / new / controversial / old / qa. |
mode | enum | custom | custom (capped) / top_level / all (uncapped). |
limit | int | 100 | 1 – 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
| Field | Notes |
|---|---|
post | URL 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
| Field | Notes |
|---|---|
username | Raw 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
| Field | Notes |
|---|---|
username | Raw 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
| Field | Type | Default | Notes |
|---|---|---|---|
username | string | (required) | Raw or u/name. |
sort | enum | new | hot / new / top / controversial. |
time | enum | (none) | Used with top / controversial. |
limit | int | 25 | 1 – 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
| Field | Notes |
|---|---|
username | Raw 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
| Field | Notes |
|---|---|
subreddit | Name / 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
| Field | Type | Default | Notes |
|---|---|---|---|
subreddit | string | (required) | Name / r/name / URL. |
sort | enum | hot | best / hot / new / top / rising / controversial. |
time | enum | (none) | Used with top / controversial. |
limit | int | 25 | 1 – 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
| Field | Notes |
|---|---|
comment | URL, 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
| Field | Notes |
|---|---|
comment | URL, 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
- Pick an endpoint in the "What to fetch" dropdown.
- Open the matching section and fill its fields. Each section is independent.
- 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 kind | Rows 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 threads —
allmode (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_18flag tells you if a post is age-gated.
Status & error reference
Run status (Apify-side, shown on the run page)
| Status | Apify message | Meaning | What to do |
|---|---|---|---|
| "Actor succeeded with N results in the dataset" | Run finished. Some or zero records pushed. | Open the dataset to view results. | |
| "The Actor process failed…" | Validation error or upstream Reddit fault. | Check the run log. You are NOT charged for failed runs. | |
| "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. | |
| "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)
| Condition | Cause | Result |
|---|---|---|
| Empty result set | Username / post / subreddit doesn't exist or is banned. | Run SUCCEEDED, 0 records, no charge. |
| Removed post stub | Post was removed; partial metadata returned. | Run SUCCEEDED, includes removed_by_category. |
| Suspended account | Username 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 profile | Peak 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.
| Event | Trigger | Price (per 1,000) |
|---|---|---|
result | Each post / comment / profile / community record pushed to the dataset | $1.99 |
| Outcome | Charged? |
|---|---|
SUCCEEDED with results | Yes — per record pushed. |
SUCCEEDED with zero records | No. |
FAILED (validation / upstream) | No. |
ABORTED | Only 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.