# Reddit Posts Scraper (Subreddits) (`sfoln/reddit-subreddit-posts`)

Scrape posts from any public subreddit sorted by hot, new or top: title, author, date, score, upvote ratio, comment count, flair, text, link and NSFW flag, one JSON record per post. $0.60 per 1,000 posts + $0.003 per page of ~25. No Reddit account or API key needed.

- Family: Social media data
- Categories: Social media, News, Lead generation
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: Reddit Posts Scraper (Subreddits) (sfoln/reddit-subreddit-posts)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/reddit-subreddit-posts.json
- MCP: https://mcp.apify.com?tools=sfoln/reddit-subreddit-posts
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~reddit-subreddit-posts/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~reddit-subreddit-posts/runs

Reddit Posts Scraper (Subreddits) gets posts from any public subreddit sorted by hot, new or top (with a timeframe), one normalized record per post: post ID, URL, title, author, creation date, score, upvote ratio, comment count, flair, text body (first 2,000 characters), external link, thumbnail and NSFW flag. It's built for community and brand monitoring, market research, trend detection, dataset building and AI agents.

## Price per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| Reddit post (`reddit-post`) | $0.0006 | $0.60 / 1,000 | Charged once per Reddit post delivered as a dataset record. Subreddit summary records are never charged. |
| Reddit listing page (`reddit-posts-query`) | $0.003 | $3 / 1,000 | Charged once per page of a subreddit listing (about 25 posts) that delivered at least one post, or that the provider billed although it had no new posts (e.g. an empty or private subreddit). Covers the per-request upstream fee. |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
curl -X POST "https://api.apify.com/v2/actors/sfoln~reddit-subreddit-posts/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"subreddits":["AskReddit"],"maxPostsPerSubreddit":10}'
```

MCP client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/reddit-subreddit-posts"
    }
  }
}
```

Example prompt: Get the top 25 posts of the past week from r/technology and summarize the main discussion topics with their scores and comment counts.

## Input

Enter subreddit names or URLs. Each subreddit produces one dataset record per post plus one summary record per subreddit.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `subreddits` (required) | array | — | Subreddits: Subreddit names (news, r/news) or URLs such as https://www.reddit.com/r/news/. Duplicates are removed. Accounts on the Apify free plan can process up to 10 subreddits per run. |
| `sort` | string | `"hot"` | Sort: hot = Reddit's front-page ranking, new = newest first, top = highest score within the timeframe. One of `"hot"`, `"new"`, `"top"`. |
| `timeframe` | string | `"day"` | Timeframe (for Top): Period for sort = top (ignored for hot and new). One of `"day"`, `"week"`, `"month"`, `"year"`, `"all"`. |
| `maxPostsPerSubreddit` | integer | `25` | Max posts per subreddit: How many posts to return per subreddit (1–250). Posts are fetched in pages of about 25; each delivered post is one charged event, plus one page event per page. |
| `maxSubreddits` | integer | `100` | Max subreddits: Safety cap on the number of subreddits processed in this run. |
| `concurrency` | integer | `4` | Concurrency: How many subreddits are fetched in parallel (1–8). |
| `itemTimeoutSecs` | integer | `600` | Time limit per input (seconds): Pagination for one subreddit stops cleanly shortly before this limit (60–3600). Raise it for very large per-input limits. |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified provider post object to each post record. |

Example input:

```json
{
  "subreddits": [
    "AskReddit"
  ],
  "maxPostsPerSubreddit": 10
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | object | Input: The subreddit name or URL as provided. |
| `recordType` | string | Record type: post (one per delivered post, charged) \| subreddit (one summary per subreddit, never charged) |
| `position` | integer | Position |
| `subreddit` | string | null | Subreddit |
| `postId` | string | null | Post ID |
| `fullname` | string | null | Fullname: t3_… id |
| `url` | string | null | Post URL |
| `title` | string | null | Title |
| `author` | string | null | Author |
| `createdAt` | string | null | Created at: ISO 8601 UTC |
| `score` | number | null | Score |
| `upvoteRatio` | number | null | Upvote ratio |
| `numComments` | number | null | Comments |
| `flair` | string | null | Flair |
| `isSelf` | boolean | null | Text post |
| `selftext` | string | null | Text: Post body, first 2,000 characters |
| `selftextTruncated` | boolean | Text truncated |
| `linkUrl` | string | null | Link URL: External link for link posts |
| `domain` | string | null | Domain |
| `thumbnail` | string | null | Thumbnail |
| `isNsfw` | boolean | null | NSFW |
| `isVideo` | boolean | null | Video |
| `isStickied` | boolean | null | Stickied |
| `subredditSubscribers` | number | null | Subreddit subscribers |
| `subredditUrl` | string | Subreddit URL: subreddit records only. |
| `sort` | string | Sort: subreddit records only. |
| `timeframe` | string | null | Timeframe: subreddit records only. |
| `postsDelivered` | integer | Posts delivered: subreddit records only. |
| `pagesFetched` | integer | Pages fetched: subreddit records only. |
| `pagesCharged` | integer | Pages charged: subreddit records only. |
| `reachedEnd` | boolean | Reached end: subreddit records only. |
| `stopReason` | string | Stop reason: subreddit records only. |
| `status` | string | Status: ok \| not_found \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan |
| `charged` | boolean | Charged: Post records: charged reddit-post. subreddit summary records are never charged themselves: the reddit-posts-query page fees charged for the input (including empty pages the provider billed) are counted in pagesCharged. |
| `chargedEvent` | string | Charged event |
| `error` | object | Error |
| `warnings` | array | Warnings |
| `source` | string | Source |
| `fetchedAt` | string | Fetched at |

Example record:

```json
{
  "input": "AskReddit",
  "recordType": "post",
  "position": 1,
  "subreddit": "AskReddit",
  "postId": "1lfbo7u",
  "fullname": "t3_1lfbo7u",
  "url": "https://www.reddit.com/r/AskReddit/comments/1lfbo7u/what_is_a_thing_you_love_that_lots_of_people_hate/",
  "title": "What is a thing you love that lots of people hate?",
  "author": "Vetro_Nodulare2",
  "createdAt": "2025-06-19T14:05:59.000Z",
  "score": 45,
  "upvoteRatio": 0.9,
  "numComments": 349,
  "flair": null,
  "isSelf": true,
  "selftext": null,
  "selftextTruncated": false,
  "linkUrl": null,
  "domain": "self.AskReddit",
  "thumbnail": null,
  "isNsfw": false,
  "isVideo": false,
  "isStickied": false,
  "subredditSubscribers": 56146328,
  "status": "ok",
  "charged": true,
  "chargedEvent": "reddit-post",
  "source": "scrapecreators",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}
```

## Related

- [Brand Monitoring – X, Reddit, News & Bluesky](https://www.sfoln.com/actors/brand-mentions-monitor.md) (`sfoln/brand-mentions-monitor`)
- [Hacker News Scraper – Stories & Comments](https://www.sfoln.com/actors/hacker-news-scraper.md) (`sfoln/hacker-news-scraper`)
- [Bluesky Scraper – Posts, Profiles & Search](https://www.sfoln.com/actors/bluesky-scraper.md) (`sfoln/bluesky-scraper`)
- [Google News Scraper](https://www.sfoln.com/actors/google-news-search.md) (`sfoln/google-news-search`)
- [LinkedIn Posts Search Scraper (No Cookies)](https://www.sfoln.com/actors/linkedin-posts-search.md) (`sfoln/linkedin-posts-search`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
