Ask AwraIQ about features, pricing, onboarding, login, integrations, security, demos, mobile apps, automation, reports, or support.
Profit is not a spreadsheet. It is what the ledger says.
Your income statement in AWRA OpsHub is not typed up from anywhere. Revenue accounts on one side, five named groups of cost on the other, both read straight out of the postings your sales, stock, expenses and payroll already made — with the recognition rule written down instead of assumed.
Read from the general ledger · Explicit revenue recognition · Five named cost groups · Mirrored on the API
Two sides, and a rule for each account.
There is no clever inference here, and that is on purpose. Every account carries a system key, and the statement's revenue and expense sections are defined as lists of those keys — so you can point at any line and say precisely which accounts produced it.
Accounts are grouped by system key, not by matching words in their names. Rename "Operating Expenses" to "Overheads" and the line keeps working, because the statement follows the key rather than the label. That is also why a new account you create appears on the statement the moment you give it a grouped key — and stays off it if you do not.
The monthly depreciation run posts each asset’s charge to Depreciation Expense, which rolls into this group — straight line or reducing balance, set per asset, previewed before it posts and refused for a closed period. A disposal’s loss lands on the statement too, and its gain on the revenue side.
The statement labels its bottom line honestly. Where there is revenue it reads as a net income figure; where a workspace is recording cost before it records any sales, it reads as operational expenses instead of pretending a loss is a profit with a minus sign.
When does a movement of stock become revenue?
Most systems answer this question implicitly and leave you to reverse-engineer it from the numbers. AWRA answers it with a flag you control, on the reason codes you already use to describe why stock moved.
Every issue, check-out and adjustment carries a reason — sold, sample, damaged, internal transfer, written off. That reason is the business meaning of the movement, and you maintain the list yourself.
Each reason has a generates revenue switch. "Sold to customer" has it on. "Damaged in transit" does not. This is the whole recognition policy, expressed once, in the vocabulary your storekeepers already use rather than in an accounting setting nobody opens.
Check out an approved customer invoice and the platform reaches for a system reason called Approved customer invoice, creating it with the revenue flag already on if it does not exist. So the ordinary invoice-to-delivery path recognises revenue correctly on day one with nothing configured.
Where an invoice is behind the movement, the invoice is the authority on all three figures: the agreed total including any negotiated discount, and the tax split out. Receivables take the gross the customer owes, revenue is credited net, and tax lands in its own account. The item's list price never overrides what you actually billed.
Give something away for value against a revenue-flagged reason without raising an invoice, and there is no tax basis and no document to price against — so the fallback total is credited gross to revenue and receivables are debited, because something left for value and nobody has recorded payment for it.
The revenue flag is resolved by the reason's name rather than by an internal identifier. That makes the policy readable — you can see it in the reason list — but it also means renaming a revenue-generating reason needs the flag set again on the new name. If your reason list is settled, this never comes up; if you are still shaping it, set the flag last.
Five groups, each one filled by a different part of the business.
The value of naming them is that you can trace any figure back to the operation that produced it, without a drill-down and without asking anyone.
purchases Goods bought in. Filled by receiving against purchase orders and by stock check-ins.
expenses The buying cost of what left the shelf, posted by every point-of-sale sale and every invoiced issue at the moment it happens.
payroll_expenses Filled by posting an approved payroll run, and by project payouts — which deliberately use the same account so labour cost never disagrees with itself.
operating_expenses Rent, utilities, subscriptions, bank charges — the standalone spend recorded through expense management.
depreciation Where the monthly depreciation run posts each asset’s charge, alongside any loss on disposal. The asset-by-asset detail is in the fixed asset register.
Notice what is happening with cost of sales. In a business running on a spreadsheet, gross margin is a month-end calculation: total the sales, total the purchases, subtract, hope the stock count agrees. Here the cost of each sale is posted at the sale, out of the same item cost the inventory module uses. That means the cost side of your statement moves in step with the revenue side rather than lagging it by a stock take — which is the difference between knowing your margin and estimating it.
It also means a mistake shows up somewhere you will see it. If cost of sales looks impossibly small next to revenue, the item costs behind it are wrong, and that is a fixable data problem with a name. In the spreadsheet version, the same error is a slightly optimistic margin that nobody questions for a year.
What the statement does today — and what we can add to yours.
A profit figure is the last place for a vague claim, so here is exactly what this statement is, and exactly what we would build onto it for you.
What AWRA OpsHub does today
- A profit and loss read straight from the general ledger, with no export, no import and no second set of books
- Revenue and expense sections defined as explicit lists of account system keys, so every line names the accounts behind it and survives an account being renamed
- A revenue-recognition rule you control, carried on the reason codes your storekeepers already use
- Approved customer invoices recognising revenue automatically through a system reason created with the flag already set
- The invoice as the authority on price — negotiated totals and discounts respected, tax split off to its own account rather than inflating revenue
- Cost of sales posted at the moment of sale from the same item cost the inventory module uses, so margin moves with revenue instead of waiting for a stock count
- Five named cost groups — purchases, cost of sales, payroll, operating expenses and depreciation
- An honest bottom line that reads as operational expenses rather than a negative profit where a workspace has costs and no sales yet
- Payroll and project payouts posting to one shared expense account, so labour cost cannot disagree with itself
- The whole statement mirrored on the API for the mobile app and your own integrations
- Depreciation posted monthly into the depreciation group by a run that charges each asset on its own method and life, previewed first and once per month
More we can add to your workspace
- A date range with comparative periods — this month against last, this year against last year, and a year-to-date column
- Point-of-sale takings carried into this statement's revenue line alongside invoiced sales, so a counter-heavy business reads its whole top line here
- A gross profit subtotal drawn between cost of sales and operating expenses, with a margin percentage beside it
- Depreciation defaults per asset class, so a new asset picks up its method and life from its class rather than having them set by hand
- Budget-versus-actual columns and variance percentages, drawing on the budgets you already keep
- Revenue and cost segmented by department, location, project or customer, so the statement can be read a slice at a time
- A PDF and Excel statement pack, and scheduled delivery of it to your accountant on a monthly cadence
- Accrual adjustments and prepayment amortisation posted on a schedule you define
- A per-line drill-through from a statement figure to the individual postings behind it
Where we point you to a specialist
- Which accounting standard your statements are prepared under is a decision for you and your auditor. We will build the statement to the basis they specify; we will not choose it on your behalf.
- Whether a cost is capital or revenue in nature is a judgement with tax consequences, so it stays with your accountant. Tell us the rule and we will build the posting that follows it every time.
- We will not tell you whether a charge is deductible. That is advice, and a software vendor giving it in a sales meeting is selling you a liability.
- Your filed accounts carry your auditor's sign-off. We hand over every posting behind the statement and stay out of the signature block.
The first two items in the middle column are the ones customers ask for most, and both are scoped work on figures that already exist rather than new plumbing. Tell us which you need and we will come back with a written spec, a timeline and a price to add it to your workspace.
One thing to plan around rather than discover: this statement and the retained earnings figure on the balance sheet compute profit on different bases today — this one applies the revenue-recognition rule above, while retained earnings totals the revenue and expense accounts directly. Bringing both onto a single basis is on the list above and we will quote it.
Where the numbers come from, and where they go.
Income statement FAQ.
Is this generated from my operations or do I have to prepare it?
How do I control what counts as revenue?
Can I see last quarter on its own?
Where is gross profit?
Where does the depreciation line come from?
Can I split the statement by branch or project?
Does my accountant have to work in AWRA to use this?
Find out what you earned without asking anyone.
The revenue is already recognised. The cost of sales is already posted. Payroll is already in. Your income statement is a page you open, not a task somebody owes you.