How to Measure Stock-Based Compensation Dilution
Measure stock-based compensation dilution from 10-K footnotes: RSU overhang, unrecognized compensation cost, net share settlement, and buyback offsets.

Meta's 2025 cash flow statement added back $20.4 billion of stock-based compensation as a non-cash expense. The same statement shows Meta paid $18.4 billion in taxes for employees whose restricted stock units (RSUs) vested, and $26.2 billion to repurchase its own stock. Its statement of stockholders' equity shows what that $44.6 billion bought: Meta issued 63 million shares, withheld 27 million to cover the taxes, repurchased 40 million, and ended the year with 2,530 million shares outstanding, 4 million fewer than it started with.
That is stock-based compensation dilution in one company-year. The expense is one number, the new shares are another, and the cash it takes to keep the share count from growing is a third. All three are in the 10-K, and they rarely agree. Below: what each one measures, how to read the RSU roll-forward in the stock compensation footnote, why net share settlement works like a buyback, whether buybacks offset dilution at six of the largest US companies, how much dilution is already granted but unvested, and a short script that computes all of it from /api/footnotes/stock-compensation and the financial statements.
Stock-based compensation dilution: three numbers, three different costs
- The expense. Under ASC 718, an equity-classified award such as an RSU is measured at its fair value on the grant date and recognized over the vesting period. It is not remeasured later unless the award is modified. Because no cash leaves the company, the cash flow statement adds it back, so it does not reduce operating cash flow or free cash flow.
- The dilution. When an RSU vests, the company delivers shares. Existing shareholders now own a smaller slice of the same company. Gross dilution is the number of shares that vested; net dilution is what remains after shares withheld for taxes and shares bought back.
- The cash. Keeping the share count flat means taking those shares back at market prices, either by withholding them at vesting or by repurchasing them later. That cost tracks the share price at vesting, not the grant-date value the expense is built on.
The gap between the last two is measurable, because the stock compensation footnote reports both values for the same shares: the RSUs that vested, their weighted-average grant-date fair value, and their total fair value on the vesting dates.
NVIDIA's RSUs that vested in fiscal 2026, the year ended January 25, 2026, had a grant-date value of $5.7 billion and were worth $22.2 billion when they vested, 3.88x as much. Meta's came to $19.7 billion and $43.1 billion (2.19x). At Microsoft, the lowest of the six, the ratio was 1.36x. The ratio follows the share price, not the accounting. In 2022, when Meta's stock fell, the RSUs that vested had a grant-date value of $11.8 billion and were worth $9.4 billion at vesting (0.80x). In both directions, the expense on the income statement stays anchored to the grant date.
The RSU roll-forward in the 10-K stock compensation footnote
Companies that grant RSUs disclose a roll-forward in the stock compensation note of the 10-K: the unvested balance at the start of the year, the units granted, vested, and forfeited during it, and the balance at the end, each with a weighted-average grant-date fair value. Here is Meta's, latest fiscal year:
curl "https://api.stockfit.io/v1/api/footnotes/stock-compensation?symbol=META&period=annual&limit=1" \
-H "Authorization: Bearer $STOCKFIT_API_KEY"[
{
"period": "2025-12-31",
"fiscalYear": 2025,
"fiscalPeriod": "FY",
"awards": [
{
"member": "us-gaap:RestrictedStockUnitsRSUMember",
"name": "Restricted Stock Units RSU",
"currency": "USD",
"rollForward": {
"granted": {
"shares": 69666000,
"waGrantDateFairValue": 661.57
},
"vested": {
"shares": 61906000,
"waGrantDateFairValue": 317.68,
"totalFairValue": 43110000000
},
"forfeited": {
"shares": 14840000,
"waGrantDateFairValue": 379.82
},
"nonvested": {
"shares": 115552000,
"waGrantDateFairValue": 500.68
},
"reconciles": true
}
}
],
"planTotals": {
"currency": "USD",
"expense": 20427000000,
"unrecognizedCost": 54810000000,
"taxWithholdingPaid": 18400000000
},
"dateFiled": "2026-07-30"
}
]The roll-forward is an identity. Meta started 2025 with 122,632,000 unvested RSUs, granted 69,666,000, saw 61,906,000 vest and 14,840,000 forfeit, and ended with 122,632,000 + 69,666,000 - 61,906,000 - 14,840,000 = 115,552,000. The endpoint checks that at read time and sets reconciles: true when it ties within 0.5%; values are served as filed either way. All six companies in this post tie exactly for their latest fiscal year. The fields:
| Field | What it is |
|---|---|
| rollForward.granted | RSUs granted in the fiscal year, with their weighted-average grant-date fair value per share. Granted over shares outstanding is the burn rate. |
| rollForward.vested | RSUs that vested: the share count, their weighted-average grant-date fair value, and totalFairValue, what they were worth on the vesting dates. |
| rollForward.forfeited | RSUs cancelled before vesting, usually because the employee left. |
| rollForward.nonvested | Unvested RSUs at fiscal year end: the overhang, dilution already granted but not yet issued. |
| rollForward.reconciles | true when the prior year-end balance plus granted minus vested minus forfeited equals this year-end balance within 0.5%. Present only when every leg is known. |
| expense | Share-based compensation expense from the footnote (us-gaap:AllocatedShareBasedCompensationExpense). |
| unrecognizedCost | Compensation cost for unvested awards not yet expensed, the future expense already committed. |
| taxWithholdingPaid | Cash paid to tax authorities on behalf of employees when awards were net share settled. |
| awards / planTotals | Values tagged on an award member (RSUs, options, a named plan) sit in awards; values tagged without one sit in planTotals. They overlap: never add them. |
| dateFiled | Filing date of the newest filing that contributed any value for the period. |
Divide RSUs granted by basic weighted-average shares and you have the burn rate: Meta granted 69.7 million RSUs in 2025 against 2,521 million basic shares, 2.76%. This is the plan-level view of compensation. What the named executives were paid, from the proxy statement, is a separate disclosure, covered in our post on the executive compensation API.
Why SEC's free XBRL API cannot return this
Meta tags its roll-forward with a member on us-gaap:AwardTypeAxis, the restricted stock units member. SEC's EDGAR API documentation says its XBRL APIs aggregate facts that "apply to the entire filing entity," so a fact with a dimension is left out. Ask the companyconcept API for Meta's vest-date fair value and you get 5 entries, the newest annual one for 2013 ($1.55 billion), and nothing after a 2014 quarter. The $43.11 billion for 2025 is in the 10-K, on the dimension. It is the same trap behind Level 3 assets by company, where SEC's API returns a fair value total without the levels.
/api/footnotes/stock-compensation and /api/footnotes/buybacks are on the Professional plan ($99/mo, $69/mo billed annually). The cash flow and income statement lines used in the rest of this post are on every plan; the Free plan returns the latest fiscal year, and the multi-year views need a paid plan.
Net share settlement: the buyback inside every vesting
When RSUs are net share settled, the company keeps enough of the vesting shares to cover the employee's tax withholding, delivers the rest, and pays the withheld amount to the tax authorities in cash. The withheld shares are never issued, so the share count ends up exactly where it would be if the company had issued all of them and bought the withheld part back at the vesting-date price. The cash appears in financing activities, alongside buybacks, and the API returns it as taxWithholdingShareBasedComp on /api/financials/cash-flow-statement, with the accession number of the 10-K it came from.
| Meta | SBC expense | RSUs vested, value at vesting | Tax withholding | Buybacks | Withholding share |
|---|---|---|---|---|---|
| 2021 | $9.2 billion | $14.4 billion | $5.5 billion | $44.5 billion | 11.0% |
| 2022 | $12.0 billion | $9.4 billion | $3.6 billion | $28.0 billion | 11.4% |
| 2023 | $14.0 billion | $17.5 billion | $7.0 billion | $19.8 billion | 26.2% |
| 2024 | $16.7 billion | $33.1 billion | $13.8 billion | $30.1 billion | 31.4% |
| 2025 | $20.4 billion | $43.1 billion | $18.4 billion | $26.2 billion | 41.2% |
Meta's withholding payments grew from $3.6 billion in 2022 to $18.4 billion in 2025, more than five times, as the vest-date value of its RSUs rose from $9.4 billion to $43.1 billion. Their share of the cash Meta spent taking shares back went from 11.0% in 2021 to 41.2% in 2025. Together, the two lines came to $44.6 billion in 2025, 97% of Meta's $46.1 billion of free cash flow, and its year-end share count fell by 4 million.
NVIDIA paid more in withholding than it recognized in expense: $7.9 billion against $6.4 billion of stock-based compensation in fiscal 2026. Its statement of stockholders' equity in the fiscal 2026 10-K (accession 0001045810-26-000021) lists 160 million shares issued, 51 million withheld for $7.9 billion, and 282 million repurchased for $40.4 billion. The count fell from 24,477 million to 24,304 million, 0.7%. Across the four companies here that report the withholding line, it equaled 34% to 43% of the vest-date value of the RSUs that vested.
Do buybacks offset dilution? Six companies, three fiscal years
The test is the share count itself. Here is the change in basic weighted-average shares over each company's last three fiscal years, from /api/financials/income-statement:
| Company | Buybacks | SBC expense | Tax withholding | Basic shares |
|---|---|---|---|---|
| Apple FY2023 to FY2025 | $263.2 billion | $35.4 billion | $16.8 billion | -7.8% vs FY2022 |
| Alphabet FY2023 to FY2025 | $169.4 billion | $70.2 billion | not reported | -7.2% vs FY2022 |
| Meta FY2023 to FY2025 | $76.1 billion | $51.1 billion | $39.2 billion | -6.2% vs FY2022 |
| NVIDIA FY2024 to FY2026 | $83.3 billion | $14.7 billion | $17.7 billion | -2.1% vs FY2023 |
| Microsoft FY2024 to FY2026 | $57.9 billion | $35.1 billion | $16.3 billion | -0.2% vs FY2023 |
| Amazon FY2023 to FY2025 | none | $65.5 billion | not reported | +4.6% vs FY2022 |
Buybacks, expense, and withholding are summed over the three fiscal years shown. Basic shares compare the latest fiscal year's weighted average with the base year's. Cash flow lines from /api/financials/cash-flow-statement, each with its 10-K accession number.
Apple spent $263.2 billion on buybacks over fiscal 2023 to 2025 and its basic share count fell 7.8%. Alphabet spent $169.4 billion and its count fell 7.2%. Microsoft spent $57.9 billion, 1.65x its stock-based compensation expense over the same years, plus $16.3 billion in withholding, and its count fell 0.2%. Amazon's 10-K reports no repurchases in 2023, 2024, or 2025, and its basic share count rose 4.6%.
Buyback dollars do not convert into share reduction at a fixed rate. Shares go out at vesting and come back at market prices, so the same dollar retires fewer shares as the stock rises: NVIDIA spent $83.3 billion on buybacks over three years, 5.68x its expense, and its basic share count fell 2.1%. A headline buyback number says how much cash went out. Only the share count says whether it beat the issuance.
One choice to make consistently: basic weighted-average shares smooth the timing within a year, while the period-end count on the equity statement moves faster. Meta's weighted average fell 0.51% in 2025; its year-end count fell 0.16%.
RSU overhang and unrecognized compensation cost: dilution already granted
The nonvested balance is dilution that has been promised but not delivered. Divided by shares outstanding, it is the overhang. The unrecognized compensation cost is the same awards in dollars: grant-date value that will flow through the income statement as the awards vest, whatever new grants come on top.
| Company | Unvested RSUs | Overhang | Burn rate | Unrecognized cost | Years of expense |
|---|---|---|---|---|---|
| Meta FY2025 | 115.6 million | 4.58% | 2.76% | $54.8 billion | 2.7 |
| Alphabet FY2025 | 282 million | 2.33% | 1.63% | $42.9 billion | 1.7 |
| Amazon FY2025 | 222.5 million | 2.09% | 1.06% | $16.9 billion | 0.9 |
| Microsoft FY2026 | 78 million | 1.05% | 0.55% | $24.8 billion | 2.0 |
| Apple FY2025 | 151.6 million | 1.01% | 0.49% | $21.8 billion | 1.7 |
| NVIDIA FY2026 | 189 million | 0.78% | 0.29% | $14.8 billion | 2.3 |
Overhang is unvested RSUs and burn rate is RSUs granted, each over basic weighted-average shares for the fiscal year. Years of expense is unrecognized cost over that year's stock-based compensation expense. Source: /api/footnotes/stock-compensation and /api/financials/income-statement, as of the latest 10-K.
Meta's 115.6 million unvested RSUs equal 4.58% of its basic shares, the highest of the six, and its $54.8 billion of unrecognized cost is 2.7 years of its 2025 expense before a single new grant. Its 2025 10-K states it directly: "unrecognized share-based compensation expense related to RSU awards was $54.81 billion, which is expected to be recognized over a weighted-average period of approximately three years." NVIDIA's 189 million unvested RSUs are only 0.78% of its share count, and Amazon's unrecognized cost of $16.9 billion is less than one year of its $19.5 billion expense. Neither figure is a forecast: forfeitures will cancel some of the overhang and new grants will add to it. Both say how much dilution is already locked in.
Calculate stock-based compensation dilution with the API
Three calls per company: the stock compensation footnote, the cash flow statement, and the income statement. In about 40 lines of JavaScript (Node 18 or later, saved as dilution.mjs):
const BASE = 'https://api.stockfit.io/v1/api';
const headers = { Authorization: `Bearer ${process.env.STOCKFIT_API_KEY}` };
async function get(path) {
const res = await fetch(`${BASE}${path}`, { headers });
if (!res.ok) {
throw new Error(`${res.status} for ${path}`);
}
return res.json();
}
// A filer can tag each roll-forward leg on its RSU award or without a dimension.
// Read the award with the largest nonvested balance first, then fall back to planTotals.
function rsu(entry, path) {
const nonvested = a => a.rollForward?.nonvested?.shares ?? 0;
const award = [...entry.awards].sort((a, b) => nonvested(b) - nonvested(a))[0];
const read = obj => path.split('.').reduce((o, key) => o?.[key], obj);
return read(award) ?? read(entry.planTotals);
}
const bn = usd => (usd == null ? 'n/a' : `$${(usd / 1e9).toFixed(1)}B`);
const pct = x => `${(x * 100).toFixed(2)}%`;
for (const symbol of ['AAPL', 'MSFT', 'GOOGL', 'META', 'AMZN', 'NVDA']) {
const [sbc] = await get(`/footnotes/stock-compensation?symbol=${symbol}&period=annual&limit=1`);
const [cf] = await get(`/financials/cash-flow-statement?symbol=${symbol}&period=annual&limit=1`);
const [inc, prior] = await get(`/financials/income-statement?symbol=${symbol}&period=annual&limit=2`);
// Statement periods are snapped keys, footnote periods are real end dates: join on fiscalYear.
if (sbc.fiscalYear !== cf.fiscalYear || sbc.fiscalYear !== inc.fiscalYear) {
throw new Error(`${symbol}: fiscal years differ`);
}
const shares = inc.facts.weightedAverageSharesOutstanding;
const atGrant = rsu(sbc, 'rollForward.vested.shares') * rsu(sbc, 'rollForward.vested.waGrantDateFairValue');
const atVesting = rsu(sbc, 'rollForward.vested.totalFairValue');
const accession = Object.keys(cf.sources).find(a => 'stockBasedCompensation' in cf.sources[a].facts);
console.log(`${symbol} FY${sbc.fiscalYear} (ended ${sbc.period}, 10-K ${accession})`);
console.log(` SBC expense ${bn(cf.facts.stockBasedCompensation)}; vested RSUs ${bn(atGrant)} at grant, ${bn(atVesting)} at vesting (${(atVesting / atGrant).toFixed(2)}x)`);
console.log(` tax withholding ${bn(cf.facts.taxWithholdingShareBasedComp)}, buybacks ${bn(cf.facts.commonStockRepurchased)}`);
console.log(` burn rate ${pct(rsu(sbc, 'rollForward.granted.shares') / shares)}, overhang ${pct(rsu(sbc, 'rollForward.nonvested.shares') / shares)}`);
console.log(` unrecognized cost ${bn(rsu(sbc, 'unrecognizedCost'))}, basic shares ${pct(shares / prior.facts.weightedAverageSharesOutstanding - 1)} YoY`);
}Run against the live API, it prints:
AAPL FY2025 (ended 2025-09-27, 10-K 0000320193-25-000079)
SBC expense $12.9B; vested RSUs $12.3B at grant, $17.1B at vesting (1.39x)
tax withholding $6.0B, buybacks $90.7B
burn rate 0.49%, overhang 1.01%
unrecognized cost $21.8B, basic shares -2.58% YoY
MSFT FY2026 (ended 2026-06-30, 10-K 0001193125-26-323660)
SBC expense $12.4B; vested RSUs $12.0B at grant, $16.3B at vesting (1.36x)
tax withholding $5.6B, buybacks $22.3B
burn rate 0.55%, overhang 1.05%
unrecognized cost $24.8B, basic shares -0.05% YoY
GOOGL FY2025 (ended 2025-12-31, 10-K 0001652044-26-000018)
SBC expense $25.0B; vested RSUs $24.2B at grant, $39.7B at vesting (1.64x)
tax withholding n/a, buybacks $45.7B
burn rate 1.63%, overhang 2.33%
unrecognized cost $42.9B, basic shares -1.65% YoY
META FY2025 (ended 2025-12-31, 10-K 0001628280-26-003942)
SBC expense $20.4B; vested RSUs $19.7B at grant, $43.1B at vesting (2.19x)
tax withholding $18.4B, buybacks $26.2B
burn rate 2.76%, overhang 4.58%
unrecognized cost $54.8B, basic shares -0.51% YoY
AMZN FY2025 (ended 2025-12-31, 10-K 0001018724-26-000004)
SBC expense $19.5B; vested RSUs $18.6B at grant, $30.0B at vesting (1.61x)
tax withholding n/a, buybacks n/a
burn rate 1.06%, overhang 2.09%
unrecognized cost $16.9B, basic shares 1.75% YoY
NVDA FY2026 (ended 2026-01-25, 10-K 0001045810-26-000021)
SBC expense $6.4B; vested RSUs $5.7B at grant, $22.2B at vesting (3.88x)
tax withholding $7.9B, buybacks $40.1B
burn rate 0.29%, overhang 0.78%
unrecognized cost $14.8B, basic shares -0.80% YoYThree details make it work across filers:
- The
rsu()helper reads both sections. NVIDIA tags its vested count and their grant-date value without a dimension, and its vest-date value and unvested balance on its RSU award, so one roll-forward spansawardsandplanTotals. Reading the award first and falling back to the plan totals gets every leg without double counting. - Join on
fiscalYear, notperiod. The footnote endpoints key a year by its real end date and the statements by a snapped key: Apple's fiscal 2025 is 2025-09-27 in one and 2025-09-26 in the other, NVIDIA's fiscal 2026 is 2026-01-25 and 2026-01-31. - The accession number rides along. Every cash flow fact maps to the filing that supplied it in
sources, so each printed line names its 10-K.
The footnote call needs Professional. The cash flow and income statement calls work on every plan, but the Free plan returns only the latest fiscal year, so the year-over-year line needs a paid one. to start with the statements. For point-in-time fundamentals with the amendment trail on every value, see the fundamentals API for quants.
Five traps in stock compensation data
- Two expense numbers. Alphabet's footnote reports total stock-based compensation of $27.1 billion for 2025, "including amounts associated with awards we expect to settle in Alphabet stock" of $24.1 billion. Its cash flow statement adds back $24.95 billion. The footnote endpoint's
expenseis the first; the cash flow statement'sstockBasedCompensationis the second. Pick one per analysis. - Split years mix share bases. Share counts on the footnote endpoints are served as filed. A year can combine values from filings on both sides of a split: NVIDIA's fiscal 2023 entry pairs 250 million RSUs granted, restated after its June 2024 ten-for-one split, with an unvested balance of 45 million that no post-split filing repeats, and Alphabet's 2021 roll-forward comes back with
reconciles: falsearound its 2022 split. Check the flag before trusting a year, and see our guide to detecting stock splits in historical data. dateFiledis the newest filing, often a 10-Q. Each 10-Q restates the year-end unvested balance as the opening line of its own roll-forward, so Meta's fiscal 2025 entry carries 2026-07-30, not the 10-K's 2026-01-29, and NVIDIA's year-end balance first appears in a 10-Q. Gating a backtest ondateFilednever looks ahead, but it can lag the 10-K by months: Apple's fiscal 2025 entry is dated 2026-07-31, 9 months after its 10-K. Our guide to point-in-time data for backtesting covers why that date matters.- Absent is not zero. Alphabet reports its withholding as "Net payments related to stock-based award activities" ($14.2 billion in 2025) on its own extension concept, a net figure, so the standard withholding field is missing rather than zero. Amazon's cash flow statement has no withholding line at all, and no repurchase line in 2025.
- Multi-class repurchase counts are tagged per class. Meta tags the shares it repurchased on its Class A and equity-statement members, so /api/footnotes/buybacks returns the dollar value without a share count:Fall back to the value, or to the period-end share count, whenjson
[ { "period": "2025-12-31", "fiscalYear": 2025, "fiscalPeriod": "FY", "currency": "USD", "dateFiled": "2026-01-29", "cashSpent": 26248000000, "program": { "remaining": 25030000000 }, "repurchased": { "value": 26264000000, "style": "retired" } } ]repurchased.sharesis absent.
StockFit provides data, not investment advice. Nothing here is a recommendation to buy or sell any security.
FAQ
Q.How do you calculate stock-based compensation dilution?
Q.Do stock buybacks offset dilution from stock-based compensation?
Q.What is net share settlement of RSUs?
Q.What is unrecognized stock-based compensation cost?
Q.What is RSU overhang?
Q.Why is stock-based compensation added back to cash flow?
Q.Why are vested RSUs worth more than their grant-date value?
Q.Is there an API for stock-based compensation data?
/api/footnotes/stock-compensation returns the RSU roll-forward (granted, vested, forfeited, unvested, with weighted-average grant-date and vest-date fair values), expense, unrecognized cost, tax withholding, the option book, plan share reserves, and valuation assumptions per fiscal year from 10-K and 10-Q XBRL. /api/footnotes/buybacks adds repurchases and program headroom. Both are on the Professional plan ($99/mo, $69/mo billed annually); the cash flow statement lines are on every plan.Ready to build?
Free API key, no credit card.