Getting around
One sidebar, three groups. Work is where numbers are entered and maintained. The budget, the actuals against it, the contracts and people behind it. Insight reads those numbers back as analysis. System is Admin: settings, users, data quality rules and your data itself.
- The breadcrumb at the top always names the workspace and the fiscal year you are looking at.
- Rows open records. Click any row in a register to open its drawer. Where a row-end control appears (✎, ✕), it does something the row itself does not. ✎ opens the editor form, ✕ deletes.
- Every number reconciles. Totals in the demo add up to the cent, and the same holds for your own data.
Roles. Who can do what
- Viewer: opens and reviews everything; editing is disabled. Pages say so in a banner rather than failing silently.
- Editor: adds and edits budget lines, actuals, contracts, positions, vendors, projects, team envelopes and allocation keys, and runs imports.
- Admin: everything an Editor can, plus the Admin pages: field settings, data quality rules, workspace settings and user management. Deleting a contract is Admin-only.
In the browser demo they are collaborative guardrails, not security, and the product says so where you switch user. There is no server there to ask, and anyone who can open the file can change the role it starts in. That is the honest description of a single-file build, and it is why the demo is a demo: use it to see how the product works, not to keep anything from anyone.
Working together
Hosted, a workspace is shared. What follows is what that means in practice, and it is written down because the failures are the kind you would otherwise diagnose by guessing.
- Two people can enter data at the same time. Edits to different records merge on their own, and so do edits to the same budget line in different months: the unit of comparison is a record and, within a line, a month. Nobody is asked to take turns and nothing is queued.
- Editing the same cell is a named conflict, not a merge. Two people typing a different number into one month of one line is a judgement call about money, so the product refuses to pick a winner. It names the record, shows you both figures, and asks. Keep yours overwrites theirs; take theirs discards yours. Both are destructive in one direction, which is exactly why a person decides rather than a rule.
- A save that hits any conflict applies nothing. One action can write several records at once, a contract apply being the obvious case, and half of it landing would break the arithmetic across the rest. So the whole save waits for your answer. A save touching only records nobody else moved always lands whole, whatever else is happening in the workspace.
- Other people's changes arrive in your open session when it is safe to apply them, and the screen says who saved.
What the save indicator is telling you
Bottom of the sidebar, and worth two minutes because it is the one control that reports on something you cannot see.
- Saved: the server has the change. Everything the workspace holds is on the server, not in this browser.
- Saving: in flight. Edits are batched over a fraction of a second, so this flickers on a busy screen and that is normal.
- NOT SAVED: changes are on this device only. The connection is gone. Your work is not lost and you do not need to do anything: keep typing, and the moment the connection returns it saves itself with nothing to click. What you must not do is close the tab, because that is the one state where the changes exist in one place.
- A session that expired is offered back to you rather than dropped: the banner says so and signs you in again, and nothing you had typed is discarded on the way.
- An idle hosted session signs itself out after 30 minutes, warning first. It will not sign you out while anything is unsaved: it tries to save, and if it cannot, it says so and stays.
Why this has its own section: a failed save used to be visible on exactly one screen, and an offline edit used to look identical to a saved one. Both were reported as lost work when nothing had been lost. A state that is invisible when it goes wrong is a state the manual has to describe.
Patterns every register shares
- The filter toolbar: a Filter button carrying the number of filters in force, a chip per applied filter that clears on its own, the live count (N of M lines) and Clear. The controls themselves live behind the button, shut until you ask for them. The chips are what make hiding the controls honest: a filter that is applied and invisible would be the one thing a register must not allow, since no row may change meaning under a filter. Every dropdown starts at All, and Clear deliberately leaves the search box standing.
- Scope gets no chip, and that is a rule rather than an omission. The fiscal year is what you look through, not a dimension you filter by, so offering to clear it would offer to clear something Clear does not clear.
- ⚙ Columns: every register has a column picker; the choice is saved with the workspace. Some registers add one-click presets (Condensed / Full), and the button reads ⚙ Columns (N hidden) so a hidden column is never a mystery.
- Sorting: click a header to sort, click again to reverse, a third time to return to entry order. While sorted, a link reads Sorted by header · reset to entry order. Sorting is view-only; your data is never reordered.
- ⤢ expands a table to the full width of the window.
- KPI tiles that filter. Some summary tiles are clickable (Lines over plan, RAG red, Incomplete) and set a real filter on the register below; clicking again clears it. The tooltip says which.
Drawers & editors
Every register uses the same two panes, so learning them once covers the whole product. Clicking a row opens the drawer: a reading pane. The ✎ opens the editor: a form. They are deliberately different screens: the drawer answers "what is this and where does it stand", the editor changes it.
The drawer. Reading a record
- Year at a glance: twelve cells, one per month: grey where only budget exists, gold where actuals landed, red where actuals exceeded budget. The year's story before any numbers.
- The fact list: everything the line carries: partner, entity, classification, GL account, cost centre, the contract it links to. A value inherited from the contract header says so.
- Price / volume: for lines that track quantities, the variance decomposed into a price effect and a volume effect. Months the year has not billed yet are reported apart from a genuine unexplained gap, so mid-year the card never overstates what is wrong.
- Planned rate: budget ÷ planned units (here €47.50 / seat), a planning figure only. It never feeds into anything that moves money.
- Actions: what you can do from here: edit the line, jump to posting actuals, open the linked contract. Each names where it takes you.
The editor, changing a record
- Three steps: Essentials (description, partner, entity, year, opex/capex), Classification & contract, and Monthly amounts, where the year's figure is spread over months.
- Stars follow your own rules. A starred field is one the workspace has marked required in Admin › Data quality. The form asks for exactly what the completeness score checks, because both read the same setting. Change the required set and the stars follow. Saving is never blocked by a missing field; it is flagged instead.
- Closing is guarded. If you have changed anything, Cancel and ✕ ask before discarding, and only then. An untouched form closes silently.
Home
How the year is going, then what needs your attention. Home opens with three figures and puts the attention cards underneath, because how is the year going is the question you brought with you. Cards appear when they have something to say.
- FY plan, actuals to date and forecast against target. Each names its basis and its as-at month, because read on the wrong basis actuals to date is a different quantity and read at the wrong month a different question.
- None of the three is computed here. Each goes through the same function as the register it summarises, and borrows that register's year and as-at window, so Home cannot disagree with the page you click through to.
- The third figure refuses to state a variance when no target is set. Without one it shows the landing and says the target is missing, rather than comparing the plan against itself wearing the word target. Where targets are partial it says how many entities have one.
- Renewals due: contracts with a notice deadline inside 90 days. Miss one and an auto-renew rolls forward, or a contract lapses. Links to the renewal calendar.
- Data quality: how many budget lines are missing required fields. Which fields are required is configurable in Admin › Data quality.
- Shelfware: licence units you are entitled to but have not assigned, priced per year. Paid for and unused. Links to Vendors › Position with the shelfware filter already set.
- Budget versioned: whether the fiscal year has an approved baseline version to measure change against.
- Start something: one-click entry points for the common actions: add a budget line, post actuals, a new contract, project or vendor, import from file, save a version.
Budget lines
Every planned IT cost for the year. The register the rest of the product hangs off. It carries two sub-pages in the left nav, the way Vendors, People and Admin do: the Register itself and Versions (saved snapshots and baselines).
Year rollover is an action, not a place. Carrying a year's plan into the next is something you do once a year, so it is offered where you need it rather than kept as a permanent tab: from the register's own toolbar, and from the empty state of a budget year that has no lines yet. The nav marks nothing active while you are in it, which is honest, so the panel carries its own way back.
The four summary tiles
- Working budget FY<year>: the twelve monthly plan amounts of every line in the chosen year, added up.
- FY target: the Finance target, per legal entity. Set it here, where it is stated: the tile takes the figure directly, and writes it through the same writer the Admin editor uses, so the two surfaces cannot disagree. Admin › Workspace settings is still there for setting several at once, and the tile links to it. An entity without an explicit target counts at its own working budget, and the tile says how many entities have one.
- YTD actuals: everything posted so far, with the delta against the plan for the months that carry an actual, not against the whole year, so January never looks like an 8% year.
- Lines over plan: how many lines run more than 1% over their own entered plan. Clickable: it sets the Over plan filter on the register below.
Filters
All of them behind the Filter button, with a chip on the toolbar for each one you set. Budget year, OPEX/CAPEX, Legal entity, Department, Contract partner, Cost pool, IT tower, GL account, Cost centre, IT cost category (Run / Grow / Transform), TIME (Tolerate / Invest / Migrate / Eliminate), Existing/New, Contracted, Completeness (Complete / Incomplete), Over plan, Missing field (pick a required field and see the lines that leave it empty), plus one filter per visible custom field. A line linked to a contract matches on the values it inherits from the contract header, so an inherited classification filters exactly like a typed one.
Columns and bulk actions
- ⚙ Columns: everything the line carries can be a column. Four start hidden until you switch them on: IT tower, GL account, Cost centre and Owner. The Condensed preset trims the register to the columns you scan daily; Full shows everything.
- Select several lines and two bulk tools appear: ✕ Delete selected (with a warning when postings would go with them) and ✎ Set field: set one master-data field on every selected line, with a preview table of exactly what will change before anything does. Monthly figures and actuals are never touched by a bulk edit.
- Export .xlsx downloads the register; Custom export… opens a three-step builder (pick the entity, pick and order the columns, choose Excel or CSV) with a live preview of the first fifty rows.
- The table ends in a Total (filtered) row: the FY budget and actual-to-date of what is on screen.
- As invoiced / Accrued: the register, its tiles and the total follow the basis you choose. The budget is always entered and stored as invoiced; on the accrued basis each line's months are read over the period its invoices cover, money that recognizes after the year is named, and money arriving from an earlier year's invoice is counted in.
The live target gauge
The sticky card beside the register compares the working budget against the FY target. Prorated to the filtered slice, so a one-entity view is measured against that entity's own share. Its verdicts are graded: Right on target, €X over target (naming the largest run-rate grower), or On target. €X headroom with a nudge to save an Approved version while the year is clean.
Every field on a budget line
| Field | Options | What it means |
|---|---|---|
| Description | free text | The one field that is always required. |
| Contract partner | vendor list | Who you pay: your ERP creditor. |
| Budget legal entity | workspace list | Which legal entity's budget carries this line. |
| Budget year | workspace years | Lines are per fiscal year; the rollover connects them across years. |
| OPEX / CAPEX | OPEX · CAPEX | Operating or capital expenditure. Lives on the line: which is why a contract with both needs two lines. |
| Division / Department | workspace lists | Primary use: who the spend is for day to day. (Workbooks and imports keep the historical Company column name, so old files load unchanged.) |
| Solution provider | vendor list | Whose technology it is, when that differs from who you pay: an EA bought via a reseller: partner = the reseller, provider = Microsoft. |
| Cost pool | workspace list | What you buy: software, hardware, labour. Orthogonal to the IT tower. |
| IT tower | workspace list | What the money runs: compute, network, end-user. One pool spans many towers. |
| GL account | chart of accounts | Where the line posts in the ledger. Imported postings on a different account are flagged, not blocked. |
| Cost centre | workspace list | Who pays: the finance coding an ERP export carries beside the GL account. |
| IT cost category | Run · Grow · Transform | Keeping the lights on, extending, or changing the business. |
| TIME | Tolerate · Invest · Migrate · Eliminate | The lifecycle judgement on the application or service. |
| Recurring / One-off | Recurring · One-off | One-off lines are excluded by default at year rollover. |
| Existing / New | Existing · New | New flips to Existing when the line is carried to the next year. |
| Owner | free text | The person who answers for the line: a name, not a login. |
| Track quantities | No · Yes | Record units beside money: what makes price-versus-volume analysis possible. With Yes, a Unit of measure field appears (seats, GB, days…). Units are never blended across lines. |
| Project | portfolio projects | Groups the line under an initiative on the Portfolio page. |
| Team funding | Unassigned · Direct · ⇄ Allocated | One team funds it all, or an allocation key splits it. One or the other, never both. The control makes the conflict impossible. |
| Contract / Linked contract | No · Yes + contract | Links the line to the agreement behind it; the contract's phased figure then shows under every month. |
| Recognition | As billed · Spread over quarter · Spread over year | How amounts convert to monthly cost in the accrued view. On a contract-linked line this follows the contract's own billing schema and is shown, not chosen. A line under a Paid in full item reads Spread over the term. |
Monthly amounts and forecast modes
- Typed: your plan, twelve cells. Landing = actuals + typed plan.
- ⚡ Run-rate: open months project from posted actuals: a trailing average (3, 6 or 12 months) compounded by a monthly growth %, clamped by an optional floor and cap per month. Only months after the last posting are projected.
- ⤓ From contract: open months project from the linked contract's consumption estimate. Offered only when the contract carries a rate-card line.
- Write projection into open plan cells… turns a projection into your typed plan, with a confirmation, because versions photograph plan cells.
- Department split (optional), which departments the spend is for, in percent. A label, not a calculation; empty means 100% to the primary department, and a split that does not sum to 100% is recorded and flagged, never rejected.
- PO references (optional). Purchase-order lines authorised against this budget line. Imported actuals carrying a matching PO number + line attach here automatically.
Create a budget line
- Go to Budget lines and click + New budget line (or use Add budget line on Home).
- Step 1 · Essentials: description, contract partner, legal entity, budget year, opex/capex, and the contract link, right beside the partner it belongs with. Pick a contract and the line's recognition follows it on the spot. Starred fields are the ones your workspace requires. Click Continue.
- Step 2 · Classification: classify the line and decide who funds it. Click Continue.
- Step 3 · Monthly amounts: type the monthly figures or pick a forecast mode. The live panel on the right updates as you type and tells you what this line does to the year, before you save. The figures you type are always the invoiced amounts; when the linked contract is set to accrue, an accrued line under each month shows what that month will read on the accrued basis once you save (spread from the months as typed, including money arriving from an earlier year's invoice) and the note beneath names what is recognized after the year. It follows your typing, so a month changed by hand reads on its own spread and the difference against the contract shows up afterwards in the contract's FY vs budget.
- Click Save budget line. A missing required field warns; it never blocks.
The live panel distinguishes three situations honestly: the workspace was already over target without this line, this line takes the workspace over, or there is headroom left with it. "This line puts you over" is said only when it is true.
Versions. Baselines and reforecasts
- A version is a frozen photograph of the budget figures: actuals are never versioned. The snapshot keeps each line's identity, description, partner, entity and twelve amounts.
- Four categories: Trial, Approved, Latest Estimate, Forecast. Saving an Approved version makes it the year's baseline; estimates and forecasts move the current estimate pointer. Names are automatic (FY2026 · Approved · v1) with an optional label.
- View shows a version read-only. The whole page freezes and says so in a banner. Deleting the baseline or current estimate is refused until you re-point them.
- There is no Restore, deliberately. A version is a photograph of figures: description, entity, division, supplier and twelve amounts per line, and never actuals. So a restore could only overwrite figures on lines that still exist, and could not bring back a line you had deleted. A control that cannot do what everyone reaching for it expects is worse than no control, so it was removed rather than widened. The undo is the revision trail on Admin › Data, described there. Versions answer a different question: what did we approve, and how does today compare.
- Baseline vs current estimate vs actuals: the standing comparison: approved, latest thinking, and what actually happened, side by side per line with deltas.
- Compare any two versions: tick two versions for a free diff. Two versions of the same year match line by line; two different years match across the line's identity, so a plan and its successor compare even after a rollover.
- Saving a version while lines are incomplete warns. The version includes them as-is; for a clean approved baseline, fill the flagged lines first.
Year rollover. Instantiate the next year
- The whole run is a dry-run plan first: a table of every source line with its disposition, what the target year holds now and what it will hold after commit. Nothing is written before you press Commit.
- Dispositions: copy (non-contract line, amounts verbatim), regenerate (contract-linked lines are rebuilt from the contract's own phasing for the target year), merge (figures onto an existing target line, never duplicated), unchanged / ends, and needs decision when several candidates match.
- Contracts that end before the target year get a decision, not a silent lapse: Lapse (default), Extend (amends the contract's dates), Renew (creates a linked successor contract, items carried), or Replace (a placeholder budget line at the annualised value).
- What is deliberately not carried: actuals and postings are never copied or touched; planned quantities reset (next year's volumes are a new plan); New flips to Existing; one-off lines are listed but excluded until you tick them.
- After commit the register jumps to the new year and a Review required fields panel lists every newly created line with gaps. Fill them inline or later.
Actuals
What has really been spent, per line. Posted per month, so plan and reality can disagree in public. This is also where months are closed.
Two views of the same lines
- Condensed: one row per line: postings count, YTD budget, YTD actual, the delta and a vs plan chip. Click a line to enter its actuals in a drawer.
- Full grid: twelve month columns per line, typed straight into the cells. Keyboard first:
↑↓←→move,Entersaves and steps down,Escreverts, andCtrl/⌘ Vpastes a row of twelve months straight from Excel. A shading toggle colours cells by Monthly Δ or Cumulative Δ: cumulative washes out one-month timing shifts. - + Add actuals offers three ways in: post to an existing budget line, create a non-budget actual line (spend that arrived without being planned. Fully classified, created at €0 budget so it shows in every variance view instead of hiding), or import from file.
Postings. The audit trail behind every cell
- A cell is the sum of its postings. Each posting carries a date, description, amount, month, and the ERP references that let a figure be defended later. Invoice number, PO number, PO line. Type over a cell directly and the difference is booked as a visible manual adjustment posting, so the cell always reconciles.
- Empty is not zero. A month with no posting means "no actual yet", and the product keeps the distinction everywhere. Deleting the last posting sets the month back to empty, not €0.
- The full ledger (click a line name in the grid) adds per-posting detail: the months a posting covers on the accrued basis, the quantity it covers on lines that track units, and the GL account it hit. Flagged when it differs from the account the line is planned against.
- Live burn: a gauge beside the drawer: YTD against budget, and the year-end projection on the current pace, stated as over or under.
As invoiced vs Accrued
- As invoiced: amounts sit where they were billed; what actually hit the GL each month.
- Accrued: budget and actuals are both spread over each line's service period, so an annual invoice becomes a monthly cost. One setting for the whole workspace; a legend under the grid states which view you are reading and where money deferred beyond the year went.
- You always type the invoice. An amount is entered as billed, in the month it was billed, on either view. In the accrued view the field keeps holding what was posted and a hint beside it shows the accrued share and the months it covers. The product never paints a derived figure into a box you can type in, so nothing is spread twice.
- This is a view, separate from two finance decisions: the per-contract accrual treatment (should this contract's cost spread at all) and the workspace default for it in Admin. The view changes what you see, never what is stored.
Period locks. Closing a month
- 🔒 Period locks opens the twelve-month list; click a month to close or reopen it. Editors and Admins can toggle; the grid's month headers carry the same padlock.
- A closed month refuses everything, everywhere: cell edits, new postings, imports into it, re-spreads from People or Contracts. Every refusal names the amount and the exact control that reopens the month, so the message can be followed.
- Nothing in the product ever restates a closed month behind your back, not an allocation-key change, not a contract apply, not an establishment re-spread. Reopening is always a deliberate act.
Post an actual
- Go to Actuals and click the budget line the invoice belongs to. Its entry drawer opens.
- Enter the amount in the month it was billed, or use + Add posting to record date, description, reference and amount. The references are what let the figure be defended later.
- The line's plan-vs-actual updates immediately, everywhere: the register, the drawer's year strip, Teams and Analytics all read the same posting.
A closed month refuses the posting, that is the period lock working, not an error. Imports respect locks too: rows landing in a closed month are skipped and reported, never silently written.
Enter a month of actuals in the full grid
The condensed drawer is built for invoice-by-invoice entry with references; the grid is built for keying a whole month across many lines. Month-end close, in one screen. The two are views of the same data.
- On Actuals, switch the view to Full grid. Every line gets twelve month cells, with that month's budget shown under each.
- Click a cell and type.
Entersaves and steps down,↑↓←→move,Escreverts, and a row of twelve copied from Excel pastes onto a line withCtrl/⌘ V. Locked months are skipped and reported, never overwritten. - A direct cell edit books the difference as a visible manual adjustment posting, so the cell still reconciles to its postings. Click a cell's posting badge to drill down; click the line name for the full ledger with invoice and PO references.
Cell shading compares each month against its budget. Switch it to Cumulative Δ and one-month timing shifts wash out instead of flagging red.
Contracts
The obligations behind the numbers: what is committed, when it renews, and what notice it needs. Two views. The Register and the Renewal calendar; the sidebar badge counts contracts whose deadline needs attention.
The register
- Columns: number, partner, solution provider, owner, term, notice date, linked lines, value per year (with the over-term total and, where indexed, the as-signed figure beneath it), the FY-vs-budget check, billing cadence, and status (Active · Notice due · Notice passed · Expired, plus an auto pill for auto-renewers).
- FY vs budget: compares what the contract recognizes in the fiscal year against the sum of its linked budget lines, on the contract's own accrual treatment, whatever basis the page is showing, so the verdict for one contract is one fact and does not move with the view. ✓ means they agree to the cent; ✓ months off means the year agrees but months differ; a red figure is the difference itself; not budgeted means no line carries it. A +N unmapped chip counts contract lines the budget does not represent yet.
- Filters: partner, owner, notice status, auto-renew, missing field, the FY-vs-budget verdict, notice-needs-attention, ends-in-FY and notice-in-FY (with explicit no end date / no notice date buckets).
- Estimates stay labelled. A rate-card line's estimated consumption shows as est … not committed beside the committed value. An estimate never silently joins the contract's value.
The renewal calendar
- Five buckets by the deadline you can actually miss: the notice date, not the end date: Overdue, Next 30 days, 31–60 days, 61–90 days, Beyond 90 days / no notice date.
- Auto-renew contracts show a cancel-by deadline. Doing nothing renews them; the rest show renew-by: doing nothing lets them lapse. Each row states value per year and exit cost, so the decision has its numbers beside it.
- Mark handled takes a contract out of the active buckets for this cycle, with an optional note (notice served, renewed as successor…); Handled this cycle keeps them listed with a Reopen.
The contract drawer
- The renewal countdown leads: days until the deadline and a plain sentence about what doing nothing means for this contract: auto-renews unless cancelled (doing nothing commits another term, or renews only if actioned) doing nothing lets it lapse.
- Header facts: partner, solution provider, owner, number, term, notice date, value per year and over the term. Estimated consumption is labelled as an estimate, not presented as commitment.
- Contract lines: quantity, unit, unit price, billing cadence and yearly total per line. Partner, owner and dates inherit from the header, so they are entered once. Badges mark rate-card lines, custom terms and indexation.
- Accrual treatment: stated here, decided in the editor at step 5: spread this contract's cost over the period each invoice covers, or leave it in the month billed (workspace default, Accrue, As billed). A finance decision about the contract, not a view switch; changing it never needs a re-apply, because the budget always holds the invoiced amounts and the accrued figures are derived.
- FY vs budget: the month-by-month comparison behind the register's verdict, read on the contract's own treatment, with any budget that falls outside the contract's term called out. Preview as the other treatment shows what the comparison would be if the treatment were changed. The delta it shows is the cost of that change, not a variance, and Apply is withheld while previewing. Set this contract to … adopts it, changing one setting and no budget line; nothing is stored until you do.
The editor. Six steps
| Step | What you enter |
|---|---|
| 1 · Basics | Name, number, external ERP/CLM id, supplier, solution provider, owner, description, start and end dates, portfolio project, team funding (direct or allocated. Same control as a budget line). Start and end dates are required to continue: steps 4–6 are built on the term, so the wizard says so here rather than dead-ending you two steps later. A dateless draft can still be saved. Both supplier dropdowns end in + New supplier…: a missing vendor is created in a small dialog and you land back here with it selected, instead of leaving for the Vendors page and starting over. |
| 2 · Commercial terms | Notice period (days or months: it derives the notice date from the end date when no date is typed), annual escalation % (it prices the phased budget: the wizard's full-term total, the year-by-year preview and what Apply writes all carry it, compounding per year. A contract line can override it with its own estimate), one-off exit/termination cost, and Auto-renews unless cancelled. Plus eight budget dimensions (entity, company, department, cost pool, tower, GL account, cost centre, IT cost category) set once here and inherited by every linked budget line. A line may still override. |
| 3 · Lines | The contract's own items: description, quantity, unit, unit price per year, billing schema (Monthly · Quarterly · Annual upfront · Paid in full. The last bills once at the start for the whole term and, when the contract accrues, spreads over every month of that term). Per item: an external line ref for ERP matching, an own term when it does not co-term with the contract, an indexation estimate plus a ledger of confirmed indexations, a rate-card flag (the contract commits a price, not a total. Committed value is the minimum commitment; consumption is an estimate, month by month), and a licensable flag that tracks the item's entitlement on Vendors › Position. |
| 4 · Budget lines | Which budget line carries which contract line: see the how-to below. |
| 5 · Budget impact | When it lands. A multi-year contract is entered once: the budget year is open for editing and the remaining term years are collapsed behind a summary that states what they carry and that it is derived from the terms you typed at steps 2 and 3. Open any of them to tune it by hand; an untouched year keeps following the contract. Every month is editable by hand, and the contract's Accrual treatment: workspace default, accrue, or as billed. This is where that decision is made; the view panel only states it. The boxes are the invoiced amounts, which is what Apply stores; set to accrue, an accrued line under each box shows what that month will read on the accrued basis once applied, and the note under the grid gives the totals per fiscal year. Both follow the boxes as they stand. Adjust a month by hand and its accrued reading, and the years its deferral reaches, follow. ↻ Recalculate from contract rebuilds the preview after changing the lines. Where a consumption estimate exists, a checkbox decides whether it is included, and the banner says plainly what Apply will and will not write. |
| 6 · Apply | A summary of what each year will create or update, and the button that writes it. Nothing reaches the budget until you press it. Saving the contract also offers to apply, so both routes end in the same place. Frozen versions are never touched. When Apply creates budget lines, it walks you through them: each new line's editor opens in turn, pre-filled from the contract, under a banner naming every created line as a checklist (done, current, pending) so the review has a visible end; saving advances to the next, and stopping midway (closing, or opening some other line) says how many still carry their review flag. |
Step 4 · Which budget line carries which contract line
When you need this. A contract often funds more than one budget line. Licences and services, or an opex part and a capex part. This step is where you say which budget line carries which contract line, so each receives its own share and the total still comes to the contract's value.
- One dropdown per contract line. Point each at the budget line that should carry it. a line that already exists, or not in the budget yet for spend that is genuinely new. Apply then writes each budget line only its own share, so Σ lines is the contract, exactly. Above about eight lines a search box appears; the line you have already chosen stays in the list whatever you type.
- Lines already on another contract are not offered, and the panel says so. Two contracts writing one budget line would count that money twice. The reason this step exists at all.
- Two shortcuts: All on one budget line and One budget line per contract line. Both just fill in the dropdowns; start from whichever is closer and adjust.
- Opex and capex cannot share a budget line: opex/capex is set on the budget line, which a contract line does not carry, so a contract with both needs at least two lines.
- Leave one unassigned and it is flagged, not forgotten. An unassigned contract line is offered as a new budget line at Apply. The usual case: a PO added to a contract partway through the year.
- Apply asks for the fields a contract cannot supply, once for all the lines it is about to create. Opex or capex always, and TIME where your workspace requires it. Both live on the budget line and neither exists on a contract, so there is nothing to inherit. Asking once is the point: a three-year contract split three ways creates nine lines, and nine identical answers is not a question, it is a queue. Each line can be changed individually afterwards.
- Then it opens only what still needs you. A created line that is already complete is not put in front of you. In the ordinary case that is none of them, and Apply simply reports what it wrote.
- The table at the bottom shows what each budget line receives this fiscal year and whether it adds up to the contract. Checked before anything is written.
- Split a contract line across legal entities. Each row also offers Split across legal entities…, for the group contract rebilled to subsidiaries. One row per entity, shares as percentages (the default. They normalise to exactly 100%) or as amounts per year, which must sum to the year's value: a mismatch is refused with the difference named, never silently rescaled. Each entity maps to a budget line of that entity, or to a new line Apply creates carrying it. The slices re-add to the contract line to the cent, per month and per entity-year.
- Split the whole contract at once, into one budget line per entity. Split the whole contract across legal entities… takes one set of shares, percentages only, and treats them as a statement about the contract's whole value. A 50-line contract split three ways therefore produces three budget lines, one per legal entity, not three per contract line. Each line is named for its entity and carries it.
- A contract is split one way at a time. Setting a whole-contract split replaces any per-line splits, and says so before it does. Use the per-line kind when different items belong to different entities; use this one when the whole contract is rebilled on one set of shares.
- Change the shares and the old lines do not linger. Re-applying writes the new shape and empties whatever the new shape no longer funds, so the workspace never counts the contract twice. Apply then asks whether to Replace those emptied lines (remove them from the register) or Amend (leave them at €0 so the change stays visible). The question is asked after the money is already right, so neither answer can be the wrong one. A line carrying booked actuals is never removed: it is kept at €0 and named with its figure, because the contract no longer funds it and what was spent on it was still spent.
The mapping is saved with the contract and carries into next year at rollover, because it points at the line's identity across years rather than at one year's row. If a mapped budget line is later deleted, Apply refuses and says which line went; two rows pointing at one budget line are refused by name; and a budget line the mapping no longer claims is written to €0: disclosed in the table and the overwrite prompt, rather than left silently double-counting the contract. Money is never quietly sent somewhere else, and never quietly left behind.
Link a contract to the budget, from either side
- From the contract: steps 4–6 above. Nothing is written by arriving at a step. Each has a button you actually press.
- From the budget line: open its editor, step 1, set Contract to Yes and pick the contract. The recognition switches to the contract's own the moment you pick it. On step 3 the contract's phased figure appears under every month beside what you budgeted; switch the forecast to From contract to adopt it as your plan.
- Both drawers navigate to each other. A line has Open linked contract, a contract lists the lines it feeds.
Applying into a closed month is refused outright with the amount and the reopening control named. Overwrites are confirmed first, and frozen versions are never touched.
Portfolio
Projects. The change side of the budget, as opposed to the run side. A project groups the budget lines and contracts that deliver it, so a programme's cost is readable without a spreadsheet.
- A project carries: name, short code, sponsor, phase/gate (from your own phase list), RAG status, optional start and end, and a description. Budget lines and contracts join a project from their own edit forms; everything on this page is derived from those links at read time.
- Two health signals, kept apart. RAG is your manual delivery judgement (green/amber/red); the budget-health chip beside it is derived from variance. On budget within 2%, amber to 10%, red beyond. One is an opinion, the other is arithmetic, and the register shows both.
- Commercial exposure per project: contract value, exit exposure (the sum of member contracts' termination costs) and the nearest notice date, so a project review sees its obligations, not just its spend.
- The gauge compares committed contract value against the project's assigned budget. How much of the plan is already promised to suppliers.
- Filters and tiles: phase, RAG, sponsor and fiscal year; the RAG red tile is clickable and filters the register to red projects.
- Mismatches are surfaced: a contract in this project whose budget lines sit in another is flagged in the drawer rather than silently split.
- Unassigned is explicit: run-the-business spend not tied to any project has its own row below the register, so project totals and the workspace always reconcile.
Teams & allocation keys
Who the money is for. Each team gets an envelope for the year; lines are funded by teams directly or split across them by allocation keys, and the page reconciles envelopes against the Finance target, with headroom or overshoot stated, never hidden.
- Per team: lead, member lines, the envelope for the chosen year, assigned budget, of which allocated (what arrives through keys, marked ⇄), the delta vs envelope, YTD actual, FY landing, and a health chip measured against the team's envelope: the register says so, because the identical-looking chip on Portfolio measures a different base.
- Envelopes are a soft target. The gauge reconciles Σ envelopes against the FY target and warns in red when they exceed it. Granting is never blocked. The product warns, people decide.
- An unset envelope is not €0. The register distinguishes not set from a deliberate zero, and an archived team's envelope is kept as history, struck through, and never counted.
- Three total rows, always: Subtotal shown, Unassigned (spend not funded by any team, including months a key could not resolve), and Workspace total, which never changes under a filter.
- Showback, not chargeback. Team figures are derived views of the same money. Nothing is ever stored divided, so the team view can never drift from the register. The team drawer drills into exactly which rule produced each allocated share.
- Headcount per team per year is maintained here too. It is the driver the by-headcount keys read.
Allocation keys
- A key is a named rule for splitting shared spend. Four methods: Fixed % (shares you set, normalised to exactly 100% on save), Even split (equal share across the teams you pick), By headcount (weighted by each team's headcount for the year), and By seats (weighted by contracted seats per department on a licence item, mapped to teams).
- The editor previews the split live: each team's share and what it means on €100,000, always totalling exactly 100% and re-summing to the cent.
- Revisions are effective-dated. Editing a key that is in use asks how to apply the change: correct in place (restating the months it names, with the amount shown), or a new revision from a chosen month. Earlier months stay exactly as reported. If the change would touch a closed month, in-place is refused outright; only a forward revision is offered.
- Nothing is ever invented. A key that cannot resolve for a year (no usable weights) sends that spend to Unassigned, visibly, rather than making up a split. Deleting a key that is still in use is refused until its members are re-pointed.
- An 11th key warns. Keys should encode a handful of genuine sharing rules; past ten they tend to become per-line exceptions. You can still create it, after a confirmation.
Split a shared cost across teams
- Go to Teams → Allocation keys and click + New key. Name it after the rule it encodes, Network, even split, Shared platform, by headcount.
- Choose the method and the teams; check the live preview.
- Open the shared budget line's editor, step 2, and under Team funding switch to ⇄ Allocated, then pick the key. Choosing a key replaces direct funding. A line is one or the other, never both.
- Check the result on Teams: each team's of which allocated column shows its share, and the team drawer names the rule, the percentage and the revision behind every figure.
Splits are derived per month, every time. Stored money is never divided, and the parts always re-add to the whole, to the cent.
People
The establishment. Budgeted positions and what each one costs this year. Two sub-pages: the Establishment register and the Org chart.
- A position's cost is entered, not derived. You type the fully-loaded figure Finance already carries, per fiscal year. The one money field on the form. Base pay, when you want it recorded, is an ordinary compensation component further down (one click adds it), reference like the rest: it moves no money and joins no total.
- One row per position. Two people with the same job title are still two rows, because they are not paid the same.
- Many positions, one budget line. Positions consolidate the other way too: several positions can fund the same line, and Apply to budget writes one line per team: twelve engineers on one team become a single staffing line, with each position's share recorded behind it so every euro still drills back to its position.
- Five summary tiles: the establishment total (with positions and FTE), open/planned seats, what is applied to budget, what no line carries yet, and money falling in closed months (which is what blocks Apply).
- The FY figure leads; a typed month pins. The figure spreads across the staffed months, exactly to the cent. Type over any month and it is pinned 📌 at what you typed. The remainder re-spreads across the untouched open months, so vacation money or a 13th-month payment can be shaped without the year moving. Pins are saved with the position: protection, not edit history: a later change to the FY figure re-spreads around your shaped months, never over them. Click a pin to release it (or Release all); closed months are never touched from either direction, and a figure below what closed + pinned months carry is corrected up with a note saying why.
What a position carries
| Field | What it does |
|---|---|
| Title · Code · Level | Identity. Level also drives the org chart's chips (Contractor, Senior…). |
| FTE % | Weights headcount roll-ups. It never scales money: the FY figure is entered. |
| Status | filled · open · planned · temporary staff. Open and planned count as unfilled seats. Temporary staff has a term: Start and End become required, and an Hourly rate field appears. Reference, like base pay; the FY budget stays the cost to budget. |
| Start · End | The staffed window; blank end is open-ended. Months outside it carry nothing. |
| FY budget | The field that decides the budget: the fully-loaded cost for this year. |
| Reports to | Draws the org chart. Reporting only: it moves no money and feeds no allocation. |
| Team | Who funds the position: the grain Apply-to-budget writes at. |
| Budget line it funds | Linking alone moves no money: nothing changes until you project or apply. |
| Master data | Entity, company, department, cost pool, tower, GL account, cost centre… carried onto generated budget lines when the group agrees on them. |
| Base pay, bonus & allowances | Reference components per person: base pay (one click adds it, fixed per year, with its own GL account and cost pool), % of base, % above a franchise, fixed per year or month, one-off. Reported, never added to the FY figure. Percentage components resolve against the base-pay component. |
| Compensation changes | A dated ledger: a raise from July is recorded from its month onward and moves no money: the FY budget is entered, not derived. |
The position drawer
- How the budget lands: the twelve months, editable in place, with the FY figure leading: a typed month pins 📌 and the rest re-spreads, the pin is kept with the position so later FY changes re-spread around it, and the pin itself is the release control. Closed months show a padlock and refuse edits; the FY figure can never be set below what closed and pinned months carry, and the drawer says so with the amount.
- Linking to a budget line makes the position fund that line. The drawer says so in a sentence, next to the control that does it.
- Compensation changes are recorded, not applied: the ledger line states it where the numbers are: applied from its month onward, earlier months never restated, moving no money.
Budget the establishment and apply it
- Go to People and click + New position: title, code, level, FTE, start (and end for fixed terms), the team that funds it, and the fully-loaded FY cost.
- Repeat per position. One row each, even for identical roles.
- Review the tiles: total establishment, open seats, applied vs not yet carried by any line.
- Click Apply to budget…. It writes one budget line per team: so the Teams roll-up keeps showing where the people money sits, with per-position attribution, and shows exactly what it will create or update before doing it. Only the chosen year is touched; actuals never are.
Master data transfers to a created line only when every position in the group agrees on it. A field they disagree on stays empty and is flagged, rather than taking anyone's guess. If any of the money falls in a closed month, Apply refuses the whole year and names the months, the amount and where to reopen them. A half-applied year reconciles to nothing.
The org chart
- Two views: By team (an indented rail: teams, their people, each with FTE, cost and share of the establishment; teams fold with their subtotal still visible) and By reporting line (cards and connectors built from the Reports to field, each card totalling everyone below it, with its own cost stated separately).
- Large charts open by whole levels: as many as fit at a glance, never fewer than two, and a folded chart says exactly how many branches start folded and that the totals are untouched. Nothing folds on a small chart, and the sentence disappears with it.
- Nobody disappears. A position nothing connects to the tree is listed under the chart with its cost still counted. The chart can be incomplete, the money never is. Click a person in the rail for the months they are staffed, with genuine zeros explained (starts in March, ends in October…).
Vendors
Who the money goes to. Three sub-pages: the Directory (the register itself), the Scorecard (spend rolled up per vendor), and Position (licence entitlements against what is actually assigned).
Two roles, one vendor
Every vendor can play two roles on a contract or line: the contract partner: who you pay, mapping to your ERP creditor, and the solution provider: whose technology it is. The same technology bought through three resellers is three payment relationships and one technology exposure; the Scorecard lets you read it both ways.
Directory EDITOR
- Per vendor: name, Vendor ID (the ERP creditor code that links imports and exports to your source systems), contacts (name, email, phone), and a workspace-wide 1–5 rating (Poor to Excellent).
- Used by: clickable counts that jump straight to the contracts and budget lines naming the vendor as partner, plus its solution-provider references.
- Deleting is refused while anything references the vendor: the refusal lists the contracts and lines to reassign first, so a vendor never vanishes out from under its spend.
Scorecard ALL ROLES
- Toggle the lens: Contract partner (who you pay): the negotiation and creditor-concentration view, or Solution provider (whose technology): the roadmap and concentration-risk view.
- Per vendor: contracts, lines, annual spend, full-term value, next term with escalation applied, exit cost, and the next notice date, with a total row. Unattributed spend shows as its own (unassigned) row.
Position. Licences EDITOR
- Entitled vs assigned vs used. Mark a contract item licensable on the Contracts page and it appears here: what the contract entitles you to, against the counts you enter. A reconciliation ledger, not discovery. Assigned counts are yours to maintain.
- The gap has a name and a price. Positive gap = shelfware: paid-for but unassigned, priced per year at the next-term unit price; negative = over-deployed: a true-up is owed at renewal. The drawer says what you will negotiate up or down at the renewal date.
- Assigned counts can be split by department, with a warning when the split does not sum to the assigned total.
Analytics
The numbers read back as analysis, on five tabs. Spend, Contracts, Licenses, Vendors and My board. Filter by fiscal year and legal entity, switch the basis between as-invoiced and accrued, and print any tab to PDF. The tab order is yours to set in Admin.
Spend
- Four headline tiles: budget, actuals to date (honestly stated against the full-year budget, so early in the year the figure is low by construction), variance to date, and the full-year landing: where the year ends if run-rates hold, projections included.
- Classification wheels: TIME (Tolerate / Invest / Migrate / Eliminate), existing vs new spend, and Run / Grow / Transform, each as a share of budget. Unclassified spend shows as its own slice rather than being guessed.
- Budget vs actuals per month: bar pairs that turn red where actuals exceed budget, and a hotspot list naming the largest overruns and underspends.
- Breakdown: top ten by any dimension: opex/capex, entity, department, partner, cost pool, tower, GL account, cost centre, Run/Grow/Transform, TIME, team, or any custom field.
- Price, volume & mix: for lines that track quantities, the variance decomposed into a price effect, a volume effect and a mix effect that always sum exactly to what they explain. What they cannot explain is split honestly in two: Not yet billed: budget for months nothing in the workspace has invoiced yet, which is money the year has not reached, not a gap in your data, and Unexplained: a real gap in months that have been billed, shown and never split further.
- Planned unit rates: budget ÷ planned units per cost pool and unit, summed only over months that carry both sides. A planning figure, never blended across units, never stored.
- Year on year: plan against landing for every budget year, each delta naming the year it is measured against.
Contracts
- Tiles: active contracts and their annual value, notice within 90 days with the money at stake, auto-renew exposure (what rolls forward unless cancelled), and the estimated escalation uplift for next year.
- Renewal load by fiscal year: every active contract placed in a year, toggled by end date (when you need a renewal or a saving in that year's numbers) or by notice date (when the decision must actually be made, often a year earlier). Contracts without a date get their own explicit bucket, and clicking a bar filters the register.
- Next deadlines and exit-cost concentration: the soonest decisions and the total switching cost.
Licenses
- Shelfware (unused units and their yearly price), over-deployment (units over entitlement and the estimated true-up), and how many positions are tracked. The table shows entitled vs assigned vs used per item, filtered to tracked, untracked or all. Monetary values are estimates at next-term prices. The page says so, and nothing here changes a contract.
Vendors
- Concentration: the top vendor's share of total vendor spend, how many vendors sit above your own threshold (set in Admin), and the top-ten bars, each stated as a share of total vendor spend. Measured by contract partner, who you pay, organisation-wide.
My board
- Your own tile grid: pick any of thirteen KPIs from the four dashboards (landing, actuals to date, budget, notice within 90 days, auto-renew exposure, escalation, switching cost, shelfware, over-deployment, positions tracked, top vendor share, vendors above threshold, total vendor spend), order them, and the board persists with the workspace. Spend tiles follow the year, entity and basis filters.
Admin
Settings and stewardship, on five sub-pages: Field settings, Data quality, Workspace settings, Users and Data. Admin-only. Other roles see the pages locked, except Users, which everyone can read.
Field settings
- Nine workspace lists, yours to edit: cost centres, legal entities, divisions, departments, cost pools, IT towers, GL accounts (your chart of accounts), budget years and project phases. Add and remove options; every dropdown in the product follows. Two lists are fixed, because each is a method rather than your vocabulary. TIME is Tolerate · Invest · Migrate · Eliminate. IT cost category is Run · Grow · Transform, a standard IT-spend taxonomy: the three options are shown with no way to add or remove one, and the refusal holds in the data as well as on the screen, so a workbook cannot smuggle a fourth in. A fresh workspace starts these lists the honest way: legal entities, divisions and cost centres empty (they are yours, and demo values would masquerade as defaults), budget years at just the current year; the rest carry sensible starters you can prune.
- Four custom fields: rename them, define each one's option list, and show or hide them. A visible custom field appears in budget entry, as a register column and as a filter, and rides along in exports and imports.
Data quality
- You choose what "complete" means. Thirteen budget-line fields can be required (from opex/capex to owner), six contract fields (number, partner, owner, start, end, notice period) and two vendor fields (Vendor ID, name). Everything that flags incompleteness (row badges, form stars, version-save warnings, the scores here) follows this one set. Warn-only: saving is never blocked.
- Completeness: how many lines are complete, the gap per required field, and the incomplete lines themselves; every figure clicks through to the filtered register.
- Contract hygiene: contracts with no owner or no actionable notice deadline, regardless of configuration: those are the gaps that cost renewals.
- External-key hygiene: duplicate PO references, duplicate invoice numbers, duplicate vendor IDs, lines without a PO and postings without any reference. Soft checks on the keys that tie itbudgit to your ERP; warn-only, but each one weakens matching until fixed.
Workspace settings
| Group | Settings |
|---|---|
| Identity | Company name, and the workspace currency: one per workspace. Changing it re-labels every amount; it never converts them, and the confirmation says so before anything changes. |
| Display | Thousand separator (1,234,567 or 1.234.567: entry accepts both), and a read-only view of the locked months, pointing at the Actuals control that toggles them. |
| Budget targets | The FY target the live tracker measures against: per legal entity and per year, as an absolute amount or a percentage reduction versus that entity's prior-year budget. Entities left without a target count at their own working budget. |
| Dashboard | The order of the five Analytics tabs, and the vendor-spend threshold behind the concentration KPI. |
| Accounting | Which basis the workspace opens in (remember the last used, always as-invoiced, or always accrued), a view setting, and Accrue contract cost by default. A finance policy individual contracts can override. |
| Notifications | Contract-renewal alerts, and how many months before each notice date they fire. |
Users
- Per user: name, email, role, active. Everything a user changes carries their name in its history.
- Guardrails you would want: the last active Admin cannot be demoted, deactivated or removed; you cannot remove yourself; removing a user keeps their name on everything they touched.
- Invitations are drafted for you to send. Copy the message or open it in your mail client.
- Hosted, this list does not decide who can sign in. Access is membership of your organisation at your identity provider, so adding a row here invites nobody and removing one shuts nobody out. Use Invite someone, below the list, to give somebody access. The list itself is the roster of who has actually signed in, and where their entity access is set.
- Remove access (hosted, on a signed-in row) is the control that genuinely revokes. It ends that person's membership of your organisation at the identity provider and clears their entity access here, so the next request they make is refused rather than merely unwelcome. Their name stays on everything they changed: removing somebody is not rewriting the history of what they did. If they are re-admitted at the provider later, signing in makes them a member again and the roster stops saying otherwise, because a roster that contradicts a live session is worse than no roster.
- Entity access (hosted). Limit somebody to specific legal entities. Tick the entities on their row: they are then served only those entities' budget lines, positions and contracts, with the money outside their entities stated rather than silently missing, and their saves are refused outside it. Enforced on the server, not in the browser. Admins are never limited, and somebody who has not signed in yet has nothing to limit. A grant attaches to a real sign-in account, not to a name in this list. To give access back, use All entities; ticking nothing is refused, because a grant to nothing is a lockout.
Your account menu
- Top right: your name opens Log out and Info. Logging out ends the session with your identity provider and returns you to the website.
- Info states the version, the exact build, when the workspace was last updated, your plan, your organisation and your user id. The things a support question needs. A deployment that cannot answer one of them leaves it out rather than guessing.
- Inactivity: a hosted session signs itself out after 30 minutes without input, warning first. It will not sign you out while anything is unsaved: it tries to save, and if it cannot, it says so and stays put. Your work is never discarded to make a timeout tidy.
Data
- Saved import mappings: the column choices you have made once, listed with their source, how many imports used them and when. Edit renames a mapping and sets how its file is read (sheet name, header row, decimal separator, date format) for exports whose headers do not start at row one. Deleting a mapping never touches the postings imported with it.
- Storage: where your data lives and when it last saved. Export a backup now writes the workbook immediately. The file restores everything, including teams, allocation keys and users, and it is in both builds because your data is yours. The Open workbook… and Save as workbook… round-trip controls belong to the hosted product; the free demo does not offer them.
- Earlier versions (hosted, Admin only) . This is the undo. Every accepted change to the workspace is recorded with who wrote it and when, and kept for twelve months; the most recent version is never removed whatever its age. The list gives each one a line count, because against bare timestamps every row looks the same and which one is from before I deleted everything is the only question anybody brings here.
- Putting one back goes through the same writer as any other save, so a restore is itself recorded and itself undoable. It is not a one-way door.
- It names the version it expects to replace. A colleague saving between the moment you read the list and the moment you press the button is reported, not silently discarded.
- It refuses while you have unsaved edits, and that is the one genuinely unrecoverable case: everything a restore replaces is in the trail, and unsaved work is in no version at all.
- The browser demo has the export and no trail. There is no server there to keep one, which is why this card is not shown in it.
- Upload templates: a blank .xlsx with just the header row, per import kind, with the columns you pick, so a filled-in template imports cleanly.
Your subscription
This whole section is about the hosted product. The browser demo has no account, no plan and nothing to pay, so none of it applies there.
Getting a workspace
- Sign-up happens at your identity provider's own screen, reached from any pricing card. There is one door rather than a separate register and sign in: the provider decides which you need from the email you give it, so there is no wrong button to press and no "you already exist" at the least forgiving moment.
- The tier you clicked travels with you and arrives pre-selected on the other side, so choosing on the pricing page is not a decision you have to make twice.
- What exists the moment you land: an organisation, and no workspace yet. That is what first run is for.
First run. Three questions, in order
- Which plan. Asked as a step rather than left as a setting, because for somebody who has just signed up, becoming a customer is not a preference to find later.
- How to start. Demo data to look around with, an empty workspace, or upload a workbook you already have. The third is the usual answer for anyone arriving from a spreadsheet.
- Then the product opens, and everything else in this guide applies.
The three tiers
- Ledger: one budget owner, one legal entity, a contained estate. Budget, actuals, contracts and vendors, reconciled.
- Portfolio adds the question what does each team cost?: teams and envelopes, allocation keys, projects and portfolio roll-up, and entitled-versus-assigned licence positions.
- Group adds across which entities and vendors?: more than one legal entity with an FY target each, and the two-role vendor model that separates who you pay from whose technology you run.
- The tier gates what you may CREATE OR CHANGE, and never what you may read. A workspace that drops a tier keeps its data and its figures; it stops being able to edit the parts the lower tier does not carry, and says which.
- Billing is annual, and the price is shown per month so you can compare it with things that are sold monthly. An IT budget is planned and defended a year at a time, which is why there is no month-to-month option. Figures live on the pricing page and are not repeated here, because a number kept in two places is a number that will disagree with itself.
- Viewers are unlimited. Editors are seats. The people who need to look at the numbers are usually more numerous than the people who change them, and charging for the first is a good way to make a budget less visible than it should be.
Changing tier
- Up takes effect immediately and is charged immediately. You get the tier you just bought, now.
- Down takes effect at your renewal date. No credit is minted and no refund is implied: you keep what you already paid for until the term ends, and the new tier starts when the new term does.
- A pending change is shown, with a way to cancel it. A scheduled change nobody can see is indistinguishable from one that failed.
- An upgrade supersedes a pending downgrade rather than stacking with it.
- One failure worth knowing: a European card can require re-authentication with your bank. The product says the payment needs your action rather than reporting an upgrade that has not been paid for.
Why down waits for renewal, since it looks less generous than it is: with an immediate downgrade the arithmetic on an annual term produces a large standing credit for a subscription that has run for weeks, and the pattern that permits is buy the top tier, use it a month, drop to the entry tier and renew free for years. Waiting to the renewal date costs you nothing you paid for and closes that.
Adding somebody
- Invite someone sits below the Users list on Admin › Users, and it is Admin-only. Type their email address, choose the role they should have, and send. They are emailed by your identity provider and join the workspace when they accept.
- The role decides whether they use a seat, and the dialog says so before you send. Admin and Editor both hold one; a Viewer never does. That is deliberately said at the moment you choose, because a seat is claimed the first time somebody saves — so without it the limit is met by whoever happens to type first, long after the decision that caused it.
- When every seat is in use you can still invite a Viewer. The two writing roles are shown greyed rather than hidden, so it is clear the seats are in the way rather than the role being unavailable, and moving to a larger plan is offered beside it. Nothing is bought on your behalf.
- Pending invitations are listed, with who they went to and when. Revoke withdraws one. Resend sends a fresh invitation and stops the old link working, which the confirmation says: use it when the first did not arrive, not as a reminder.
- Somebody who has already accepted is not affected by revoking. To remove them, use Remove access on their row.
- Roles are set at your identity provider, not here. The role you pick when inviting is the one they are invited into; changing it afterwards is done there, and this workspace reads whatever their token carries the next time they sign in.
Why this lives here rather than sending you to the provider: the provider's own administration screen belongs to us, not to you — it administers every customer's organisation at once. And the role is where the seat consequence lives, so the choice and its cost belong on one screen.
Editor seats, and what happens at the limit
- A seat is held by anyone who can write, which includes Admins. An Admin is an Editor who can also reach these Admin pages, so an Admin who saves anything holds a seat exactly as an Editor does. Viewers never hold one. Said plainly because it decides how many people you can buy for: the entry tier includes one editor, which is the owner — the moment a second person needs to save something, that is the upgrade. Your tier's count is on your own screen, in Admin › Workspace settings beside the plan name, and on the pricing page beside each tier. It is not repeated here, for the same reason the prices are not: a figure kept in three places is a figure that will disagree with itself.
- You can see who holds them. Admin › Users states how many of your seats are held, and each person's row says whether they hold one or simply have not saved yet — a distinction that decides whether you are near the limit or nowhere near it. Release on a row frees a seat; they keep their role and claim one again the next time they save, so release only when somebody has finished.
- You are warned before it bites. When more people have a role that can write than there are seats, the page says so and names when it will happen — the next of them to save. Nothing is blocked at that point; it is the notice you would otherwise not get until somebody lost work-in-progress.
- Over the count pauses editing for everyone until seats are released.
- Viewers are unlimited on every tier, and they cost you nothing. A viewer reads the whole workspace and cannot save, so no seat is ever taken — not on their first visit and not on their hundredth. That is enforced on the server rather than hidden in the screen: a viewer's save is refused before it can touch anything.
- Nobody is revoked. Every seat holder keeps their seat, and an Admin chooses which to release. The product will not pick a person to demote on your behalf.
- The way out stays outside the block. Reading, exporting, the seat roster and releasing a seat all work while editing is paused. A block whose only remedy sits behind the block is a lockout, not a limit.
- Two refusals, kept distinct because they need different answers: everybody is paused (you are over the count) and one newcomer does not fit (the workspace is the right size for its tier).
- The refusal is addressed to whoever meets it, which is usually not an Admin. The seat is taken at the moment somebody saves, so the message lands on the person who typed something — and both ways out are Admin-only. An Admin sees two controls on it: Free a seat, which opens the roster, and a move to the tier that would fit, named. Anybody else is told which colleague to ask, by name — names only, never an email address. In every case the work stays on the device, unsaved and labelled as unsaved, the banner says it is retrying automatically, and it saves itself once a seat is free without anything being clicked. Try now is there for the moment somebody tells you a seat has been freed and you would rather not wait for the next attempt.
- After a scheduled downgrade the warning names how many seats must go before the date, repeatedly. The pause then arrives on a date you were told about rather than as a surprise.
Why a pause rather than simply refusing the next new editor: a cap that can be exceeded indefinitely by downgrading is not a cap, it is a suggestion. Pausing is the strongest thing that can be done without taking somebody's access away, which is the line this product will not cross for a billing reason.
If billing lapses
- The workspace becomes read-only, and the message says which state it is in: cancelled, unpaid, paused, or payment outstanding since a date. A banner that states only the consequence leaves you guessing at the cause.
- Your data is intact and you can still export it, throughout. Nothing is held back to make you pay; a workbook export is one click at any point.
- One case blames us rather than you: if we have not been able to confirm the subscription for a week, that means we missed something, not that you failed to pay, and the message says so.
Ending it
- Manage subscription, on Admin › Workspace settings, opens your billing account: the card on file, every invoice, and the subscription itself. That is where a change of card or a cancellation is arranged. If what you need is not offered there, email us and a person will do it.
- Cancelling ends the subscription at the close of the term you have paid for, not on the day you press it. The panel says so while a cancellation is pending, so a scheduled end is never something you have to remember on your own.
- Export first. The workbook carries everything, including teams, allocation keys and users, and it opens in Excel.
- Erasure is something a person runs, not a button. Deleting a customer's workspace is an act, not a request a browser should be able to make. It takes a final export first, and refuses if that export fails.
- What erasure cannot reach, said plainly rather than implied: invoices already issued. A financial record kept under a legal obligation outlives a request to erase, so nobody is told everything is gone while an invoice with their address is on file.
How money behaves
Rules that hold everywhere, because the product's whole point is numbers you can defend.
- Money is exact. Everything is stored and computed in cents. Any split (an allocation key, a contract spread over months, an establishment across a year) uses a method whose parts always re-add to the whole, to the cent.
- Totals never change meaning under a filter. What is shown, what is unassigned and the workspace total stay distinct, and the workspace total never moves because you filtered.
- Closed months stay closed. No edit, import, re-spread or recalculation restates a closed month. Every refusal names the amount and the exact control that reopens the month. Reopening is a deliberate act.
- Nothing is silently dropped or invented. A cost no team funds is an explicit Unassigned row; a key that cannot resolve sends money there visibly rather than inventing weights; an import value the workspace does not recognise is left blank and flagged, never guessed.
- Empty is not zero. A month with no actual means "no actual yet", and the product keeps the difference, in entry, in views, in imports.
- Derived and entered stay distinct. Stored money is never divided (team figures are derived at read time), a derived figure cannot be typed over and says so, and reference data (base pay, hourly rates, compensation history, consumption estimates) is labelled and moves nothing.
- A figure states what it measures. A number carries its unit, its scope, and whether it is committed or estimated. An estimate is labelled as one, a rate too small to show says < €0.01 rather than €0.00, and a percentage names the base it is a percentage of.
- Warnings inform, they don't block. Envelope overshoot, target overrun and missing required fields show and let you proceed. The product assumes the people using it are the ones accountable for the numbers.
The workbook round trip
Your data is yours, as one Excel file. Export writes the entire workspace (lines, contracts, teams, keys, positions, postings, settings) as a workbook; Import reads one back. A workbook saved from an older version always loads in a newer one.
- It is a backup, honestly reported. If an export cannot be produced, the product says so. It never claims a backup that did not happen.
- Everything round-trips. Export and re-import reproduces the workspace. The totals, to the cent.
The import wizard
Five steps. Upload · Map columns · Match rows · Review · Commit: reachable from Budget lines, Actuals and Home. It reads .xlsx and .csv, and files are parsed locally in your browser; nothing is uploaded.
- Five kinds of file, each stating what it will and will not touch: Actuals (GL, bank or supplier rows land as postings (the cell always drills down to the invoice), Budget lines (create or update figures) actuals are never touched), Vendors, Projects and Contracts (headers only. Items are entered by hand).
- Saved mappings are chosen up front. If you have imported this source before, pick the mapping at the first step and its column choices, including which sheet and header row it reads, apply to the file you drop. A poor fit is called out in red rather than guessed through; you always confirm before anything is imported.
- Column mapping: say which column is the date, the supplier, the amount, the references. Two columns claiming the same field block the import until resolved. One would otherwise be silently ignored.
- Row matching: actuals match to lines by PO number + line first, then invoice number, then cost centre + GL account, then supplier and description; budget rows merge by ID or business key. Every ambiguous row asks; every match is reported before anything is written, and possible duplicate invoices are tagged.
- Unknown values are decisions, not accidents. A classification the workspace does not recognise offers three choices: add it to your list, map it to an existing value under another name, or leave it blank for Data Quality to flag. The import never invents workspace values.
- Review, then Commit. The dry run shows every row's effect before anything is written; the commit report names every decision applied for you (values added, values mapped, rows skipped for locked months) so nothing bulk happens invisibly.
- Save the mapping after committing, and next month's file needs no mapping at all, including the value decisions, which are remembered and reported each time they are applied.