← All use cases
Markets & FinanceJSONPath

Crypto Price Alerts via CoinGecko

Track any coin's price and fire an alert on percent moves - cleaner than exchange-side alerts and integrated with your own infrastructure.

Verid Use Cases·3 min read·Template: crypto-price-coingecko

The scenario

You hold a position in a coin and want to be notified if it drops 5% inside an hour, or breaks through a meaningful round number on the upside. Exchange-side alerts work but lock you into one venue, won't fire your own systems, and don't speak Slack or Discord natively.

What you actually want is a monitor that watches the public CoinGecko API, applies your threshold, and posts to your own channels - so your trading bot, journal, or team chat hears about it the same way every time.

The problem

CoinGecko's API is free, fast, and stable, but they don't push you anything. You have to poll. Building your own poller-plus-threshold-plus-webhook service is the kind of evergreen background project that's never quite finished - it works until the API rate-limits you, your VPS reboots, or you forget to renew the TLS cert.

How Verid solves it

The pre-built crypto-price-coingecko template wraps the CoinGecko /simple/price endpoint with a JSONPath extractor and a percent-change predicate. You pass the coin id and the threshold; Verid runs the poll, caches results, and only delivers when the threshold trips.

Build the monitor

Extraction config

{
  "method": "json_path",
  "fields": {
    "price_usd": "$.bitcoin.usd",
    "market_cap": "$.bitcoin.usd_market_cap",
    "change_24h": "$.bitcoin.usd_24h_change"
  }
}

For a different coin, replace bitcoin with the coin id (e.g. ethereum, solana).

Predicate

A 5% drop fires the alert:

{ "type": "field_decreases_by_percent", "field": "price_usd", "threshold": 5 }

To also fire on 5% upside, use a composite:

{
  "type": "composite",
  "operator": "OR",
  "conditions": [
    { "type": "field_decreases_by_percent", "field": "price_usd", "threshold": 5 },
    { "type": "field_increases_by_percent", "field": "price_usd", "threshold": 5 }
  ]
}

Create the monitor

Using the template:

curl -X POST https://api.verid.dev/v1/monitors/from-template/crypto-price-coingecko \
  -H "Authorization: Bearer vrd_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "BTC - 5% move alerts",
    "deliveries": [
      { "type": "webhook", "url": "https://my-trading-bot.example.com/webhooks/verid" }
    ]
  }'

Or via the SDK:

import { VeridClient } from '@verid.dev/sdk';

const client = new VeridClient({ apiKey: 'vrd_your_api_key' });

await client.monitors.createFromTemplate('crypto-price-coingecko', {
  name: 'BTC - 5% move alerts',
  deliveries: [
    { type: 'webhook', url: 'https://my-trading-bot.example.com/webhooks/verid' },
  ],
});

What the webhook delivers

{
  "id": "del_01H...",
  "version": "2026-05-01",
  "monitor_id": "9b1c…",
  "fired_at": "2026-05-08T13:42:00Z",
  "diff": {
    "fields_changed": ["price_usd", "change_24h", "market_cap"],
    "before": { "price_usd": 62450.12, "change_24h": -1.2, "market_cap": 1230000000000 },
    "after":  { "price_usd": 59102.40, "change_24h": -6.4, "market_cap": 1166000000000 }
  }
}

Caveats & tips

  • JSONPath returns numbers when the JSON contains numbers. That's exactly what percent-change predicates need - no currency-symbol problem here.
  • Run interval bounds the signal. A monitor running every 30 minutes can only detect 5% moves that survive a half-hour window. If you want minute-by-minute granularity, drop the interval (on a plan tier that allows it).
  • CoinGecko free tier has a rate limit. Verid's own polling is gentle - once per interval per monitor - but stacking many monitors against the same endpoint at fast intervals can exceed the public-tier ceiling. Spread coins across different schedules.

Related use cases

For equity prices, see stock price drop alerts. For FX moves, see currency / FX rate monitoring. For any other JSON API, see JSON API field monitoring.

Ship this monitor today

5 monitors free, no credit card. Set up takes about a minute.

Get started free