Multi-branch point of sale · Live
Counterbase
“When the internet drops at one branch, selling stops, receipts stall, and the day's numbers go dark.”
Counterbase keeps every counter selling offline and reconciles everything with the cloud when the connection returns. Offline-first point of sale for multi-branch retail.
Counterbase
Nairobi CBD branch (sample data)
Items
Current sale
Tap items to start a sale.
Recent sales
All sales synced
- #10413 itemsKES 590Synced
- #10401 itemKES 340Synced
Try it: switch to offline, ring up a sale, then reconnect.
An illustration of Counterbase's offline-first selling. Not connected to a backend; the items and sales are sample data.
Who it is for
Retailers running several branches or counters: supermarkets, hardware stores, pharmacies, and wholesale shops where a dead till means lost sales.
- Shops that lose selling hours whenever connectivity drops
- Owners who want stock and takings for every branch in one place
- Teams that need cashier, supervisor, and owner controls to differ
- Businesses taking M-Pesa, card, and tourist payments at the counter
What is inside
Every module below exists in the product today. This is the checklist with receipts.
Offline selling
Cashiers keep ringing up sales with no internet. Each sale is stored on the device and queued for the cloud.
Background sync with conflict handling
A queue replays sales, refunds, and stock movements to the cloud. A conflict resolver reconciles edits made on different devices while offline.
Catalog and pricing
Products with categories, pricing tiers, and branch-level price overrides, so one item can carry different prices per branch.
Inventory, transfers, and stocktakes
Per-branch stock with batches and movements, inter-branch transfers, stock requests between branches, and counted stocktakes.
Payments
M-Pesa (Daraja), PesaPal, Jenga, and NFC tourist payments recorded against sales with their own transaction records.
Customers and receivables
Customer accounts with receivables, payments against what is owed, and shareable statements.
Cash discipline
Branch cash settings, a cash ledger, reconciliation, and a daily close so drawers can be checked against the day's sales.
Purchasing and suppliers
Supplier invoices, supplier payments, and landed-cost tracking for imported stock.
Expenses and finance
Expenses with line items and cash-flow views alongside sales, so the branch position is in one system.
Reporting and statements
Sales reports, accountability alerts, and customer statements across branches.
Promotions and referrals
Coupons and promo codes with redemption tracking, plus a customer referral program.
Subscriptions and licensing
A SaaS admin handles plans, billing, invoices, and device activation per organization.
How Counterbase fits together
Counter app (Android)
Sells offline against a local store on the device. Sales, refunds, and stock moves queue locally.
Attached: Payments at the counter: M-Pesa (Daraja), PesaPal, Jenga, NFC
Sync on reconnect
The queue replays to the cloud in the background. A conflict resolver reconciles edits made on different devices.
Cloud API (NestJS)
Checks roles and permissions, applies pricing and stock rules, records receipts and audit events.
Attached: Owner's web admin for reports and settings
PostgreSQL
One record per organization: tenants, branches, devices, users, stock, and sales.
Roles and permissions
- CashierSells at the counter and issues receipts
- SupervisorDay-to-day branch oversight
- ManagerCatalog, stock, and reporting for the branch
- AdminUsers, roles, settings, and approvals
- Custom rolesEach organization can define its own roles from permission keys
Permissions are enforced in the API, not only in the app. Every role is a set of permission keys, and an admin can grant or deny individual keys per user as overrides. Legacy cashier, supervisor, manager, and admin accounts map onto the same key system.
Tech
Flutter, Riverpod, SQLite (Drift), NestJS, PostgreSQL, Prisma, Redis, Vercel
Deployment
- The counter app runs on Android and is built and released through GitHub Actions.
- The API runs on Vercel with PostgreSQL and Redis.
- A web-based store management system gives owners a desktop view of products, stock, and transactions.
- Each customer onboards as its own tenant with branches, devices, and users.
Status and availability
Current status: Live
- Live and in active release. The Android app is at version 1.0.84+2127 with a dated changelog of fixes.
- Offered as a subscription; the SaaS admin handles plans and device activation.
- Price: ask us.
See Counterbase against your own problem.
Tell us about your counters or your WhatsApp sales, and we will show you exactly what the product does for them, and what it does not do yet.
Evidence note
Checked October 2026 in the Counterbase repository: 99 database models (grep -c "^model " backend/prisma/schema.prisma), 40 backend modules (ls backend/src), 58 backend test files (find backend/src -name "*.spec.ts"), 72 Flutter test suites (find mobile/test -name "*_test.dart"), and 28 feature areas in the app (ls mobile/lib/features). App version from mobile/pubspec.yaml; roles and per-user overrides from backend/src/permissions/permissions.service.ts; payments models from backend/prisma/schema.prisma (MpesaTransaction, PesapalTransaction, TouristTapTransaction).