APY vs APR, and tracking rates without comparing unlike things
A savings rate tracker is a table of numbers that mean slightly different things, so the work is normalising them to one convention, recording when each was read, and being honest that a higher rate usually reflects a different risk rather than a better offer.
Collecting rates is easy. Putting them in one table implies they are comparable, and that is the claim worth earning.


Start from a working app
Yield
a live table of staking, lending and vault rates across chains, which is this page as a working app.
Open the template
APY and APR are different numbers for the same money
APR is the simple annual rate. APY includes the effect of compounding, so the same underlying rate shows as a larger number when it compounds daily than when it compounds annually. Sources publish whichever flatters them or whichever their regulator requires. If your table mixes the two, the ranking is partly an artefact of which convention each source chose. Normalise to one, and say in the interface which one you picked.
A rate is a forecast, not a promise
Most of these rates are variable and can change without notice. A number in your table is what was offered when you read it, not what the money will earn over a year, and the difference is largest exactly when rates are moving. Show the read time beside the rate. A table of variable rates with no timestamps is a historical document presented as an offer.
Why the top of your table is usually the riskiest row
Rates compete for money, so a higher one is usually paying for something: a longer lock, a smaller institution, a newer protocol, an incentive that ends. Sorting by rate sorts by that too, and a tracker that ranks without showing what differs is teaching people to choose on the one axis where the differences are least interesting. Put the term, the constraint and the source next to the number.
Update cadence decides what the tool is for
Some sources publish daily, some move continuously, and mixing them in one view means half the table is stale whenever the other half is current. Decide whether you are building a daily comparison or a live one, then poll accordingly, and never let a page imply live when the feed behind it updates each morning. That single mismatch is what makes an otherwise correct tracker misleading.
Keep the history, because the change is the product
One rate tells you almost nothing. A rate that has fallen every week for a month tells you what is happening, and a rate that jumped yesterday tells you to look closer. Store every reading with its timestamp from the first day, because a history cannot be reconstructed later and it is the thing that turns a table into a tool worth returning to.
Live, right now, on this page
| Market | Price | Funding | 24h volume |
|---|---|---|---|
| BTC | $86,364.50 | 0.0013% | $522,866,341 |
| ETH | $2,750.85 | 0.0013% | $301,603,802 |
| SOL | $118.01 | 0.0013% | $94,709,358 |
| HYPE | $96.97 | 0.0013% | $3,938,323 |
Read from a live market as this page rendered, with the read time beside it, which is the habit this page argues for. Read at 2026-09-23 02:12 UTC; accurate as of that time and not afterwards.
Start from a working app

Open, change it, publish your own
Family Office
watches any set of public addresses and shows real on-chain balances, priced and rolled up per person, read-only with no custody.
Open the template
Working templates built around what this page covers. Open one, change it, and publish your own.
- Yield
a live table of staking, lending and vault rates across chains, which is this page as a working app.
- The Garden
a family portfolio with one garden per person, showing savings, a 15-year forecast and where the money is staked.
- Family Office
watches any set of public addresses and shows real on-chain balances, priced and rolled up per person, read-only with no custody.
Common questions
What is the difference between APY and APR?
APR is the simple annual rate and APY includes compounding, so the same underlying rate reads higher as APY, and more so the more often it compounds. Sources publish whichever their regulator requires or whichever looks better. A table mixing both is ranking partly by which convention each source chose, so normalise to one and say which in the interface.
Why is the highest rate usually not the best one?
Because rates compete for money and a higher one is generally paying for something: a longer lock-up, a smaller institution, a newer protocol, or an incentive with an end date. Sorting by rate sorts by that too. Showing the term, the constraint and the source beside the number is what turns a ranking into a comparison.
How often should a savings rate tracker refresh?
At the cadence of the slowest source you show, and never in a way that implies live when it is not. Mixing a feed that moves continuously with one published each morning means half your table is stale whenever the other half is current. Show the read time next to each rate so the mixture is visible rather than hidden in an average.
See the number itself
Pages that read a live market and show what they read, updated while you look at them.
- Stablecoin lending rates, live, the same table live, with the read time beside every rate.
- Live FX rates, and the three prices people mix up, what a rate looks like when it moves continuously rather than daily.
Related reading
All guides · Live market pages · Components · Make Mithril a preferred source in Google