# Reddit Sentiment Report with Source Quotes (`physealabs/reddit-sentiment-report`) Actor

Turn a buyer question into a cited report from public Reddit posts and comments.

- **URL**: https://apify.com/physealabs/reddit-sentiment-report.md
- **Developed by:** [jay casey](https://apify.com/physealabs) (community)
- **Categories:** AI, Social media, Other
- **Stats:** 2 total users, 1 monthly users, 54.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$40.00 / 1,000 sentiment report createds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Reddit Sentiment Report

Turn a buyer question into a cited report from public Reddit posts and comments.

### What can Reddit Sentiment Report do?

Name a topic and the buyer point of view. The Actor searches public Reddit feeds, collects posts and comments, checks each quoted passage against its source, and saves a report plus the source rows.

| What you get | Features |
|--|--|
| 🧭 A buyer focused verdict with pros, cons, and themes | 💬 Public Reddit post and comment collection |
| 🔗 Source links and quotes checked against source text | 📄 Markdown and JSON report files |

### Who this is for

- Check how buyers talk about a product
- Find repeated praise and complaints
- Collect source material for product research

### What you get back

| Field | Type | What you get | Example |
|--|--|--|--|
| `id` | `string` | Stable source identifier used in the dataset. | `1vojjzh` |
| `topic` | `string` | Topic requested for the report. | `Framework Laptop` |
| `title` | `string` | Title reported for the source item. | `I really want a framework laptop, and finally got the money for one? What model should I get?` |
| `text` | `string` | Complete transcript text for the media item. | `I really want a framework laptop, and finally got the money for one? What model should I get? also any pro tips for parts or maintenance? *EDIT* guys I am us...` |
| `subreddit` | `string` | Reddit community that supplied the item. | `framework` |
| `url` | `string` | Public video page analyzed by the Actor. | `https://www.reddit.com/r/framework/comments/1vojjzh/i_really_want_a_framework_laptop_and_finally_got/` |
| `score` | `integer` | Reddit score recorded when fetched. | `0` |
| `comment_count` | `integer` | Number of comments recorded when fetched. | `0` |
| `kind` | `string` | Whether the source is a post or comment. | `post` |
| `created_at` | `string` | Timestamp when the source item was created. | `2026-08-14T21:06:26+00:00` |

The run also links to its dataset and any files named in the Actor output.

### What you need to provide

| Field | Type | Required | What it does | Example |
|--|--|--:|--|--|
| `topic` | `string` | Yes | What should be researched on Reddit? | `Framework Laptop` |
| `subreddits` | `array` | No | Limit research to communities such as r/laptops (one search per subreddit). Leave blank to search all of Reddit. | \`\` |
| `buyerPerspective` | `string` | No | Who is making the decision and what do they care about? | `a prospective buyer evaluating whether this is right for them` |
| `maxPosts` | `integer` | No | Upper bound on posts plus comments collected from Reddit's public feeds. Roughly 60% posts / 40% comments from the most relevant threads. 100 is enough for a solid report; 500 is the ceiling. | `100` |
| `sort` | `string` | No | Reddit search sort order applied to the post search. | `relevance` |
| `timeRange` | `string` | No | How far back the post search looks. | `year` |
| `llm` | `object` | No | Analysis model. Leave blank (or leave apiKey empty) to use the Actor's own inexpensive Bedrock model (nvidia.nemotron-nano-3-30b) , no key needed. To bring your own model, set all three: `baseUrl` of any /v1/chat/completions server, `model`, and `apiKey` (stored encrypted). Without an apiKey, baseUrl/model are ignored. | `{"model":"nvidia.nemotron-nano-3-30b","baseUrl":"https://bedrock-runtime.us-east-1.amaz...` |

#### Quick start

1. Open the Actor in Apify Console.
2. Click **Try for free** or **Create a task**.
3. Replace the sample values with your own input.
4. Click **Start**.
5. Open the dataset and the named output files when the run ends.

### Pricing

- `sentiment-report`: $0.04 per sentiment report created.
- Failed or skipped work is not charged unless an event is listed in the run charges.
- Normal Apify compute and proxy costs may also apply.

### Limits and honest notes

- Public Atom feeds do not provide reliable vote scores, so `score` may be `0`.
- The report reflects the posts and comments collected for this run. It is not a survey of all Reddit users.
- If analysis fails, the Actor keeps the collected evidence and labels the result `evidence_only`.

### Code and API

The examples below use the same values as the Apify Console sample.

#### Input JSON

```json
{
  "topic": "Framework Laptop",
  "buyerPerspective": "a prospective buyer evaluating whether this is right for them",
  "maxPosts": 100,
  "sort": "relevance",
  "timeRange": "year",
  "llm": {
    "model": "nvidia.nemotron-nano-3-30b",
    "baseUrl": "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1",
    "apiKey": ""
  }
}
```

#### Real output sample

This excerpt comes from the real run named in the current marketplace release report.

```json
{
  "id": "1ufgf7e",
  "title": "Is the Framework Laptop worth it?",
  "text": "Is the Framework Laptop worth it?\n\nI am going into college as a biochem major, and I want laptop. I have asked chatgpt what it recommends, and it has been absolutely glazing the Framework Laptop 13. What do you guys think? Also, I don't want any people working for Framework here, unbiased consumer opinions only.",
  "subreddit": "computers",
  "kind": "post",
  "url": "https://www.reddit.com/r/computers/comments/1ufgf7e/is_the_framework_laptop_worth_it/",
  "score": 0,
  "comment_count": 4,
  "created_at": "2026-06-25T17:21:27+00:00",
  "topic": "Framework Laptop"
}
```

#### curl

```sh
curl -X POST "https://api.apify.com/v2/acts/physealabs~reddit-sentiment-report/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d @input.json
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("physealabs/reddit-sentiment-report").call(run_input={'topic': 'Framework Laptop', 'buyerPerspective': 'a prospective buyer evaluating whether this is right for them', 'maxPosts': 100, 'sort': 'relevance', 'timeRange': 'year', 'llm': {'model': 'nvidia.nemotron-nano-3-30b', 'baseUrl': 'https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1', 'apiKey': ''}})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

#### Node.js

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('physealabs/reddit-sentiment-report').call({"topic": "Framework Laptop", "buyerPerspective": "a prospective buyer evaluating whether this is right for them", "maxPosts": 100, "sort": "relevance", "timeRange": "year", "llm": {"model": "nvidia.nemotron-nano-3-30b", "baseUrl": "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1", "apiKey": ""}});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

You can call this Actor from an agent or LLM tool that can send HTTP requests to the Apify API. Keep the Apify token in a secret store.

### FAQ

#### Does it need a Reddit API key?

No. It reads public Reddit feeds.

#### Can I limit the communities?

Yes. Add subreddit names to `subreddits`.

#### Can I bring my own LLM?

Yes. Set all values in `llm`, including the API key.

# Actor input Schema

## `topic` (type: `string`):

What should be researched on Reddit?

## `subreddits` (type: `array`):

Limit research to communities such as r/laptops (one search per subreddit). Leave blank to search all of Reddit.

## `buyerPerspective` (type: `string`):

Who is making the decision and what do they care about?

## `maxPosts` (type: `integer`):

Upper bound on posts plus comments collected from Reddit's public feeds. Roughly 60% posts / 40% comments from the most relevant threads. 100 is enough for a solid report; 500 is the ceiling.

## `sort` (type: `string`):

Reddit search sort order applied to the post search.

## `timeRange` (type: `string`):

How far back the post search looks.

## `llm` (type: `object`):

Analysis model. Leave blank (or leave apiKey empty) to use the Actor's own inexpensive Bedrock model (nvidia.nemotron-nano-3-30b) — no key needed. To bring your own model, set all three: `baseUrl` of any /v1/chat/completions server, `model`, and `apiKey` (stored encrypted). Without an apiKey, baseUrl/model are ignored.

## Actor input object example

```json
{
  "topic": "Framework Laptop",
  "buyerPerspective": "a prospective buyer evaluating whether this is right for them",
  "maxPosts": 100,
  "sort": "relevance",
  "timeRange": "year",
  "llm": {
    "model": "nvidia.nemotron-nano-3-30b",
    "baseUrl": "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1",
    "apiKey": ""
  }
}
```

# Actor output Schema

## `report` (type: `string`):

Cited Markdown report.

## `reportJson` (type: `string`):

Machine-readable sentiment report.

## `sources` (type: `string`):

Posts used for analysis.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "topic": "Framework Laptop",
    "llm": {
        "model": "nvidia.nemotron-nano-3-30b",
        "baseUrl": "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1",
        "apiKey": ""
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("physealabs/reddit-sentiment-report").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "topic": "Framework Laptop",
    "llm": {
        "model": "nvidia.nemotron-nano-3-30b",
        "baseUrl": "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1",
        "apiKey": "",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("physealabs/reddit-sentiment-report").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "topic": "Framework Laptop",
  "llm": {
    "model": "nvidia.nemotron-nano-3-30b",
    "baseUrl": "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1",
    "apiKey": ""
  }
}' |
apify call physealabs/reddit-sentiment-report --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,physealabs/reddit-sentiment-report"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/e99IJDeIeGZEn5dDL/builds/kcug3J2dfSmvsAyjK/openapi.json
