Check Whether EPS Estimates and Actuals Are Comparable With Claude and FMP
Before you use an earnings history to judge analyst forecasts, check that the estimates and actuals describe the same thing. An estimate beside an actual EPS figure can look like a ready-made comparison, even when the actuals switch accounting basis or the estimate's recording time is unclear. Averaging those differences can hide the problem rather than resolve it.
This workflow uses Claude and Financial Modeling Prep's MCP server to check EPS comparability before you assess forecast accuracy. The first prompt retrieves an annual consensus record and eight quarterly earnings events, checks completeness and maps each event to its fiscal quarter. The second compares the actual EPS with the company's GAAP and non-GAAP disclosures, checks what is known about the estimates, and produces a findings-and-actions table. You finish with a documented explanation of which comparisons are supported, which are unverified and what evidence would make a stronger analysis possible.
Microsoft (MSFT) shows what that process can uncover. Four FY2025 actuals match GAAP EPS, while three FY2026 actuals match non-GAAP EPS; another matches both. Five of the eight observations therefore share the selected GAAP actual basis. None of the returned historical estimates establishes its own accounting basis or pre-announcement recording time.
The diagnostic result is a mixed actual-EPS series with unverified estimate comparability. The next action is specific: obtain historical estimates with a documented pre-release timestamp and an EPS definition matching each actual before measuring forecast accuracy. Adding more quarters can enlarge the sample, but it cannot supply those missing definitions or timestamps.
Key takeaways
- Check fiscal periods, actual EPS basis, estimate EPS basis and estimate timing separately. Passing one check does not establish overall comparability.
- Microsoft's returned actuals switch between GAAP and non-GAAP. Five match the selected GAAP reference; three match non-GAAP only.
- The historical estimates' accounting basis and recording time are not established. None of the eight observations is verified as a like-for-like pre-release forecast comparison.
- Microsoft's FY2027 annual consensus has a 7.5% normalized high-low range across 31 analysts. That range is separate context and does not show that the quarterly history validates the annual forecast.
- The workflow ends with a concrete finding and a matching action: document the mismatch, retain the source records, and obtain the evidence needed for the intended analysis.
What the comparability check produces
The primary output is a comparability assessment rather than an earnings forecast. It distinguishes complete records from verified comparisons and links each finding to the evidence needed next. Record-level calculations help you inspect the data, while the annual consensus range remains separate context.
|
Input |
What it contains |
Interpretation limit |
|
FY2027 annual consensus |
Average, highest and lowest EPS estimates for the year ending June 30, 2027, plus analyst count |
Does not show the distribution inside the range or establish the estimates' accounting basis |
|
Quarterly earnings events |
epsEstimated and epsActual for each completed quarter |
Does not establish forecast accuracy without estimate-basis and timing evidence |
Microsoft's fiscal year ends June 30. At the retrieval date, FY2027 was the first annual period that had not ended, and the eight completed quarterly events covered FY2025 Q1 through FY2026 Q4. The annual record therefore looks ahead, while the quarterly series looks back over individual reporting events.
For a broader explanation of how ranges differ from uncertainty measures, review analyst estimate dispersion. Here, the practical task is narrower: calculate the returned range and differences while checking the comparability of the records.
Calculations
|
Measure |
Calculation |
Purpose |
|
Annual high-low range |
epsHigh − epsLow |
Distance between the highest and lowest annual estimates |
|
Normalized annual range |
(epsHigh − epsLow) ÷ absolute epsAvg × 100 |
Range relative to the consensus average |
|
Absolute quarterly difference |
Absolute value of epsActual − epsEstimated |
Size of a difference in dollars per share |
|
Normalized quarterly difference |
Absolute difference ÷ absolute epsEstimated × 100 |
Difference relative to the returned estimate |
Apply all rules to unrounded values. Round EPS and dollar differences to two decimal places and percentages to one decimal place for display. An average or estimate below $0.10 in absolute value is too small to use as a normalization denominator in this screen.
The annual range uses just the highest and lowest estimates. One outlier can widen it, and the same range can appear with very different analyst counts. Show coverage alongside the range, without treating a larger count as proof that the forecast is accurate.
Check the accounting basis before summarizing history
The earnings records used here do not label EPS as GAAP or non-GAAP, and returning an estimate and an actual in one record does not establish that they share an accounting basis. To check the actual side, compare epsActual with diluted EPS in Microsoft's earnings releases.
|
Actual-basis label |
Condition |
|
GAAP |
Returned actual matches GAAP diluted EPS as originally reported and differs from non-GAAP EPS |
|
Non-GAAP |
Returned actual matches non-GAAP diluted EPS and differs from GAAP EPS |
|
Both |
GAAP and non-GAAP EPS are equal and the returned actual matches them |
|
Not matched |
Returned actual matches neither reference figure |
Use GAAP as originally reported as the reference for this example because it exists for all eight quarters. The FY2025 non-GAAP comparatives come from Microsoft's later FY2026 releases. Selecting non-GAAP instead would leave four matching actuals, including the quarter where both figures are equal. Neither choice establishes the accounting basis of the estimates.
Record estimate basis as Not established for every quarterly observation. Matching five actuals to the GAAP reference describes the actual side only; it does not verify any estimate-actual pair as a like-for-like comparison.
What the estimate timestamps establish
The FMP Earnings Report API describes estimates available ahead of earnings announcements. The returned records do not establish a specific pre-release cutoff or EPS basis for each historical estimate, and their lastUpdated values cannot substitute for those details.
For example, the FY2026 Q4 event is dated July 29, 2026 but has lastUpdated October 23, 2026, the retrieval date, and the FY2025 Q1 event is dated October 30, 2024 but has lastUpdated April 24, 2025. Update dates like these do not tell you when the estimate was originally captured or what changed later, so these observations are described as estimate-to-actual differences, not forecast errors.
Turn each finding into an action
Complete the diagnostic even when a check finds a problem. Leave unsupported calculations unreported, identify the affected records and state what would resolve the issue. A data limitation is one of this workflow's outputs.
|
Check |
Finding to report |
Action |
|
Record completeness and period mapping |
Missing values, duplicate events or ambiguous fiscal quarters |
Resolve the named record or mapping before interpreting its difference |
|
Actual EPS basis |
GAAP, non-GAAP, Both or Not matched for each quarter |
Select a consistent actual definition and retain the issuer reconciliation |
|
Estimate EPS basis |
Documented definition or Not established |
Obtain the estimate definition and confirm it matches the chosen actual |
|
Estimate timing |
Documented pre-release timestamp and forecast horizon, or Not established |
Obtain a dated pre-announcement snapshot; do not substitute lastUpdated |
|
Normalization denominator |
Estimate below $0.10 in absolute value |
Retain the dollar difference and omit its normalized percentage |
|
Annual consensus context |
Numeric range, analyst count and unresolved basis |
Report the range separately; do not use quarterly differences to calibrate it |
The eight-quarter sample also contains only five GAAP-matched observations, below the six-observation minimum selected for a descriptive historical average. That is an additional sample limitation rather than the main diagnostic: even a larger sample would remain unsuitable for a forecast-accuracy assessment until estimate basis and timing are established. No historical average is reported here.
FMP data and Microsoft EPS references
Use three FMP datasets: Financial Estimates, Earnings Report and Income Statement. The connector operation selects the dataset within each Claude tool.
|
Connector tool and operation |
REST path |
Parameters |
Fields used |
|
analyst / financial-estimates |
/stable/analyst-estimates |
symbol=MSFT; period=annual; page=0; limit=10 |
symbol, date, epsAvg, epsHigh, epsLow, numAnalystsEps |
|
calendar / earnings-company |
/stable/earnings |
symbol=MSFT; limit=20 |
symbol, date, epsEstimated, epsActual, lastUpdated |
|
statements / income-statement |
/stable/income-statement |
symbol=MSFT; period=quarter; limit=10 |
date, fiscalYear, period, filingDate |
The annual estimate's date is its period end, so the retained date, June 30, 2027, maps to Microsoft's FY2027, and the completed FY2026 estimate record is excluded. Earnings-event dates are announcement dates instead: each retained event is matched to the quarterly statement whose filingDate has the same date, then assigned that record's fiscalYear, period and period end. For another issuer, resolve earnings-date and fiscal-quarter alignment before calculating the screen.
Diluted EPS reference figures
The reference figures below come from Microsoft's releases, separately from the FMP retrieval. The FY2025 Q1 GAAP value is in its original release; its non-GAAP comparative appears in the FY2026 Q1 reconciliation. The remaining FY2025 non-GAAP values appear in the corresponding FY2026 releases.
|
Fiscal quarter |
GAAP EPS as originally reported |
Non-GAAP EPS |
Release reference |
|
FY2025 Q1 |
$3.30 |
$3.37 |
|
|
FY2025 Q2 |
$3.23 |
$3.35 |
|
|
FY2025 Q3 |
$3.46 |
$3.54 |
|
|
FY2025 Q4 |
$3.65 |
$3.86 |
|
|
FY2026 Q1 |
$3.72 |
$4.13 |
|
|
FY2026 Q2 |
$5.16 |
$4.14 |
|
|
FY2026 Q3 |
$4.27 |
$4.27 |
|
|
FY2026 Q4 |
$4.81 |
$4.74 |
Microsoft began presenting non-GAAP EPS excluding the impact of its OpenAI investments in FY2026, with adjusted prior-year comparatives.
The quarterly income-statement dataset supplies only period mapping in this workflow. Its FY2026 Q4 diluted EPS of $4.80 differs from the release's $4.81 GAAP EPS. The returned net income divided by diluted shares, $35,766 million ÷ 7,453 million shares, rounds to $4.80, but that arithmetic does not establish the cause of the discrepancy. The screen uses the release's EPS reference figures and does not substitute the income-statement EPS into the earnings records.
All three calls were made on October 23, 2026, and the run recorded 04:18:28 UTC immediately after they completed. Consensus values, coverage and record metadata can change, so retain the dated responses when checking financial inputs supplied to an AI workflow rather than expecting later retrievals to reproduce the same snapshot.
Connect FMP to Claude
You need an active FMP API key and access to custom connectors. Follow the FMP MCP connection instructions: open Claude's Settings, select Connectors, choose Add custom connector and enter this URL with your own key:
|
https://financialmodelingprep.com/mcp?apikey=YOUR_FMP_API_KEY |
Start a new conversation after saving the connector. Use Prompt 1 to retrieve the records, review the fiscal-quarter mapping and release references, then run Prompt 2 in the same conversation.
Prompt 1: Retrieve and map the EPS records
Prompt 1 retrieves a dated snapshot and runs the checks that identify incomplete records and ambiguous fiscal periods before any calculation.
|
Objective Retrieve the FMP records for a dated snapshot of Microsoft (MSFT) EPS estimates: the FY2027 annual consensus and the eight quarterly earnings events from FY2025 Q1 to FY2026 Q4. Validate them and return the values exactly as FMP returned them. Do not calculate ranges, differences or classifications in this step. Data rules - Use the FMP connector only. Make each of these calls once: 1. analyst tool, endpoint=financial-estimates, symbol=MSFT, period=annual, page=0, limit=10 2. calendar tool, endpoint=earnings-company, symbol=MSFT, limit=20 3. statements tool, endpoint=income-statement, symbol=MSFT, period=quarter, limit=10 - Record the retrieval date and the time in UTC. If no clock is available, record the date and write "time unavailable". - Forward record: keep the annual record whose date is 2027-06-30. Take epsAvg, epsHigh, epsLow and numAnalystsEps from that record only. - Historical events: keep the records dated 2024-10-30, 2025-01-29, 2025-04-30, 2025-07-30, 2025-10-29, 2026-01-28, 2026-04-29 and 2026-07-29. Ignore any record whose epsActual is null. - Quarter mapping: match each event date to the quarterly income-statement record whose filingDate is the same date, and take fiscalYear, period and date (period end) from it. If no filingDate matches, or more than one record matches, mark the event "Mapping unresolved: missing or ambiguous match". - Keep every value at the precision FMP returned. Do not round. - If a call fails, or a required field is missing or non-numeric, repeat that call once. If the problem remains, mark the affected record "Input unavailable" and leave the value blank. Never treat a missing value as zero. Validation checks 1. The forward record's date is 2027-06-30 and is after the retrieval date. 2. epsHigh >= epsAvg >= epsLow, and numAnalystsEps is a number above 0. 3. Each of the eight event dates appears exactly once with numeric epsEstimated and epsActual. 4. Each event maps to exactly one fiscal quarter. Output Table 1. Retrieval log Columns: Item | Result Rows: Retrieval date and time | Calls made | Records returned per call | Forward record kept | Historical records kept | Records not used | Missing or non-numeric fields | Retries Table 2. FY2027 annual consensus record Columns: Field | Value as returned Rows: symbol | date | epsAvg | epsHigh | epsLow | numAnalystsEps Table 3. Quarterly earnings events and fiscal-quarter mapping Columns: Event date | Fiscal quarter | Period end | epsEstimated | epsActual | lastUpdated | Input status Oldest first. Input status = Complete only when both EPS fields are numeric, the target event occurs exactly once, and the quarter mapping is unique. Otherwise state the specific input or mapping issue. Retain a placeholder row for a missing target event. Report failed checks in Table 1 and the affected input status; do not silently drop them. Response excerpts For each retained event, give one JSON line with date, epsActual, epsEstimated and lastUpdated as returned, then one JSON line for each matched income-statement record with date, fiscalYear, period and filingDate as returned. Omit all other fields. After the tables, state in one sentence whether all four checks passed. Do not interpret the figures. |
Retrieval results
The three calls returned ten annual estimate records, twenty earnings records and ten quarterly statements. Claude kept one forward record and eight completed events, with no retries and no missing numeric fields, and reported that all four validation checks passed.
Table 1. Retrieval log
|
Item |
Result |
|
Retrieval date and time |
2026-10-23 04:18:28 UTC (container clock, read immediately after the three calls completed) |
|
Calls made |
3: analyst / financial-estimates (MSFT, annual, page 0, limit 10); calendar / earnings-company (MSFT, limit 20); statements / income-statement (MSFT, quarter, limit 10) |
|
Records returned per call |
10 annual records, 2022-06-30 to 2031-06-30; 20 earnings records, 2022-01-25 to 2026-10-28; 10 quarterly records, period ends 2024-03-31 to 2026-06-30 |
|
Forward record kept |
1: date 2027-06-30 |
|
Historical records kept |
8 earnings events (2024-10-30 to 2026-07-29); 8 matched income-statement records |
|
Records not used |
9 other annual records; 12 earnings records (the 2026-10-28 event with epsActual null, and 11 events dated 2022-01-25 to 2024-07-30); 2 income-statement records with no target event |
|
Missing or non-numeric fields |
None in kept records |
|
Retries |
0 |
Table 2. FY2027 annual consensus record
|
Field |
Value as returned |
|
symbol |
MSFT |
|
date |
2027-06-30 |
|
epsAvg |
19.74255 |
|
epsHigh |
20.49608 |
|
epsLow |
19.00911 |
|
numAnalystsEps |
31 |
Table 3. Quarterly earnings events and fiscal-quarter mapping
|
Event date |
Fiscal quarter |
Period end |
epsEstimated |
epsActual |
lastUpdated |
Input status |
|
2024-10-30 |
FY2025 Q1 |
2024-09-30 |
3.1 |
3.3 |
2025-04-24 |
Complete |
|
2025-01-29 |
FY2025 Q2 |
2024-12-31 |
3.15 |
3.23 |
2025-04-29 |
Complete |
|
2025-04-30 |
FY2025 Q3 |
2025-03-31 |
3.22 |
3.46 |
2025-07-30 |
Complete |
|
2025-07-30 |
FY2025 Q4 |
2025-06-30 |
3.37 |
3.65 |
2025-10-30 |
Complete |
|
2025-10-29 |
FY2026 Q1 |
2025-09-30 |
3.67 |
4.13 |
2026-01-29 |
Complete |
|
2026-01-28 |
FY2026 Q2 |
2025-12-31 |
3.9 |
4.14 |
2026-04-28 |
Complete |
|
2026-04-29 |
FY2026 Q3 |
2026-03-31 |
4.06 |
4.27 |
2026-07-29 |
Complete |
|
2026-07-29 |
FY2026 Q4 |
2026-06-30 |
4.24 |
4.74 |
2026-10-23 |
Complete |
All eight events contain numeric estimates and actuals, occur once in the selected set and map uniquely to a fiscal quarter. Completeness does not establish that an estimate and actual share an accounting basis.
The response excerpts below are the fields Claude returned for the retained events and their matched statement records:
|
{"date":"2024-10-30","epsActual":3.3,"epsEstimated":3.1,"lastUpdated":"2025-04-24"} {"date":"2025-01-29","epsActual":3.23,"epsEstimated":3.15,"lastUpdated":"2025-04-29"} {"date":"2025-04-30","epsActual":3.46,"epsEstimated":3.22,"lastUpdated":"2025-07-30"} {"date":"2025-07-30","epsActual":3.65,"epsEstimated":3.37,"lastUpdated":"2025-10-30"} {"date":"2025-10-29","epsActual":4.13,"epsEstimated":3.67,"lastUpdated":"2026-01-29"} {"date":"2026-01-28","epsActual":4.14,"epsEstimated":3.9,"lastUpdated":"2026-04-28"} {"date":"2026-04-29","epsActual":4.27,"epsEstimated":4.06,"lastUpdated":"2026-07-29"} {"date":"2026-07-29","epsActual":4.74,"epsEstimated":4.24,"lastUpdated":"2026-10-23"} {"date":"2024-09-30","fiscalYear":"2025","period":"Q1","filingDate":"2024-10-30"} {"date":"2024-12-31","fiscalYear":"2025","period":"Q2","filingDate":"2025-01-29"} {"date":"2025-03-31","fiscalYear":"2025","period":"Q3","filingDate":"2025-04-30"} {"date":"2025-06-30","fiscalYear":"2025","period":"Q4","filingDate":"2025-07-30"} {"date":"2025-09-30","fiscalYear":"2026","period":"Q1","filingDate":"2025-10-29"} {"date":"2025-12-31","fiscalYear":"2026","period":"Q2","filingDate":"2026-01-28"} {"date":"2026-03-31","fiscalYear":"2026","period":"Q3","filingDate":"2026-04-29"} {"date":"2026-06-30","fiscalYear":"2026","period":"Q4","filingDate":"2026-07-29"} |
Prompt 2: Diagnose comparability and specify the next action
Prompt 2 uses all three tables from Prompt 1 with the release figures below. It completes the diagnostic by identifying the issues and the action each requires, and it makes no additional FMP call.
|
Objective Using Tables 1, 2 and 3 from Prompt 1, determine what can and cannot be established about the comparability of Microsoft's EPS estimates and actuals. Calculate record-level differences for inspection and the annual consensus range as separate context. Finish with specific findings and actions that identify the evidence needed next. Do not assess forecast accuracy or predict an earnings result. Reference figures: diluted EPS from Microsoft's earnings releases Fiscal quarter | GAAP as originally reported | Non-GAAP FY2025 Q1 | 3.30 | 3.37 FY2025 Q2 | 3.23 | 3.35 FY2025 Q3 | 3.46 | 3.54 FY2025 Q4 | 3.65 | 3.86 FY2026 Q1 | 3.72 | 4.13 FY2026 Q2 | 5.16 | 4.14 FY2026 Q3 | 4.27 | 4.27 FY2026 Q4 | 4.81 | 4.74 Data rules - Use the supplied FMP tables and issuer EPS references. Do not call FMP again, invent metadata or replace a returned actual with another EPS. - Keep annual consensus and quarterly history separate. - Apply calculations to unrounded values. Display EPS and dollar differences to two decimals and percentages to one decimal. - Complete the findings table even if a record has an input problem. Leave unsupported calculations blank and identify the reason. Step 1. Record and period checks Read Table 1's validation results. Check each target event for numeric estimate and actual values, uniqueness, and a unique fiscal-quarter map. Report each missing, duplicate or unresolved item by event date. Complete does not mean comparable. Step 2. Actual-basis check For each quarter, classify epsActual: - GAAP: matches issuer GAAP diluted EPS and differs from non-GAAP. - Non-GAAP: matches issuer non-GAAP diluted EPS and differs from GAAP. - Both: the issuer figures are equal and epsActual matches both. - Not matched: matches neither; do not infer a basis. Use GAAP as originally reported as the selected reference. Count actuals matching GAAP or Both separately from actuals matching non-GAAP only. A non-GAAP figure is not inherently invalid; it differs from the selected reference for this series. Step 3. Estimate-basis and timing checks For every observation, record the estimate's stated EPS definition and pre-announcement as-of time only if supplied by a documented source. Otherwise record Not established. In these inputs, both are Not established for every quarterly estimate. lastUpdated is not evidence of a pre-release estimate cutoff. A verified forecast comparison requires a complete, uniquely mapped record, matching documented estimate/actual definitions, and a documented estimate timestamp preceding the release. Report how many observations have this evidence. Do not equate GAAP-matched actuals with verified pairs. Step 4. Inspect record-level differences For each complete, uniquely mapped record: Absolute difference = |epsActual - epsEstimated|. Normalized difference (%) = absolute difference / |epsEstimated| x 100. If |epsEstimated| < 0.10, omit the normalized percentage and retain the dollar difference. Retain the actual-basis label alongside every result. These are differences between returned records, not verified errors. Do not calculate a historical average or label forecast reliability. For context, count observations with GAAP-matched actuals and valid normalization denominators against the six-observation minimum selected for this example's descriptive summary. State that meeting this count would not establish estimate basis or timing. Step 5. Annual range as separate context If the annual fields are numeric, epsHigh >= epsAvg >= epsLow, numAnalystsEps >= 5, and |epsAvg| >= 0.10: High-low range = epsHigh - epsLow. Normalized high-low range (%) = range / |epsAvg| x 100. Otherwise report the specific field or condition preventing calculation. Illustrative range labels: Narrow <= 10%; Moderate > 10% through 20%; Wide > 20%. Coverage: Broad >= 10 analysts; Limited 5 through 9. Record annual estimate basis as Not established unless documented. Do not call the range a confidence interval, distribution or probability. Step 6. Findings and actions Always complete the diagnostic. Report separately: - The actual-basis pattern and affected quarters. - Whether estimate basis and pre-release timing are established. - Complete records, GAAP-matched actuals, and verified forecast pairs. - The sample count against the descriptive six-observation minimum. - What the annual range supports on its own. For every unresolved item, state the evidence needed and why it matters. For mixed actuals, retain issuer reconciliations and choose a consistent actual definition. For unverified estimates, obtain historical snapshots with documented pre-release timestamps and matching EPS definitions. Adding quarters cannot by itself resolve unknown estimate metadata. Output Table 4. Actual EPS basis check Columns: Fiscal quarter | Returned actual | GAAP EPS | Non-GAAP EPS | Actual match | Estimate basis | Estimate timing | Verified forecast pair Table 5. Annual consensus context Columns: Measure | Result Include period, returned average/high/low, dollar and normalized range, range label, analyst count, coverage and unresolved accounting basis. Table 6. Record-level differences Columns: Fiscal quarter | Absolute difference | Normalized difference | Actual match | Interpretation Table 7. Comparability findings and actions Columns: Check | Finding | Required action or supported use Include input checks, actual basis, estimate basis, estimate timing, verified pair count, descriptive sample size and annual context. End with a direct diagnostic finding and the evidence needed next. |
Diagnostic results
Claude first confirmed that all eight events are complete, unique and uniquely mapped, then ran the basis, timing and difference checks.
Table 4. Actual EPS basis check
|
Fiscal quarter |
Returned actual |
GAAP EPS |
Non-GAAP EPS |
Actual match |
Estimate basis |
Estimate timing |
Verified forecast pair |
|
FY2025 Q1 |
3.30 |
3.30 |
3.37 |
GAAP |
Not established |
Not established |
No |
|
FY2025 Q2 |
3.23 |
3.23 |
3.35 |
GAAP |
Not established |
Not established |
No |
|
FY2025 Q3 |
3.46 |
3.46 |
3.54 |
GAAP |
Not established |
Not established |
No |
|
FY2025 Q4 |
3.65 |
3.65 |
3.86 |
GAAP |
Not established |
Not established |
No |
|
FY2026 Q1 |
4.13 |
3.72 |
4.13 |
Non-GAAP |
Not established |
Not established |
No |
|
FY2026 Q2 |
4.14 |
5.16 |
4.14 |
Non-GAAP |
Not established |
Not established |
No |
|
FY2026 Q3 |
4.27 |
4.27 |
4.27 |
Both |
Not established |
Not established |
No |
|
FY2026 Q4 |
4.74 |
4.81 |
4.74 |
Non-GAAP |
Not established |
Not established |
No |
Five actuals match the selected GAAP reference (four GAAP, one Both), three match non-GAAP only, and none is unmatched. No observation is a verified forecast pair. In FY2026 Q2, Microsoft's GAAP EPS of $5.16 and non-GAAP EPS of $4.14 differ by $1.02 because of the OpenAI adjustment, more than four times the $0.24 estimate-to-actual difference in the FMP record, which is why the basis check comes before any reading of the differences.
Table 5. Annual consensus context
|
Measure |
Result |
|
Period |
FY2027 (fiscal year ending 2027-06-30) |
|
Returned epsAvg |
19.74255 |
|
Returned epsHigh |
20.49608 |
|
Returned epsLow |
19.00911 |
|
Preconditions |
Fields numeric; epsHigh ≥ epsAvg ≥ epsLow; numAnalystsEps ≥ 5; absolute epsAvg ≥ 0.10. All met |
|
High-low range |
1.49 (unrounded 1.48697) |
|
Normalized high-low range |
7.5% of absolute epsAvg |
|
Range label (illustrative) |
Narrow (≤ 10%) |
|
Analyst count |
31 |
|
Coverage (illustrative) |
Broad (≥ 10 analysts) |
|
Accounting basis of estimate |
Not established |
The calculation uses the unrounded returned values: 20.49608 − 19.00911 = 1.48697, divided by the 19.74255 average. The highest and lowest of 31 estimates are 7.5% apart relative to the average; the record does not show where the other estimates sit inside that range.
Table 6. Record-level differences
|
Fiscal quarter |
Absolute difference |
Normalized difference |
Actual match |
Interpretation |
|
FY2025 Q1 |
0.20 |
6.5% |
GAAP |
Difference between returned records; estimate basis and timing unknown |
|
FY2025 Q2 |
0.08 |
2.5% |
GAAP |
Difference between returned records; estimate basis and timing unknown |
|
FY2025 Q3 |
0.24 |
7.5% |
GAAP |
Difference between returned records; estimate basis and timing unknown |
|
FY2025 Q4 |
0.28 |
8.3% |
GAAP |
Difference between returned records; estimate basis and timing unknown |
|
FY2026 Q1 |
0.46 |
12.5% |
Non-GAAP |
Actual differs from selected GAAP reference; not comparable to the GAAP-matched rows |
|
FY2026 Q2 |
0.24 |
6.2% |
Non-GAAP |
Actual differs from selected GAAP reference; not comparable to the GAAP-matched rows |
|
FY2026 Q3 |
0.21 |
5.2% |
Both |
Issuer GAAP and non-GAAP equal; estimate basis and timing unknown |
|
FY2026 Q4 |
0.50 |
11.8% |
Non-GAAP |
Actual differs from selected GAAP reference; not comparable to the GAAP-matched rows |
All eight estimates are above the $0.10 denominator floor. The two largest normalized differences, FY2026 Q1 and Q4, occur on actuals that match non-GAAP rather than the selected GAAP reference. The figures help inspect the returned records, but they do not measure how far a documented pre-release forecast was from a comparable actual, and no average is calculated.
Table 7. Comparability findings and actions
|
Check |
Finding |
Required action or supported use |
|
Input checks |
8 of 8 records complete, unique and uniquely mapped |
Supports record-level inspection only; completeness does not establish comparability |
|
Actual basis |
Mixed. FY2025 Q1 to Q4 match GAAP; FY2026 Q3 matches both; FY2026 Q1, Q2 and Q4 match non-GAAP only |
Retain issuer GAAP to non-GAAP reconciliations for FY2026 Q1, Q2 and Q4 and choose one consistent actual definition. Without this, differences across the series mix two EPS definitions |
|
Estimate basis |
Not established for any quarterly or annual estimate |
Obtain documentation of the EPS definition behind FMP epsEstimated and epsAvg. A difference is only meaningful if estimate and actual share a definition |
|
Estimate timing |
Not established for any quarter; lastUpdated postdates each event (e.g., 2026-07-29 event, lastUpdated 2026-10-23) and is not a cutoff |
Obtain historical estimate snapshots with documented pre-release timestamps. A post-release estimate cannot test a forecast |
|
Verified pair count |
0 of 8 |
No forecast comparison is supported. GAAP-matched actuals are not verified pairs |
|
Descriptive sample size |
5 GAAP-matched observations with valid denominators against a 6-observation minimum. Not met |
Adding a quarter could meet the count but would not establish estimate basis or timing |
|
Annual context |
FY2027 range 1.49, 7.5% of epsAvg (Narrow), 31 analysts (Broad); basis not established |
Supports a statement about dispersion among returned FY2027 estimates at retrieval. Does not support comparison with any quarterly difference or a GAAP vs non-GAAP conclusion |
Claude's closing diagnostic: the FMP records are complete and correctly mapped, but they do not support a forecast comparison. The actual series switches from GAAP-matched to non-GAAP-matched values in three FY2026 quarters, and no estimate has a documented EPS definition or pre-release timestamp, leaving zero verified forecast pairs. The evidence needed next is Microsoft's GAAP to non-GAAP reconciliations for FY2026 Q1, Q2 and Q4, to fix one actual definition, and dated pre-release consensus snapshots with a documented EPS basis for each quarter.
What to do when the check finds a mismatch
Start by deciding which EPS definition your research needs. GAAP and non-GAAP can both be useful, but their differences must be explicit. In this example, Microsoft's OpenAI adjustments change actual EPS materially in several quarters. Preserve those reconciliations rather than treating every returned actual as the same measure or replacing figures without documenting the change.
Next, obtain the estimate-side evidence. Ask for the EPS definition and the time at which the historical estimate snapshot was recorded. Confirm that the snapshot precedes the earnings release and uses the same definition as the actual you intend to compare. If you plan to summarize observations across quarters, also specify the forecast horizon consistently. Those checks answer a different question from whether two numeric fields are present.
Adding an earlier quarter might meet the selected six-observation count for a descriptive average, but it would not establish the basis or timing of any existing estimate. The useful response to this diagnostic is therefore to resolve the missing comparability evidence before relying on a larger sample.
The annual consensus remains separate. Annual estimates are revised as quarters are reported, and their current high-low range is not calibrated by differences from quarterly estimates at unknown horizons. Microsoft's 7.5% range describes analyst estimates at the retrieval date; it is not a probability that annual EPS will land within it.
Reuse the workflow across a coverage list
For another company, change the symbol, forward period and historical event dates in Prompt 1. Supply that company's diluted GAAP and non-GAAP EPS references in Prompt 2, and confirm that each event maps uniquely to its fiscal period. A consistent actual basis alone is not enough: completeness, valid denominators, estimate definitions and pre-release timestamps still need to be checked.
Keep those checks inside your financial-data validation process. A post-earnings refresh can add the newest event and its basis check, while workflows that combine transcripts, guidance and reported results can retain the accounting-basis label with each record.
For Microsoft, the next quarterly update should repeat the release comparison before adding a new actual to the series. The diagnostic gives you a concrete decision: use the current figures for descriptive context, and obtain matching, dated estimate snapshots before treating their differences as evidence of forecast accuracy.

Financial APIs, Claude MCP, and AI-driven research workflows
Pranjal Saxena writes technical content focused on financial data APIs, Claude MCP workflows, AI-driven research systems, and Python-based market analysis. For FMP, his work centers on turning structured financial data into practical, workflow-driven content for developers, analysts, and fintech teams. He combines experience in data science, NLP, generative AI, and financial API workflows to show how APIs, automation, and AI-assisted systems can support modern financial research and analysis.
Financial data for every need
Real-time quotes and 30+ years of historical data, including prices, fundamentals, and insider transactions — all accessible via API.
Create Free Account