Reddit Posts Scraper: Subreddits, Search & Full Text, No API
Pricing
from $9.23 / 1,000 results
Reddit Posts Scraper: Subreddits, Search & Full Text, No API
Scrape Reddit posts from any subreddit, search query, user or post URL without an API key or login. Get title, author, subreddit, full self text, links, media, thumbnails and timestamps, plus optional AI sentiment, summary and topics. Export to JSON, CSV or Excel.
Pricing
from $9.23 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Reddit Posts Scraper: Subreddits, Search & Full Text, No API Key
Scrape Reddit posts from any subreddit, search query, user or post URL without a Reddit API key, OAuth app or login. This actor reads Reddit's public post feeds over HTTP and writes one clean, normalized record per post, with the full self text, links, media and timestamps, ready for social media monitoring, sentiment research and trend discovery. Optional AI add-ons enrich each post with sentiment, a summary and topic tags.
Here is one real result from a live run (a link post from r/technology), showing every field the actor returns:
{"recordType": "post","thumbnail": "https://external-preview.redd.it/0F8B6ElbJucEXl6mxvIeAcb49nGLV8GFNjSr-6wwsJA.jpeg?width=640&crop=smart&auto=webp&s=8337922a","title": "Tetris issues legal warning after White House releases arcade full of parody games","url": "https://www.dexerto.com/gaming/tetris-issues-legal-warning-after-white-house-releases-arcade-full-of-parody-games-3405931/","id": "1w7dpo9","fullname": "t3_1w7dpo9","selftext": null,"contentHtml": "<table> <tr><td> <a href=\"https://www.reddit.com/r/technology/comments/1w7dpo9/...\"> ...","subreddit": "technology","subredditPrefixed": "r/technology","author": "IndicaOatmeal","authorUri": "https://www.reddit.com/user/IndicaOatmeal","authorFullname": null,"authorFlairText": null,"score": null,"upvoteRatio": null,"numComments": null,"numCrossposts": null,"totalAwards": null,"linkFlairText": null,"permalink": "https://www.reddit.com/r/technology/comments/1w7dpo9/tetris_issues_legal_warning_after_white_house/","domain": "dexerto.com","isSelf": false,"isVideo": null,"mediaUrls": ["https://external-preview.redd.it/0F8B6ElbJucEXl6mxvIeAcb49nGLV8GFNjSr-6wwsJA.jpeg?width=640"],"galleryImageUrls": null,"isNsfw": null,"isSpoiler": null,"isOriginalContent": null,"isPinned": null,"isLocked": null,"isArchived": null,"edited": false,"editedAt": null,"createdAt": "2026-09-04T19:08:57+00:00","updatedAt": "2026-09-04T19:08:57+00:00","observedAt": "2026-09-05T00:30:15.920Z","transport": "rss","aiSentiment": null,"aiSentimentScore": null,"aiSummary": null,"aiTopics": null,"aiCategory": null,"topComments": null,"error": null}
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Honest note on engagement metrics
Reddit now hard-walls anonymous access to its rich data channels: the public JSON endpoints and the old.reddit HTML pages both return a login or network-security block for non-logged-in traffic. The one channel that remains openly readable over HTTP is Reddit's public post feed, and that is what this actor uses.
That feed reliably provides the post's identity, author, subreddit, title, full self text, content HTML, outbound link, media and timestamps. It does not expose live engagement counters, so score, upvoteRatio, numComments, totalAwards, numCrossposts and the moderation flags (isNsfw, isSpoiler, isPinned, isLocked, isArchived, isOriginalContent) are returned as explicit null rather than guessed or faked. If you need live vote and comment counts, a browser-based Reddit scraper that logs in is the right tool, and we say so plainly in the comparison below. We would rather ship honest nulls than invented numbers.
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- How this compares
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
Point the actor at one or more subreddits, a search query across Reddit, exact post URLs, or a mix of start URLs (subreddit, post, user or search URLs), choose a sort order, and it writes one normalized record per post to the run's dataset. Every record carries the post id and fullname, title, author and profile URL, subreddit, outbound URL and permalink, domain, the full self text (for text posts), the raw content HTML, thumbnail and any Reddit-hosted media or gallery image URLs, whether the post is a self post or a video, and creation and edit timestamps.
Optional paid AI add-ons enrich each post: sentiment with a confidence score, a one to two sentence summary, and topic tags with a broad category. A separate top-comments add-on pulls the leading comments (author and text) for each post. Each add-on is off by default, charged only when it returns usable output, and disabled for free Apify plans.
Quickstart
Open the actor, paste this into the input, and press Run. It returns 10 hot posts from r/technology with full text.
{"maxPosts": 10,"subreddits": ["technology"],"sort": "hot"}
Add more subreddits, a searchQuery, exact postUrls, or startUrls. Use sort and timeFilter to control the feed, and turn on the AI add-ons (withSentiment, withSummary, withTopics, withTopComments) on a paid plan. All fields are optional.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
subreddits | string[] | no | ["technology"] | Subreddit names to scrape, without the r/ prefix, for example technology, worldnews. |
searchQuery | string | no | (empty) | Search terms to query across Reddit. When a single subreddit is provided, the search is restricted to it. |
postUrls | string[] | no | [] | Exact Reddit post URLs to fetch directly. |
startUrls | string[] | no | [] | Any mix of subreddit, post, user or search URLs. Each is auto-detected and scraped for posts. |
maxPosts | integer | no | 10 | Maximum number of posts to collect across all sources. maxItems is accepted as an alias. |
withDetails | boolean | no | true | Include the full self text, content HTML and media/gallery URLs on every record. These come with the base result at no extra charge. |
sort | enum | no | hot | Sort order for feeds and search: hot, new, top, rising, controversial. |
timeFilter | enum | no | day | Time window for top, controversial and search: hour, day, week, month, year, all. |
withSentiment | boolean | no | false | Paid add-on. Classify each post's sentiment (positive / negative / neutral) with a confidence score. Paid plans only. |
withSummary | boolean | no | false | Paid add-on. Generate a 1 to 2 sentence summary of each post. Paid plans only. |
withTopics | boolean | no | false | Paid add-on. Extract topic tags and a broad category for each post. Paid plans only. |
withTopComments | boolean | no | false | Paid add-on. Capture the top few comments (author and text) for each post. Paid plans only. |
You can combine subreddits, searchQuery, postUrls and startUrls in a single run.
Output reference
One dataset item per post. Types: string, boolean, string[], object[], or null when the source value is absent or the field is not exposed by Reddit's public feed.
| Field | Type | Description |
|---|---|---|
recordType | string | Always post. |
thumbnail | string | Post thumbnail image URL, or null. |
title | string | Post title. |
url | string | The outbound link for link posts, or the permalink for self posts. |
id | string | Reddit post id (unique per post). |
fullname | string | Reddit fullname, for example t3_1w7dpo9. |
selftext | string | Full self/text body for text posts, or null for link posts. |
contentHtml | string | Raw post content HTML as served by Reddit's feed. |
subreddit | string | Subreddit name. |
subredditPrefixed | string | Subreddit with the r/ prefix. |
author | string | Author username, or null if deleted. |
authorUri | string | Author profile URL. |
permalink | string | Permalink to the post. |
domain | string | Domain the post links to (self.<subreddit> for text posts). |
isSelf | boolean | true for text/self posts. |
isVideo | boolean | true for Reddit-hosted or known video posts, else null. |
mediaUrls | string[] | Reddit-hosted media (image/video) URLs found in the post, or null. |
galleryImageUrls | string[] | Gallery image URLs when the post is a gallery, or null. |
edited | boolean | true when the post was edited after posting. |
editedAt | string | Edit timestamp (ISO 8601), or null. |
createdAt | string | Post creation timestamp (ISO 8601). |
updatedAt | string | Feed last-updated timestamp (ISO 8601). |
observedAt | string | When the record was collected (ISO 8601). |
transport | string | The data channel used (rss). |
score, upvoteRatio, numComments, numCrossposts, totalAwards | null | Engagement counters. Not exposed by Reddit's public feed, returned as null (see the honest note above). |
authorFullname, authorFlairText, linkFlairText | null | Not exposed by Reddit's public feed, returned as null. |
isNsfw, isSpoiler, isOriginalContent, isPinned, isLocked, isArchived | null | Moderation flags. Not exposed by Reddit's public feed, returned as null. |
aiSentiment | string | Add-on: positive, negative, or neutral. Present only with withSentiment. |
aiSentimentScore | number | Add-on: sentiment confidence score (-1 to 1). Present only with withSentiment. |
aiSummary | string | Add-on: 1 to 2 sentence summary. Present only with withSummary. |
aiTopics | string[] | Add-on: topic/keyword tags. Present only with withTopics. |
aiCategory | string | Add-on: broad category. Present only with withTopics. |
topComments | object[] | Add-on: top comments (author, text). Present only with withTopComments. |
error | string | null on success. On a failed source, a single item with a populated error field is written instead. |
How this compares
| scrapers.lat Reddit Posts Scraper | Browser-based Reddit scrapers (for example trudax/reddit-scraper) | |
|---|---|---|
| Reddit API key or login | Not required | Often required or uses a headless login |
| Subreddit feeds | Yes | Yes |
| Search across Reddit | Yes (type=link posts) | Yes |
| Post URLs and start URLs | Yes (subreddit, post, user, search) | Yes |
| User posts | Yes (via user URL) | Yes |
| Full self text and content HTML | Yes | Yes |
| Media and gallery URLs | Yes | Yes |
| Live score, upvote ratio, comment count, awards | No, returned as null | Yes |
| NSFW, spoiler, pinned, locked flags | No, returned as null | Yes |
| AI sentiment, summary, topics | Yes, opt-in | Usually no |
| Top comments | Yes, opt-in | Yes |
| Output formats | JSON, CSV, Excel | JSON, CSV, Excel |
Honest concession: because this actor is HTTP-only and never logs in, it cannot read Reddit's live vote and comment counters or moderation flags, so those fields are null. Browser-based scrapers that log in do return them, at the cost of a heavier, slower and login-dependent run. If your work is content, text, links, timestamps and AI enrichment, this actor is faster, lighter and needs no API key. If you must have live vote and comment counts, use a login-based scraper.
Run via API and CLI
Start a run and read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~reddit-posts-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"subreddits":["technology"],"maxPosts":25,"sort":"hot"}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~reddit-posts-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQuery":"artificial intelligence","sort":"top","timeFilter":"week","withSummary":true,"maxPosts":100}'
Apify CLI:
apify call scrapers_lat/reddit-posts-scraper \--input '{"subreddits":["worldnews"],"withSentiment":true,"withTopics":true,"maxPosts":50}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=500&limit=500"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets.
Billing and limits
- Pay per result. You are charged per post record returned (
resultevent). See the pricing tab for the current per-result price. - AI and comment add-ons are extra and opt-in.
withSentiment,withSummary,withTopicsandwithTopCommentsare billed per enriched post, charged only when they return usable output, and available on paid Apify plans only. - No charge on failure. If a source errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 posts per run and cannot use the AI add-ons. Upgrade for a higher
maxPostsand enrichments.
FAQ and troubleshooting
Why are score, numComments and the flags null?
Reddit no longer exposes live vote and comment counters or moderation flags through the public channel this actor reads, so we return null rather than fake them. For live counts, use a browser-based, login-dependent Reddit scraper.
A run returned 0 records. Why?
The subreddit name or search query may have matched nothing, or the time window was too narrow. Check the names, widen timeFilter, or change sort. Zero-result runs are not charged.
How do I get the full post text?
It is included by default. For text posts, selftext holds the full body and contentHtml holds the raw HTML. Link posts have no self text (selftext is null) and instead carry the outbound url and domain.
How do I search across Reddit instead of a subreddit?
Set searchQuery. Provide a single subreddit alongside it to restrict the search to that community, or leave subreddits empty to search all of Reddit.
Can I scrape a specific user's posts or a single post?
Yes. Put the post URL in postUrls, or paste a user URL (/user/<name>) or any subreddit, post or search URL into startUrls.
What do the AI add-ons add?
withSentiment adds aiSentiment and aiSentimentScore; withSummary adds aiSummary; withTopics adds aiTopics and aiCategory; withTopComments adds topComments. Each is billed per enriched post, charged only when it returns output, and paid plans only.
Is this an official Reddit tool? No. This actor is independent and has no affiliation with Reddit. It reads only data that is publicly available on reddit.com.
Related scrapers
- Reddit Comments Scraper: Comment trees from any post.
- Reddit Media Scraper: Images, videos and galleries from Reddit.
- Reddit User Scraper: A user's posts and comments.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Reddit. Accesses only publicly available post data.
