Reports & Exports
Building branded financial reports, exporting data to Excel, and creating fully custom layouts with the Custom Code block.
Building a report
Reports are built from blocks— modular sections you drag onto the canvas in any order. Each block pulls live data from your client's QBO or Xero company when you click Pull data.
Creating a report
- Go to Reports → New report.
- Pick a client and the period (e.g., March 2026).
- Start from a template, or drag blocks from the palette on the left.
- Click each block to configure it — title, variant, visibility.
- Click Pull data to fetch live figures from QBO/Xero.
- Click Generate PDF when ready to preview the finished report.
- Click Send to email it from your Gmail or Outlook.
Block types
The block palette is grouped into five sections:
| Section | Blocks | Plan |
|---|---|---|
| Cover & Layout | Cover Page, Table of Contents, Custom Text, Custom Code, Divider | Cover Page free; TOC, Custom Text, Divider, Custom Code = Pro |
| Financial Overview | P&L (Standard / Comparison / By Class / By Customer / By Location), Balance Sheet (Standard / Comparison), Cash Flow, Statement of Cash Flows | P&L + Balance Sheet free; Cash Flow + Statement of Cash Flows = Pro |
| Customers (A/R) | A/R Aging (Summary / Detail), Sales by Customer, Customer Balance | A/R Aging free; Sales by Customer + Customer Balance = Pro |
| Vendors (A/P) | A/P Aging, Expenses by Vendor, Vendor Balance | Pro |
| Detail & Planning | Trial Balance, General Ledger, Sales by Product/Service, Budget vs. Actuals, P&L Detail, Balance Sheet Detail | Pro |
Templates
Templates store a reusable block layout — including block order, configuration, and visibility — but not financial data. Data is always pulled fresh from QBO/Xero when you create a report from a template.
- System templates — ship with the product (Monthly Bookkeeping Package, Quarterly Business Review, Annual Summary). Read-only; click Customize to create an editable copy.
- Firm templates — created by your team. Shared across all team members. Edit any time.
To set a default template per client: open the client, edit Default template. Reports created for that client will automatically start with that template's blocks.
Excel export
Every report can be exported as an Excel workbook (.xlsx). The export contains the raw financial data from the report — the same numbers you see in the PDF, structured for further analysis.
How to export
- Go to Clients → [client name] → Reports.
- Click the Excel button next to the report you want. The file downloads immediately.
You can also trigger an export via the API:
GET /api/v1/reports/:id/pdf # download the PDF
# Excel export is only available through the dashboard UI currentlyWorkbook structure
| Sheet | Contents |
|---|---|
| Summary | Key figures from every data block in one place — total income, net income, total assets, total liabilities, total A/R, etc. Useful for a quick overview or for pasting into an existing client model. |
| P&L | Income statement line items, headers, and subtotals, as an Account/Amount sheet. |
| Balance Sheet | Full balance sheet with assets, liabilities, and equity breakdowns. |
| A/R Aging | Outstanding invoices by aging bucket (Current, 1–30, 31–60, 61–90, 90+). |
| [Other blocks] | Each data block in the report gets its own sheet — Cash Flow, Trial Balance, Sales by Customer, etc. Layout blocks (Cover Page, Divider, Custom Text) are not included. |
Common uses
- Client models — drop the data directly into a client-specific Excel model or budget template.
- Power Query — build a live dashboard in Excel by loading the exported file via Power Query.
- Google Sheets — import the .xlsx into Sheets for collaborative analysis.
- Year-over-year comparisons — export the same report for multiple periods and combine the data in Excel.
Custom Code block
The Custom Code block lets you write raw HTML and CSS to add a fully custom section — a KPI callout box, a branded table, a letterhead strip, a highlights grid, anything no built-in block covers. The output is rendered in the PDF exactly as it looks in the editor.
How to use it
- Drag Custom Code from the palette (Cover & Layout section) onto the canvas.
- Click the block to open the inspector on the right.
- Write your HTML in the HTML field and your CSS in the CSS field.
- The canvas preview updates in real time.
Merge variables
You can embed report data into your HTML and CSS using {{variable}} syntax:
| Variable | Inserts |
|---|---|
{{client_name}} | Client's display name |
{{firm_name}} | Your firm name |
{{period}} | Report period (e.g. 2026-03) |
{{fiscal_year}} | Year extracted from the period |
{{report_title}} | Report title from firm settings |
{{prepared_by}} | "Prepared by [firm name]" |
Example
<!-- HTML -->
<div class="kpi-row">
<div class="kpi">
<div class="kpi-label">Prepared for</div>
<div class="kpi-value">{{client_name}}</div>
</div>
<div class="kpi">
<div class="kpi-label">Period</div>
<div class="kpi-value">{{period}}</div>
</div>
<div class="kpi">
<div class="kpi-label">Prepared by</div>
<div class="kpi-value">{{firm_name}}</div>
</div>
</div>/* CSS — scoped to this block automatically */
.kpi-row {
display: flex;
gap: 24px;
padding: 16px 0;
border-top: 2px solid #1a1d22;
border-bottom: 1px solid #e2e3e8;
}
.kpi-label {
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.06em;
color: #8b919a;
margin-bottom: 4px;
}
.kpi-value {
font-size: 18px;
font-weight: 600;
color: #1a1d22;
}CSS scoping
Your CSS is automatically scoped to this block. Write normal selectors like p { color: #333; }— they won't bleed into the rest of the report or into other Custom Code blocks. Scoping is enforced server-side before the PDF is rendered.
Limits
- No JavaScript. The PDF is rendered with JavaScript disabled, so any
<script>in your HTML is inert — it will not run in the generated PDF. - CSS applies only to this block's content (enforced server-side).
- Custom Code blocks appear in the Table of Contents as "Custom Section".
- External resources (
<img src="https://...">, web fonts) may not load in the PDF renderer — inline your styles and use data URIs for images.