News Sentiment Mini
Pricing
from $1.00 / 1,000 records
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
Maintained by ApifyActor 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,positiveandnegative, so a 0.2 from two stories is distinguishable from a 0.2 from forty. - Gives a plain
labelnext to the numericscore, 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 to | How this Actor does it |
|---|---|
| Check whether sentiment is saying anything | Read agreesWithPrice before you trust score |
| Re-weight by publisher | Take the per-story scores and apply your own weights |
| Filter out thin coverage | Require storyCount above your threshold |
| Track a name over time | Schedule the run and chart score against the price |
| Feed your own model | Use the per-story scores as features rather than the aggregate |
| Feed a trading agent | Call the Actor over MCP and let the model ask for what it needs |
Quick start
- Click Try for free.
- Add your tickers, one per line:
AAPL,MSFT,NVDA. - Set News per ticker, which is how many stories are scored. More stories means a steadier score and a slower run.
- Click Start. Rows appear within seconds.
- Export as JSON, CSV, Excel or XML, or read the dataset over the API.
Input
| Field | Type | Default | What it controls |
|---|---|---|---|
tickers | array | AAPL | Tickers to score |
newsPerTicker | integer | 10 | How many stories to score per ticker |
maxItems | integer | 0 | Caps 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 group | Fields |
|---|---|
| Instrument | status, tickerSymbol, name |
| Aggregate | label, score, storyCount, positive, negative |
| Cross-check | changePercent, agreesWithPrice |
| Per story | stories |
{"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 ApifyClientclient = 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.
| Event | Free tier | Top volume tier |
|---|---|---|
| Instrument record | $0.01 | $0.004 |
| Actor start | $0.00005 per GB | Same |
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
| Issue | Solution |
|---|---|
storyCount is 0 | No news in range for that ticker. The Actor reports the zero rather than inventing a neutral score. |
agreesWithPrice is false and I expected true | That 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 runs | A small storyCount moves a lot on one story. Raise News per ticker for a steadier number. |
| The run costs more than the record price suggests | The child news Actors charge their own per-record price on your account, outside this Actor's usage total. |
| I disagree with a story's score | Every 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.
Is it legal to scrape the news it reads?
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.