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.

Deterministic Code
CoinGeckoGoogle SheetsSlack BotOperationsPersonal ProductivityNotifications & AlertsResearch & Monitoring

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?
In a Google Sheet you control. One row per coin, with columns for the CoinGecko coin id (like bitcoin or ethereum), an upper price limit, a lower price limit, and a currency. Adding a coin later is just adding a row.
Will it spam me every 15 minutes once a coin breaks my limit?
No. After it alerts on a row, it writes the timestamp back to the sheet and stays quiet on that row for a configurable cooldown window (default 6 hours). You only get pinged when something new happens.
What if I only want to watch a price ceiling, not a floor?
Leave the lower limit cell blank. The workflow treats a blank limit as off, so you only get alerted when the price crosses the limit you actually set.
Does CoinGecko cost money?
No. The free Demo plan is enough for a personal watchlist at 15 minute intervals. You can upgrade later if you want faster checks or more coins.
What happens if I typo a coin id?
The workflow skips rows it can't find a price for and keeps going. The rest of your watchlist still gets checked on the same run.

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.