Analyst · US only
Rating events
- Coverage
- US
- Billing
- 20 cr / thousand calls
One row per firm rating or price target change event, ordered by date desc, published_at desc. Every row carries the firm name firm and a deep link to the source article source_url; an event missing either one is not exposed. Granularity stops at the firm, and no individual analyst names are included.
- The rating action and the price target action are two separate columns, each of which can be null: when the news mentions only a price target,
rating_actionis null; when it mentions only a rating,price_target_actionis null. rating_currentis the firm's own wording (for exampleoverweight); for cross-firm comparison, use the five-tierrating_current_normalized. That value is meaningful only for rows whererating_currentis non-null; filter onrating_currentfirst to drop rows where the news mentions only a price target, then aggregate.
Shared analyst conventions
Rating events are parsed from public press releases and news coverage — they are news-reported (secondhand), not the original text of the firms' research reports; consensus is derived from these events, aggregated by firm. Coverage is US only; tickers from other markets return 404.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | required | A single ticker. |
| from | date | optional | Start of the rating event date (date) window, inclusive of that day; to query a single day, set from = to. |
| to | date | optional | End of the rating event date window, inclusive of that day. |
| limit | int | optional | Maximum 500. Default 50. |
| page | int | optional | Starts at 1. Default 1. |
Sorted date desc, published_at desc. Paged with limit and page (pages start at 1); fewer rows than limit means the last page.
Response fields
| Field | Type | Description |
|---|---|---|
| ticker | string | Canonical ticker; this endpoint is US-only, so there is no market suffix (e.g. AAPL) |
| date | date | Rating event date (the date stated in the news article) |
| firm | string | Firm name, non-null |
| rating_action | string | Rating action: initiate / upgrade / downgrade / maintain / reiterate; null when the news reports only a price target change |
| price_target_action | string | Price target action: raise / lower / maintain / announce (first time a target is given); null when the news does not mention a price target |
| rating_current | string | The firm's own rating wording (overweight / outperform …) |
| rating_prior | string | The firm's own rating wording before the change; null for initiate |
| rating_current_normalized | string | The firm's original wording normalized to five tiers: strong_buy / buy / hold / sell / strong_sell; uses the same basis as consensus_rating in /analyst-consensus. |
| price_target_current | number | Current price target |
| price_target_prior | number | Price target before the change |
| source_name | string | Source channel identifier (yahoo_analyst / marketbeat / tickerreport …), not a media brand name |
| source_url | string | Deep link to the source article |
| published_at | datetime | News publication time (UTC) |
No key yet? Create one under API Keys — it is shown once, so store it where your shell can read it. Connecting an agent over MCP instead? That signs in through the browser and needs no key at all.
Authentication, conventions, rate limits and error shapes are the same for every endpoint — they live on REST API.