# Analyst Consensus Estimates

> Returns consensus EPS, EBITDA, and EBIT estimates across fiscal periods.

`GET https://api.bavest.co/v2/estimates/consensus`

Group: Estimates. Route id: `v2_estimates_consensus`. Included in: Startup, Pro, Growth.

## Description

Returns consensus EPS, EBITDA, and EBIT estimates across fiscal periods.

Estimates are on the basis the covering analysts forecast, which for most companies is adjusted (non-GAAP): one-off items such as restructuring charges, impairments or tax effects are left out. EPS and net income therefore differ from the reported figures in `/v2/equities/income-statement` and from reported-basis series of other vendors. Tesla FY2025: consensus EPS 1.66 USD, reported 1.18 USD. SAP FY2024: consensus 4.44 EUR, reported 2.68 EUR.

## Authentication

Send your API key in the `x-api-key` header on every request. No key yet? Sign up at https://dashboard.bavest.co/sign-up (free trial). The examples read the key from the `BAVEST_API_KEY` environment variable.

## Parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `symbol` | query | string | one of symbol, isin | Stock ticker symbol (e.g., `AAPL`, `MSFT`, `GOOGL`). Provide exactly one of symbol or isin. Example `AAPL`. |
| `isin` | query | string | one of symbol, isin | ISIN code (e.g., `US0378331005`). Provide exactly one of symbol or isin. Clear the symbol example before using an ISIN. |

Required: one of `symbol`, `isin`.

## Response

200 Successful response (`application/json`).

| Field | Type | Always present | Description |
|---|---|---|---|
| `data` | array of EstimatePeriod | no |  |
| `data[].date` | string (date) | no | Fiscal period end date. Same value as `fiscalYearEnd`; kept for existing clients. Do not read the year of this date as the fiscal year, use `fiscalYear`. Example: `2026-09-27`. |
| `data[].fiscalYearEnd` | string (date) | no | Last day of the fiscal year the estimates cover. Example: `2027-01-25`. |
| `data[].fiscalYear` | integer | no | Fiscal year label as FactSet prints it. A fiscal year ending in January, or in the first seven days of February (52/53-week years), carries the year it started in: NVIDIA's year ending 2027-01-25 is 2026. Every other fiscal year carries the year it ends in (Toyota's year ending 2026-03-31 is 2026). Example: `2026`. |
| `data[].currency` | string \| null | no | ISO 4217 currency of all monetary values and EPS in this row: the company's reporting currency, also on foreign listings (Toyota in JPY on Xetra and NYSE, ASML in EUR on NASDAQ). Null when no annual report is on file. Example: `USD`. |
| `data[].symbol` | string | no | Ticker symbol of the company. Example: `AAPL`. |
| `data[].estimatedEbitAvg` | number (double) \| null | no | Consensus average EBIT estimate. Example: `194822900000`. |
| `data[].estimatedEbitHigh` | number (double) \| null | no | Highest EBIT estimate among analysts. Example: `205228900000`. |
| `data[].estimatedEbitLow` | number (double) \| null | no | Lowest EBIT estimate among analysts. Example: `187009450000`. |
| `data[].estimatedEbitdaAvg` | number (double) \| null | no | Consensus average EBITDA estimate. Example: `209951540000`. |
| `data[].estimatedEbitdaHigh` | number (double) \| null | no | Highest EBITDA estimate among analysts. Example: `221165600000`. |
| `data[].estimatedEbitdaLow` | number (double) \| null | no | Lowest EBITDA estimate among analysts. Example: `201531340000`. |
| `data[].estimatedEpsAvg` | number (double) \| null | no | Consensus average EPS estimate. Example: `13.33`. |
| `data[].estimatedEpsHigh` | number (double) \| null | no | Highest EPS estimate among analysts. Example: `14.2556`. |
| `data[].estimatedEpsLow` | number (double) \| null | no | Lowest EPS estimate among analysts. Example: `12.635`. |
| `data[].estimatedNetIncomeAvg` | number (double) \| null | no | Consensus average net income estimate. Example: `200012610000`. |
| `data[].estimatedNetIncomeHigh` | number (double) \| null | no | Highest net income estimate among analysts. Example: `213900800000`. |
| `data[].estimatedNetIncomeLow` | number (double) \| null | no | Lowest net income estimate among analysts. Example: `189584490000`. |
| `data[].estimatedRevenueAvg` | number (double) \| null | no | Consensus average revenue estimate. Example: `581688000000`. |
| `data[].estimatedRevenueHigh` | number (double) \| null | no | Highest revenue estimate among analysts. Example: `612757500000`. |
| `data[].estimatedRevenueLow` | number (double) \| null | no | Lowest revenue estimate among analysts. Example: `558359200000`. |
| `data[].estimatedSgaExpenseAvg` | number (double) \| null | no | Consensus average SGA expense estimate. Example: `37438870000`. |
| `data[].estimatedSgaExpenseHigh` | number (double) \| null | no | Highest SGA expense estimate among analysts. Example: `39438578000`. |
| `data[].estimatedSgaExpenseLow` | number (double) \| null | no | Lowest SGA expense estimate among analysts. Example: `35937370000`. |
| `data[].numberAnalystsEstimatedEps` | integer \| null | no | Number of analysts providing EPS estimates. Example: `14`. |
| `data[].numberAnalystsEstimatedRevenue` | integer \| null | no | Number of analysts providing revenue estimates. |
| `meta` | ResponseMeta | no | Response envelope metadata. Always present on a 200: `time` is set by `core/response.py` on every successful response. Errors carry the same block, built by the same code, so a client parses one meta shape whether the call succeeded or failed. |
| `meta.time` | integer | no | Server-side processing time in milliseconds. Example: `17`. |
| `meta.parameters` | object | no | Echo of the request parameters the endpoint resolved. |

## Example request

```bash
curl 'https://api.bavest.co/v2/estimates/consensus?symbol=AAPL' \
  -H "x-api-key: $BAVEST_API_KEY"
```

## Example response

```json
{
  "data": [
    {
      "date": "2030-09-27",
      "symbol": "AAPL",
      "estimatedRevenueLow": 619792040000,
      "estimatedRevenueHigh": 698463300000,
      "estimatedRevenueAvg": 647707000000,
      "estimatedEbitdaLow": 235875650000,
      "estimatedEbitdaHigh": 272618100000,
      "estimatedEbitdaAvg": 248913020000,
      "estimatedEbitLow": 220967960000,
      "estimatedEbitHigh": 257710390000,
      "estimatedEbitAvg": 234005330000,
      "estimatedNetIncomeLow": 182786620000,
      "estimatedNetIncomeHigh": 213361690000,
      "estimatedNetIncomeAvg": 193635610000,
      "estimatedSgaExpenseLow": 39891337000,
      "estimatedSgaExpenseHigh": 44954812000,
      "estimatedSgaExpenseAvg": 41688015000,
      "estimatedEpsLow": 12.182,
      "estimatedEpsHigh": 14.2197,
      "estimatedEpsAvg": 12.905,
      "numberAnalystsEstimatedRevenue": null,
      "numberAnalystsEstimatedEps": 15,
      "currency": "USD",
      "fiscalYearEnd": "2030-09-27",
      "fiscalYear": 2030
    },
    {
      "date": "2029-09-27",
      "symbol": "AAPL",
      "estimatedRevenueLow": 591422900000,
      "estimatedRevenueHigh": 666493200000,
      "estimatedRevenueAvg": 618060100000,
      "estimatedEbitdaLow": 223721370000,
      "estimatedEbitdaHigh": 258569800000,
      "estimatedEbitdaAvg": 236086720000,
      "estimatedEbitLow": 209645360000,
      "estimatedEbitHigh": 244493800000,
      "estimatedEbitAvg": 222010700000,
      "estimatedNetIncomeLow": 173364580000,
      "estimatedNetIncomeHigh": 202363550000,
      "estimatedNetIncomeAvg": 183654330000,
      "estimatedSgaExpenseLow": 38065430000,
      "estimatedSgaExpenseHigh": 42897140000,
      "estimatedSgaExpenseAvg": 39779873000,
      "estimatedEpsLow": 11.554,
      "estimatedEpsHigh": 13.4867,
      "estimatedEpsAvg": 12.2398,
      "numberAnalystsEstimatedRevenue": null,
      "numberAnalystsEstimatedEps": 11,
      "currency": "USD",
      "fiscalYearEnd": "2029-09-27",
      "fiscalYear": 2029
    }
  ],
  "meta": {
    "parameters": {
      "symbol": "AAPL"
    },
    "time": 20
  }
}
```

## Errors

| Status | Meaning |
|---|---|
| 400 | Invalid request parameters. Returned when required query parameters are missing, have invalid types, or violate constraints (e.g., providing both symbol and isin when they are mutually exclusive). |
| 401 | Missing or invalid API key. |
| 404 | Resource not found. |
| 429 | Rate limit exceeded. Retry after the `Retry-After` header interval. |
| 500 | An unexpected error occurred on the server. If the issue persists, contact support with the X-Request-Id header value. |
| 502 | Upstream data provider returned an error or is temporarily unavailable. Retry after a short delay. |
| 504 | The request timed out waiting for a response from the upstream data provider. This may occur for complex queries or during peak load. |
| default | An unexpected error occurred on the server. If the issue persists, contact support with the X-Request-Id header value. |

- `403` from the gateway: the API key is invalid or switched off.
- `429` with message `Limit Exceeded`: the monthly quota of the key is used up. With `Too Many Requests`: the key is throttled, or this route is not in the key's plan. Wait for `Retry-After` when it is sent.

## Links

- HTML page: https://dashboard.bavest.co/docs/v2_estimates_consensus
- OpenAPI: https://dashboard.bavest.co/openapi.json (YAML: https://dashboard.bavest.co/openapi.yaml)
- Authentication: https://dashboard.bavest.co/docs/authentication.md
- MCP server for AI agents: https://dashboard.bavest.co/docs/mcp.md
- All routes: https://dashboard.bavest.co/llms.txt
