Ledgr/Documentation/Reports

Reports & analytics

Sixteen reports across financial, tax, management, compliance and custom — all driven by the same period picker and all exportable.

Plan.

Reports & analytics is included from Business upwards. The dashboard's own KPI row and cash-runway ring work on every plan, including Free.

Choosing a period

Every report uses the same picker: a month, a quarter, your financial year, or a custom range. Balance-sheet style reports ask for a single as at date instead of a range. The period you pick is stamped on the export, so a PDF sitting in someone's inbox still says what it covers.

The financial statements

ReportWhat it shows
Income statementRevenue, cost of sales, gross profit, operating expenses, other income, tax and net profit — presented on IFRS for SMEs lines.
Balance sheetCurrent and non-current assets with accumulated depreciation, current and non-current liabilities, and equity, as at your chosen date.
Cash flow statementDirect method, split into operating, investing and financing activities.

Supplier bills sit in operating expenses, not in cost of sales, unless the category you posted them to says otherwise — so if gross margin looks wrong, check the category on the bills before you doubt the report.

Management reports

  • Budget vs actual — per category, with the variance in rands and as a percentage, and a progress bar that shifts colour as the month runs out
  • Aged debtors — current, 30, 60 and 90-plus buckets with a chart and a total per bucket
  • Expense breakdown — where the money actually went, by category

Compliance reports

The B-BBEE scorecard tracks all six elements with your points against each and the resulting level, drawing on the procurement and payroll data already captured. Use it to see where a level is slipping before the verification appointment, not after.

Custom report builder

  1. Reports → Custom → New report
  2. Drag in dimensions

    What you want to group by — customer, category, month, entity.

  3. Drag in measures

    What you want to count or total — amount, VAT, quantity, margin.

  4. Watch the preview and save

    The table updates as you build. Save it and it joins your report list for reuse.

Exporting

Any report exports to PDF, Excel or CSV. PDF for sending to a bank or a funder, Excel when someone is going to pivot it, CSV when it is feeding another system.

Scheduled reports

Set a frequency, a format and a list of recipients, and the report is generated and sent without anyone remembering to do it. Schedules can be paused and resumed — useful for a monthly pack that should not go out mid-audit.

Before you send a pack out

Reconcile the bank, finalise any open payroll period and clear the expense approval queue. Those three are what usually make last month's numbers move after someone has already seen them.

Live figures in Excel

Exporting to Excel gives you a snapshot. If you have built a model on top of Ledgr's numbers, what you want is for the model to fetch fresh ones — without anyone re-exporting and re-pasting, which is where a monthly pack goes wrong.

Each report is available as a flat table at a URL, which Excel's Power Query can refresh on demand or on open:

Power Query — paste into Data → Get Data → Blank Query → Advanced Editor
let
    Key = "ledgr_…",                       // Settings → Roles → API keys, scope reports:read
    Url = "https://app.ledgr.co.za/api/report-tables/trial-balance",
    Source = Json.Document(
        Web.Contents(Url, [Headers = [Authorization = "Bearer " & Key]])
    ),
    Table = Table.FromRecords(Source)
in
    Table

Swap trial-balance for general-ledger, income-statement, balance-sheet, aged-debtors, aged-creditors, vat-analysis or budget-vs-actual. Add ?from=2026-03-01&to=2027-02-28 to pin a period, or leave it off for the current financial year. GET /api/report-tables lists them all.

If you would rather not write any M at all, append ?format=csv and use Data → From Web. Every cell is quoted, so an account name containing a comma cannot split into two columns.

The key is the credential here, not a token.

Everywhere else in the API an integration trades its key for a short-lived token. Excel cannot do that — Power Query fetches a URL, it does not run a login — and a workbook that refreshes monthly cannot hold a token that expires hourly. So this one route accepts the key itself, and is narrowed to match: read-only, reports only, and it refuses a key without the reports:read scope. Give the workbook a key of its own so it can be revoked without disturbing anything else, and remember that a key pasted into a shared workbook is readable by everyone who opens it.

This is not a report designer, and it deliberately does not try to be one — the layout, the pivots and the formatting stay yours, in your workbook, where you already know how they work. Ledgr's job is to keep the numbers underneath them current.