Income Statement
The income statement is your live profit and loss for any date range, built on accrual double-entry data so it ties to the rest of your books. Revenue and expense ledgers roll up into sections and subtotals — Gross Profit, Operating Income, and Net Income — and you can split the period into month, quarter, or year columns. Expand any account to see the customers or vendors behind it, then drill into the individual transactions.
Key capabilities
- Accrual P&L for any range, defaulting to the last 12 months
- Group by Month, Quarter, or Year to spread amounts into period columns
- Section roll-ups: Operating Revenue, Cost of Goods Sold, Operating Expenses, Other Income, Other Expenses
- Computed subtotals: Gross Profit (after COGS), Operating Income (after OpEx), and Net Income
- Per-section sum row and a per-period column total
- Expand-row counterparty breakdown — customers for revenue sections, vendors for expense sections — with entry counts and % of account
- Period-over-period variance arrows on each counterparty cell
- Click any counterparty amount to drill into the underlying transactions
- Recategorize every transaction for a counterparty into another account in one move
- Hide Empty Rows toggle and tag filtering for project/department views
- AI Analysis panel with gross/operating/net margin tiles, severity-ranked insights, and copy-to-clipboard
- Excel export of the current view
How it works
Revenue ledgers net against expense ledgers across the period. DayZero inserts the standard subtotals between sections so the statement reads top-to-bottom like a formal P&L.
flowchart TD
rev["Operating Revenue"] --> gp["Gross Profit (Revenue - COGS)"]
cogs["Cost of Goods Sold"] --> gp
gp --> oi["Operating Income (Gross Profit - OpEx)"]
opex["Operating Expenses"] --> oi
oi --> ni["Net Income"]
other["Other Income / Other Expenses"] --> niHow to use it
- Open Income Statement (
/books/income-statement) and set a Date Range with preset pills (This Month, This Quarter, This Year) or custom dates. - Choose Group by Month, Quarter, or Year to break amounts into period columns; click Refresh to reload.
- Toggle Hide Empty Rows to drop accounts with no activity.
- Optionally pick a Tag to scope the statement to tagged transactions (e.g. a project or department).
- Expand an account row to load its counterparty breakdown — each shows transaction count and % of the account total, with up/down arrows flagging period swings.
- Click a counterparty's period amount to open the transaction drill-down; use the recategorize control to move all of that counterparty's entries to another account.
- Open AI Analysis for a plain-English summary with margin tiles, then click Excel to export.
Pro tips
- Group by Month during close to watch how each account trends across the period and catch anomalies early.
- Margins (gross/operating/net) appear in the AI panel as % of revenue — a fast read on profitability without manual math.
- Use tag filtering when you track projects, locations, or departments with tags instead of separate sub-accounts.
- Variance arrows on counterparty rows are relative to the previous column — handy for spotting a vendor whose spend just jumped.
- Recategorizing from the breakdown fixes the whole history for a counterparty at once, which is faster than editing transactions one by one.
- Copy the AI analysis straight into a client-facing email or memo.
In-depth guide
Report structure and line items
The statement is organized into sections, each listing its ledger accounts with a Total column and one column per period. A bold sum row closes each section, and computed subtotals are inserted at the right points.
| Section | Rolls into |
|---|---|
| Operating Revenue | Gross Profit, then down the page |
| Cost of Goods Sold | Subtracted to give Gross Profit |
| Operating Expenses | Subtracted from Gross Profit to give Operating Income |
| Other Income | Added after Operating Income |
| Other Expenses | Subtracted to give Net Income |
| Subtotal | Formula | When shown |
|---|---|---|
| Gross Profit | Revenue − COGS | Only when a COGS section exists |
| Operating Income | Gross Profit − Operating Expenses | After the Operating Expenses section |
| Net Income | Operating Income + Other Income − Other Expenses | At the bottom |
How figures are computed
- All amounts come from posted line entries in the double-entry ledger, so the statement is accrual basis — revenue and expenses land when earned or incurred, not when cash moves (see the Cash Flow report for the cash view).
- Values are stored and returned in integer cents and formatted for display.
- Period columns use keys like
2026-03(month),2026-Q1(quarter), or2026(year); column totals sum every account in the section for that period.
Counterparty breakdown and drill-down
- Expanding an account fetches a counterparty-by-period matrix.
- Labels — revenue and income sections label counterparties as Customers; all others as Vendors.
- Each row shows the counterparty's total, an entry-count badge, its percentage of the account, and trend arrows comparing each period to the one before.
- Clicking a non-zero amount opens the transaction drill-down scoped to that account, counterparty, and period.
Recategorization
- From a counterparty row you can move every transaction for that counterparty out of the current account into another category.
- Transactions with a linked bank transaction are re-categorized in bulk; standalone line entries are reassigned directly.
- The statement refreshes so the move is reflected immediately.
Comparison periods and exports
- The live page has no side-by-side prior-period column — for formal variance, common-size (% of revenue), and year-over-year comparisons, run Comparative Income Statement or Income Statement by Period from the Reports catalog.
- The Excel button here exports exactly the rows, sections, and period columns currently on screen.
Start free and see your P&L update in real time.