---
type: "firecrawl-provider"
description: "Real-time financial newswire and analyst coverage for US-listed companies: market-moving headlines, why-is-it-moving notes, press releases, ratings changes and consensus, announced deals, and unusual options activity."
use_when: "The Benzinga newswire: market-moving stories about a ticker, topic or channel over a date range. Scope every call - an unscoped query returns the whole wire.\n\nAnalyst coverage and deal flow: ratings changes and price targets, the consensus behind them, the analyst and firm rosters that issue them, and announced mergers and acquisitions.\n\nDerived signals rather than raw data: unusually large or aggressive options orders."
categories: "Finance"
capabilities: 11
credits_per_call: "0-45"
---
# Benzinga on Firecrawl Alexandria

Real-time financial newswire and analyst coverage for US-listed companies: market-moving headlines, why-is-it-moving notes, press releases, ratings changes and consensus, announced deals, and unusual options activity.

- Categories: Finance
- Category index: [Finance category](https://firecrawl.dev/alexandria/agents/categories/finance)
- Provider key: `benzinga`
- Access: Firecrawl credits
- Cost: 0–45 credits per call

## More

- [Human guide](https://firecrawl.dev/app/alexandria/benzinga)
- [OpenAPI spec](https://firecrawl.dev/alexandria/agents/providers/benzinga/openapi.json)

## Capabilities

- [News search](https://firecrawl.dev/alexandria/agents/providers/benzinga/news/search): Matching stories, most recent first, with the channels and tickers each was filed under.
- [Press releases](https://firecrawl.dev/alexandria/agents/providers/benzinga/news/press-releases): Press releases matching the filters, newest first, each with the wire that distributed it and the tickers it is filed against.
- [Why Is It Moving](https://firecrawl.dev/alexandria/agents/providers/benzinga/news/wiims): Why Is It Moving items, newest first, each a short explanation filed against the tickers it concerns.
- [Removed news](https://firecrawl.dev/alexandria/agents/providers/benzinga/news/removed): Stories Benzinga has withdrawn, flattened to one list from the keyed groups the endpoint answers with. Delete every id here from any copy you hold; the feed never carries the story itself.
- [Consensus ratings](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/consensus-ratings): The analyst consensus for a ticker as counts per rating bucket, plus consensus price targets. Note this endpoint sits outside the calendar family and takes no page parameter.
- [Mergers and acquisitions](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/mergers-acquisitions): Merger and acquisition deals with both sides of the transaction, the deal size and terms, and its announced, expected and completed dates.
- [Analyst ratings](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/ratings): Analyst upgrades, downgrades, initiations and price target changes, each carrying the analyst and firm ids that the roster capabilities resolve. Price targets arrive as strings.
- [Analyst roster](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/ratings-analysts): The roster of analysts who issue ratings, each with their firm and, when present, a rank and ratings_accuracy block of historical hit rates. The docs list the top-level fields; the rank and ratings_accuracy objects are nested and their child attributes are collapsed in the reference.
- [Research firms](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/ratings-firms): The research firms that publish analyst ratings. The sample payload carries only id and name per firm; the reference additionally documents currency, homepage and updated.
- [Removed calendar events](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/removed): Calendar events Benzinga has removed or cancelled, identified by id and the calendar they came from, so you can delete matching rows from a copy you hold.
- [Unusual options activity](https://firecrawl.dev/alexandria/agents/providers/benzinga/signals/options-activity): Unusually large or aggressive options orders, each with the contract, the size and premium, the sentiment Benzinga assigns, and where in the spread it filled. Prices and sizes arrive as strings.

## 1. Choose this provider when

The Benzinga newswire: market-moving stories about a ticker, topic or channel over a date range. Scope every call - an unscoped query returns the whole wire.

Analyst coverage and deal flow: ratings changes and price targets, the consensus behind them, the analyst and firm rosters that issue them, and announced mergers and acquisitions.

Derived signals rather than raw data: unusually large or aggressive options orders.

## 2. Minimal request

Call `POST https://api.firecrawl.dev/v2/scrape` with `{ alexandria: { provider, capability, options } }`. For a batch, send `{ alexandria: [...] }` with up to 10 calls.

```json
{
  "provider": "benzinga",
  "capability": "news/search",
  "options": {
    "page": 0,
    "pageSize": 15,
    "displayOutput": "headline",
    "topic_group_by": "or"
  }
}
```

## 3. Add provider options

Use only the options needed for the task:

- `page` (number): Page offset, limited to 0-100000. Increase it to read past the first page of results rather than widening the date range. Example: `0`
- `pageSize` (number): Stories to return, maximum 100. Raise it when you want a full day of coverage in one call. Example: `15`
- `displayOutput` (string): How much of each story to return: headline only, abstract (headline plus teaser) or full body text. Set full only when you need to quote the story. Example: `headline`
- `date` (string): A single day to query, yyyy-mm-dd. Use it instead of dateFrom and dateTo when the caller names one date. Example: `<date>`
- `dateFrom` (string): Earliest publication date, yyyy-mm-dd. Set it whenever the caller asks about a period rather than a single day. Example: `<dateFrom>`
- `dateTo` (string): Latest publication date, yyyy-mm-dd. Pair it with dateFrom to bound a period. Example: `<dateTo>`
- `updatedSince` (number): Unix timestamp in UTC; set it to your last sync time to pull only stories updated since then. Example: `10`
- `publishedSince` (number): Unix timestamp in UTC; set it to pull and sort by stories published since that moment. Example: `10`
- `sort` (string): Sort order as field:direction. Use created:asc to read a period forwards, or updated:desc when tracking edits. Example: `id:asc`
- `isin` (string): Comma-separated ISINs, maximum 50. Use it when the caller identifies companies by ISIN rather than ticker. Example: `<isin>`
- `cusips` (string): Comma-separated CUSIPs, maximum 50; requires a license agreement. Use only when the caller supplies CUSIPs. Example: `<cusips>`
- `tickers` (string): Comma-separated ticker symbols, maximum 50. Set this whenever the caller names a company. Example: `<tickers>`
- `primaryTickers` (string): Comma-separated primary ticker symbols. Use it instead of tickers when you want only stories whose primary subject is that company. Example: `<primaryTickers>`
- `channels` (string): Comma-separated Benzinga channels to restrict to, for example Earnings or Analyst Ratings. Example: `<channels>`
- `topics` (string): Comma-separated words or phrases matched against title, tags and body in that order of priority. Use it when the caller asks about a subject rather than a company. Example: `<topics>`
- `topic_group_by` (string): Logical operator for the topics query. Set and when every topic must appear, or leave as or to match any. Example: `or`
- `authors` (string): Comma-separated authors. Set it to restrict to a particular desk or writer. Example: `<authors>`
- `content_types` (string): Comma-separated content types. Set it when you need to keep the feed to a specific content type. Example: `<content_types>`
- `format` (string): Desired response format. Set text only when you want plain text rather than the default JSON structures. Example: `text`
- `importance` (string): Importance level filter. Set it when the caller only wants the market-moving stories. Example: `<importance>`
- `importanceRank` (number): Importance rank from 1 to 5. Set a low number to keep only the highest-ranked stories. Example: `5`
- `region` (string): Region filter, for example 'ca' or 'canada' for Canadian content. Set it when the caller scopes the question to a market. Example: `<region>`

## 4. Request through your preferred interface

### JavaScript

```javascript
const result = await firecrawl.scrape({
  alexandria: {
    provider: "benzinga",
    capability: "news/search",
    options: {
      page: 0,
      pageSize: 15,
      displayOutput: "headline",
      topic_group_by: "or",
    },
  },
});
```

### Python

```python
result = firecrawl.scrape_alexandria({
  "provider": "benzinga",
  "capability": "news/search",
  "options": {
    "page": 0,
    "pageSize": 15,
    "displayOutput": "headline",
    "topic_group_by": "or"
  }
})
```

### cURL

```sh
curl https://api.firecrawl.dev/v2/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "alexandria": {
    "provider": "benzinga",
    "capability": "news/search",
    "options": {
      "page": 0,
      "pageSize": 15,
      "displayOutput": "headline",
      "topic_group_by": "or"
    }
  }
}'
```

### CLI

```sh
firecrawl scrape 'benzinga/news/search' \
  --options '{"page":0,"pageSize":15,"displayOutput":"headline","topic_group_by":"or"}'
```


### MCP

Call the FCX MCP retrieve tool with this object:

```json
{
  "provider": "benzinga",
  "capability": "news/search",
  "options": {
    "page": 0,
    "pageSize": 15,
    "displayOutput": "headline",
    "topic_group_by": "or"
  }
}
```

Ask for only the returned fields needed by the task.

## 5. Full request shape

```json
{
  "provider": "benzinga",
  "capability": "news/search",
  "options": {
    "page": 0,
    "pageSize": 15,
    "displayOutput": "headline",
    "topic_group_by": "or"
  }
}
```

## 6. Response data

The response includes `success`, `provider`, `capability`, `creditsCost` and `data`. This example shows the provider payload in `data`:

```json
[
  {
    "id": "<id>",
    "title": "<title>",
    "teaser": "<teaser>",
    "created": "<created>",
    "url": "<url>",
    "stocks": [],
    "channels": []
  }
]
```

## API reference-derived contract

The following capability contract is generated from the same normalized Alexandria API reference exposed in the API spec.

### News search

- Capability: `news/search`
- Description: Matching stories, most recent first, with the channels and tickers each was filed under.
- Instructions: Use for what was reported about a company or subject, and when. Scope it to tickers or a date range: unscoped it returns the whole newswire. For the analyst reaction to a story use calendar/ratings.
- Cost: 30 credits per call
- Capability file: [News search](https://firecrawl.dev/alexandria/agents/providers/benzinga/news/search)

Accepted options:
- `page` (number): Page offset, limited to 0-100000. Increase it to read past the first page of results rather than widening the date range. Example: `0`
- `pageSize` (number): Stories to return, maximum 100. Raise it when you want a full day of coverage in one call. Example: `15`
- `displayOutput` (string): How much of each story to return: headline only, abstract (headline plus teaser) or full body text. Set full only when you need to quote the story. Example: `headline`
- `date` (string): A single day to query, yyyy-mm-dd. Use it instead of dateFrom and dateTo when the caller names one date. Example: `<date>`
- `dateFrom` (string): Earliest publication date, yyyy-mm-dd. Set it whenever the caller asks about a period rather than a single day. Example: `<dateFrom>`
- `dateTo` (string): Latest publication date, yyyy-mm-dd. Pair it with dateFrom to bound a period. Example: `<dateTo>`
- `updatedSince` (number): Unix timestamp in UTC; set it to your last sync time to pull only stories updated since then. Example: `10`
- `publishedSince` (number): Unix timestamp in UTC; set it to pull and sort by stories published since that moment. Example: `10`
- `sort` (string): Sort order as field:direction. Use created:asc to read a period forwards, or updated:desc when tracking edits. Example: `id:asc`
- `isin` (string): Comma-separated ISINs, maximum 50. Use it when the caller identifies companies by ISIN rather than ticker. Example: `<isin>`
- `cusips` (string): Comma-separated CUSIPs, maximum 50; requires a license agreement. Use only when the caller supplies CUSIPs. Example: `<cusips>`
- `tickers` (string): Comma-separated ticker symbols, maximum 50. Set this whenever the caller names a company. Example: `<tickers>`
- `primaryTickers` (string): Comma-separated primary ticker symbols. Use it instead of tickers when you want only stories whose primary subject is that company. Example: `<primaryTickers>`
- `channels` (string): Comma-separated Benzinga channels to restrict to, for example Earnings or Analyst Ratings. Example: `<channels>`
- `topics` (string): Comma-separated words or phrases matched against title, tags and body in that order of priority. Use it when the caller asks about a subject rather than a company. Example: `<topics>`
- `topic_group_by` (string): Logical operator for the topics query. Set and when every topic must appear, or leave as or to match any. Example: `or`
- `authors` (string): Comma-separated authors. Set it to restrict to a particular desk or writer. Example: `<authors>`
- `content_types` (string): Comma-separated content types. Set it when you need to keep the feed to a specific content type. Example: `<content_types>`
- `format` (string): Desired response format. Set text only when you want plain text rather than the default JSON structures. Example: `text`
- `importance` (string): Importance level filter. Set it when the caller only wants the market-moving stories. Example: `<importance>`
- `importanceRank` (number): Importance rank from 1 to 5. Set a low number to keep only the highest-ranked stories. Example: `5`
- `region` (string): Region filter, for example 'ca' or 'canada' for Canadian content. Set it when the caller scopes the question to a market. Example: `<region>`

Response schema example:
```json
[
  {
    "id": "<id>",
    "title": "<title>",
    "teaser": "<teaser>",
    "created": "<created>",
    "url": "<url>",
    "stocks": [],
    "channels": []
  }
]
```

### Press releases

- Capability: `news/press-releases`
- Description: Press releases matching the filters, newest first, each with the wire that distributed it and the tickers it is filed against.
- Instructions: Use this for company-issued announcements distributed over the wires, the primary-source wording behind a story. For Benzinga editorial coverage and the wider newswire use news/search, and for the one-line explanation of a price move use news/wiims.
- Cost: 15 credits per call
- Capability file: [Press releases](https://firecrawl.dev/alexandria/agents/providers/benzinga/news/press-releases)

Accepted options:
- `page` (number): Page offset, limited to 0-100000. Increase it to page past the first batch rather than widening the date range. Example: `0`
- `pageSize` (number): Number of releases returned, maximum 100. Raise it when you want a full day of a company's releases in one call. Example: `15`
- `displayOutput` (string): How much of each release to return: headline only, abstract (headline plus teaser) or full body text. Set full only when you need to quote the release. Example: `headline`
- `date` (string): A single day to query, yyyy-mm-dd. Use it instead of dateFrom and dateTo when the caller names one date. Example: `<date>`
- `dateFrom` (string): Earliest publication date, yyyy-mm-dd. Set it whenever the caller asks about a period rather than a single day. Example: `<dateFrom>`
- `dateTo` (string): Latest publication date, yyyy-mm-dd. Pair it with dateFrom to bound a period. Example: `<dateTo>`
- `updatedSince` (number): Unix timestamp in UTC; set it to your last sync time to pull only releases updated since then. Example: `10`
- `publishedSince` (number): Unix timestamp in UTC; set it to pull and sort by releases published since that moment. Example: `10`
- `sort` (string): Sort order as field:direction. Use created:asc to read a period forwards, or updated:desc when tracking edits. Example: `id:asc`
- `isin` (string): Comma-separated ISINs, maximum 50. Use it when the caller identifies companies by ISIN rather than ticker. Example: `<isin>`
- `cusips` (string): Comma-separated CUSIPs, maximum 50; requires a license agreement. Use only when the caller supplies CUSIPs. Example: `<cusips>`
- `tickers` (string): Comma-separated ticker symbols, maximum 50. Set this whenever the caller names a company. Example: `<tickers>`
- `primaryTickers` (string): Comma-separated primary ticker symbols. Use it instead of tickers when you want only releases whose primary subject is that company. Example: `<primaryTickers>`
- `topics` (string): Comma-separated words or phrases matched against title, tags and body in that order of priority. Use it when the caller asks about a subject rather than a company. Example: `<topics>`
- `topic_group_by` (string): Logical operator for the topics query. Set and when every topic must appear, or leave as or to match any. Example: `or`
- `authors` (string): Comma-separated authors, which for press releases are the distributing wires. Set it to restrict to one wire. Example: `<authors>`
- `format` (string): Desired response format. Set text only when you want plain text rather than the default JSON structures. Example: `text`
- `importance` (string): Importance level of the release. Set high when the caller only wants the market-moving releases. Example: `low`
- `region` (string): Region filter, for example 'ca' or 'canada' for Canadian content. Set it when the caller scopes the question to a market. Example: `<region>`

Response schema example:
```json
[
  {
    "id": 0,
    "author": "<author>",
    "created": "<created>",
    "updated": "<updated>",
    "title": "<title>",
    "teaser": "<teaser>",
    "body": "<body>",
    "url": "<url>",
    "image": [],
    "channels": [],
    "stocks": [],
    "tags": [],
    "original_id": 0
  }
]
```

### Why Is It Moving

- Capability: `news/wiims`
- Description: Why Is It Moving items, newest first, each a short explanation filed against the tickers it concerns.
- Instructions: Use this to answer why a stock moved: WIIMs are the short attributed explanations Benzinga files against a ticker's price action. For the underlying coverage use news/search, and for the company's own announcement use news/press-releases.
- Cost: 45 credits per call
- Capability file: [Why Is It Moving](https://firecrawl.dev/alexandria/agents/providers/benzinga/news/wiims)

Accepted options:
- `page` (number): Page offset, limited to 0-100000. Increase it to page further back rather than widening the date range. Example: `0`
- `pageSize` (number): Number of WIIM items returned, maximum 100. Raise it when scanning a whole session's movers. Example: `15`
- `displayOutput` (string): How much of each item to return: headline only, abstract (headline plus teaser) or full body. WIIMs are short, so abstract is usually enough. Example: `headline`
- `date` (string): A single day to query, yyyy-mm-dd. Use it when the caller asks why a stock moved on a specific date. Example: `<date>`
- `dateFrom` (string): Earliest publication date, yyyy-mm-dd. Set it when the caller asks about a period. Example: `<dateFrom>`
- `dateTo` (string): Latest publication date, yyyy-mm-dd. Pair it with dateFrom to bound a period. Example: `<dateTo>`
- `updatedSince` (number): Unix timestamp in UTC; set it to your last sync time to pull only items updated since then. Example: `10`
- `publishedSince` (number): Unix timestamp in UTC; set it to pull and sort by items published since that moment, which suits intraday polling. Example: `10`
- `sort` (string): Sort order as field:direction. Use created:asc to read a session forwards. Example: `id:asc`
- `isin` (string): Comma-separated ISINs, maximum 50. Use when the caller identifies companies by ISIN. Example: `<isin>`
- `cusips` (string): Comma-separated CUSIPs, maximum 50; requires a license agreement. Example: `<cusips>`
- `tickers` (string): Comma-separated ticker symbols, maximum 50. Set this whenever the caller names a company. Example: `<tickers>`
- `primaryTickers` (string): Comma-separated primary ticker symbols; use it to keep only items whose primary subject is that company. Example: `<primaryTickers>`
- `topics` (string): Comma-separated words or phrases matched against title, tags and body in that order of priority. Example: `<topics>`
- `topic_group_by` (string): Logical operator for the topics query. Set and when every topic must appear. Example: `or`
- `authors` (string): Comma-separated authors. Set it to restrict to a particular desk. Example: `<authors>`
- `content_types` (string): Comma-separated content types. Set it when you need to keep the feed to a specific content type. Example: `<content_types>`
- `format` (string): Desired response format. Set text only when you want plain text rather than JSON structures. Example: `text`
- `importance` (string): Importance level filter. Set it when the caller wants only the more significant move explanations. Example: `<importance>`
- `importanceRank` (number): Importance rank from 1 to 5. Set a low number to keep only the highest-ranked items. Example: `10`
- `region` (string): Region filter, for example 'ca' or 'canada' for Canadian content. Example: `<region>`

Response schema example:
```json
[
  {
    "id": 0,
    "author": "<author>",
    "created": "<created>",
    "updated": "<updated>",
    "title": "<title>",
    "teaser": "<teaser>",
    "body": "<body>",
    "url": "<url>",
    "image": [],
    "channels": [],
    "stocks": [],
    "tags": [],
    "importance_rank": 0,
    "original_id": 0
  }
]
```

### Removed news

- Capability: `news/removed`
- Description: Stories Benzinga has withdrawn, flattened to one list from the keyed groups the endpoint answers with. Delete every id here from any copy you hold; the feed never carries the story itself.
- Instructions: Use this when you keep a copy of Benzinga news and need to know which stories have been withdrawn so you can delete them, which Schedule C.10 requires. It never returns story content; for the stories themselves use news/search.
- Cost: 0 credits per call
- Capability file: [Removed news](https://firecrawl.dev/alexandria/agents/providers/benzinga/news/removed)

Accepted options:
- `page` (number): Page offset. Upstream caps pageSize multiplied by page at 10000, so narrow with updatedSince rather than paging deep. Example: `0`
- `pageSize` (number): Number of removal records returned, maximum 1000. Raise it when reconciling a backlog in one call. Example: `100`
- `updatedSince` (number): Unix timestamp in UTC; set it to the time of your last sync so you only receive removals recorded since then. Example: `10`

Response schema example:
```json
[
  {
    "id": 0,
    "updated": "<updated>"
  }
]
```

### Consensus ratings

- Capability: `calendar/consensus-ratings`
- Description: The analyst consensus for a ticker as counts per rating bucket, plus consensus price targets. Note this endpoint sits outside the calendar family and takes no page parameter.
- Instructions: Use for where analysts stand in aggregate right now on one company. For the individual changes that moved the consensus, use calendar/ratings instead.
- Cost: 30 credits per call
- Capability file: [Consensus ratings](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/consensus-ratings)

Accepted options:
- `parameters[tickers]` (string): Exactly one ticker symbol to aggregate for; the endpoint takes a single ticker, not a list. Call once per company. Example: `<parameters[tickers]>`
- `parameters[date_from]` (string): Earliest date, YYYY-MM-DD. Example: `<parameters[date_from]>`
- `parameters[date_to]` (string): Latest date, YYYY-MM-DD. Example: `<parameters[date_to]>`
- `simplify` (boolean): Collapse the aggregate to BUY, HOLD and SELL rather than the five-step scale. Example: `false`
- `aggregate_type` (string): Whether each rating bucket is reported as a count of analysts or as a percentage of them. Example: `number`
- `pagesize` (number): Records to return. Limit 1000. Example: `10`

Response schema example:
```json
{
  "aggregate_ratings": {
    "ticker": "<ticker>",
    "strong_buy": 0,
    "buy": 0,
    "hold": 0,
    "sell": 0,
    "strong-sell": 0
  }
}
```

### Mergers and acquisitions

- Capability: `calendar/mergers-acquisitions`
- Description: Merger and acquisition deals with both sides of the transaction, the deal size and terms, and its announced, expected and completed dates.
- Instructions: Use for who is buying whom, at what price, and whether the deal is pending or closed. For the coverage and commentary around a deal use news/search.
- Cost: 15 credits per call
- Capability file: [Mergers and acquisitions](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/mergers-acquisitions)

Accepted options:
- `parameters[tickers]` (string): Comma-separated ticker symbols, maximum 50. Set this when the caller asks whether a named company is acquiring or being acquired. Example: `<parameters[tickers]>`
- `parameters[date]` (string): A single date, YYYY-MM-DD, as shorthand when date_from and date_to would be the same. Leave unset to get the latest deals. Example: `<parameters[date]>`
- `parameters[date_from]` (string): Earliest date, YYYY-MM-DD, interpreted against date_sort. Example: `<parameters[date_from]>`
- `parameters[date_to]` (string): Latest date, YYYY-MM-DD, interpreted against date_sort. Example: `<parameters[date_to]>`
- `parameters[date_sort]` (string): Which deal date to sort on. Use announced for a chronology of new deals, expected for pending closes, or completed for deals that have closed. Example: `expected`
- `parameters[importance]` (number): Minimum importance level, matched as greater than or equal to the value given. Raise it when the caller only wants large or notable deals. Example: `0`
- `parameters[updated]` (number): Unix timestamp in UTC; returns only records updated at or after it. Set this when polling for changes since a previous call. Example: `10`
- `page` (number): Zero-based page offset, capped at 100000. Prefer narrowing by date over paging deep. Example: `0`
- `pagesize` (number): Number of records to return, limit 1000. Example: `10`

Response schema example:
```json
{
  "ma": [
    {
      "id": "<id>",
      "date": "<date>",
      "date_expected": "<date_expected>",
      "date_completed": "<date_completed>",
      "deal_status": "<deal_status>",
      "deal_type": "<deal_type>",
      "deal_size": "<deal_size>",
      "deal_payment_type": "<deal_payment_type>",
      "deal_terms_extra": "<deal_terms_extra>",
      "currency": "<currency>",
      "acquirer_name": "<acquirer_name>",
      "acquirer_ticker": "<acquirer_ticker>",
      "acquirer_exchange": "<acquirer_exchange>",
      "acquirer_cusip": "<acquirer_cusip>",
      "acquirer_isin": "<acquirer_isin>",
      "target_name": "<target_name>",
      "target_ticker": "<target_ticker>",
      "target_exchange": "<target_exchange>",
      "importance": 0,
      "notes": "<notes>",
      "updated": 0
    }
  ]
}
```

### Analyst ratings

- Capability: `calendar/ratings`
- Description: Analyst upgrades, downgrades, initiations and price target changes, each carrying the analyst and firm ids that the roster capabilities resolve. Price targets arrive as strings.
- Instructions: Use for how analysts have moved on a stock: upgrades, downgrades, initiations and target changes. Filter by parameters[analyst_id] or parameters[firm_id] to follow one analyst or firm. It carries the ratings, not the reasoning behind them.
- Cost: 30 credits per call
- Capability file: [Analyst ratings](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/ratings)

Accepted options:
- `fields` (string): Comma-separated response fields to return, or * for every field including ratings_accuracy. Available: id, date, time, ticker, exchange, name, currency, action_pt, action_company, rating_current, pt_current, rating_prior, pt_prior, pt_pct_change, url, url_calendar, url_news, analyst, analyst_id, analyst_name, firm_id, ratings_accuracy, importance, notes, updated. Set it to trim the payload when you only need the rating and target. Example: `<fields>`
- `parameters[tickers]` (string): Comma-separated ticker symbols, maximum 50. Example: `<parameters[tickers]>`
- `parameters[analyst_id]` (string): Comma-separated analyst ids. Take them from the id field of calendar/ratings-analysts, or the analyst_id on a rating, to follow one analyst's calls. Example: `<parameters[analyst_id]>`
- `parameters[firm_id]` (string): Comma-separated firm ids. Take them from the id field of calendar/ratings-firms, or the firm_id on a rating, to keep to one research firm's coverage. Example: `<parameters[firm_id]>`
- `parameters[action]` (string): Ratings action to filter to, matched against action_company. Example: `Assumes`
- `parameters[date]` (string): A single date, YYYY-MM-DD, as shorthand when date_from and date_to would be the same. Leave unset to get the latest ratings. Example: `<parameters[date]>`
- `parameters[date_from]` (string): Earliest rating date, YYYY-MM-DD. Example: `<parameters[date_from]>`
- `parameters[date_to]` (string): Latest rating date, YYYY-MM-DD. Example: `<parameters[date_to]>`
- `parameters[importance]` (number): Minimum importance level, matched as greater than or equal to the value given. Raise it when the caller only wants the notable calls. Example: `0`
- `simplify` (boolean): Collapse ratings to standardized categories. Example: `false`
- `parameters[updated]` (number): Unix timestamp. Returns records updated at or after it, for polling deltas. Example: `10`
- `page` (number): Page offset, 0 to 100000. Example: `0`
- `pagesize` (number): Records to return. Limit 1000. Example: `10`

Response schema example:
```json
{
  "ratings": [
    {
      "id": "<id>",
      "ticker": "<ticker>",
      "exchange": "<exchange>",
      "name": "<name>",
      "cusip": "<cusip>",
      "isin": "<isin>",
      "date": "<date>",
      "time": "<time>",
      "analyst": "<analyst>",
      "analyst_id": "<analyst_id>",
      "analyst_name": "<analyst_name>",
      "firm_id": "<firm_id>",
      "action_company": "<action_company>",
      "action_pt": "<action_pt>",
      "rating_prior": "<rating_prior>",
      "rating_current": "<rating_current>",
      "pt_prior": "<pt_prior>",
      "pt_current": "<pt_current>",
      "adjusted_pt_prior": "<adjusted_pt_prior>",
      "adjusted_pt_current": "<adjusted_pt_current>",
      "currency": "<currency>",
      "importance": 0,
      "notes": "<notes>",
      "url": "<url>",
      "url_calendar": "<url_calendar>",
      "url_news": "<url_news>",
      "updated": 0
    }
  ]
}
```

### Analyst roster

- Capability: `calendar/ratings-analysts`
- Description: The roster of analysts who issue ratings, each with their firm and, when present, a rank and ratings_accuracy block of historical hit rates. The docs list the top-level fields; the rank and ratings_accuracy objects are nested and their child attributes are collapsed in the reference.
- Instructions: Use to resolve an analyst by name, or to judge how accurate a particular analyst has been, and to get the id you then pass to calendar/ratings as parameters[analyst_id]. For the ratings themselves use calendar/ratings; for the list of firms rather than people use calendar/ratings-firms.
- Cost: 30 credits per call
- Capability file: [Analyst roster](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/ratings-analysts)

Accepted options:
- `page` (number): Page offset, limited to 0-100000. Set this only when walking past the first page of the analyst roster. Example: `0`
- `pageSize` (number): Number of analysts to return, limit 1000. Raise it when you want the roster in one call rather than paging. Example: `100`
- `fields` (string): Comma-separated list of response fields to return. Set it to trim the payload when you only need names and ids and not the ratings_accuracy block. Example: `<fields>`
- `analyst` (string): Analyst identifier to look up. Set this when you already have an analyst_id from a ratings record and want that analyst's profile and accuracy. Example: `<analyst>`
- `analyst_name` (string): Analyst name to match. Set this when the caller names a person rather than supplying an id; the reference does not say whether matching is exact, so try the full name first. Example: `<analyst_name>`
- `firm` (string): Firm identifier to restrict to. Set this to list only the analysts working at one research firm. Example: `<firm>`
- `firm_name` (string): Firm name to match. Use it when the caller names the bank, for example Morgan Stanley, instead of supplying a firm id. Example: `<firm_name>`
- `updated` (number): Unix timestamp (UTC); only records updated at or after this are returned, and the sort order follows it. Set this to poll for roster changes since your last sync. Example: `10`

Response schema example:
```json
{
  "analyst_ratings_analyst": [
    {
      "id": "<id>",
      "name_full": "<name_full>",
      "name_first": "<name_first>",
      "name_last": "<name_last>",
      "firm_id": "<firm_id>",
      "firm_name": "<firm_name>",
      "rank": {},
      "ratings_accuracy": {},
      "updated": 0
    }
  ]
}
```

### Research firms

- Capability: `calendar/ratings-firms`
- Description: The research firms that publish analyst ratings. The sample payload carries only id and name per firm; the reference additionally documents currency, homepage and updated.
- Instructions: Use to enumerate the covering firms or to turn a firm name into the id that calendar/ratings filters on as parameters[firm_id]. For an individual analyst and their track record use calendar/ratings-analysts; for the ratings themselves use calendar/ratings.
- Cost: 30 credits per call
- Capability file: [Research firms](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/ratings-firms)

Accepted options:
- `page` (number): Page offset, limited to 0-100000. Set this only when paging past the first block of firms. Example: `0`
- `pageSize` (number): Number of firms to return, limit 1000. Raise it to pull the whole firm list in one call. Example: `100`
- `fields` (string): Comma-separated list of response fields to return. Set it when you only need id and name. Example: `<fields>`
- `firm` (string): Firm identifier to look up. Set this when you already hold a firm_id from a ratings record and want the firm's details. Example: `<firm>`
- `updated` (number): Unix timestamp (UTC); only firms updated at or after this are returned. Set this to poll for newly added or renamed firms since your last sync. Example: `10`

Response schema example:
```json
{
  "analyst_ratings_firm": [
    {
      "id": "<id>",
      "name": "<name>",
      "currency": "<currency>",
      "homepage": "<homepage>",
      "updated": 0
    }
  ]
}
```

### Removed calendar events

- Capability: `calendar/removed`
- Description: Calendar events Benzinga has removed or cancelled, identified by id and the calendar they came from, so you can delete matching rows from a copy you hold.
- Instructions: Use when you keep a copy of the ratings or M&A calendar and need to know which previously returned events have since been withdrawn, which Schedule C.10 requires you to act on. It answers only what disappeared; for the events themselves use calendar/ratings or calendar/mergers-acquisitions.
- Cost: 0 credits per call
- Capability file: [Removed calendar events](https://firecrawl.dev/alexandria/agents/providers/benzinga/calendar/removed)

Accepted options:
- `page` (number): Page offset, limited to 0-100000. Set this when walking a long backlog of removals. Example: `0`
- `pageSize` (number): Number of removal records to return, limit 1000. Example: `100`
- `type` (string): Which calendar to read removals for: ratings for calendar/ratings rows, ma for calendar/mergers-acquisitions rows. Always set it: left unset the feed returns removals from every Benzinga calendar, most of them for calendars not published here (probed 2026-09-21, the unfiltered first page was dividends). Example: `ratings`
- `updated` (number): Unix timestamp (UTC); only records updated at or after this are returned. Set this to the time of your last sync so you get just the newly withdrawn events. Example: `10`

Response schema example:
```json
{
  "removed": [
    {
      "id": "<id>",
      "type": "<type>",
      "updated": 0
    }
  ]
}
```

### Unusual options activity

- Capability: `signals/options-activity`
- Description: Unusually large or aggressive options orders, each with the contract, the size and premium, the sentiment Benzinga assigns, and where in the spread it filled. Prices and sizes arrive as strings.
- Instructions: Use for positioning: large directional bets before a catalyst. It reports orders, not outcomes, and a sweep filled at or above the ask (execution_estimate) is a stronger signal than one at the midpoint.
- Cost: 45 credits per call
- Capability file: [Unusual options activity](https://firecrawl.dev/alexandria/agents/providers/benzinga/signals/options-activity)

Accepted options:
- `parameters[tickers]` (string): Comma-separated ticker symbols, maximum 50. Example: `<parameters[tickers]>`
- `parameters[id]` (string): Benzinga id of one options-activity record. Set it to fetch a single signal you already hold the id for. Example: `<parameters[id]>`
- `parameters[date]` (string): A single date, YYYY-MM-DD. Example: `<parameters[date]>`
- `parameters[date_from]` (string): Earliest date, YYYY-MM-DD. Example: `<parameters[date_from]>`
- `parameters[date_to]` (string): Latest date, YYYY-MM-DD. Example: `<parameters[date_to]>`
- `parameters[date_sort]` (string): Date field to sort on. The only documented value is date; set it to read a period in date order. Example: `date`
- `parameters[updated]` (number): Unix timestamp. Returns records updated at or after it. Example: `10`
- `page` (number): Page offset. Example: `0`
- `pagesize` (number): Records to return, limit 1000. Example: `10`

Response schema example:
```json
{
  "option_activity": [
    {
      "id": "<id>",
      "date": "<date>",
      "time": "<time>",
      "ticker": "<ticker>",
      "exchange": "<exchange>",
      "underlying_type": "<underlying_type>",
      "underlying_price": "<underlying_price>",
      "option_symbol": "<option_symbol>",
      "put_call": "<put_call>",
      "strike_price": "<strike_price>",
      "date_expiration": "<date_expiration>",
      "option_activity_type": "<option_activity_type>",
      "sentiment": "<sentiment>",
      "aggressor_ind": "<aggressor_ind>",
      "execution_estimate": "<execution_estimate>",
      "price": "<price>",
      "bid": "<bid>",
      "ask": "<ask>",
      "midpoint": "<midpoint>",
      "size": "<size>",
      "cost_basis": "<cost_basis>",
      "trade_count": 0,
      "open_interest": "<open_interest>",
      "volume": "<volume>",
      "description": "<description>",
      "description_extended": "<description_extended>",
      "updated": 0
    }
  ]
}
```
