Telegram Mini App — What It Is, How It Works, and When You Need One
Explaining how Mini Apps differ from regular bots, when to build one, and how much it costs. With real project examples.
A client calls and says: "I want an app inside Telegram." I used to ask — a bot or a mobile app? Now there's a third option, and it's often the best one.
A Telegram Mini App is a full web application that opens right inside the messenger. The user taps a button in the bot, and instead of a chain of messages, they get a proper interface with buttons, forms, images — just like a normal website.
How it's different from a regular bot
A regular bot is a conversation. Commands, buttons, text. It works great for linear tasks: notifications, FAQ, simple forms. But as soon as something more complex comes up — a shopping cart, a schedule with filters, a dashboard with charts — the bot starts to drag down the UX.
A Mini App is HTML + CSS + JavaScript in a separate window overlaid on the chat. The user never leaves Telegram but works with a full-featured interface. Telegram passes the user's data to the app, and the app can send data back to the bot.
Here's what a Mini App gets out of the box:
- Full-screen mode (
tg.expand()) - User data without authentication: name, ID, username
- Sending data back to the bot (
tg.sendData()) - Native confirmations (
tg.showAlert(),tg.showConfirm()) - A back button in the Telegram header
- Automatic theme adaptation (dark/light)
// Initialization
const tg = window.Telegram.WebApp
tg.ready()
tg.expand()
// Get user data
const user = tg.initDataUnsafe.user
console.log(user.first_name) // "Alex"
// Send data back to the bot
tg.sendData(JSON.stringify({ action: 'order', product_id: 42 }))
On the bot side, aiogram receives this through the web_app_data handler:
@router.message(F.web_app_data)
async def webapp_data(message: Message):
data = json.loads(message.web_app_data.data)
await message.answer(f"Order received for product {data['product_id']}")
Real projects I've built
Fitness tracker for gyms. The client wanted members to see their schedule and book trainings inside Telegram. With a regular bot, that's 4-5 dialog steps. In a Mini App — one screen with a schedule and a "Book now" button. Conversion went up.
Shopping cart. While a bot's cart is awkward "you added an item, type /cart to view it," a Mini App is a full ecommerce interface with photos, quantities, and totals.
Order form for complex services. When you need to select multiple parameters, upload photos, write a comment — a bot is a nightmare, a Mini App is a normal form.
When a Mini App is NOT needed
I don't recommend a Mini App when:
- The task is simple notifications or broadcasts
- The audience is older and less tech-savvy
- There's no budget or time — Mini Apps are more complex to build
- You need push notifications without user action (bots handle this better)
Simple rule: if the interface fits in 3-4 bot steps — build a bot. If not — go Mini App.
Tech stack and pricing
I build Mini Apps with Vue.js + Vite — quick to set up, familiar tooling. You can use React or vanilla JS too. Backend is FastAPI or the same aiogram through sendData.
Real-world pricing:
- Simple Mini App (form + 2-3 screens): $200–350
- Medium (shop, schedule, profile): $400–700
- Complex (dashboard, analytics, integrations): $800+
I always charge Mini App hosting separately — it's a regular frontend that needs its own domain and deployment.
Bottom line
A Mini App isn't a replacement for a bot — it's a complement. Where a bot starts breaking down in multi-screen dialogs, a Mini App saves the day. Users figure it out quickly — Telegram has already trained them for it.
If you have questions about implementation — write to me, let's figure it out.
share