What your capital actually earned
Paste an address or ENS name. This reads your Aave v3 supply history straight from
the chain and works out the rate you actually got, next to the rate the pool
was paying over the same days. Runs entirely in your browser against public block
explorers: no key, no server, nothing sent anywhere but the explorers themselves.
How these numbers are produced
Interest is exact, not estimated. Every Aave balance change emits an event, so lifetime interest = current balance − net principal, where net principal nets out the interest Aave bakes into each Mint and Burn value. Computed in integer base units throughout.
Your APY is XIRR: the single annual rate that discounts your real dated deposits and withdrawals, plus today's balance, back to zero. It changes when you act differently, which is what makes it yours rather than the pool's.
Pool APY is the pool's own daily apyBase history compounded across exactly your holding window, so the comparison is against what the pool really paid rather than what it advertises today.
Every position is reconciled against the contract. Aave stores a scaled balance that moves only when principal moves, never when interest accrues. Rebuilding that scaled balance from the events found here and comparing it with the contract's own scaledBalanceOf proves whether any deposit or withdrawal was missed. A position marked reconciled matched exactly.
Balances are read live via balanceOf, never from an explorer's index: aTokens accrue with no transfer event, so an indexed balance runs below the truth and would understate your interest.
Interest accrues continuously, and is drawn that way. Aave credits nothing when you transact: your balance is scaledBalance × liquidityIndex and the index rises every block. The balanceIncrease stamped on each event is only a checkpoint of what accrued since you last touched the position, so charting those would show lumps whose size is really just the gap between your transactions. The curve instead plots scaledBalance(t) × index(t) − netPrincipal(t), with the index known exactly at every event and at now, interpolated geometrically between.
Balance history is exact at every event, because each event updates your interest index. Both lines are drawn as steps: a straight line across a gap between events would show a rise that did not happen.
What these numbers deliberately do not include
Transfers between your own wallets look like deposits. If you moved funds between addresses you control, your APY here is wrong. Only one address was scanned.
Reward tokens are not counted. Incentives paid in a different token are real yield that this report omits, so a position earning them is understated.
Gas is not counted. Your net return after fees is lower than shown.
Borrow-side interest is out of scope. Supply positions only.
Pool rate history begins 2023-02-06. An older window shows the comparison as unavailable rather than guessing.
Aave v2 is not included , and neither is any market outside the set compiled into this page. On Ethereum that set is Core, Prime, Horizon and EtherFi; every other chain has Core only. Each market is compared against its own pool rate, never another market's, and a market DefiLlama does not publish rates for shows the comparison as unavailable.
Where the data comes from
Event history, balances and ENS: the public Blockscout instance for each chain
(Optimism's is explorer.optimism.io, Linea's is
api-explorer.linea.build).
Pool rate history and token prices: DefiLlama.
143 Aave v3 reserves across 5 chains and 8 market
instances are compiled into this page from @bgd-labs/aave-address-book, so nothing
has to be discovered at runtime.
Previously held lists positions you have exited, sized by the most
principal each ever held at today's price, so an asset that has since moved a long way
in price can cross or miss the $10 line on today's value rather than the value while
you held it.