Every day, procurement departments handle dozens of price lists and hundreds of line items. A key component's price rises by 12% — and you find out a week later, when the supplier has already issued a new invoice. A Telegram bot for price monitoring solves this: it polls supplier APIs, parses CSV/XLSX, or loads price lists via FTP on a schedule. When a significant deviation is detected (e.g., growth over 5%), it instantly sends a notification to a channel. The bot checks up to 1000 SKUs in 2 seconds, and a buyer spends just 10 minutes on setup.
The bot is built on Laravel 11 with Redis queues for async processing. Each supplier is handled in a separate job, allowing scaling to hundreds of suppliers on a single server. We have developed over 30 such bots for retail and manufacturing. With more than 5 years in the market and over 50 procurement automation projects, we deliver stable operation under loads of up to 1000 checks per minute, confirmed by monitoring. We guarantee you won't miss a single price change.
Get a consultation from a procurement automation engineer — we will analyze your suppliers and propose the optimal solution within one day.
How exactly does the bot track changes?
The bot runs on a schedule. Each execution iterates over all active suppliers. For each SKU, it compares the latest price with the previous one. If the deviation exceeds the configured threshold (default 5%), it generates a message with an emoji indicator and the exact difference.
The check code remains flexible:
class SupplierPriceMonitor { public function checkChanges(Supplier $supplier): void { $newPrices = $this->fetchPrices($supplier); foreach ($newPrices as $sku => $newPrice) { $oldPrice = SupplierPrice::where([ 'supplier_id' => $supplier->id, 'sku' => $sku, ])->value('price'); if ($oldPrice === null) continue; // new item — no notification $changePercent = abs($newPrice - $oldPrice) / $oldPrice * 100; if ($changePercent >= config('suppliers.notify_threshold_percent', 5)) { $this->notify($supplier, $sku, $oldPrice, $newPrice, $changePercent); } SupplierPrice::updateOrCreate( ['supplier_id' => $supplier->id, 'sku' => $sku], ['price' => $newPrice, 'checked_at' => now()] ); } } private function notify(Supplier $supplier, string $sku, float $old, float $new, float $pct): void { $arrow = $new > $old ? '📈' : '📉'; $direction = $new > $old ? 'increased' : 'decreased'; $message = "{$arrow} <b>Price {$direction}</b>\n\n" . "Supplier: {$supplier->name}\n" . "SKU: <code>{$sku}</code>\n" . "Was: " . number_format($old, 2) . " $\n" . "Now: " . number_format($new, 2) . " $\n" . "Change: <b>" . round($pct, 1) . "%</b>"; $this->telegram->sendToChannel(config('telegram.pricing_channel'), $message); } } The threshold is adjustable per supplier: 2% for key items, 10% for secondary ones. You can also batch notifications (e.g., once per hour) and filter by supplier.
Why Telegram instead of email or SMS?
Telegram delivers instant notifications with formatting (bold, code, emojis) — more convenient than email, which often lands in spam. SMS is expensive and length-limited. The bot integrates easily via Telegram Bot API. For price alerts, Telegram is the optimal channel.
What data sources are supported?
| Source type | Examples | Formats | Integration complexity |
|---|---|---|---|
| Supplier API | JSON REST, SOAP | JSON, XML | Medium (requires documentation) |
| HTML parsing | Websites with price lists | HTML | High (volatile structure) |
| File upload | FTP, SFTP, email | CSV, XLSX, XML, YML | Low |
| Manual input | Bot admin panel | — | None (manual addition) |
The bot can handle any vendor format — just send a sample file. It can also track not only prices but also stock levels and delivery dates, if available in the source.
Setting the notification threshold
The threshold is configured in config/suppliers.php. For each supplier, set the threshold_percent parameter. After changing the config, restart the bot with php artisan bot:restart. Example configuration for one supplier:
{ "supplier": "Supplier A", "url": "https://api.supplier-a.com/prices", "format": "json", "threshold": 5, "check_interval": 60 } What's included in the work
| Component | Description |
|---|---|
| Data sources | Integration with supplier APIs, CSV/XLSX parsing, FTP upload |
| Comparison logic | Customizable threshold, skip new SKUs, batch notifications |
| Bot interface | Commands /prices, /history, unsubscribe from supplier |
| DevOps | Docker container, Grafana monitoring, database backups |
| Documentation | Installation guide, config description, data schema |
| Training | Video guide for buyers, access handover |
| Support | 1-month warranty, then maintenance contract |
Manual monitoring vs bot
Manual monitoring of 5000 items takes 3 hours; the bot does it in 2 seconds — 360 times faster. A manual entry error costs on average $450–650. The bot eliminates human error, saving up to $1.4k–1.9k per month in labor and mistake costs.
Implementation timeline
Development takes 2 to 5 business days depending on the number of sources. The cost is calculated individually based on your scenario.
Development process by stages
| Stage | Duration | Outcome |
|---|---|---|
| Analysis | 0.5 day | List of sources, formats, criteria |
| Design | 0.5 day | DB schema, configs, architecture |
| Implementation | 1–3 days | Working bot with parsing and notifications |
| Testing | 0.5 day | Unit tests, integration tests |
| Deployment | 0.5 day | Server setup, monitoring configuration |
Submit a request — we will analyze your suppliers and propose a solution within one day. Get a consultation from a procurement automation engineer.







