Overview
Income Statement works by projecting the income section of normalized SEC EDGAR filings (10-Q and 10-K) for US public companies. On top of the filed line items it derives profitability margins and year-over-year revenue, net income and EPS growth, so you get a decision-ready P&L rather than raw XBRL. Data is refreshed continuously from official SEC filings.
Live Test Income Statement Grounding Data Source →
The tool
Once your client is connected to the VerveContext server, this appears in its tool list as IncomeStatementGroundingData. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "IncomeStatementGroundingData",
"arguments": {
"ticker": "AAPL"
}
}You do not name the tool yourself; the model picks it. Asking about AAPL in the terms this source covers is enough for it to reach for IncomeStatementGroundingData on its own — naming it explicitly also works, and is the way to force the call.
Connecting
One server URL covers every source in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervecontext": {
"url": "https://api.vervecontext.com/v1/mcp"
}
}
}https://api.vervecontext.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
tickerRequired | string | Stock ticker symbol (e.g. AAPL, MSFT, ADBE) length 1–6 |
yearOptionalPremium | integer | Fiscal year to retrieve. Defaults to latest available. History covers only the quarters captured so far; a missing period answers 404 listing the available ones. range 2000–2030 |
quarterOptionalPremium | integer | Fiscal quarter to retrieve. Defaults to latest available. range 1–4 |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"ticker": "AAPL",
"company": "Apple Inc.",
"cik": "0000320193",
"fiscalYear": 2026,
"fiscalQuarter": 3,
"filingType": "10-Q",
"filingDate": "2026-07-31",
"periodEnd": "2026-06-27",
"income": {
"revenue": 109417000000,
"costOfRevenue": 54647000000,
"grossProfit": 54770000000,
"operatingIncome": 35695000000,
"netIncome": 29789000000,
"eps": 2.02,
"epsBasic": 2.03,
"sharesOutstanding": 14714676000,
"sharesOutstandingBasic": 14656110000,
"researchAndDevelopment": 11729000000,
"sellingAndMarketing": 5034000000,
"sellingGeneralAndAdmin": 7346000000,
"generalAndAdmin": 2312000000,
"interestExpense": null,
"incomeTax": 6478000000,
"depreciation": 9973000000,
"stockBasedCompensation": 10523000000
},
"margins": {
"grossMargin": 50.06,
"operatingMargin": 32.62,
"netMargin": 27.23,
"effectiveTaxRate": 18.15
},
"growth": {
"revenueYoY": null,
"netIncomeYoY": null,
"epsYoY": null
},
"formatted": {
"revenue": "$109.42B",
"grossProfit": "$54.77B",
"operatingIncome": "$35.70B",
"netIncome": "$29.79B"
}
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
ticker | string | AAPL | Stock ticker symbol for the company |
company | string | Apple Inc. | Official registered name of the company |
cik | string | 0000320193 | SEC Central Index Key unique identifier |
fiscalYear | number | 2026 | Fiscal year of the reporting period |
fiscalQuarter | number | 3 | Fiscal quarter number (1-4) |
filingTypePremium | string | 10-Q | SEC filing type (10-Q, 10-K) |
filingDate | string | 2026-07-31 | Date the SEC filing was submitted |
periodEnd | string | 2026-06-27 | End date of the reporting period |
income | object | {…} | |
income.revenuePremium | number | 109417000000 | Total revenue for the period |
income.costOfRevenue | number | 54647000000 | Direct costs of producing goods sold |
income.grossProfit | number | 54770000000 | Revenue minus cost of revenue |
income.operatingIncome | number | 35695000000 | Income from normal business operations |
income.netIncomePremium | number | 29789000000 | Bottom-line profit after all expenses |
income.epsPremium | number | 2.02 | Diluted earnings per share |
income.epsBasic | number | 2.03 | Basic earnings per share |
income.sharesOutstandingPremium | number | 14714676000 | Diluted weighted-average shares outstanding |
income.sharesOutstandingBasic | number | 14656110000 | Basic weighted-average shares outstanding |
income.researchAndDevelopment | number | 11729000000 | Research and development expenses |
income.sellingAndMarketing | number | 5034000000 | Sales and marketing operational expenses |
income.sellingGeneralAndAdmin | number | 7346000000 | Selling, general and administrative expenses |
income.generalAndAdmin | number | 2312000000 | General and administrative expenses |
income.interestExpense | object | null | Interest expense on debt obligations |
income.incomeTax | number | 6478000000 | Income tax expense for the period |
income.depreciation | number | 9973000000 | Depreciation and amortization |
income.stockBasedCompensation | number | 10523000000 | Stock-based employee compensation expense |
margins | object | {…} | |
margins.grossMarginPremium | number | 50.06 | Gross profit as a percentage of revenue |
margins.operatingMarginPremium | number | 32.62 | Operating income as a percentage of revenue |
margins.netMarginPremium | number | 27.23 | Net income as a percentage of revenue |
margins.effectiveTaxRatePremium | number | 18.15 | Income tax as a percentage of pre-tax income |
growth | object | {…} | |
growth.revenueYoYPremium | object | null | Revenue growth versus the same period last year (percent) |
growth.netIncomeYoYPremium | object | null | Net income growth versus the same period last year (percent) |
growth.epsYoYPremium | object | null | EPS growth versus the same period last year (percent) |
formatted | object | {…} | |
formatted.revenuePremium | string | $109.42B | Revenue formatted with a T/B/M suffix |
formatted.grossProfitPremium | string | $54.77B | Gross profit formatted with a T/B/M suffix |
formatted.operatingIncomePremium | string | $35.70B | Operating income formatted with a T/B/M suffix |
formatted.netIncomePremium | string | $29.79B | Net income formatted with a T/B/M suffix |
Why ground on it
A model can produce something that looks like this answer from its training data, and be confidently out of date or simply wrong. This source returns the current value in a shape you can check, which is the difference between an answer you can cite and one you have to hedge.
Point an evaluation at company: it is the field most worth pinning a claim to, and it is either present and current or absent — never plausibly invented.
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This source is not part of VerveContext. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 6 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- R&D Spend Benchmarking
- When tracking competitive software development, corporate strategists benchmark reported research and development expenses against operating profit across recent quarters.
- Procurement Risk Assessment
- Before signing multiyear enterprise contracts, procurement officers check supplier gross profit, operating income, and interest expense to verify fiscal stability.
- Earnings Season Summaries
- Financial news websites auto-generate quarterly earnings recaps by comparing basic earnings per share, gross profit, and operating income as SEC filings drop.
- M&A Valuation Models
- To assess potential corporate buyouts, dealmakers pull operating income, depreciation, and stock-based compensation to build standardized enterprise valuation multiples.
Other ways to use Income Statement Grounding Data
Set up Income Statement Grounding Data on VerveContext, or reach the same source a different way. Your VerveContext account and credits work on all of them — one key, one balance.
Related
More in Finance: