Crypto price alerts to Slack from a Google Sheet watchlist
Watch any coins you list in Google Sheets and get a Slack ping the moment one of them crosses your upper or lower price limit.
Build a code-based workflow that runs on a cron schedule every 15 minutes and posts crypto price threshold alerts to Slack from a watchlist I keep in Google Sheets.
The watchlist lives in a Google Sheet I'll point the workflow at. Columns (header row in row 1):
- coin_id: the CoinGecko coin id, e.g. bitcoin, ethereum, solana - upper_limit: numeric price ceiling; blank means no upper alert for this row - lower_limit: numeric price floor; blank means no lower alert for this row - currency: target currency code, default usd - last_alert_ts: ISO timestamp the workflow writes back after alerting - last_alert_price: price the workflow writes back after alerting
On each tick:
1. Call Google Sheets "Get Values" on the configured spreadsheet and range to read the full watchlist. Skip the header row.
2. Collect every non-empty coin_id. Group rows by currency. For each currency group, call CoinGecko "Simple Price" ONCE with all coin ids for that currency batched into the ids parameter (include_24hr_change=true, precision=2). Never call Simple Price per coin. If only one currency is in use, this should be exactly one CoinGecko call per tick.
3. For each row, look up the live price from the batched response. A row "breaches" when (upper_limit is set AND price >= upper_limit) OR (lower_limit is set AND price <= lower_limit).
4. Skip a row entirely if (a) CoinGecko returned no price for that coin_id (treat as invalid id, log it, keep going), or (b) last_alert_ts is within the cooldown window. Cooldown is a workflow input, default 6 hours.
5. For every breaching row that's outside the cooldown, call Slack Bot (slackbot) "Send a Message" to the configured channel id. The message should include: the coin id, direction ("above upper limit" or "below lower limit"), the live price formatted with the currency code, the limit that was crossed, and the 24h percent change. Use Slack mrkdwn formatting (asterisks for bold, not double asterisks).
6. After a successful Slack post, call Google Sheets "Update Values" to write the current ISO timestamp into last_alert_ts and the live price into last_alert_price for that specific row. Use a targeted A1 range for the two cells in that row, not a full-sheet rewrite.
Workflow inputs the user should be able to edit:
- Google Sheets spreadsheet id and watchlist range (e.g. Watchlist!A2:F) - Slack channel id to post alerts to - Cooldown window in hours (default 6) - Cron schedule (default every 15 minutes)
Hard requirements:
- Use the Slack Bot integration (slackbot), not the user Slack integration. This is automated workspace notification posting, not a message attributed to a person. - Batch CoinGecko: one Simple Price call per currency group, not per coin. - Treat blank upper_limit or blank lower_limit as "that direction is off" for that row. Don't error. - Rows with an invalid coin_id (no price returned) are skipped, logged, and don't fail the run. - Cooldown is enforced per row by reading last_alert_ts from the sheet, so the same breach never pings more than once per cooldown window even across runs. - All numeric comparisons should coerce cell strings to numbers and ignore rows where the limit can't be parsed.
Additional information
What does this prompt do?
- Reads your watchlist of coins, upper limits, and lower limits straight from a Google Sheet.
- Every 15 minutes, pulls live prices for every coin on the list in a single batched lookup.
- Posts to your chosen Slack channel only when a coin actually crosses a limit, with the live price, the limit it crossed, and the 24h move.
- Writes back the last alert time per row so you don't get spammed every 15 minutes about the same breach.
What do I need to use this?
- A Google account with a sheet that lists your coins, upper limits, and lower limits
- A Slack workspace where the Geni bot can post to your alerts channel
- A free CoinGecko API key (Demo plan works)
- A few minutes to fill in your coin list and price thresholds
How can I customize it?
- Change how often the check runs (every 5, 15, 30, or 60 minutes).
- Pick the Slack channel where alerts should land.
- Set a quiet window (default 6 hours) so a single breach doesn't keep re-alerting.
- Switch the price currency per coin (USD, EUR, BTC, and so on), or leave one direction blank to only watch a ceiling or only watch a floor.
Frequently asked questions
Where do I list the coins I want to track?
Will it spam me every 15 minutes once a coin breaks my limit?
What if I only want to watch a price ceiling, not a floor?
Does CoinGecko cost money?
What happens if I typo a coin id?
Stop staring at crypto charts.
Connect Google Sheets, Slack, and CoinGecko once. Geni watches your list around the clock and pings you the moment a price crosses a line you drew.