Crypto treasury dashboard your finance team opens daily
See what your crypto treasury is actually worth every morning, with live prices, gains and losses, allocation drift, and a one-click Slack snapshot.
Build me an app my finance team opens every morning to see what our crypto treasury is actually worth. Our holdings live in a Google Sheets tab, and that sheet stays the source of truth: the app should read from it on load and write edits back to it, never keep its own separate copy of the holdings.
Holdings sheet. Read the holdings tab with the Google Sheets Get Values operation. Each row is one position with these columns: coin (a CoinGecko coin id such as bitcoin or ethereum, or a ticker I can map to one), quantity, purchase date, cost basis, and target allocation percent. Let me configure the spreadsheet id and the tab range once in a settings area and remember it, so I am not pasting it in every visit. Handle a sheet where some rows are blank or partially filled without breaking the whole page.
Positions view (the main screen). Price every position live. Use the CoinGecko Coins Markets operation with all of my coin ids in a single request, since that returns current price plus 24 hour and 7 day price change percentages in one call and keeps us inside the free plan rate limit. Use Simple Price as the lightweight fallback when I only need a refreshed price and nothing else. For each position show: current value (quantity times current price), unrealized gain or loss against cost basis in both absolute and percentage terms, 24 hour movement, 7 day movement, and that position's share of the total treasury as a percent. Color gains and losses so the table is scannable, and show the treasury total prominently at the top with its own 24 hour change.
Group stablecoins separately from volatile assets. Stablecoins are runway, not upside, so they belong in their own section with their own subtotal, and the volatile assets get a separate subtotal above the combined treasury total. Ship with a sensible default list of stablecoins (USDT, USDC, DAI and similar) and let me edit which coins are treated as stable, so a newer stablecoin can be reclassified without a code change.
Inline editing. Let me edit a position's quantity directly in the table. On save, write the new value back to the correct cell in the sheet using the Google Sheets Update Values operation, then recalculate the totals and allocation shares. Show a clear saving and saved state, and if the write fails, say so plainly and keep my typed value on screen rather than silently reverting it.
Performance view (second screen). Chart total treasury value over the last 90 days. Call the CoinGecko Market Chart operation for each holding, multiply each coin's daily price series by the quantity we hold, and sum across holdings into one total treasury line. Let me optionally break the chart out by asset, and separate the stablecoin portion from the volatile portion so I can see whether real value moved or just the mix. Fetch these serially or in small batches rather than all at once so we do not trip the CoinGecko rate limit, and show a loading state while it builds.
Allocation drift. On the performance view, compare each asset's current share of the treasury against its target allocation percent from the sheet, and flag anything that has drifted more than 5 points away from target in either direction. Show the target, the actual, and the gap in points, and state the direction plainly (overweight or underweight). Make the 5 point threshold a setting I can change.
Cost basis backfill. When a row has a purchase date but no cost basis figure, use the CoinGecko Coin History operation for that coin on that date to fetch the historical price, multiply by quantity, and use that as the cost basis. Mark those values in the UI as estimated from the purchase date so nobody mistakes them for a recorded cost, and offer to write the estimate back to the sheet with Update Values rather than doing it automatically.
Currency switch. Let me flip the whole app between USD and EUR with one control. This should change the currency the prices are requested in (CoinGecko takes a target currency parameter on Coins Markets, Simple Price, Market Chart and Coin History) rather than converting after the fact, and it should apply to the positions table, the totals, the 90 day chart, and the shared snapshot. Remember my choice between visits.
Share snapshot. Add a Share snapshot button that posts a formatted summary into our finance channel using the Slack Bot Send a Message operation. The message should lead with total treasury value and its 24 hour change, then list the volatile positions with value and gain or loss, then the stablecoin subtotal framed as runway, then call out any assets breaching the drift threshold. Format it for Slack readability with clear sections rather than dumping a wide table, and let me pick the destination channel and preview the message before it sends.
General notes. This is a read-heavy dashboard that people open daily, so make the first paint fast and let prices refresh on demand with a visible last updated timestamp. Be resilient when a coin id in the sheet does not resolve: show that row with a clear unrecognized coin warning and keep the rest of the treasury calculating correctly.
What does this prompt do?
- Reads your holdings straight from the Google Sheet your team already maintains, then prices every position live so the numbers are current the moment you open it.
- Shows current value, gain or loss against what you paid, 24 hour and 7 day movement, and each position's share of the total treasury.
- Keeps stablecoins in their own group, since those are operating runway rather than upside, and flags any asset that has drifted more than 5 points from its target allocation.
- Charts total treasury value over the last 90 days, lets you edit quantities inline and save them back to the sheet, and posts a formatted snapshot to your finance channel in one click.
What do I need to use this?
- A Google Sheet with a tab listing your holdings: coin, quantity, purchase date, cost basis, and target allocation percent
- A CoinGecko account, where the free plan is enough for a treasury of this size
- A Slack workspace and the channel where your finance team wants snapshots posted
- Edit access to the sheet, so quantity changes you make in the app can be saved back
How can I customize it?
- Change the drift threshold from 5 points to whatever your treasury policy actually uses
- Switch the performance chart from 90 days to 30 days, 6 months, or a full year
- Adjust which coins are treated as stablecoins, so a newer stable gets grouped as runway instead of upside
- Set the default display currency and choose which channel the shared snapshot lands in
FAQs
Do I have to move our holdings out of the spreadsheet?
Does this work on the free CoinGecko plan?
Can we see everything in euros instead of dollars?
What exactly counts as allocation drift?
Why are stablecoins shown separately?
Related templates
Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.
Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.
Stop rebuilding your treasury spreadsheet every morning.
Keep the sheet your team already trusts, and get a live dashboard on top of it that prices every position, catches allocation drift, and shares the summary in Slack.