Cafes · Restaurants · QSRs

From QR scanto settled bill

Multi-outlet restaurant POS — QR table ordering, KOTs to the kitchen, cashier billing, waitlist, payroll, per-outlet P&L. Enterprise-grade workflow with no contracts or setup fees.

Built for · Cafes · Restaurants · QSRs

01The problem

Your POS works, your kitchen works, your billing works — separately. Your night shift cashier knows it. So does the customer waiting fifteen minutes for a bill.

Most restaurant tooling in India was built for a single shop and bolted on the second outlet. By the time you have three branches, you have three databases, three cloud bills, three sets of staff PINs, and a CA who can't tell you which outlet actually makes money. Capturo Restaurant POS is multi-outlet from line one of the schema, with QR ordering for guests, a real KDS for cooks, role-gated cashier billing, and a per-outlet P&L that's audit-true because it's built on snapshotted recipe costs at the moment each KOT was placed.

02Inside Capturo Restaurant POS

Every module that ships. Minor to minor.

19 modules out of the box. No hidden tier gates on basic functionality. No half-built features waiting on a roadmap.

Multi-outlet management

Branches under one business — each with its own timezone, geofence, UPI ID, GSTIN override, auto-print toggle, and staff access scope.

  • Per-outlet IANA timezone (P&L rolls over at outlet's local 1 AM)
  • Per-outlet UPI VPA + GSTIN override
  • Geofence radius — customer must be within X metres to QR-order
  • Staff scoped per outlet (Captain at A can't see B)

Tables & sections

Section-grouped tables (Indoor / Outdoor / Rooftop / Bar / Takeaway). Each gets a unique QR token. State machine: vacant → occupied → billing → cleaning → vacant (auto after N minutes).

QR table ordering

Customer scans table QR, browses menu (sections, items, modifiers), places order — no app, no login. Geofence validates location; active session prevents double-billing the table.

Menu management

Sections (time-windowed — breakfast 6–11), items (with diet badges veg/non-veg/vegan/egg/jain), modifiers (single/multi, required/optional, price deltas), ingredients (recipe lines).

  • Time-of-day visibility (lunch menu auto-shows only 11–4)
  • Per-outlet item availability
  • Photos in S3, prep-time estimates, kitchen codes
  • Soft-delete with isActive flag

KOT (Kitchen Order Ticket)

Sequential per outlet per day. Sources: captain, QR, owner-quick. Order channels: dine-in, takeaway, phone, Swiggy, Zomato, Dunzo. State: pending → preparing → ready → served.

  • Recipe snapshot frozen on each line at order-place time (audit-true COGS)
  • Modifier selections logged with price delta
  • Parcelled flag for takeaway packs
  • Timestamps for each transition (SLA tracking)

Kitchen Display System (KDS)

Real-time KOT feed via Socket.IO, color-coded by source. Filter by kitchen code (separate cooking stations). Cook role sees only KDS — no billing, no tables.

Billing & cashier

Multiple KOTs coalesce into one bill. HSN-aware GST per item with CGST/SGST split. Service charge, discounts, split payments (cash + UPI in one bill).

  • Sequential bill number per outlet per day
  • Public invoice token at /bill/[id]/[token]
  • Auto-print on settle (configurable per outlet)
  • Status: open → settling → paid → void

UPI QR + payments

Static UPI QR on every bill, linked to outlet's VPA. Razorpay for online subscriptions; UPI intent for guests = zero gateway fee on the dining side.

WhatsApp automation

Five preset triggers (confirmed, ready, delivered, payment received, birthday). Invoice link + UPI QR sent via WhatsApp 24-hour window. Full message log with delivery status.

Waitlist & reservations

Walk-ins and reservations in one queue. Estimated wait, no-show tracking, allergy notes, VIP tags. Mark seated → auto-creates the dining session on the chosen table.

Staff PIN authentication

Six roles (Owner, Manager, Captain, Cashier, Cook, Cleaner). 4–6 digit PIN, bcrypt-hashed. One staff can be Captain at outlet A and Cook at outlet B with different role access at each.

Employees & shifts

Monthly, hourly or per-order compensation. Outlet assignment drives P&L allocation. Clock-in/out shifts feed accurate payroll on hourly staff.

Expenses (outlet-scoped or business-wide)

Rent, utilities, marketing, supplies, transport, repairs. One-time, monthly, quarterly, yearly cadence. Outlet-scoped costs roll up into per-outlet P&L; HQ costs stay business-wide.

Investments / capex

Equipment, furniture, vehicles, renovations, tools. Linear amortisation; the per-outlet P&L deducts the monthly slice automatically.

Per-outlet P&L

Revenue (paid bills) − COGS (recipe snapshots on served KOTs) − Opex − amortised Capex − Payroll = net profit per outlet, per range.

  • Today, last 7d / 30d / month / last month / YTD
  • Per-item revenue + COGS trend
  • Order count, item count, employee headcount
  • Net margin %

Customer database

Lightweight customer record with phone-keyed dedup, tags (VIP, vegan), birthday, address, notes. Drives birthday automation and repeat-customer recognition.

Daily inventory snapshot

24-hour cron aggregates ingredients consumed (by name, unit, value), top 20 items sold, total COGS for the day. Optional email delivery to the owner.

Activity feed

Bills, KOTs, messages, customer creates, expense entries — one filterable timeline newest-first. Searchable by bill number, customer, etc.

Aggregator-ready

Order sources Swiggy / Zomato / Dunzo / Other tracked with externalOrderId, deliveryFee, riderName, estimated minutes, packedAt, dispatchedAt. KOTs route to a 'parcelled' lane in the kitchen.

03How it works

Day in the life. Step by step.

Real flows from real customers. Read the one closest to your role; the others give you a sense of how the whole platform fits together.

Customer

Scan to settled bill

  1. 1Customer scans the QR sticker on table 7.
  2. 2Browses menu, picks Mutton Biryani (Spice: Medium, Extra raita +₹40).
  3. 3Adds two more items, places order — KOT fires to the kitchen.
  4. 4KDS shows Pending → Cook taps Preparing → Ready.
  5. 5Captain plates and serves; marks Served on captain app.
  6. 6When ready to pay, customer scans the UPI QR on the printed bill or asks the cashier to settle.
  7. 7Bill marks Paid, WhatsApp invoice link goes to the customer's number.
Cook

Kitchen display system

  1. 111 AM — cook arrives, taps the kitchen tablet.
  2. 2Enters PIN '1234'. KDS feed connects via Socket.IO.
  3. 3New KOT appears live — table 7, two main courses.
  4. 4Cook taps Preparing → Ready when plated.
  5. 5Captain notified instantly on the captain app.
Owner

Comparing two outlets

  1. 1Open Dashboard → Outlets.
  2. 2Main branch: ₹84,000 revenue, ₹28,000 net profit (33% margin) this month.
  3. 3North branch: ₹67,000 revenue, ₹9,000 net profit (13%).
  4. 4Drill into North → top items still strong, but rent is 38% of revenue (was 31% last month).
  5. 5Investigate: rent didn't change, but revenue dropped — last 7 days had 2 days closed for repair.
  6. 6Action: log the repair as an Expense linked to that outlet so the dip is explained in the P&L.
Cashier

Settling a 4-person table with split payment

  1. 1Open table 12 → 4 KOTs over the meal, all served.
  2. 2Combine into one bill, apply 5% service charge.
  3. 3Customer 1 pays ₹600 cash, customer 2 pays ₹450 UPI.
  4. 4Cashier records both on the same bill — totalPaid matches subtotal.
  5. 5Bill auto-marks Paid, WhatsApp invoice link goes to customer 1's phone.
  6. 6Cleaner taps Cleaning on the table — 15 min later it auto-vacants.
Aggregator order

Swiggy order coming in

  1. 1Captain enters Swiggy order with externalOrderId from Swiggy partner app.
  2. 2KOT routes to kitchen marked Parcelled.
  3. 3Cook prepares, marks ready; rider name + ETA logged on the order.
  4. 4Bill auto-settles via Swiggy reconciliation; activity feed records the channel.

04Why this and not the other one

What makes it different. Specifically.

Per-outlet P&L that is actually true

Most multi-outlet POS systems show outlets but not profit. Capturo computes COGS from recipe snapshots taken at the moment each KOT was served — not today's prices retro-applied — so historical margins are auditable.

Recipe-level COGS tracking

Every dish, every order, every modifier captures ingredient cost at order-place time. You'll see food cost creep before it eats your margin.

Auto-vacant cleaning state

Tables flip cleaning → vacant automatically after a configurable window. Staff stop forgetting to flip stuck tables; the floor map is always honest.

Staff PIN auth

Cooks don't have email addresses. PINs are 4–6 digits, bcrypt-hashed, role-gated per outlet. Onboarding a new cook is 30 seconds.

Geofenced QR ordering

Lat/lng + radius check on the QR endpoint stops people ordering from outside the restaurant — a real failure mode at busy weekend QSRs.

Multi-outlet from line one

Not bolted on. Outlets share the menu but override prices, GSTIN, UPI VPA, geofence and timezone. P&L rolls up the way operators actually think.

05Built right

Engineering that earns. Audit-grade by default.

The boring parts done well — multi-tenancy, audit trail, compliance, real-time updates, secure storage. So the interesting parts can stay interesting.

Real-time Socket.IO

Table status, KDS feed and bill changes push to every device in under a second. No polling, no refresh button.

Outlet-scoped staff isolation

Captains, cooks and cleaners only see the outlet they're assigned to — JWT carries outlet scope so a shared device can't leak data.

Recipe snapshot on every KOT

Order data freezes the recipe at the moment the order is placed. Edit the recipe later, and historical orders still cost what they cost.

Per-outlet timezone

IANA timezone per outlet so day-end roll-up at 1 AM local is correct even for a Mumbai chain that opened a Dubai branch.

Webhook-verified Razorpay

HMAC-SHA256 verified Razorpay webhooks for subscription state changes; idempotent on duplicate deliveries.

06Questions buyers actually ask

FAQ

Can my customer order without an app?
Yes. The QR opens a mobile web menu. No app install, no login. They just pick items and place the order.
Do I need internet in the kitchen?
Yes — the KDS is a real-time browser app. Most kitchens use a cheap Android tablet on Wi-Fi with a 4G hotspot fallback.
Can I run more than one outlet?
Yes — the schema is multi-outlet from day one. Plan tier sets the outlet cap; the data model itself doesn't care if it's 1 or 50.
What about Swiggy and Zomato?
Aggregator orders are tracked first-class with externalOrderId, delivery fee, rider, and a Parcelled lane in the kitchen. Live two-way Swiggy/Zomato API isn't included today — operators enter aggregator orders manually or via a partner-app overlay.
How does GST work on the bill?
Per-item HSN code + GST rate. Intra-state bills auto-compute CGST + SGST; inter-state computes IGST. Public invoice link shows the breakup.
Can my cook see the cashier screen?
No. PIN-based staff login carries the staff's role; Cook role only opens the KDS. Cashier role only opens the cashier flow. Owner sees everything.
Where does my menu image storage live?
AWS S3 (or Wasabi-compatible bucket) per business. Menu images load from a CDN, not from MongoDB.
Is there a setup fee or contract?
No. Self-serve signup, Razorpay subscription, cancel anytime. The free trial gives you full restaurant features so you can run a real lunch service before paying.

07Pricing

Live, dynamic plans.
No hidden fees.

See full comparison

free

Free

0/month
  • 1 outlet
  • 5 tables
  • 25 menu items
  • 100 KOTs / month
  • Basic POS + cashier
Try free

starter

Starter

5,999/year

Save ₹1,189 · 2 months free

  • 1 outlet
  • 15 tables
  • 80 menu items
  • 1000 KOTs / month
  • QR table ordering
  • Cashier + Captain apps
Start Starter
Most popular

pro

Pro

14,999/year

Save ₹2,989 · 2 months free

  • Up to 3 outlets
  • Unlimited tables & menu items
  • Unlimited KOTs
  • Live KDS for kitchen
  • Per-outlet P&L (revenue · COGS · payroll)
  • WhatsApp invoice + UPI QR on every bill
Go Pro

08Ready to try it

Set up takes 5 minutes. Trial costs ₹0.

Open Capturo Restaurant POS on its own subdomain — sign up, add a handful of test data, and decide if it fits before you spend a rupee.