How We Collect Yield Data
Every rate on Bitcompare is read from a named source, checked against it, and shown with the time it was last confirmed. Nothing is estimated.
Source-attributed, never estimated
Bitcompare tracks lending rates, staking rewards, borrowing costs, and prices across centralised platforms and on-chain protocols. Every value in a rate table is attributed back to a specific source: the platform's own public rate page, its API, or, for on-chain protocols, the contract data itself.
We do not estimate, interpolate, or extrapolate rates. If a value cannot be verified against its source, it is flagged, marked stale, and eventually removed — it is never silently presented as current.
Where the data comes from
Each provider is wired to the most authoritative source available for its products:
Published rate pages
For most centralised platforms we read the provider's own public rate page — the same numbers a customer sees before signing up. The rate is recorded exactly as listed, together with the tier and conditions attached to it.
Provider APIs
Where a platform exposes an official API, we read rates directly from it. API sources give us more structure — terms like minimum deposits and lock-up periods arrive as data rather than page copy.
On-chain contract data
For DeFi protocols, rates are read from the protocol's contract data. On-chain values move constantly, so these rates carry the same freshness rules as every other source.
What happens before a rate is shown
Raw values go through the same normalisation steps regardless of source, so a rate on one platform can be compared honestly with a rate on another:
Attribution
Every rate is stored against the provider, asset, product category, and — where relevant — the specific chain it applies to. Aggregate figures on Bitcompare always link back down to the underlying rows.
Currency normalisation
Prices quoted in a native currency are converted to USD using current exchange-rate data before display, so quotes from different regions are never mixed as if they were the same unit.
Terms extraction
Conditions that change what a rate means — minimum deposits, lock-up periods, tier requirements — are normalised into structured terms and shown alongside the rate. Where a platform advertises a boosted maximum, we distinguish the maximum rate from the base rate most users receive.
Regional availability
Providers declare where their products are and are not available. We record those restrictions and show region access next to rates, so a rate you cannot access is not presented as if you could.
Freshness and staleness
Rates change frequently, so every value carries an explicit freshness state instead of an implied “current” status:
- Last confirmed
- The timestamp shown with a rate is when it was last verified against its source — not when the page was rendered. Rates confirmed within the last 15 minutes are shown as live.
- Flagged
- If a source does not respond within the freshness window, the affected rate is flagged as delayed rather than shown as live.
- Stale
- A rate that cannot be re-confirmed for more than 24 hours is marked stale, so the staleness is visible rather than hidden.
- Removed
- If a source goes dark or a product is withdrawn, the rate is removed rather than presented as current.
What we do not do
- We do not estimate or interpolate rates — a number appears only when it can be read from a source.
- We do not promise yields. Rates are shown as listed by the named provider, with the time they were last confirmed; the provider's own terms always govern.
- Sponsored placements never change the underlying data. Paid visibility is labelled and kept separate from organic rankings.
- When we get something wrong, we correct it — see the editorial process for how corrections are handled.
See the data in use
Compare live lending, staking, and borrowing rates with their sources and freshness state.
Compare lending rates