Prices aren't updating
What you’d see
A holding’s price (and net worth built on it) hasn’t moved though the market has, or a position shows an obviously stale value.
Why it happens
Prices refresh two ways while the app is running: a live view’s own cache is at most a minute old before it’s re-fetched, and a background scan (~15 minutes by default) walks every holding and watched ticker from Yahoo Finance and CoinGecko independent of anyone looking. The app shows the last-known price immediately and refreshes in the background rather than holding up your screen. A few things stick that price:
- The backend isn’t running. Nothing refreshes if the app is down; run it only while using it and prices are only as fresh as your last session.
- The market is closed. A stock’s price legitimately doesn’t move outside trading hours — that’s the actual last trade, not staleness.
- The provider is rate-limiting or down. A failed fetch keeps showing the last good price rather than blanking it or showing zero — stale-but-real beats wrong.
- A currency’s exchange rate looks obviously wrong. Every fetched rate is cross-checked against its own reciprocal (USD→VND × VND→USD should equal 1) before trusting it — bad provider data has caused this before (a 1,000x-wrong VND quote slipped through unchecked in 2026-07). A rate that fails that check is corrected using the reciprocal quote instead of the bad one; a rate with no reciprocal to check against that jumps implausibly from the last trusted rate is rejected outright and the previous rate kept.
- It’s a manually-priced instrument. Gold, real estate, and similar holdings set to a manual price never auto-refresh — update those yourself.
How to fix it
- Confirm the backend is running (see The backend won’t start if not).
- Manually priced instrument? Expected — update it by hand.
- Live-priced and running? Reopening or switching back to the view re-fetches within a minute; otherwise wait for the next background scan (up to ~15 minutes).
- Check the app log for fetch errors — a sustained provider outage shows up there.
How to confirm it’s fixed
The price (and its “as of” timestamp, where shown) moves to a current value after the next refresh cycle, with nothing else needed.