To manage Shopify from Telegram with n8n, you build a two-way bot that answers slash commands like /orders, /lowstock, /sales, and /find right inside a chat window. Instead of unlocking your phone and loading the Shopify admin every time you want a number, you type one word and the bot queries the Shopify Admin API and replies in seconds. This guide walks through all twelve nodes, the exact build steps, the mistakes to avoid, and the running cost at real volume.
What it does
Most Shopify owners already get pushed notifications: a new order lands, a Telegram ping fires. That is one direction only. This workflow flips it around so you can ask the store questions on demand, from the same Telegram chat you already keep open.
You send the bot a command and it answers:
/ordersreturns your five most recent orders with totals and payment status./lowstocklists every variant at or below a stock threshold you set./salesreports how many orders came in today and the running total./find 1042looks up a single order by its name or number and returns its status.
It is the difference between a notification feed and a control panel. When a customer emails asking where their order is, or a supplier asks what you need reordered, the answer is one message away instead of a login, a search, and three taps. This fits into the wider n8n Shopify automation stack as the query layer that sits alongside your existing alert workflows.
Why it beats the default
The default way to check these numbers is the Shopify mobile app. It works, but it is heavy for a quick glance: it loads a full dashboard, it wants you logged in, and it does not let you script or combine views. If you want “low stock across every variant under 5 units” you scroll and count.
A Telegram bot beats that for three reasons. It is instant, because the reply is plain text with no interface to render. It is shareable, because you can add a warehouse assistant to the chat and they get the same commands without a Shopify staff seat. And it is extendable, because every command is just an n8n branch you control, so adding a new report is a five-minute job rather than a feature request to an app vendor.
It also pairs cleanly with push alerts. Keep order alerts on Telegram for events that reach out to you, and use this bot for the questions you reach out to ask. Together they cover both directions from one chat.
What you need
- An n8n instance, either n8n Cloud or self-hosted version 1.0 or newer.
- A Telegram bot token from
@BotFather, which takes about two minutes to create. - A Shopify custom app access token with read scopes for orders and products. Follow how to connect Shopify to n8n in 2026 using the Dev Dashboard method to generate it.
- Your store domain in the form
your-store.myshopify.com.
Estimated build time is 30 to 40 minutes from scratch, or under 10 minutes if you import the template and paste in your credentials.
Node-by-node list
The workflow is twelve nodes. A single Telegram Trigger feeds a parser, a Switch routes on the command, four HTTP Request nodes hit the Shopify Admin API version 2026-04, four Code nodes format the reply, and one Telegram node sends it back.
Telegram Trigger
|
Parse Command (Code)
|
Route Command (Switch)
| | | |
/orders /lowstock /sales /find
| | | |
[Get [Get [Get [Find
Recent Products Today Order] <- HTTP Request (Admin API)
Orders] Orders]
| | | |
[Format][Format][Format][Format] <- Code (build reply text)
\ | | /
Send Telegram Reply
| # | Node | Type | Job |
|---|---|---|---|
| 1 | Telegram Trigger | telegramTrigger | Receives every message sent to your bot |
| 2 | Parse Command | code | Splits the message into command and argument, grabs the chat ID |
| 3 | Route Command | switch | Sends the run down one of four branches by command |
| 4 | Get Recent Orders | httpRequest | GET last 5 orders |
| 5 | Get Products | httpRequest | GET products with variant inventory |
| 6 | Get Today Orders | httpRequest | GET orders created since midnight |
| 7 | Find Order | httpRequest | GET one order by name |
| 8 | Format Orders | code | Turns the order list into a text reply |
| 9 | Format Low Stock | code | Filters variants under the threshold |
| 10 | Format Sales | code | Sums today's order totals |
| 11 | Format Order | code | Formats a single order lookup |
| 12 | Send Telegram Reply | telegram | Sends the formatted text back to the chat |
Step-by-step build
- Add a Telegram Trigger node. Attach your Telegram credential, set Updates to
message, and save. n8n gives it a webhook that Telegram will call on every message. - Add a Code node named
Parse Command. Paste the parser below. It reads the message text, splits off the first word as the command, keeps the rest as the argument, and stores the chat ID so the reply goes back to the right place.const msg = $input.first().json.message || {}; const text = (msg.text || '').trim(); const parts = text.split(/\s+/); const command = (parts[0] || '').toLowerCase(); const arg = parts.slice(1).join(' '); return [{ json: { command, arg, chatId: msg.chat ? msg.chat.id : '' } }]; - Add a Switch node named
Route Command. Create four rules, each a String equals check on{{ $json.command }}matching/orders,/lowstock,/sales, and/find. Name the outputs so the canvas stays readable. - On the first output add an HTTP Request node named
Get Recent Orders. Method GET, URLhttps://your-store.myshopify.com/admin/api/2026-04/orders.json, authentication set to Generic Header Auth with your Shopify token credential. Add query parametersstatus=any,limit=5, and afieldslist of name, total_price, financial_status, fulfillment_status, created_at. - On the second output add
Get Products, same auth, URL ending/products.json, withlimit=250andfields=title,variants. Variant inventory rides along in the response. - On the third output add
Get Today Orders, URL ending/orders.json, withstatus=any,limit=250,fields=total_price,created_at, and acreated_at_minvalue of{{ $now.startOf('day').toISO() }}so only today's orders return. - On the fourth output add
Find Order, URL ending/orders.json, withstatus=any,limit=1, and anameparameter of{{ $('Parse Command').item.json.arg }}so it searches for whatever number the user typed. - Behind each HTTP node add a Code node that builds the reply text. For
Format Low Stock, the code loops every variant and keeps those at or below the threshold:const products = $input.first().json.products || []; const threshold = 5; const low = []; for (const p of products) { for (const v of (p.variants || [])) { if (typeof v.inventory_quantity === 'number' && v.inventory_quantity <= threshold) { low.push(p.title + ' - ' + v.inventory_quantity + ' left'); } } } const message = low.length ? 'Low stock (<= ' + threshold + '):\n\n' + low.join('\n') : 'All variants are above the low-stock threshold.'; return [{ json: { message } }]; - Add one Telegram node named
Send Telegram Reply. Set Chat ID to{{ $('Parse Command').item.json.chatId }}and Text to{{ $json.message }}. Wire all four Format nodes into it, since only one branch ever runs per message. - Save, toggle the workflow Active, and message your bot
/salesto confirm it replies.
Tip: to make the bot answer only you, add a line in Parse Command that compares msg.chat.id to your own chat ID and returns an empty command otherwise. That single check stops strangers who find the bot handle from pulling your store data.
Common mistakes
- Leaving the Shopify token with write scopes it does not need. This bot only reads, so grant read_orders and read_products and nothing more.
- Forgetting the
created_at_minvalue on the sales branch. Without it the node returns your entire order history and the total is meaningless. - Wiring the Format nodes into separate Telegram nodes. One shared Telegram node is cleaner and avoids four near-identical configs drifting apart.
- Using an old Admin API version in the URL. Stick to a current version like 2026-04 so field names and behavior match this guide.
- Testing before the workflow is Active. The Telegram Trigger only receives live messages once the workflow is switched on.
Cost at realistic volume
The running cost is close to zero. Telegram charges nothing for bot messages. Each command is one or two Shopify Admin API calls, and Shopify's REST limit is two calls per second per store, so even rapid checking never comes near the ceiling.
| Usage | Commands per day | Shopify API calls | n8n executions |
|---|---|---|---|
| Solo owner | ~20 | ~30 | 20 |
| Owner plus assistant | ~60 | ~90 | 60 |
| Small team | ~150 | ~230 | 150 |
On n8n Cloud's Starter plan the small-team column still fits inside the monthly execution allowance, and self-hosted users pay only their server cost. There is no per-message fee anywhere in the chain.
🚀 Manage Shopify From Telegram template
The full guide above is free to follow. If you would rather skip the build, the ready-to-import template gives you all twelve nodes wired and validated, so you only paste in your Telegram and Shopify credentials and set your store domain. Prefer it done for you? Our done-for-you service installs and configures it on your instance.
Instant download · Works on n8n Cloud and self-hosted
FAQ
Can I manage Shopify from Telegram without writing code?
Yes. The two Code nodes in this build are already written for you, so once you import the template and attach your Telegram and Shopify credentials the bot works. You only edit your store domain and, if you want, the low-stock threshold. No coding experience is required to run it.
Is a Telegram bot secure enough to query my Shopify store?
It is safe when you lock it down. The bot talks to Shopify through a private access token stored in n8n, never in Telegram. Add a chat ID check in the Parse Command node so the bot answers only your own account, and the token never leaves your n8n instance.
Will this bot let me change orders, or only read data?
This version is read-only by design. Every command runs a GET request against the Shopify Admin API and reports back. That keeps it safe to hand to staff. You can extend it later with write actions like tagging or fulfilling an order by adding a POST request node behind a new command.
How many Shopify API calls does the bot use?
One command triggers one or two Admin API calls. Even a busy owner checking the bot 100 times a day stays far under Shopify's rate limits and the free n8n execution tiers. There is no per-message cost from Telegram either, so the running cost is effectively zero.
Does this work on n8n Cloud and self-hosted?
Both. The workflow uses only core n8n nodes, so it imports cleanly on n8n Cloud and any self-hosted instance. The Telegram Trigger needs a public webhook URL, which n8n Cloud provides automatically and self-hosted users get through a tunnel or a reverse proxy.