The document builder, explained.
Documents are how a board pack, a monthly review or a lender update gets built in Actuly: blocks of live numbers, charts and commentary arranged into pages, then exported as a PDF. This guide takes you from the data to the download.
June 2026 at a glance
Sales for June were £482k, 8.2% ahead of budget, driven by a strong garden furniture season and the opening of the Reading store. Gross margin held at 59%.
| £k | Jun 26 | Budget | Var | YTD | Budget |
|---|---|---|---|---|---|
| Sales | 482.0 | 445.5 | 36.5 | 2,781.4 | 2,640.0 |
| Cost of Sales | (196.4) | (182.7) | (13.7) | (1,140.4) | (1,082.4) |
| Gross Profit | 285.6 | 262.8 | 22.8 | 1,641.0 | 1,557.6 |
| Overheads | (189.2) | (186.0) | (3.2) | (1,118.5) | (1,116.0) |
| EBITDA | 96.4 | 76.8 | 19.6 | 522.5 | 441.6 |
The editor. Content on the left, a live preview of the real pages in the middle, page thumbnails on the right. Home & Garden Retail Co is an example company.
1. Getting the data right first
A document reads the company's numbers. Get those right, then build.
Every table and chart in a document is a snapshot of the company's data at the moment you added or refreshed it. A few minutes checking the data saves rebuilding the pack later.
Before you start a document, make sure the company is where you expect it to be:
- The trial balance is loaded for the month you are reporting on. The Documents tab only appears once a company has data.
- The reporting lines look right on the Performance page. A document shows the same lines, so a mapping fixed here is fixed everywhere. A line with no actuals still shows, at zero. A Unit with no actuals yet is different: it only appears in a document once you keep it in Performance with Choose report lines (see the Performance guide).
- The budget you want to compare against exists. A block that shows a budget has a Forecast version picker listing every budget. It starts on the adopted one, or on the newest when none is adopted. A Custom Table column left without a version follows the adopted budget.
- If you plan to break anything down by department or region, the dimension is enabled and the data is tagged.
And don't worry: you can refresh at any time. Every data block shows when it was last refreshed and has its own refresh button, both in the Content list and at the top of the block editor. To bring the whole document up to date in one go, open Settings and choose Refresh All Data. Fix a mapping on Tuesday, refresh the pack on Wednesday, and every table picks it up.
Cover, Heading, Contents and Image blocks hold no numbers and never need refreshing. A Text block is the same, except for figures typed as placeholders such as [current.pl.sales.monthly]: those fill in from the data and update when you refresh or change the Report Date. AI commentary is a special case: after a refresh it is flagged as out of date rather than rewritten, which section 5 explains.
Every data block shows its last refresh, and AI commentary that a refresh has left out of date says so. Refresh All Data in Settings updates the whole document.
2. Setting the date
One report date. Every block reports up to it.
The Report Date in the top bar is the month the document is about. Change it and the whole pack moves with it.
You pick the report date when you create a document, and it sits in the top bar afterwards. A P&L block set to June 2026 shows June's month, year to date to June and the twelve months ending June. A chart ends at June. The scorecard reads June. The cover prints June. Nothing has to be set twice.
Next month, change the date and refresh. Changing the Report Date moves every data block to the new month and fetches fresh figures for all of them in one go. Tables, the scorecard and the Full Report move to July. A chart or trends block moves its End to July but keeps its Start, so a twelve-month chart becomes thirteen months. To move every chart and trends block's start as well, change Chart Start in Settings. This is the main reason to build a monthly document once and reuse it, or to save it as a template.
Overrides inside a block. Some blocks need their own dates, and their editors have them. A chart has a Start and End, so a twelve-month bar chart ends at the report date but starts wherever you want it to. Trends works the same way. A table has a Month dropdown. A Full Report block has a Year, offering the last twelve months or a financial year. Settings also holds a document-wide Chart Start, so every chart begins at the same month unless you say otherwise.
Two things to know about overrides. When the Report Date changes, every table's month moves with it, so a table you set to a different month moves too, and a chart or trends block's End moves as above. And a block's Forecast version is deliberately sticky: it stays on the budget you chose until you change it, so after a year end check that each budget column points at the new year's budget.
Top: the Report Date. Below: a chart's own Start and End, and its forecast version, which stays put until you change it.
3. The report blocks
Blocks make a document.
A document is one ordered list of blocks. Pages, columns and page breaks come from how you arrange them.
Adding a block. Hover between any two blocks and a plus appears. It offers a Full block, a Half block or a Page break. A new block is empty and shows the block types to choose from: fifteen, or fourteen where Indicators are not switched on. The width badge on a block toggles between 100% and 50%, so two half blocks sit side by side: a chart next to its commentary, or two charts across the page.
Editing a block. Click it and its editor slides in over the Content list. Most data blocks have the same bones: a title, the data it shows, a date, a Break down by dimension and a Filter where dimensions apply, and a Commentary tick box that adds a text area above or below it. A Full Report has no commentary, and a Custom Table's commentary is yours to write: it has no Generate button. The preview on the right updates as you go.
Arranging blocks. Drag by the handle, or use the block menu: Move to Top, Up, Down, Bottom, or Move to page, which lists the printed pages and drops the block at the end of the one you pick. Copy below duplicates in place. Copy to bottom puts the copy at the very end of the document, past every page break. Styles adds borders, padding and spacing to a block, and shading to a text block.
Pages. You never place blocks on a page by hand. Actuly flows the list onto A4 sheets and splits long tables across pages with the header repeated. A Page break starts a new section, and each section can be portrait or landscape, with its own margins and a background colour. A wide Full Report belongs in a landscape section. A Cover always takes its own sheet.
Undo. The Undo and Redo buttons in the Content header, or Ctrl+Z, step back through structure and content for the session. Inside a text box the shortcut undoes typing instead.
Profit & Loss - last 12 months
| £k | Jul | Aug | Sep | Oct | Nov | Dec | Jan | Feb | Mar | Apr | May | Jun | Total |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Sales | 398 | 402 | 415 | 431 | 455 | 512 | 413 | 398 | 445 | 462 | 472 | 482 | 5,285 |
| Cost of Sales | (163) | (165) | (170) | (176) | (186) | (210) | (170) | (163) | (183) | (189) | (192) | (196) | (2,163) |
| Gross Profit | 235 | 237 | 245 | 255 | 269 | 302 | 243 | 235 | 262 | 273 | 280 | 286 | 3,122 |
| Overheads | (176) | (177) | (179) | (181) | (183) | (190) | (178) | (177) | (185) | (186) | (189) | (189) | (2,190) |
| EBITDA | 59 | 60 | 66 | 74 | 86 | 112 | 65 | 58 | 77 | 87 | 91 | 97 | 932 |
Top: a new block offering all fifteen types, Indicators included, and the insert control between blocks. Below: a Full Report on a landscape section.
What each block is for
Cover
The front page. Company, title and date fill in automatically. Ten layouts, including image layouts. Save a look as a cover template and reuse it on every company.
Heading
A section heading at H1, H2 or H3, numbered when Number headings is switched on in Settings. Feeds the Contents block, and can be hidden from it.
Contents
A table of contents built from your Heading blocks every time the document renders. Whole document or just this section.
Text
Your own words, with headings, lists, alignment, colour and simple tables. Type [company], [date] or a figure such as [current.pl.sales.monthly] and it fills in. Or let the AI write it, in section 5.
Chart
Line, bar, area or pie of any lines you pick, monthly, annual or trailing twelve months, with the budget or forecast overlaid. Series colours follow the palette.
Trends
One line, in depth: monthly, trailing twelve months and its growth, with the forecast ahead. The right block for "how is sales really trending".
Scorecard
The company's KPI scorecard for the report month, with optional commentary. It follows the report date and has nothing else to set.
P&L
The profit and loss as a pre-made table: at a glance, by report format, by reporting line, or sales and margin by dimension. Columns such as Results vs Budget, vs Prior Year, or Variance. Monthly or quarterly.
Cash Flow Balance Sheet Key Metrics
The same idea for the other statements. At a glance or by report format, with comparison columns against budget or prior year.
Indicators
The Balance Sheet block over the company's non-financial indicators: headcount, transactions, enquiries. One month at a time, the same four column formats, plain numbers with each line's own format and no currency. Offered after Key Metrics once the workspace has indicators switched on and the company has a live one.
Custom Table
Build your own table: choose the lines, nest sub lines, add title rows, style rows as headings or totals, add a comment per row, and pick the columns from a library of figures. Start from a layout or from scratch.
Full Report
A whole Results or Forecast page dropped in: twelve months of the P&L, or a budget year with its actual and budget bands. Best on a landscape section.
Image
A PNG, JPEG or WebP from the workspace gallery or a new upload. This is how a client's own logo goes on the page.
4. Your own calculations
Need a figure the report does not have? Build it in the document.
A calculation is a row or series you define from lines already on the report. It is kept in this document only, and any chart, trends, Custom Table or Generate Text block in it can use it.
Where you find it. Every Add lines dialog in a document has two views at the top, Lines and Calculations. That covers a chart, a trends block, the Lines mode of Generate Text and the Custom Table. The Calculations view lists the document's calculations with their formulas and how many blocks use each one. Press + Create calculation to build one. It comes back ticked, so press Confirm and it is added like any other line.
It lives in this document. There is nothing to set up elsewhere and no extra rights to ask for. A calculation you built for a Custom Table is already in the list when you add lines to a chart, so you never build it twice. Ticking one does not tie the dialog to a statement, so a chart of P&L lines can carry a calculation made from Balance Sheet lines. A document holds up to 50.
The Calculations view. Each calculation shows its formula and how many blocks use it, with Edit and Delete at the end of the row.
Building one
Name it. The name is the row or series title the reader sees, such as "Debtor days". Each calculation in a document needs its own name, or the builder says "A calculation with this name already exists."
Pick the inputs. Tick lines under Available lines on the left and each one appears under Inputs on the right, up to 10. Every statement tab is open, so one formula can mix a Balance Sheet line with a P&L line. Untick a line, or press its cross, to take it out again.
Check the short names. Each input gets a short name made from its title, and that is what you type in the formula: Trade Debtors becomes tradeDebtors and Staff Costs becomes staffCosts. You can rename it. Keep it to letters and digits with no spaces, and different from the other inputs. If a name will not work, the builder says so.
Write the formula. Type it in the Formula box, or click a name under the box to drop it in. The line next to the names lists the suffixes and functions you can use. A mistake shows in red as you type, such as "Use == to compare values." or "Unmatched bracket.", and Save stays grey until the name, the inputs and the formula are all valid.
Choose how it shows. Show as offers Number, Percentage (1 dp), Decimal (2 dp), Multiple (x) and Days. Percentage does the multiplying for you: a formula that comes to 0.184 shows as 18.4%, so leave out * 100.
Top: Debtor days for Home & Garden Retail Co, a Balance Sheet line over a P&L line. Below: a typo caught as you type.
What a name means
A bare name takes whatever the block is showing. On a monthly chart, Staff cost % plots each month's staff costs over that month's sales. Switch the chart's Period to TTM and the same calculation plots twelve months over twelve months, with nothing to change. In a Custom Table it fills every column from that column's own figures: the month, the year to date, the budget, last year. A variance column works the formula out on each side and takes the difference, so a percentage's variance is in percentage points.
A bare Balance Sheet line reads its balance. On a chart that is the balance at each month end. A balance has no year to date or TTM figure, though, so in a Custom Table's YTD or TTM column a bare Balance Sheet input reads as zero. Add .value and it reads the balance at that column's month instead.
Percentages come in as fractions. A percentage line such as a gross margin % reads as 0.59, not 59, inside a formula, in every block.
tradeDebtors.value / sales.ttm * 365 and the debtors read their balance while sales read their trailing twelve months, on a monthly chart, a TTM chart and in every table column. An input without a suffix still follows the block.sales + costOfSales gross profit: for June 2026, £482.0k plus (£196.4k) is £285.6k. A cost ratio needs the sign flipped. costOfSales / sales comes out at -40.7%, and -costOfSales / sales gives the 40.7% you expect. That is why Staff cost % is written -staffCosts / sales.| Write | What it reads or does |
|---|---|
sales | Whatever the block is showing for that line |
sales.monthly | The month's own figure |
sales.ytd | Year to date |
sales.ttm | The trailing twelve months |
sales.average12m | The average month over the last twelve |
tradeDebtors.value | The balance, for a Balance Sheet or Key Metrics line |
+ - * / and brackets | Ordinary arithmetic |
== != < <= > >= | Comparisons, for use in a test |
if(test, a, b) | a when the test is true, otherwise b. test ? a : b does the same. |
min, max | The smallest or largest of the values |
roundTo(x, 1) | x rounded to one decimal place |
abs, round, floor, ceil | Drop the sign, round to a whole number, round down, round up |
Suffixes and functions a formula accepts. Powers (^), remainders (%) and the words and, or and not are not, so nest one if inside another instead.
In each block, and the housekeeping
- Chart. One more series, named after the calculation, drawn for the chart's Period, with forecast months when Show forecast is on.
- Trends. The calculation as the one line, monthly and TTM, with its TTM growth.
- Generate Text. In Lines mode the calculation joins the figures the AI reads, under the panel's Monthly, YTD or TTM choice.
- Custom Table. One more row with a figure in every column. Rename and style it like any row. It has no sublines.
- Line lists. In a block's list of lines a calculation carries a small fx badge, so it never reads as a report line.
Editing a calculation, with the pencil in the Calculations view, refreshes every chart, trends and Custom Table block that uses it, and flags any Generate Text block that read it as out of date. Deleting always asks first, and says how many blocks use it: "Staff cost %" is used in 2 blocks. Delete it and remove it from those blocks? Confirm and it comes out of every one.
When a figure is missing it reads as zero, so a + b still shows when one side is empty. A division by zero shows blank rather than an error. If an input line is removed from the report, an amber notice under the calculation names it and says it reads as 0. AI commentary leaves calculations out for now: a chart's commentary covers its other lines, and a trends block on a calculation offers none.
Staff costs and debtors - June 2026
| £k | Jun 26 | YTD | TTM |
|---|---|---|---|
| Sales | 482.0 | 2,781.4 | 5,285.0 |
| Staff Costs | (88.6) | (512.0) | (975.4) |
| Staff cost % | 18.4% | 18.4% | 18.5% |
| Debtor days | 28.5 days | 28.5 days | 28.5 days |
Input 'Trade Debtors' no longer exists; it reads as 0.
A Custom Table's lines with two calculations, and the table they make. Staff cost % follows each column; Debtor days, with suffixes on both inputs, reads the same in all three. Last: the notice when an input line has gone.
5. AI text
Let the AI draft the words. You approve them.
Commentary on a block, or a free-standing text block written from the numbers. Nothing goes into a PDF until you have read it.
Commentary on a block is the simplest. Tick Commentary on a chart, trends, scorecard or statement block, choose Position above or below, and press Generate. There is no prompt: the AI writes from that block's own figures. Fill All Commentary in the top bar works through the whole document in one pass, with a progress dialog. It fills every commentary box that is still empty and every text block that has an AI instruction but no text yet, and it rewrites AI text that is out of date and not yet approved. Approved text is left alone. A chart or trends block that shows only your own calculations is skipped, because commentary does not read calculations yet.
A text block written by AI uses the Generate button in the text toolbar, which opens the Generate Text dialog. It has two modes.
Auto is the simple mode. Say what the text should cover, in plain English: "Summarise this month's performance against budget" or "Explain why gross margin moved". The AI finds its own data, shows what it is doing as it works, and you can expand Data used afterwards to see exactly what it read.
Manual is the advanced mode. You choose the data. Pick a block type (P&L, Balance Sheet, Cash Flow, Key Metrics, Indicators or Scorecard), choose whether it reads whole Tables or particular Lines, set it up, and watch the Preview: that markdown is exactly what the AI will see. Add to Query puts it in the cart on the right, up to six. Then write the instruction and generate. Use Manual when you want to control the inputs: compare two specific lines, keep the balance sheet out of it, or feed it only the sales lines by region.
Writing a good instruction. Say who it is for and what it is for: "two paragraphs for the board, focus on the variances over 5%". Name the comparison you care about. Ask for a tone if it matters. Press Generate under the instruction and the result shows in the dialog. Not quite right? Change the instruction and generate again. Press Accept to put the text in the block. The block keeps its instruction, so next month Re-generate in the text toolbar reopens the dialog with it filled in, ready to run on fresh numbers.
Sales for June were £482k, £36.5k ahead of budget, helped by the opening of the Reading store.
Overheads ran £3.2k over budget…
Manual mode. You choose the tables, see exactly what the AI will read, write the instruction and generate. The result shows in the dialog until you accept it.
Approving what the AI wrote
Generated text lands as pending, with a blue "AI generated" banner and an Approve button. Read it, edit it if you like, and approve. Text that came with a template lands the same way in amber, "Template text - review and personalise", so a sentence written for another company never slips through.
Download PDF checks for you. If anything is still pending, the button reads "Review N items to Download" and opens the Review Before Download dialog, which walks through each item with a View link, Approve, Skip and Approve All Remaining. Download Draft does not check, and prints a DRAFT watermark instead.
After a refresh, approved text is flagged, not rewritten. The amber "Data has changed since this commentary was generated" notice appears on the block, and the block's editor has an Update button. Until you press it the words stay as they were, so a pack can never quietly change its story.
The AI runs on Anthropic's Claude models inside AWS in the EU. Your data is not sent to Anthropic's own systems or used to train models. The AI in Actuly guide explains where it runs and what it sends.
Sales for June were £482k, 8.2% ahead of budget, driven by a strong garden furniture season and the opening of the Reading store. Gross margin held at 59% despite higher freight costs…
The three banners, and the review that runs before a real PDF download.
6. The AI Assistant
Stuck? Ask the assistant.
The AI Assistant can see the company's data and the document you are working on. Ask it to plan, change or explain, in plain English.
Press the sparkle button in the top bar and a chat drawer opens over the preview. It keeps the conversation per document, so you can come back to it. Three kinds of request work well:
- Plan a document. "Build me a monthly board pack: cover, summary, P&L against budget, a sales chart by region and a cash flow." It proposes the blocks and adds them.
- Change what is there. "Make the EBITDA chart a bar chart and move it after the P&L." "Add a heading before each statement." "Start a new page before the cash flow."
- Talk through the numbers. "Why is gross margin down on last year?" It answers from the data, and can turn the answer into a text block if you ask.
It makes the changes itself, as you watch. For a whole new structure it agrees the plan with you in the chat first. Smaller requests, such as "add a heading", it just does. Each change shows in the preview as it lands. When it needs something from you, such as which budget to use when none is adopted, it asks in the chat before carrying on. Every edit from one run is grouped into a single step in Undo, so a plan you don't like comes out as cleanly as it went in. It cannot add Custom Table, Full Report or Image blocks or set a page to landscape, though it can move or remove those blocks.
Text the assistant writes keeps its prompt and the data it used, shown in a "Data the AI used" panel on the block, and lands as pending for approval like any other AI text. The Auto mode in the Generate Text dialog is the same assistant pointed at a single block.
- Heading (H2): "Sales trend"
- Trends: Sales, monthly with TTM, Jul 2025 to Jun 2026, budget overlaid
The assistant makes the edits itself and tells you what it did. One run is one Undo step.
7. Saving, locking, exporting
Autosaved as you go. Locked when it matters. Two ways out.
The editor saves for you, keeps every version, and offers a draft PDF and a final one.
Saving. With Auto-save on, every change is saved about two seconds after you make it, and the Content header shows "Saved at 14:32". Switch Auto-save off in Settings and the header reads "Auto-save off", or "Unsaved changes" once you have changed something; press the Save button beside it to save. Document History in Settings lists every save session with Preview and Revert. Reverting writes the old version forward as a new one, so nothing is ever lost. Only one person edits at a time: a second person sees the document read-only with a banner saying who is editing.
Locking. Once a pack has gone to the board, an admin can choose Lock document in Settings to freeze it: no edits, no autosave, no refresh and no revert, with a banner saying who locked it and when. A workflow can also lock a document as one of its tasks, in the name of whoever runs that task. Locking is the one way to guarantee the numbers in a document cannot move. An admin unlocks it from the same banner.
Exporting. Download Draft gives you a PDF with a DRAFT watermark straight away, with no checks, for circulating internally. Download PDF is the real thing: it first makes sure every AI and template text has been approved, then builds the PDF and downloads it, usually within a minute. Page numbers, the theme and the palette are all baked in.
Templates. Save as Template in Settings keeps a document's structure for this company only, for the whole workspace, or, for Actuly staff, for everyone. Blocks built on categories and Actuly's built-in calculations, such as Gross Profit and EBITDA, work on any company. Blocks that name a specific reporting line or Unit only work on the company that has them. For a workspace template the dialog checks chart and trends blocks for these and will not save until you change them. Tables are not checked, so look over any table that picks out a reporting line.
The lock banner, version history, and the two downloads. Download PDF becomes a review when text is still pending.
Draft or final?
| Download Draft | Download PDF | |
|---|---|---|
| Watermark | DRAFT across every page | None |
| Approval check | None. Pending AI or template text goes out as it stands. | Every pending item must be approved first. Skip only moves you past an item; the download waits until all are approved. |
| Use it for | Circulating a work in progress internally | The pack that goes to the board, the bank or the client |
| Where it goes | Straight to your browser's downloads. There is no emailing or share link, so send it the way you send any file. | |
In short
Build it once. Change the date next month. Refresh, review, download.
- Check the trial balance, the mappings and that the budget you want exists first. Refresh any block, or all of them, whenever you like.
- One Report Date drives every block. Charts and tables carry their own overrides where needed.
- Fifteen block types (fourteen without Indicators), flowed onto A4 pages automatically. Page breaks give you sections and landscape pages.
- Build your own calculations from the report's lines once, and use them in charts, trends, Custom Tables and Generate Text.
- AI text in Auto mode from a plain question, or Manual mode where you pick the data. Everything lands pending until you approve it.
- The AI Assistant can plan, change and explain the document. It agrees a new structure with you first, then makes the edits itself, and one Undo takes a run back out.
- Autosave and version history as you go. Lock the pack when it has gone out. Draft for internal, PDF for the real thing.
More guides
Keep going
Performance
Financial History, Performance vs Plan, and building Report Formats.
Dimensions
Where dimensions come from, Standard and Split, the Dimensions view, forecasting by dimension.
Forecasting
Versions, the three ways a line gets its numbers, special lines, and why everything balances.
Workflows
Schedules, jobs and tasks, assignments and notifications, and where to see everything.
Non-Financial Indicators
Setting them up, entering them each month, reading, forecasting and reporting them.
Dashboards and the Scorecard
The Overview, the Companies list, the Scorecard's colours, and keeping them fresh.
All help guides
Every guide, grouped by what you are doing.
Still stuck? Contact support and we will get back to you.