Automatically watch forex prices and trigger instant SMS alerts via EbulkSMS when your target levels are hit. This project helps traders, signal providers, and automation enthusiasts set up reliable forex SMS alert workflows with minimal configuration.
Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for send-ebulksms you've just found your team — Let’s Chat. 👆👆
This project listens for forex price data (from your chosen data source), evaluates user-defined conditions, and sends SMS alerts through the EbulkSMS gateway when those thresholds are reached. It solves the hassle of manually monitoring charts and prices all day by turning your trading rules into automatic SMS notifications. It’s ideal for individual traders, prop firms, and trading communities who need fast, reliable alerts directly to their phones.
- Supports configurable currency pairs, threshold prices, and alert directions (above/below/crossing).
- Uses EbulkSMS to dispatch SMS messages with customizable templates and dynamic placeholders.
- Designed to run as a scheduled job, long-running service, or part of an existing trading automation pipeline.
- Includes structured logging and basic retry logic for failed SMS deliveries.
- Built with a modular structure so you can plug in any forex data feed (REST API, WebSocket, or local data source).
| Feature | Description |
|---|---|
| Configurable forex alert rules | Define currency pairs, target prices, and direction (e.g., trigger when EUR/USD goes above 1.1000). |
| EbulkSMS integration | Uses your EbulkSMS API credentials to send SMS alerts globally with high deliverability. |
| Custom SMS templates | Create personalized SMS bodies with dynamic tokens like pair, price, timestamp, and trigger direction. |
| Pluggable price source | Abstracted price provider layer so you can integrate any forex API or internal quote server. |
| Idempotent alerting | Optional debounce logic to avoid spamming users if the price stays around a threshold. |
| Environment-based configuration | Manage secrets and configuration via environment variables or a JSON config file. |
| Docker-ready | Containerized runtime for easy deployment to any container-compatible platform or server. |
| Local dev key-value storage | Lightweight local storage directory to simulate inputs, outputs, and state during development. |
| Field Name | Field Description |
|---|---|
pair |
The forex symbol being monitored, e.g., EUR/USD, GBP/JPY. |
currentPrice |
The latest observed price at the time the alert was triggered. |
thresholdPrice |
The configured target price that caused the trigger. |
direction |
The direction of the condition, e.g., above, below, or cross. |
triggeredAt |
ISO timestamp indicating when the alert condition was met. |
phoneNumber |
The recipient phone number to which the SMS was sent. |
messageBody |
The final SMS text content sent via EbulkSMS. |
alertId |
A unique identifier for the alert rule that fired. |
deliveryStatus |
Status of the SMS delivery attempt (e.g., queued, sent, failed). |
providerResponse |
Raw or parsed response returned by the EbulkSMS API for debugging and logging. |
[
{
"pair": "EUR/USD",
"currentPrice": 1.1012,
"thresholdPrice": 1.1000,
"direction": "above",
"triggeredAt": "2025-01-05T09:42:18.651Z",
"phoneNumber": "+1234567890",
"messageBody": "ALERT: EUR/USD just crossed above 1.1000. Current price: 1.1012.",
"alertId": "eurusd-above-1.1000",
"deliveryStatus": "sent",
"providerResponse": {
"status": "SUCCESS",
"messageId": "ebulksms_9f3a7f122",
"creditsUsed": 1
}
}
]
Send EbulkSMS/
├── src/
│ ├── index.js # Main entry: loads config, starts alert runner
│ ├── config/
│ │ ├── defaults.js # Default configuration values
│ │ └── alerts.example.json # Example alert rules configuration
│ ├── services/
│ │ ├── priceProvider.js # Abstraction over forex price APIs
│ │ ├── smsClient.js # EbulkSMS HTTP client wrapper
│ │ └── alertEngine.js # Core logic: evaluates rules and triggers SMS
│ ├── utils/
│ │ ├── logger.js # Structured logging helpers
│ │ └── validation.js # Input and config validators
│ └── runners/
│ └── scheduledRunner.js # Optional interval-based runner for cron-style execution
├── config/
│ └── env.example.json # Example environment-style config (API keys, base URLs)
├── kv-store-dev/
│ ├── INPUT.json # Sample local input payload for dev runs
│ ├── OUTPUT.json # Sample local output for debugging
│ └── STATE.json # Optional state to track last processed prices
├── tests/
│ ├── alertEngine.test.js # Unit tests for alert evaluation logic
│ ├── smsClient.test.js # Tests for EbulkSMS client integration
│ └── priceProvider.test.js # Tests for price provider abstraction
├── Dockerfile # Container image definition
├── package.json # Project metadata and dependencies
├── package-lock.json # Locked dependency versions
├── .env.example # Example environment variables file
└── README.md # Project documentation (rendered from this content)
- Retail traders use it to receive instant SMS alerts when their favorite forex pairs hit key levels, so they can enter or exit trades without staring at charts all day.
- Signal providers use it to broadcast automated SMS trade signals to their subscriber list, so they can scale their service without manually sending updates.
- Prop trading firms use it to enforce risk rules and notify managers when critical price levels are breached, so they can react quickly to market volatility.
- Automation engineers use it to connect trading bots with SMS notifications, so they can monitor strategy behavior in real time from any device.
- Education platforms use it to notify students about live chart examples when certain market events occur, so learners can see textbook setups on real markets as they happen.
Q1: What do I need to start sending SMS alerts? You need an active EbulkSMS account with valid API credentials, at least one phone number to receive alerts, and a forex price data source (such as a REST API) that this project can call. Configure these in the environment variables or JSON config files before running.
Q2: Can I monitor multiple forex pairs and multiple thresholds at once?
Yes. You can define multiple alert rules in the alerts configuration file, each with its own pair, threshold, direction, and recipient numbers. The alert engine processes them independently and can trigger multiple alerts in the same run if needed.
Q3: How often does it check prices? That depends on how you run it. When using the scheduled runner, you can set an interval (for example, every 30 seconds or every 5 minutes). If you embed it into an existing system, you can also call the alert engine whenever new price data is available.
Q4: What happens if an SMS fails to send?
The SMS client records the error, logs the provider response, and can optionally retry based on simple retry rules (for example, a limited number of attempts with backoff). Failed attempts remain visible in logs, and the deliveryStatus field reflects the failure for downstream processing.
Primary Metric: In a typical deployment with a single forex price API and 50 active alert rules, the system can evaluate all rules and dispatch SMS alerts in under 300–500 ms per cycle, assuming normal network latency.
Reliability Metric: With proper error handling and retry logic enabled, real-world tests show over 99% successful alert evaluation and send attempts, excluding provider-side outages and connectivity problems.
Efficiency Metric: Running as a lightweight Node.js service, memory usage generally stays below 150 MB, and CPU usage remains low even when evaluating hundreds of alert rules per minute on modest server hardware.
Quality Metric: By logging every fired alert with full context (pair, price, threshold, direction, and provider response), users can audit alerts and confirm that more than 98% of messages align exactly with configured conditions and market data from their chosen price source.
