This endpoint provides data for the Earnings & Estimates section of the Analysis module and supports derived analytics, including surprises, estimate revisions, and earnings/revenue history.
Asset Type Compatibility
- Stocks: Fully supported and are the primary intended use case for this endpoint.
- ETFs and Mutual Funds: The request can be executed via the unified symbol universe, but may return an empty result depending on data availability and asset nature.
When to Use This Endpoint
- Populate the Earnings & Estimates section of the Analysis module with historical and forward-looking earnings data.
- Power earnings-focused dashboards and widgets that require EPS actuals, revenue history, estimate consensus, trends, revisions, and growth metrics.
- Support derived analytics such as earnings surprises, estimate revision tracking, and benchmark-relative growth comparisons.
- Feed downstream analytics pipelines that need comprehensive earnings data without multiple separate calls.
Request Parameters
v1/analysis/earnings
Asset identifier (ticker symbol).
List of analysis record types to return.
Supported values:
eps_actualearnings_revenueearningsrevenueeps_trendeps_revisionsgrowth
All parameters are of type string and are optional. If none are provided, all supported types are returned.
You can request any subset of types. Returned records will contain a type field, allowing you to mix types in a single response safely.
Example:
"types": [
"eps_actual",
"earnings_revenue"
]Accounting methodologies to filter earnings data.
GAAP: Official earnings calculated according to Generally Accepted Accounting Principles.normalized: Adjusted earnings, excluding one-time or non-recurring items.
Example:
"methodologies": ["normalized", "gaap"]Tickers or indices to include in growth estimates comparisons.
Note that S&P 500 is always included by default and does not need to be specified.
Example:
"comparison_symbols": ["NDAQ", "DOW"],Date range filter (YYYY-MM-DD).
Date range filter (YYYY-MM-DD).
Maximum number of items to return (user-defined).
Pagination offset (0-based).
Optional filter expressions.
Each filter condition is defined as: [field, operator, value]. Conditions can be combined using logical operators and/or.
Supported operators:
Numeric fields:
>- greater than>=- greater than or equal<- less than<=- less than or equal=- equals<>- not equal
String fields:
like– pattern match (requires % as a wildcard)not_like- pattern does not match (requires % as a wildcard)contains- value exists in stringnot_contains- value does not exist in stringstartswith- string starts with valueendswith- string ends with value
% usage examples:
- %abc% - matches any string containing "abc"
- abc% - matches any string starting with "abc"
- %abc - matches any string ending with "abc"
Example:
"filters": [
[
"actual",
"=",
1.57
],
"and",
[
"surprise_pct",
"<>",
4.52
]
]Optional sorting configuration for result items. Each sorting setup is defined as [selector, desc]:
selector- Metric used for sorting (e.g., date).desc- Sorting direction (true for descending, false for ascending).
Sortings can be combined using ,.
Example:
"sort_by": [
{
"selector": "date",
"desc": true
}
]User-defined identifier for the task (max 255 characters).
It is returned in the response data object, allowing you to match results with the corresponding request. It does not affect API processing or filtering logic.
curl --location "https://api.finimpulse.com/v1/analysis/earnings" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer <API_TOKEN>" \
-d '{
"symbol": "AAPL",
"start_date": "2025-01-01",
"end_date": "2026-01-30",
"limit": 5,
"offset": 0,
"tag": "just tag"
}'
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var client = new HttpClient();
var url = "https://api.finimpulse.com/v1/analysis/earnings";
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "<API_TOKEN>");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var json = @"{
""symbol"": ""AAPL"",
""start_date"": ""2025-01-01"",
""end_date"": ""2026-01-30"",
""limit"": 5,
""offset"": 0,
""tag"": ""just tag""
}";
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.finimpulse.com/v1/analysis/earnings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Authorization: Bearer <API_TOKEN>"
],
CURLOPT_POSTFIELDS => json_encode(
[
"symbol" => "AAPL",
"start_date" => "2025-01-01",
"end_date" => "2026-01-30",
"limit" => 5,
"offset" => 0,
"tag" => "just tag"
]
)
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import urllib.request
import json
url = "https://api.finimpulse.com/v1/analysis/earnings"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer <API_TOKEN>"
}
data = {
"symbol": "AAPL",
"start_date": "2025-01-01",
"end_date": "2026-01-30",
"limit": 5,
"offset": 0,
"tag": "just tag"
}
req = urllib.request.Request(url,
data=json.dumps(data).encode("utf-8"),
headers=headers,
method="POST")
with urllib.request.urlopen(req) as response:
result = json.loads(response.read().decode("utf-8"))
print(result)
const https = require('https');
const data = JSON.stringify({
"symbol": "AAPL",
"start_date": "2025-01-01",
"end_date": "2026-01-30",
"limit": 5,
"offset": 0,
"tag": "just tag"
});
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer <API_TOKEN>',
'Content-Length': Buffer.byteLength(data)
}
};
const req = https.request('https://api.finimpulse.com/v1/analysis/earnings', options, (res) => {
let body = '';
res.on('data', chunk => body += chunk);
res.on('end', () => console.log(JSON.stringify(JSON.parse(body), null, 2)));
});
req.on('error', (e) => console.error(e));
req.write(data);
req.end();
Response
The response contains metafields and a list of earnings records. The fields within each record may vary depending on its type.
Meta Fields
Asset identifier (ticker symbol).
Price target.
Average price target.
Lowest price target.
Highest price target.
Total number of matching records available.
Number of records returned in the current response.
Array of earnings records.
EPS Actual
Record type ("eps_actual" expected).
Record date (YYYY-MM-DD).
Date granularity (quarter/year).
Indicates the accounting basis used for calculation (normalized / GAAP).
EPS actual.
EPS estimate.
EPS surprise.
Surprise percentage.
Earnings vs. Revenue
Record type ("earnings_revenue" expected).
Record date (YYYY-MM-DD).
Date granularity (quarter/year).
Indicates the accounting basis used for calculation (normalized / GAAP).
Total revenue for the period.
Total earnings for the period.
Earnings
Record type ("earnings" expected).
Record date (YYYY-MM-DD).
Date granularity (quarter/year).
Number of analysts contributing to the estimate.
Average EPS estimate.
Low EPS estimate.
High EPS estimate.
EPS from the comparable prior-year period (null if not available).
Comparable prior-year revenue (not used for EPS estimates; may be null).
Growth value for the period.
Revenue
Record type ("revenue" expected).
Record date (YYYY-MM-DD).
Date granularity (quarter/year).
Number of analysts contributing to the estimate.
Average revenue estimate.
Low revenue estimate.
High revenue estimate.
Comparable prior-year EPS (not used for revenue estimates; may be null).
Revenue from the comparable prior-year period (null if not available).
Growth value for the period.
EPS Trend
Record type ("eps_trend" expected).
Record date (YYYY-MM-DD).
Date granularity (quarter/year).
EPS value as of the record date.
EPS estimate 7 days ago.
EPS estimate 30 days ago.
EPS estimate 60 days ago.
EPS estimate 90 days ago.
EPS Revisions
Record type ("eps_revisions" expected).
Record date (YYYY-MM-DD).
Date granularity (quarter/year).
Number of upward revisions in last 7 days.
Number of upward revisions in last 30 days.
Number of downward revisions in last 7 days.
Number of downward revisions in last 30 days.
Growth
Record type ("growth" expected).
Record date (YYYY-MM-DD).
Date granularity (quarter/year).
Growth value.
Benchmark growth value (null if not available).
Benchmark symbol identifier (if available).
{
"task_id": "2a40aeee-8e92-43bf-8ba1-70d9b8e124c4",
"status_code": 20000,
"status_message": "OK",
"cost": 0,
"data": {
"symbol": "AAPL",
"limit": 5,
"offset": 0,
"filters": [
[
"actual",
"=",
1.57
],
"and",
[
"surprise_pct",
"<>",
4.52
]
],
"start_date": "2025-01-01",
"end_date": "2026-01-30",
"sort_by": [
{
"selector": "date",
"desc": true
}
],
"types": [
"eps_actual",
"earnings_revenue"
],
"methodologies": [
"normalized",
"gaap"
]
},
"result": {
"symbol": "AAPL",
"target_price": 264.72,
"target_average_price": 293.06952,
"target_low_price": 205,
"target_high_price": 350,
"total_count": 4,
"items_count": 4,
"items": [
{
"type": "eps_actual",
"date": "2025-04-01",
"date_type": "quarter",
"methodology": "normalized",
"actual": 1.57,
"estimate": 1.42572,
"surprise": 0.14428,
"surprise_pct": 10.12
},
{
"type": "earnings_revenue",
"date": "2025-04-01",
"date_type": "quarter",
"methodology": "normalized",
"revenue": 94036000000,
"earnings": 23434000000
},
{
"type": "eps_actual",
"date": "2025-04-01",
"date_type": "quarter",
"methodology": "gaap",
"actual": 1.57,
"estimate": 1.42572,
"surprise": 0.14428,
"surprise_pct": 10.12
},
{
"type": "earnings_revenue",
"date": "2025-04-01",
"date_type": "quarter",
"methodology": "gaap",
"revenue": 94036000000,
"earnings": 23434000000
}
]
}
}Notes
- The result set may include records of the same type with different date_type values (quarter and annual). Filter or group data based on date_type.
- Percent values are returned as fractions (e.g., 0.69359 = 69.359%).
