Reddit Stock Sentiment Scraper avatar

Reddit Stock Sentiment Scraper

Pricing

from $0.87 / 1,000 item extracteds

Go to Apify Store
Reddit Stock Sentiment Scraper

Reddit Stock Sentiment Scraper

Track supplied stock and crypto tickers across public Reddit posts and comments. Export mention volume, sentiment, daily and subreddit trends, engagement, and auditable source evidence.

Pricing

from $0.87 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Track reddit stock sentiment for supplied stock or crypto tickers. This Actor searches public Reddit posts and comments in selected communities, verifies each ticker mention, applies a reproducible finance-term sentiment score, and returns one aggregate row per ticker with source evidence.

Use it for scheduled market-research snapshots, watchlist dashboards, community comparisons, and auditable buzz analysis. It is not a trading signal or investment-advice product.

What does Reddit Stock Sentiment Scraper do?

For every supplied ticker, the Actor:

  1. Searches each selected public subreddit for matching posts.
  2. Searches the same communities for matching comments.
  3. Revalidates ticker boundaries to reject partial-word matches.
  4. Deduplicates stable Reddit post and comment IDs.
  5. Labels each mention bullish, bearish, or neutral.
  6. Calculates mention volume and sentiment percentages.
  7. Groups mentions by day and subreddit.
  8. Preserves Reddit permalinks, text, timestamps, authors, and engagement.
  9. Exports one integration-friendly dataset row per ticker.

The default communities are r/wallstreetbets, r/stocks, and r/investing. You can replace them with up to ten public subreddits.

Who is it for?

Market researchers can compare attention across a watchlist.

Fintech product teams can feed evidence-backed social metrics into dashboards.

Quantitative researchers can schedule consistent snapshots for later analysis.

Investor-relations and brand teams can inspect the public conversations behind a volume change.

Data engineers can export normalized JSON, CSV, Excel, XML, or RSS through Apify datasets.

Use Reddit Posts Search Scraper when you need general Reddit post discovery rather than ticker-level aggregation.

Why use this Actor?

A generic Reddit scraper returns source records and leaves aggregation to you. This Actor adds a ticker-specific workflow:

  • separate post and comment counts;
  • bullish, bearish, and neutral counts;
  • percentages and an average score;
  • daily mention trends;
  • subreddit-level comparisons;
  • unique-author and combined-score context;
  • recent evidence embedded with every aggregate;
  • explicit time-window and source provenance.

Sentiment is deterministic and inspectable. It does not make opaque AI claims and does not require an external AI key.

Input parameters

FieldTypeDefaultDescription
tickersstring arrayrequired1–20 symbols such as NVDA, $TSLA, or BTC.
subredditsstring arrayWSB, stocks, investing1–10 public subreddit names. r/ is accepted.
lookbackDaysinteger7Time window from 1 to 365 days.
includePostsbooleantrueInclude public Reddit submissions.
includeCommentsbooleantrueInclude public Reddit comments.
maxMentionsPerTickerinteger100Maximum source records used per ticker, 1–500.
maxEvidencePerTickerinteger50Maximum evidence objects returned per ticker, 1–100.

At least one of includePosts and includeComments must be enabled. Ticker symbols are normalized to uppercase and deduplicated.

Getting started

  1. Open the Actor input page.
  2. Enter one or more ticker symbols.
  3. Keep the default communities or supply focused subreddits.
  4. Choose a lookback period.
  5. Keep limits small for a first run.
  6. Click Start.
  7. Open the Ticker sentiment and buzz dataset view.
  8. Expand evidence, dailyTrend, or subredditBreakdown for detail.
  9. Export the dataset or connect it to your workflow.

A useful first input is:

{
"tickers": ["NVDA", "TSLA"],
"subreddits": ["wallstreetbets", "stocks", "investing"],
"lookbackDays": 7,
"maxMentionsPerTicker": 40,
"maxEvidencePerTicker": 20
}

What data is extracted?

Output fieldMeaning
tickerNormalized requested symbol.
mentionVolumePosts plus comments included in the aggregate.
postMentionsMatching post count.
commentMentionsMatching comment count.
bullishMentionsMentions with a positive lexicon score.
bearishMentionsMentions with a negative lexicon score.
neutralMentionsMentions with a zero net score.
bullishPercentBullish mentions as a percentage of volume.
bearishPercentBearish mentions as a percentage of volume.
averageSentimentMean normalized score from -1 to 1.
totalScoreSum of Reddit scores across evidence.
uniqueAuthorsDistinct non-deleted public authors.
subredditBreakdownCounts and labels grouped by community.
dailyTrendDaily volume, labels, and average score.
evidenceRecent matched source records.
evidenceTruncatedWhether more mentions contributed than are embedded.
partialCoverageWhether one or more requested source slices failed after bounded retries.
sourceFailuresExplicit failed record-type and subreddit slices for auditable partial output.
fromDate, toDateExact UTC aggregation window.
collectedAtSnapshot creation time.
methodologySentiment qualification attached to every result.

Output example

A result from the current implementation has this shape:

{
"ticker": "NVDA",
"mentionVolume": 10,
"postMentions": 5,
"commentMentions": 5,
"bullishMentions": 4,
"bearishMentions": 1,
"neutralMentions": 5,
"bullishPercent": 40,
"bearishPercent": 10,
"averageSentiment": 0.2,
"uniqueAuthors": 9,
"subredditBreakdown": [
{ "subreddit": "wallstreetbets", "mentions": 10, "bullish": 4, "bearish": 1, "neutral": 5 }
],
"dailyTrend": [
{ "date": "2026-08-31", "mentions": 3, "bullish": 1, "bearish": 0, "neutral": 2, "averageSentiment": 0.3333 }
],
"evidence": [
{
"id": "sample1",
"type": "post",
"ticker": "NVDA",
"title": "Sample public market discussion",
"author": "exampleuser",
"subreddit": "wallstreetbets",
"score": 12,
"createdAt": "2026-08-31T12:00:00.000Z",
"permalink": "https://www.reddit.com/r/wallstreetbets/comments/sample1/sample/",
"sentiment": "bullish",
"sentimentScore": 1,
"matchedTerms": ["buy"]
}
],
"source": "reddit"
}

The example identity and text are anonymized. Actual rows preserve the public Reddit evidence returned for your query.

How sentiment is calculated

The Actor tokenizes each matching title and body. It counts a documented set of finance terms such as bullish, buy, calls, breakout, and upside as positive, and terms such as bearish, sell, puts, crash, and downside as negative.

The normalized evidence score is bounded from -1 to 1. Positive scores are bullish, negative scores are bearish, and zero is neutral. Ticker-level averages use every accepted source record, including records omitted from the evidence array because of maxEvidencePerTicker.

This method is transparent and repeatable, but it does not reliably detect sarcasm, negation, irony, price targets, or the author's real position. Treat it as a research feature, not a prediction.

Source evidence and auditability

Each evidence object retains:

  • the stable Reddit ID;
  • record type (post or comment);
  • title and available public text;
  • public author name or [deleted];
  • subreddit;
  • Reddit score and post comment count;
  • creation timestamp;
  • canonical Reddit permalink;
  • sentiment label, score, and matched terms.

Set maxEvidencePerTicker lower than maxMentionsPerTicker to keep result rows compact. The aggregate still uses the larger accepted sample. Check evidenceTruncated before assuming the array is complete.

How much does it cost to track Reddit stock sentiment?

The Actor uses pay-per-event pricing. A run has a small start event and one primary item event for every ticker aggregate saved. The start price is $0.000045 on every plan. Ticker aggregates cost $0.0016615 on FREE, $0.0014448 on BRONZE, $0.0011269 on SILVER, $0.00086686 on GOLD, $0.00057791 on PLATINUM, and $0.00040453 on DIAMOND.

At BRONZE pricing:

  • 1 ticker costs about $0.001490;
  • 5 tickers cost about $0.007269;
  • 10 tickers cost about $0.014493;
  • 20 tickers cost about $0.028941.

These are Actor event charges, excluding any account-specific platform usage rules. A zero-mention ticker is still a useful, explicit aggregate and is charged once. Source evidence inside an aggregate has no separate event charge.

Recurring market-monitoring workflow

Create an Apify Schedule with a fixed watchlist input. Run it hourly, daily, or weekly according to your research cadence. Keep each run's dataset ID and compare:

  1. mentionVolume against the previous snapshot;
  2. bullishPercent and bearishPercent changes;
  3. community concentration in subredditBreakdown;
  4. daily acceleration in dailyTrend;
  5. source evidence behind unusual spikes.

You can send completed-run webhooks to Make, Zapier, Slack, a database, or your own service. The Actor itself produces snapshots; it does not send investment alerts.

API usage with cURL

Start a synchronous run and receive dataset items:

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~reddit-stock-sentiment-buzz-tracker/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tickers": ["NVDA", "TSLA"],
"subreddits": ["wallstreetbets", "stocks"],
"lookbackDays": 7,
"maxMentionsPerTicker": 50
}'

Keep the token in an environment variable or secret manager. Do not commit it to source control.

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/reddit-stock-sentiment-buzz-tracker').call({
tickers: ['AAPL', 'MSFT'],
subreddits: ['stocks', 'investing'],
lookbackDays: 14,
maxMentionsPerTicker: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/reddit-stock-sentiment-buzz-tracker').call(
run_input={
'tickers': ['GME'],
'subreddits': ['wallstreetbets'],
'lookbackDays': 30,
'maxEvidencePerTicker': 50,
}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with MCP and AI assistants

Add this Actor to Claude Code through Apify MCP:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/reddit-stock-sentiment-buzz-tracker"

Claude Desktop

Add this server object to the Claude Desktop MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/reddit-stock-sentiment-buzz-tracker"
}
}
}

Cursor

Open Settings → MCP, add an HTTP server named apify, and use the same Actor-specific URL shown above.

VS Code

Add an HTTP MCP server named apify to your VS Code MCP configuration with the same Actor-specific URL.

Example prompts:

  • “Compare seven-day NVDA and TSLA Reddit buzz in WallStreetBets and stocks.”
  • “Create a Reddit sentiment snapshot for AAPL, MSFT, AMZN, and META.”
  • “Show the source evidence behind the most bearish ticker in this dataset.”

Always inspect source evidence before using a generated interpretation.

Tips for useful results

Use symbols that Reddit users actually write. For ambiguous short tickers, prefer focused finance communities.

Search several relevant communities rather than one very broad subreddit.

Increase lookbackDays before increasing limits when a ticker has sparse discussion.

Use both posts and comments for a balanced sample. Use posts-only mode when you need headline-level buzz. Use comments-only mode when you need conversational reactions.

For recurring comparisons, keep inputs and limits stable across runs.

Limits and failure behavior

The Actor searches public archive records, not private, quarantined, or deleted content. Coverage depends on upstream archive availability and indexing. Very recent Reddit activity may arrive with a delay.

Each ticker uses at most 500 accepted mentions. Each run supports at most 20 tickers and 10 subreddits. Requests have a three-second client timeout. An indexed-search timeout triggers a bounded recent-record scan with local ticker filtering instead of blind retries. Recent scans are cached by subreddit and record type within the run, so multiple tickers reuse the same source response.

If one subreddit or record-type slice remains unavailable after that fallback, the Actor continues with other requested slices and sets partialCoverage=true with explicit sourceFailures. If every requested slice for a ticker fails, the run fails clearly instead of fabricating an empty result. A valid ticker with no matches and no source failures produces a zero-volume aggregate.

The Actor does not use a residential proxy or browser. It does not bypass login, private-community, or access controls.

Troubleshooting

The Actor returned zero mentions.

Confirm the symbol is used in the selected communities. Try a longer lookback, include both posts and comments, or add another finance subreddit. Remember that some symbols are mostly discussed by company name rather than ticker.

A common word looks like a ticker match.

Ticker matching uses word boundaries, but symbols such as AI, ON, or IT can still be ordinary words. Use focused communities and inspect evidence before accepting the count.

The run failed on an archive request.

Check the log for the endpoint type and retry count. The public archive may be temporarily unavailable. Retry later rather than increasing retries indefinitely.

The evidence array is shorter than mentionVolume.

This is expected when maxEvidencePerTicker is lower than maxMentionsPerTicker. Check evidenceTruncated and increase the evidence limit up to 100 if needed.

Responsible use and legality

Use only public Reddit data for legitimate research. Respect Reddit's terms, applicable laws, platform policies, and user privacy. Do not use this Actor to profile sensitive traits, harass users, manipulate markets, or make automated high-impact decisions about individuals.

Public availability does not remove your responsibility to minimize retained data. Store only the evidence your workflow needs and apply an appropriate retention policy. Do not present rule-based sentiment as verified intent or financial advice.

Choose this Actor when ticker-level aggregation plus direct source evidence is the desired output.

FAQ

Does it predict stock prices?

No. It measures public mention volume and a simple textual sentiment feature. It does not predict price direction or returns.

Is sentiment generated by an LLM?

No. The Actor uses a deterministic English finance-term lexicon. This keeps runs reproducible and removes external AI cost, but has known language limitations.

Are comments included?

Yes by default. Disable includeComments for submissions only.

Can I search crypto symbols?

Yes, if the symbol format is valid and people use it in the selected subreddits. Interpret ambiguous symbols carefully.

Can I schedule it?

Yes. Save the input in an Apify Task and attach an Apify Schedule. Each run produces a timestamped snapshot suitable for comparison.

Does it require a Reddit account or API key?

No. It uses public source data and needs no Reddit credentials.

Can I export CSV or Excel?

Yes. Use the dataset export controls or Apify dataset API. Nested evidence and trend arrays are most naturally consumed as JSON.

Why is each ticker one dataset item?

Ticker-level rows are convenient for watchlists, dashboards, schedules, and joins. The source evidence remains nested with the aggregate that it supports.