News Sentiment Mini avatar

News Sentiment Mini

Pricing

from $1.00 / 1,000 records

Go to Apify Store
News Sentiment Mini

News Sentiment Mini

Score the news around any ticker and set it against the price move: label, score, story counts, and every story's own score published so you can re-aggregate or feed your own model. Export data, run via API, schedule and monitor runs, or integrate with other tools.

Pricing

from $1.00 / 1,000 records

Rating

5.0

(1)

Developer

Public Money

Public Money

Maintained by Apify

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

21 hours ago

Last modified

Categories

Share

A sentiment score you cannot audit is a number you cannot use. This Actor scores the news around a ticker, sets the result against the actual price move in agreesWithPrice, and publishes every individual story's score rather than only the aggregate, so you can re-weight it, drop a publisher you distrust, or feed the raw scores to your own model.

What it does

  • Publishes every story's own score, not just the aggregate, so the number is auditable and re-aggregatable.
  • Sets sentiment against the actual price move in agreesWithPrice, which is the check that tells you whether the score is saying anything.
  • Returns the counts behind the label: storyCount, positive and negative, so a 0.2 from two stories is distinguishable from a 0.2 from forty.
  • Gives a plain label next to the numeric score, so a dashboard can use one and a model the other.
  • Reads the news through the fleet's own news Actors, so the story set is the same one the other Actors return.
  • Takes several tickers in one run, with the depth per ticker under your control.

Use cases

You need toHow this Actor does it
Check whether sentiment is saying anythingRead agreesWithPrice before you trust score
Re-weight by publisherTake the per-story scores and apply your own weights
Filter out thin coverageRequire storyCount above your threshold
Track a name over timeSchedule the run and chart score against the price
Feed your own modelUse the per-story scores as features rather than the aggregate
Feed a trading agentCall the Actor over MCP and let the model ask for what it needs

Quick start

  1. Click Try for free.
  2. Add your tickers, one per line: AAPL, MSFT, NVDA.
  3. Set News per ticker, which is how many stories are scored. More stories means a steadier score and a slower run.
  4. Click Start. Rows appear within seconds.
  5. Export as JSON, CSV, Excel or XML, or read the dataset over the API.

Input

FieldTypeDefaultWhat it controls
tickersarrayAAPLTickers to score
newsPerTickerinteger10How many stories to score per ticker
maxItemsinteger0Caps how many ticker records are returned
{
"tickers": [
"AAPL",
"MSFT",
"NVDA"
],
"newsPerTicker": 10,
"maxItems": 0
}

Output

One dataset item per ticker, with the individual story scores nested inside it. A ticker with no news in range comes back with storyCount: 0 rather than a fabricated neutral score.

Field groupFields
Instrumentstatus, tickerSymbol, name
Aggregatelabel, score, storyCount, positive, negative
Cross-checkchangePercent, agreesWithPrice
Per storystories
{
"status": "ok",
"tickerSymbol": "AAPL",
"name": "Apple Inc.",
"label": "slightly negative",
"score": -0.18,
"storyCount": 10,
"positive": 3,
"negative": 5,
"changePercent": -2.51,
"agreesWithPrice": true
}

Integrations

Run it over the API and get the rows back in one call:

curl -X POST "https://api.apify.com/v2/acts/publicmoney~sentiment-mini/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"tickers": ["AAPL", "MSFT", "NVDA"], "newsPerTicker": 10, "maxItems": 0}'

From Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("publicmoney/sentiment-mini").call(run_input={"tickers": ["AAPL", "MSFT", "NVDA"], "newsPerTicker": 10, "maxItems": 0})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["tickerSymbol"], item["name"])

Give an AI agent the Actor over MCP:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?actors=publicmoney/sentiment-mini"
}
}
}

Schedules run it on any cron, webhooks fire when a run finishes, and platform integrations push the dataset to Google Sheets, Slack, Airtable, Zapier or your own endpoint.

Cost

Pay per event, so you pay for records rather than compute time.

EventFree tierTop volume tier
Instrument record$0.01$0.004
Actor start$0.00005 per GBSame

Two things are charged. The instrument record above is this Actor's own event. On top of that it runs the fleet's news Actors as child runs on your account, and each charges its own per-record price, which will not appear in this Actor's usage total. News per ticker is the lever. A record that returned no data is never charged.

Troubleshooting

IssueSolution
storyCount is 0No news in range for that ticker. The Actor reports the zero rather than inventing a neutral score.
agreesWithPrice is false and I expected trueThat is the useful case. It means the news and the tape disagree, which is worth a look rather than a bug.
The score looks jumpy between runsA small storyCount moves a lot on one story. Raise News per ticker for a steadier number.
The run costs more than the record price suggestsThe child news Actors charge their own per-record price on your account, outside this Actor's usage total.
I disagree with a story's scoreEvery story's own score is published, so drop it and re-aggregate. That is why they are in the record.

FAQ

How is the score calculated?

Each story is scored, then the scores are aggregated into score and a plain label. The point of this Actor is that the per-story scores are published too, so you never have to take the aggregate on trust.

What does agreesWithPrice mean?

Whether the sentiment and the day's price move point the same way. It is the fastest check on whether a score is telling you anything, and a false is often more interesting than a true.

Can I use my own model instead?

Yes, and that is the intended use for anyone serious. Take the per-story scores as features and ignore the aggregate.

Why is it priced above the single-source Actors?

One record fans out into child runs against the news Actors, and those charge their own per-record price on your account.

Does it return historical sentiment?

No. Each record is current. Schedule it and let the dataset accumulate.

Do I need a the news it reads API key?

No. You need an Apify token to call the Actor over the API. No the news it reads credential is involved anywhere.

Can I get this data in Python?

Yes, with the apify-client package as shown above. It returns parsed JSON, so there is no HTML or response handling on your side.

Can I get the data into Excel or Google Sheets?

Yes. Export the dataset as XLSX or CSV, or connect the Google Sheets integration so each run appends to a sheet.

Can an AI agent call this Actor?

Yes. Add it to an MCP client with the config above and the model can request what it needs on its own. Every record is flat JSON with named fields, so no post-processing is needed.

This Actor reads public the news it reads data that needs no login and collects no personal data. Scraping public data is generally lawful, and how you store, redistribute or act on market data is governed by your own agreements and local rules. Take your own legal advice for your use case.

Changelog

  • 0.0.1 First release. Aggregate and per-story scores with a price cross-check.

Feedback

Found a field the news it reads publishes that this Actor misses, or an input it rejects? Open an issue on the Issues tab with the input and what you expected. A daily test runs every Actor in the fleet against live sources, so parser fixes ship fast.