# Stock News API - Analyst Ratings, Earnings Calendar, Benzinga (`nabeelbaghoor/stock-news-analyst-ratings-api`) Actor

Pull stock market news, analyst ratings and price targets, consensus ratings, and earnings, dividend, IPO, guidance, economic, split, M\&A and offering calendars from the Benzinga API into a dataset. Filter by ticker, date, channel or topic. Read only. Bring your own Benzinga API key.

- **URL**: https://apify.com/nabeelbaghoor/stock-news-analyst-ratings-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** News, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 news article returneds

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Stock News API - Analyst Ratings, Earnings Calendar, Benzinga

Pull stock market news, analyst ratings and price targets, consensus ratings, and the earnings, dividend, IPO, guidance, economic, conference call, split, M\&A and secondary offering calendars from the Benzinga API into a dataset, a spreadsheet or a warehouse. Uses your own Benzinga API key, reads only, and charges only for rows that carry data.

### What it collects

- **Stock news**: headline, teaser or full body, author, created and updated times, URL, image, the tickers in the article, channels, tags and importance rank. Filter by tickers, channels (including WIIM, why is it moving), topics, authors, date range or last update.
- **Analyst ratings**: upgrades, downgrades, initiations, reiterations and price target changes with firm, analyst name and ID, current and prior rating, current and prior price target (also split adjusted), percent change, importance and links. Filter by tickers, dates, action and importance.
- **Consensus ratings**: per ticker, the consensus rating and score, consensus, high and low price targets, the strong buy, buy, hold, sell and strong sell distribution as counts or percentages, and total and unique analyst counts.
- **Earnings calendar**: report date and time, period, EPS and revenue actuals, estimates, prior values and surprises, with confirmation flags.
- **Dividends calendar**: dividend amount, prior dividend, yield, frequency, type, and the announced, ex, record and payable dates.
- **IPO calendar**: pricing date, price range, offer price, open price, shares offered, deal status, market cap at offer, lead and other underwriters, lockup and quiet period dates, and the SEC filing link.
- **Guidance**: EPS and revenue guidance ranges with prior ranges and estimates, by period, primary or secondary.
- **Economic calendar**: indicators by country and category with actual, consensus and prior values.
- **Conference calls, stock splits, M\&A and secondary offerings**: call times, dial-in and webcast links; split ratios and ex, record and distribution dates; acquirer, target, deal size, payment type and status; offering shares, price and proceeds.
- Read only, pay per result, bring your own key.

### How to use it

1. Get a Benzinga API key with a Benzinga API licence that covers the data you want (news, ratings, calendars). The data you can read is what your licence includes.
2. Paste the key into the **API key** field (stored as a secret), or set the `DATA_API_KEY` environment secret on the actor.
3. Pick **What to read**, list your **Tickers** (or leave them empty for the whole market), set a date range or filters, and start the run.

A run without a key ends cleanly with a message asking for one, before any request is sent.

### Input

| Field | What it does |
| --- | --- |
| What to read | News (default), analyst ratings, consensus ratings, earnings, dividends, IPOs, guidance, economic calendar, conference calls, splits, M\&A or secondary offerings. |
| Tickers | Stock tickers, one per line, sent 50 to a request. Required for consensus ratings, optional elsewhere, not used by the economic calendar. |
| Start date, End date | `YYYY-MM-DD` range for every mode. Without dates the calendars return the latest records and news the newest articles. |
| Updated since | Unix timestamp for incremental pulls of records updated since your last run. |
| Minimum importance | 0 to 5 on ratings, earnings, dividends, guidance, splits, M\&A and offerings; 1 to 3 on the economic calendar. |
| News text, News channels, News topics, Topic match, News authors, News sort order | News filters and output. |
| Rating action, Simplify ratings | Analyst ratings filters; simplify also applies to consensus ratings. |
| Consensus aggregate type | Rating distribution as counts or percentages. |
| Dividend date field, Split date field, M\&A date field | Which date the calendar sorts or filters by. |
| Guidance type | Primary, secondary or all guidance. |
| Country, Economic event categories | Economic calendar filters. |
| Maximum results | Row cap for the whole run. |
| Requests per minute | Pacing. |
| API key | Your Benzinga API key, as a secret. |

### Access and limits on the Benzinga side

- Every route reads only the data sets your Benzinga licence includes. A data set outside your plan answers 403, and the run ends with a message saying it is not on your plan.
- News pages hold up to 100 articles and calendar pages up to 1000 records; the actor follows the page offset with the same filters until a page comes back short or your maximum is reached. Each request takes at most 50 tickers.
- The provider rate limits by licence and answers 429 when the limit is hit; the actor waits and retries.
- A calendar query that matches nothing returns one free row with `found` set to false and a note, so you can tell an empty result from a failed one.
- Your Benzinga licence agreement decides what you may do with the data. Benzinga licenses its news and calendar data for the uses named in your agreement; displaying or redistributing it to others usually needs a separate licence. This actor does not change those terms.

### FAQ

#### What is the Benzinga API?

Benzinga is a financial media and data company. Its APIs at api.benzinga.com serve the Benzinga newsfeed, analyst ratings, consensus ratings, and calendars for earnings, dividends, IPOs, guidance, economics, conference calls, splits, M\&A and secondary offerings, documented at docs.benzinga.com. This actor wraps those read routes. The docs and the live host were checked on 2026-10-06.

#### Do I need a Benzinga account?

Yes. This actor is bring-your-own-key and never ships one. Use the API key Benzinga issues with your API licence. A missing or refused key ends the run cleanly with a message saying which it was, and a data set your plan does not include is reported the same way.

#### How do I get analyst upgrades and downgrades for a list of stocks?

Pick analyst ratings, list the tickers, set a start and end date, and optionally set the rating action to Upgrades or Downgrades. Each row is one rating action with the firm, analyst, old and new rating, and old and new price target.

#### How do I get the earnings calendar for next week?

Pick earnings calendar, leave the tickers empty, and set the start and end dates to next week. Each row is one company report with date, time, period and EPS and revenue estimates; past reports also carry actuals and surprises.

#### How do I get the latest news for a ticker?

Pick news, list the ticker, and choose headline only, teaser or full body. Add channels, topics or a date range to narrow it, or set updated since to pull only what changed since your last run.

#### What is the consensus price target?

The consensus ratings mode returns, for one ticker at a time, the consensus rating, the average price target across analysts, the high and low targets, and how many analysts rate it strong buy, buy, hold, sell or strong sell.

#### Is my key safe?

The key is sent as the `token` parameter that the provider's API definition declares, is never logged, and is stripped from any error text.

#### How is it priced?

Pay per result: a low price per calendar event, a little more per analyst rating and news article, and the most per consensus rating, since one row summarises every analyst on a ticker. Requests that find nothing are free. Your Benzinga licence applies separately.

### Example output

```json
{
  "mode": "ratings",
  "modeLabel": "Analyst ratings",
  "recordType": "rating",
  "identifier": "MNDY",
  "found": true,
  "id": "695c16678f047b0001fee512",
  "ticker": "MNDY",
  "name": "Monday.Com",
  "date": "2026-01-05",
  "value": "260.0000",
  "title": "Jefferies Maintains Buy",
  "url": "https://www.benzinga.com/stock-articles/MNDY/analyst-ratings",
  "action_company": "Maintains",
  "action_pt": "Lowers",
  "adjusted_pt_current": "260.00",
  "adjusted_pt_prior": "300.00",
  "analyst": "Jefferies",
  "analyst_id": "57fe0358ac6af40001334e62",
  "analyst_name": "Brent Thill",
  "currency": "USD",
  "exchange": "NASDAQ",
  "importance": 3,
  "pt_current": "260.0000",
  "pt_pct_change": "-13.33",
  "pt_prior": "300.00",
  "rating_current": "Buy",
  "rating_prior": "Buy",
  "time": "14:52:07",
  "updated": 1767642765,
  "retrievedAt": "2026-10-06T09:14:52.118Z",
  "note": null
}
```

Values are illustrative and taken from the provider's documented example. News rows carry `title`, `teaser`, `body`, `author`, `created`, `tickers`, `channelNames` and `tagNames`; calendar rows carry every field of their calendar.

### Keyword map

stock news API, financial news API, stock market news data, analyst ratings API, price target data, upgrades and downgrades, consensus rating, earnings calendar API, dividend calendar API, IPO calendar data, company guidance data, economic calendar API, stock split calendar, M\&A data, secondary offerings data, why is it moving, Benzinga API, Benzinga news export.

# Actor input Schema

## `mode` (type: `string`):

News reads articles for tickers, channels, topics or dates. Analyst ratings reads upgrades, downgrades, initiations and price target changes. Consensus ratings reads one aggregate per ticker. The calendar modes read earnings, dividends, IPOs, guidance, economic indicators, conference calls, splits, M\&A and secondary offerings.

## `tickers` (type: `array`):

Stock tickers such as AAPL or MSFT, one per line. Sent 50 to a request. Optional in every mode except consensus ratings; with no tickers the mode reads across the whole market. The economic calendar takes none.

## `startDate` (type: `string`):

On or after this date, as YYYY-MM-DD. Without dates the calendars return the provider's latest records and news returns the newest articles.

## `endDate` (type: `string`):

On or before this date, as YYYY-MM-DD.

## `updatedSince` (type: `integer`):

Every mode except consensus ratings. Only records updated at or after this Unix timestamp in seconds (UTC), for incremental pulls.

## `importance` (type: `integer`):

Analyst ratings, earnings, dividends, guidance, splits, M\&A and offerings: 0 to 5. Economic calendar: 1 to 3. Only records at or above this importance.

## `newsDisplay` (type: `string`):

News. Headline only, headline and teaser, or headline and full body.

## `newsChannels` (type: `array`):

News. Only articles in these channels, by name or ID, such as WIIM for why is it moving stories, or any name from the provider's news channel list.

## `newsTopics` (type: `array`):

News. Words or phrases searched in the title, tags and body, in that order of priority.

## `topicMatch` (type: `string`):

News. Whether an article must match any of the topics or all of them.

## `newsAuthors` (type: `array`):

News. Only articles by these authors.

## `newsSort` (type: `string`):

News. Sort by created time, updated time or ID.

## `ratingAction` (type: `string`):

Analyst ratings. Only this rating action. Leave empty for all.

## `simplifyRatings` (type: `boolean`):

Analyst ratings and consensus ratings. Map ratings to standardized categories (consensus: buy, hold and sell only).

## `consensusAggregate` (type: `string`):

Consensus ratings. Count the rating distribution as numbers of analysts or as percentages.

## `dividendDateSort` (type: `string`):

Dividends. Which dividend date to sort on, newest first.

## `splitDateField` (type: `string`):

Stock splits. Which date the date range filters and sorts by. The provider default is the announced date.

## `maDateSort` (type: `string`):

Mergers and acquisitions. Which deal date to sort on.

## `guidancePrimary` (type: `string`):

Guidance. Primary guidance only, secondary only, or all.

## `economicsCountry` (type: `string`):

Economic calendar. A three letter country code, such as USA, CAN or GBR.

## `economicsCategories` (type: `array`):

Economic calendar. Only events in these categories, such as Employment.

## `maxResults` (type: `integer`):

The most rows this run returns and charges for, across all tickers. Pages are read up to 100 news articles or 1000 calendar records at a time.

## `requestsPerMinute` (type: `integer`):

Pacing. Benzinga rate limits depend on your licence; the actor also waits and retries when the provider answers 429.

## `apiKey` (type: `string`):

Your own Benzinga API key, issued with your Benzinga API licence. Stored as a secret and sent as the token parameter the provider documents; it is never logged. You can instead set the DATA_API_KEY environment secret.

## Actor input object example

```json
{
  "mode": "news",
  "tickers": [
    "AAPL",
    "NVDA"
  ],
  "newsDisplay": "abstract",
  "topicMatch": "or",
  "newsSort": "created:desc",
  "consensusAggregate": "number",
  "guidancePrimary": "Y",
  "maxResults": 200,
  "requestsPerMinute": 120
}
```

# Actor output Schema

## `records` (type: `string`):

One row per news article, analyst rating, consensus rating or calendar event.

# 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 = {
    "tickers": [
        "AAPL",
        "NVDA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/stock-news-analyst-ratings-api").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 = { "tickers": [
        "AAPL",
        "NVDA",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/stock-news-analyst-ratings-api").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 '{
  "tickers": [
    "AAPL",
    "NVDA"
  ]
}' |
apify call nabeelbaghoor/stock-news-analyst-ratings-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/stock-news-analyst-ratings-api"
        }
    }
}
```

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/ErKws2W1T6aJSjS9l/builds/V3iR1r4ORVpwOgwSH/openapi.json
