Stock News Sentiment Scraper avatar

Stock News Sentiment Scraper

Pricing

from $5.00 / 1,000 sentiment items

Go to Apify Store
Stock News Sentiment Scraper

Stock News Sentiment Scraper

Scrape stock ticker headlines from Yahoo Finance, Google News, and Finviz, score each with local VADER sentiment, and return per-item plus ticker summary rows. Reddit optional (off by default). MCP-ready.

Pricing

from $5.00 / 1,000 sentiment items

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

What is Stock News Sentiment Scraper?

For quants, research desks, and MCP agents that need ticker news sentiment, this Actor returns dataset rows of scored public headlines. Paste tickers and receive sentiment-item records with title, URL, source, publisher, VADER compound score, and sentimentLabel, plus optional ticker-sentiment-summary roll-ups. Primary sources are Yahoo Finance news, Google News finance RSS, and Finviz. Sentiment uses local VADER (no paid NLP). Reddit is optional and off by default.

What data can you extract?

FieldDescription
tickerUppercase symbol (AAPL, TSLA, …)
title / url / publisher / publishedAtHeadline identity and provenance
sourceyahoo, google-news, finviz, or optional reddit
sentimentLabel / compoundVADER label + compound score (−1…+1)
positiveScore / negativeScore / neutralScoreVADER intensity mix
itemCount / avgCompound / bullishRatioTicker summary aggregates
topPositiveTitles / topNegativeTitlesExtreme headlines in the window
sourceUrl / scrapedAtFeed URL and ISO freshness

Best fit

Use this Actor when a quant, trader, or AI agent needs a fast multi-source news-sentiment snapshot for US tickers without standing up an NLP vendor. Prefer it over raw news scrapers when you need a comparable compound score and a ticker-level summary in one run.

Scope and routing

This Actor is strongest for public headline triage with local VADER scores. Pair this Actor with specialist tools when you need full article bodies, licensed terminals, or paid transformer NLP. For live quotes and multi-asset prices after a sentiment pass, continue with Stock Price Tracker. For broader Yahoo Finance modes such as statements or options, route to Yahoo Finance Scraper. For Google Finance page coverage beyond news sentiment, use Google Finance Stock News Scraper.

Workflow story

A portfolio agent watches AAPL and TSLA each morning. It calls this Actor with both tickers, the three primary sources, maxItemsPerTicker: 15, and includeSummary: true. Each headline becomes a billed sentiment-item with a VADER compound score. One ticker-sentiment-summary per symbol rolls up counts, average compound, and bullish ratio so the agent can gate alerts without reading every row.

How it works

  1. Normalizes tickers and resolves the source list (Reddit stays off unless enabled)
  2. Fetches Yahoo Finance RSS, Google News finance RSS, and Finviz news-table HTML over HTTPS
  3. Deduplicates headlines, scores title (+ snippet) with local VADER, validates rows
  4. Charges sentiment-item then writes each row; optionally charges ticker-sentiment-summary then writes roll-ups
  5. Writes OUTPUT and RUN_SUMMARY with outcome, source attempts, and charged event counts

Input example

{
"tickers": ["AAPL"],
"sources": ["yahoo", "google-news", "finviz"],
"includeReddit": false,
"maxItemsPerTicker": 10,
"maxItemsPerSource": 10,
"lookbackDays": 7,
"includeSummary": true
}

Example output (sentiment item)

{
"recordType": "sentiment-item",
"itemId": "a1b2c3d4e5f6789012345678",
"ticker": "AAPL",
"title": "Apple stock climbs after strong iPhone demand",
"url": "https://finance.yahoo.com/news/example.html",
"source": "yahoo",
"publisher": "Yahoo Finance",
"publishedAt": "2026-09-30T12:00:00.000Z",
"sentimentLabel": "positive",
"compound": 0.4215,
"positiveScore": 0.258,
"negativeScore": 0.117,
"neutralScore": 0.625,
"sourceUrl": "https://finance.yahoo.com/rss/headline?s=AAPL",
"scrapedAt": "2026-09-30T12:05:00.000Z"
}

You can download the dataset as JSON, CSV, Excel, or HTML.

Pricing

This Actor uses Pay per event with platform usage passed through to the caller (isPPEPlatformUsagePaidByUser: true). Current event prices:

  • apify-actor-start: $0.00005 per run
  • sentiment-item: $0.005 per scored headline written
  • ticker-sentiment-summary: $0.015 per ticker summary written

For example, 10 scored headlines plus one ticker summary cost about $0.065 plus small platform usage. Invalid inputs and valid-empty runs leave the named result events uncharged. Treat the live Pricing tab on the Actor page as the current source of truth for event prices and platform usage before budgeting a production run.

Outcomes

Every run writes OUTPUT and RUN_SUMMARY with one of:

COMPLETE | PARTIAL | VALID_EMPTY | INVALID_INPUT | UPSTREAM_FAILED | CONFIG_ERROR

  • VALID_EMPTY: sources responded, but no scored headline matched (for example an unknown ticker symbol)
  • INVALID_INPUT: no usable tickers after normalization
  • PARTIAL: useful rows were saved while an optional source such as Reddit was unavailable
  • UPSTREAM_FAILED: every required source was unavailable and nothing was saved

API example

curl "https://api.apify.com/v2/acts/khadinakbar~stock-news-sentiment-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tickers": ["AAPL"],
"sources": ["yahoo", "google-news", "finviz"],
"maxItemsPerTicker": 10,
"includeSummary": true,
"includeReddit": false
}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/stock-news-sentiment-scraper').call({
tickers: ['AAPL'],
sources: ['yahoo', 'google-news', 'finviz'],
maxItemsPerTicker: 10,
includeSummary: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 3));

MCP / agent prompt card

Use Stock News Sentiment Scraper to score the last week of AAPL headlines from Yahoo Finance, Google News, and Finviz. Keep Reddit off. Return compound scores, sentiment labels, and one ticker summary. Read the dataset for rows and OUTPUT for itemsPushed and chargedEventCounts.

Tips for best results

  • Start with the three primary sources and includeReddit: false
  • Use maxItemsPerTicker to bound cost before widening lookback
  • Prefer ticker summaries for agent gating; drill into items when polarity is mixed
  • Treat VADER as a triage signal for research workflows

FAQ

Which sources are on by default? Yahoo Finance, Google News finance RSS, and Finviz. Reddit stays off until you set includeReddit: true or include reddit in sources.

Is this investment advice? No. Local VADER scores help triage headlines; they are not trading recommendations.

Do I need an NLP API key? No. Sentiment uses local VADER inside the Actor.

Builder's note

I built this Actor after probing the three public primary feeds and choosing local VADER so every FREE-tier caller gets the same scoring path with no owner NLP key. I collect every selected source before applying maxItemsPerTicker, so dense Yahoo feeds still leave room for Finviz and Google News rows. Reddit stays optional because public search from datacenter IPs is less reliable than the primary news feeds, and the Actor can still finish with useful news rows as an honest PARTIAL.

This Actor collects publicly reachable finance headlines for research and automation. Output is not investment advice. You remain responsible for complying with applicable terms and laws. Yahoo and Yahoo Finance are trademarks of their respective owners. This independent Actor is not affiliated with, associated with, or endorsed by Yahoo. Google and Google News are trademarks of their respective owners. This independent Actor is not affiliated with, associated with, or endorsed by Google. Finviz is a trademark of its respective owner. This independent Actor is not affiliated with, associated with, or endorsed by Finviz. Reddit is a trademark of its respective owner. This independent Actor is not affiliated with, associated with, or endorsed by Reddit.