The back office that runs itself.
Sales arrive from your till overnight. A photographed invoice becomes an expense, a stock movement and a journal entry in one go. Stock counts down portion by portion. The books post themselves in double entry, and the tax return builds itself out of them. You read one screen in the morning.
A working walkthrough of every screen is on this page. No form in the way.
You find out what you made about five weeks too late.
Not because you are careless. Because the numbers live in six places that were never introduced to each other.
The platforms keep 40%
Gross on the statement, commission somewhere else, advertising somewhere else again. Almost nobody can say what a Talabat order actually left behind.
Invoices live in a drawer
Or a WhatsApp thread. They reach the accountant in a bundle, months later, by which time nobody remembers whether the crate arrived.
Stock is a Friday argument
Somebody counts, somebody disagrees, and the difference is written off as shrinkage because there is no record of what should have been there.
The margin moves silently
Beef goes up eight per cent. Nothing on your menu changes. You are selling your best-seller at a loss for a month before anyone notices.
Open it. Click anything.
This is Otto’s own interface, running in the page, loaded with two sample restaurants: one in Dubai on VAT, one in Amman on GST and JoFotara, on the same code. Click the name at the top of the rail to switch. Every screen is here, every column is the real one, and the drill-through works: start at a figure, end at the photograph behind it.
Overview. One hero figure says what you kept. The four tiles underneath say what it cost to keep it. Nothing on this screen is typed by a human.
Six jobs you are doing by hand, or not doing at all.
Otto is one system rather than six tools that sync. That is the whole point: a sale is not copied between them, it moves through them.
Sales arrive from your till, already broken down
Otto pulls your receipts overnight, or your till posts them straight in over an API key, or you drop the daily file in and Otto works out its shape. Every platform’s gross, its commission and its advertising deduction are computed down to what you actually kept, per channel, per branch, per day. You never type a sales number.
- Overnight pull, direct API, or a file you drop in
- Your negotiated commission and ad rates per platform
- True net per channel, per branch, per day
- Menu items matched by alias, name, then containment
- Every spelling your till invents is learned once
- Duplicate receipts refused on a source reference
An invoice photograph becomes three things at once
Photograph a supplier invoice and Otto reads it into lines: supplier, date, reference, every item, every price. Approving it posts the expense to the ledger, puts the stock back on the shelf at the new weighted cost, and matches the delivery against the open purchase order, all in one transaction. If the figures on the document agree with each other, it does all of that without asking you.
- A document that agrees with itself files unattended
- Line-level reading, not just a total
- Items matched to your shelf, spellings remembered
- Weighted average cost updated on every delivery
- Compared line by line against the open order
- Rejecting keeps the document and blocks the posting
Stock counts itself down, portion by portion
Write a recipe once and every sale walks it. Forty-two Fatboy Beefs take 7.56 kilos of brisket off the shelf whether or not anyone was watching. Set a yield percentage and Otto writes the trim for you, so the 3.7 kilo brisket that serves 3.0 stops quietly costing you the difference. Spot count whenever you like; Otto has logged every movement in between and will tell you exactly where the variance came from.
- Weighted average costing with unit conversion
- Automatic yield and trim on every delivery
- Days of cover, not just a quantity
- Reversal on an edited or deleted sale
- Production runs for anything made in-house
- Physical counts with a frozen variance
Live food cost, and the item that is quietly bleeding
Every dish is costed from the portions you actually use, at today’s weighted cost. When beef moves eight per cent, the food cost percentage on your best-seller moves that night, and Otto tells you. A dish nothing is known about is reported as not measured rather than as a flattering zero, because a 0% food cost on your signature burger is the most expensive number in the business.
- Plate cost per portion size
- Food cost against your own target
- Contribution per plate, not just percentage
- Menu leaderboard by line revenue
- Five honest states, including “not measured”
- Every till spelling mapped to the dish
Real double-entry books, posted by the machine
This is not a spreadsheet with a ledger tab. Otto keeps a chart of accounts, a posting engine and a general ledger, and every journal line carries the identifier of the row that caused it. That is why you can start at a figure on the trial balance and reach the photographed invoice behind it in four clicks. A posted line is never edited: a correction reverses the original and posts again, so the audit trail keeps both.
- Chart of accounts, journals, trial balance
- Balance sheet, cash flow, profit and loss
- Payables subledger that ties to account 2100
- Bank import and reconciliation, CSV or XLSX
- Period close, reopen and lock, with a database trigger
- Journal export QuickBooks, Xero and Zoho accept
Waste, counted honestly
Nine fixed reasons, an optional photo for when somebody wants to settle the argument on the spot, and dish waste costed through the recipe. Waste is reported inside the food bill rather than added on top of it, and staff meals sit beside it rather than in it, because feeding your people is not waste.
- Cost and lost revenue on every entry
- Reason, branch, and who logged it
- Trim written automatically from yield
- Day-by-day and by-reason views
- Every filter lives in the address bar
- Posts to its own account, not to shrinkage
A burger is sold at 21:44. Here is everything that happens.
Nobody opens a screen. Nobody copies a number. This is the difference between one system and six that sync.
The till rings it up
The receipt is pulled overnight, or posted straight in by the till. A duplicate is refused on its source reference, so a till that retries never doubles your sales.
Stock comes off the shelf
The recipe is walked. 180 grams of brisket, 40 of cheddar, one roll. The shelf, the weighted cost and the days of cover all move.
The books post themselves
Revenue, the platform’s commission, its advertising cut, the VAT and the cost of sales, in one balanced journal entry carrying the receipt’s own identifier.
The invoice clears
In Jordan, a compliant e-invoice is minted and cleared with the tax authority, with its verification QR, before anyone wakes up.
Most of the work happens overnight, while the restaurant is shut.
Nine jobs run on a schedule inside your own database. They pull, post, reconcile, forecast, clear and report. Every run is timed and logged, and a run that refuses to do something says in one line what it refused and why.
It fetches the day
01:40, the till is pulled. 02:20, receipts roll into platform sales, menu lines and stock movements. Duplicates are dropped, and the day is reconciled against what the till itself says it rang up.
It works out what to buy
03:00, the forecast runs: four weeks of sales walked through your recipes, less what yield says is trim, against each supplier’s lead time and order days. It drafts one purchase order per supplier and leaves it for a human. A draft you edited last night is never overwritten.
It clears your invoices
02:40, every till receipt becomes a compliant sales invoice and is cleared with the tax authority, or one aggregate invoice per day per branch where the law allows it. 06:00, a digest tells you how many went through and which one did not.
It runs on your own database
The queue is Postgres, in the same database as your books, with jobs claimed by for update skip locked and a worker of its own. No third-party scheduler ever holds your data, and no job runs twice.
It tells you, then stops
Low stock, an order waiting on approval, a food cost that crossed its target, an invoice the tax authority rejected. Notifications are rows in your own database, not messages posted to somebody else’s server.
It never decides for you
Otto drafts the order, reads the invoice and mints the document. Approving, sending and paying stay with a person, and every one of those actions is attributed and time-stamped in the audit trail.
Built for the UAE and Jordan, each done properly.
Rates, forms, filing frequencies, deadlines, weekends and the legal references behind them are configuration, not code sprinkled with country checks. There is a test in the repository whose only job is to fail if anyone writes one.
VAT 201, and corporate tax
5% VAT, monthly or quarterly, due 28 days after the period, to the Federal Tax Authority through EmaraTax. Corporate tax at 0% to AED 375,000 and 9% above it, due nine months after year end. Otto builds the working sheets box by box out of posted entries, prints them black-on-white for A4, and freezes a period once you mark it filed.
GST, and JoFotara clearance
16% general sales tax, monthly, bimonthly or quarterly, due 30 days after the period, to the Income and Sales Tax Department. Otto builds UBL 2.1 documents and clears them with JoFotara, prints the verification QR that scans in the ISTD’s own Sanad app, and supports Article 7 daily aggregate invoices once you hold the written approval.
It clears once, never twice
Each sales channel is set to be cleared by Otto, by your own till, or by nobody. That switch is the whole reason a document reaches the tax authority exactly once, whatever else is plugged in.
Credentials you enter once
Your client id and secret key are encrypted with AES-256-GCM and the secret is never shown again. Sandbox mode runs the entire flow with a mock QR and nothing leaving the machine, so you can prove it before you go live.
Filed means filed
Marking a period filed freezes it. A correction dated into a closed month forward-dates into the next open one, and a genuinely new entry into a closed month is refused by name.
Whatever your till is, there is a way in.
Otto reads the shape of a file rather than the badge on it, so a till it has never been introduced to is a configuration question rather than a rewrite.
Point of sale
Three ways in, all landing in the same place. Otto connects to your point-of-sale system and pulls the night’s receipts overnight. Your till posts receipts straight in over a scoped API key, up to 500 a call, made idempotent by a source reference. Or you drop the daily file in and Otto works out its shape.
Files nobody standardised
An item report or a day-totals matrix, CSV or XLSX. Otto finds the header row wherever it sits, infers what each column is, reads three date formats, and asks you once about anything it cannot work out. Your answer is saved, so the next file imports silently.
Your accountant’s software
A line-level journal export, one row per posted line, footing to the trial balance for the range, in the date, number, memo, account, debit and credit shape that QuickBooks, Xero and Zoho Books all accept. Every screen also exports its own CSV.
Delivery platforms
Talabat, Careem, Deliveroo, Noon and Keeta, with your own negotiated commission and advertising rates per platform and per branch, so Otto reports what an order left behind rather than what it rang up.
Banking
No bank-specific parsers to go stale. One reader that handles Emirates NBD, Mashreq or anything else that exports a statement, learns your column layout once, and de-duplicates across overlapping re-imports by fingerprint.
Tax authorities
JoFotara and the ISTD in Jordan, with UBL 2.1 clearance and the verification QR. The Federal Tax Authority’s VAT 201 and corporate tax in the UAE, as working sheets you file.
And an app, for the people who are not sitting at a desk.
The app carries your restaurant’s name, logo and colour, not Otto’s, so the team opens something that looks like the place they work in. Every screen is cached on the device with an “as of” stamp, so it still answers a question in a walk-in fridge with no signal.
Photograph an invoice at the back door
Take the photo the moment the crate lands. Otto reads the document into lines and hands you every field it pulled out, editable: supplier, date, reference, the shop that took the delivery, and each item with its quantity and price. Correct one and that supplier’s spelling is remembered. Disregard a line you did not order and it never reaches the books.
Approvals, wherever you are
An owner or manager sees what is waiting: an invoice held for review, a purchase order drafted overnight. Open it, read the lines against the photograph, approve or reject on the spot. The kitchen logs waste with a photo and raises order requests without anyone opening a laptop.
It works with no signal, and tells you when it matters
Writes go into an outbox and send themselves when the signal comes back, so a photo taken in a store room is never lost and never sent twice. Push notifications reach the right person when something needs a decision.
Every number, in your pocket
Home with the day’s takings and cost gauges, then the full profit and loss, cash flow, balance sheet, ledger, trial balance, payables and tax sheets. Drill from a ledger row to the journal entry to the photographed invoice, exactly as you would at a desk. Inventory with days of cover, waste and recipes sit under Kitchen.
The right tabs for the right person
The app reads the same roles the browser does. A profit-and-loss-only partner sees totals and nothing else. Kitchen appears only where inventory or recipes are switched on. Sign in with a six-digit code, share any report as a CSV, switch between businesses.
Your books are yours alone, and the design is what guarantees it.
Your restaurant’s data sits in a database of its own rather than in a shared table filtered by a column, so no other client can be shown your numbers by mistake. Credentials are encrypted, sign-in takes a second factor, posted entries are never quietly edited, and every action is written to an audit trail you can read.
A schema of your own
Every restaurant gets its own Postgres schema. Each request is pinned to that one schema for the life of its transaction, so another client’s tables are not merely filtered out, they are not reachable. A query that forgets its scope fails loudly instead of quietly returning someone else’s rows.
Three facts, or no session
The address has to name a workspace that exists, your sign-in has to be active in that workspace, and you have to hold a membership row in it. Any of the three failing returns a 404 rather than a 403, because a 403 would confirm the workspace exists to somebody outside it.
Secrets you cannot read back
Tax-authority credentials and till connection details are encrypted with AES-256-GCM. API keys are stored as a hash, shown once at creation, and revocable. Otto cannot show you a key again, and neither can anyone who reaches the database.
Six roles, and one they do not share
Owner, partner, accountant, manager, staff and a profit-and-loss-only role that sees totals and never a vendor name. Deleting a document is a separate right from writing one, and it is the single thing a manager cannot do. Filing paperwork and making it disappear are different powers.
Two-factor, and an audit trail
Sign-in requires an authenticator code, with backup codes and no SMS fallback. Posted lines are never edited, corrections reverse and re-post, and every automated run and manual action lands in an audit log.
Data protection, in writing
Processing follows the principles of the UAE’s Federal Decree Law 45 of 2021 and Jordan’s Law 24 of 2023: defined purpose, minimal data, documented retention. Every client signs a data processing agreement at onboarding that names the sub-processors and the deletion window.
Before you book the call.
Which point-of-sale systems does it work with?
How does the inventory know what I used?
Do I have to move off my accountant’s software?
Do my staff need training?
What if my commission rates change?
I have more than one branch. Does that work?
What does it cost?
What does support look like?
Bring one week of your own reports.
Send us a week of your till reports and a handful of supplier invoices. On the call you will see your own numbers inside Otto: what each platform actually left behind, what your best-seller really costs to make, and what the month would have looked like.
- A live walkthrough on your figures, not a slide deck
- Pricing in writing on the call, modules itemised
- A written data processing agreement before anything is shared
In a hurry? Message us on WhatsApp or email hello@ottofnb.com.