USDC price alerts for Solana tokens via Jupiter and ntfy.sh push notifications (+Raspberry Pi 5)
10K+
If you found this helpful and want to support what I do, you can leave a tip here โ thank you so much!
A real-time, web-enabled price alert tool for Solana tokens using the Jupiter Aggregator.
Track simulated USDC swaps with real price impact across one or many Solana tokens, then receive instant alerts via ntfy.shโ from a modern Web UI.
-- with status context instead of a fake 0.00.quote-api.jup.ag/v6 to the new lite-api.jup.ag/swap/v1.restrictIntermediateTokens=true to reduce rare dust-pool price spikes.Quickly model a partial exit from your position and see an estimated breakdown of proceeds:
price โ current_value / holding, with proceeds split using the current cost basis and unrealized PnLSOLANATRACKER_API_KEY; wallets can be set with WALLET_ADDRESSES or added from the Web UI.By providing a SOLANATRACKER_API_KEY, you enable a new RSI panel in the UI that lets you:
1s, 1m, 5m, 15m, 1h, 4h"below:30", "above:70"RSI_RESET_ENABLED)๐ To use RSI features, create a free account at solanatracker.ioโ and generate an API key
๐ฆ Free API keys include 2,500 requests per month
429) and timeouts gracefully"โโ" instead of crashing๐ https://github.com/Nicxx2/jupiter-usdc-price-alertsโ
Paste the following into a docker-compose.yml file.
โ
Update the OUTPUT_MINT to the token you want to monitor (e.g. BONK, JIM, PEPE).
๐ Make sure to change the TZ (timezone) to match your region โ this helps timestamps and cooldown logic align properly.
services:
jupiter-usdc-price-alert:
image: nicxx2/jupiter-usdc-price-alerts:latest
container_name: jupiter-usdc-price-alerts
restart: unless-stopped
# Expose the FastAPI backend for the Web UI
ports:
- "8000:8000"
environment:
# --- Token Configuration ---
# Input mint (must be USDC for accurate USD-based alerts)
INPUT_MINT: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
# Output token mint (token you want to monitor, e.g. JIM)
OUTPUT_MINT: <YOUR_OUTPUT_TOKEN_MINT>
# Solanatracker.io API key (required for RSI, wallet info, and sell simulator)
# If omitted, SolanaTracker-only panels will be disabled in the UI
SOLANATRACKER_API_KEY: ""
# Master SolanaTracker feature switch. Docker is the first-run default;
# saved app settings in /shared/config.json take priority after you edit them in the UI.
SOLANATRACKER_ENABLED: "true"
# SolanaTracker limiter: safe, custom, or off.
# Safe mode is conservative for free accounts and leaves room for RSI/wallet calls.
# Use custom/off only if your plan allows it.
SOLANATRACKER_RATE_LIMIT_MODE: safe
SOLANATRACKER_REQUESTS_PER_SECOND: 1
# Jupiter keyless quote limiter. Default matches public keyless access.
JUPITER_REQUESTS_PER_SECOND: 0.5
# --- Simulated Swap Settings ---
# Amount of USDC to simulate swapping
USD_AMOUNT: 100
# Optional token decimals override. Leave blank for auto-detect/fallback.
# USDC is 6 decimals; output token decimals vary by mint.
INPUT_DECIMALS: ""
OUTPUT_DECIMALS: ""
# How often to check prices (in seconds)
CHECK_INTERVAL: 60
# --- Alert Triggers ---
# Trigger buy alert if price is less than or equal to one of these
BUY_ALERTS: "0.00138, 0.00135, 0.00136"
# Trigger sell alert if price is greater than or equal to one of these
SELL_ALERTS: "0.00140, 0.00145"
# --- RSI Configuration ---
# Per-token RSI can also be switched off in the UI
RSI_ENABLED: "true"
# How often (in minutes) to refresh RSI checks
# Note: Free solanatracker.io API keys are limited to 2,500 requests per month
RSI_CHECK_INTERVAL: 5
# RSI alert thresholds (e.g. "above:30", "below:70")
RSI_ALERTS: "below:30"
# Candle interval used for RSI calculation (e.g. 1s, 1m, 5m)
RSI_INTERVAL: "5m"
# If false, RSI alerts trigger only once per session
RSI_RESET_ENABLED: "false"
# Persisted, wallet tracking config
# Comma-separated list of Solana wallet addresses to track
# Note: Free solanatracker.io API keys are limited to 2,500 requests per month
WALLET_ADDRESSES: ""
# --- Push Notifications (via ntfy) ---
# Unique topic name to receive notifications
NTFY_TOPIC: token-alerts
# Ntfy server URL (default: https://ntfy.sh)
NTFY_SERVER: https://ntfy.sh
# --- Alert Reset Cooldown ---
# Minutes before the same buy/sell alert can trigger again (set to 0 to disable)
ALERT_RESET_MINUTES: 0
# --- Timezone ---
# Local timezone for timestamps and scheduling
TZ: Europe/London
# Persist UI-edited settings, alert state, and price history
volumes:
- jupiter-alert-data:/shared
# --- Log Rotation ---
logging:
driver: "json-file"
options:
max-size: "2m"
max-file: "5"
volumes:
jupiter-alert-data:
Once the container is running, you can view and control everything from a clean browser interface.
If you're running this locally:
http://localhost:8000
If running on a remote server, replace localhost with the IP address or hostname of your server:
http://<your-server-ip>:8000
Youโll be able to:
SOLANATRACKER_API_KEY env var to enable the cached 14-period USD-based RSI panel and above: / below: threshold alerts. If you omit the key, RSI stays disabled and shows --.SOLANATRACKER_API_KEY and wallet addresses configured in Docker Compose or the web UI.Web UI Example:

Example of Wallet Information:

ntfy.shThis project uses ntfy.shโ to send free push notifications to your browser or mobile device.
โ
No signup required
โ
Works on Android, iOS, browsers, and terminals
โ ๏ธ Free Tier Note: ntfy.sh allows up to 250 messages per IP address per day.
If needed, you can self-host your own ntfy server and change theNTFY_SERVERvariable in the Docker Compose file to point to your self-hosted instance (e.g.http://localhost:8080).
๐ฑ Option 1: Mobile App
Open the app and subscribe to your topic (e.g. token-alerts).
๐ Option 2: Browser Alerts
https://ntfy.sh/<your-topic>https://ntfy.sh/token-alertsNTFY_TOPIC is your personal alert channel โ make it uniquelinux/amd64linux/arm64 (Raspberry Pi 4/5)linux/arm/v7 (Raspberry Pi 3 and older ARM chips)/shared/config.json.ntfy_topic, price check interval, and RSI check interval. Blank cadence/topic values inherit the Docker Compose / global defaults./shared as shown above so alerts, wallets, price history, and UI-edited settings survive container recreation.-- with a small status dot instead of 0.00.SOLANATRACKER_ENABLED=true is the first-run default for SolanaTracker-only features. Turning it off in the UI persists to /shared/config.json and hides RSI, wallet info, and the sell simulator without stopping Jupiter price checks.SOLANATRACKER_RATE_LIMIT_MODE=safe protects free SolanaTracker accounts with a conservative 1 request/second limit. The UI labels this separately from the RSI check interval so request pacing is not confused with RSI cadence. SolanaTracker currently lists the Data API Free plan as 2,500 requests/month and 3 req/sec, so safe mode leaves headroom for RSI and wallet calls. Use custom with SOLANATRACKER_REQUESTS_PER_SECOND, or off only when your plan/private setup can handle it. See the SolanaTracker pricing docsโ for current limits.INPUT_DECIMALS / OUTPUT_DECIMALS available as explicit overrides.python -m unittest tests.test_scheduler_rate_limit checks scheduler interval inheritance, round-robin due-token selection, and rate-limit safe/custom/off behavior without live API calls.Content type
Image
Digest
sha256:f15380468โฆ
Size
100.1 MB
Last updated
16 days ago
docker pull nicxx2/jupiter-usdc-price-alerts:v3.1.1Pulls:
3,995
Last week