Crypto treasury dashboard your finance team opens daily

By General Input

See what your crypto treasury is actually worth every morning, with live prices, gains and losses, allocation drift, and a one-click Slack snapshot.

Integrations

  • CoinGecko
  • Google Sheets
  • Slack Bot

Type

App

Categories

  • Finance
  • Operations

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.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerA brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensStop cold emails to anyone with a live deal in PipedriveLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasoniMessage campaign console with pre-flight checks and delivery board