Guides
Reports & report builder
Standard reports, the custom report builder, saved and scheduled reports, and CSV/XLSX exports in the CentraPoint dashboard.
On this page
Overview#
The Reports page in the dashboard has two parts:
- Standard reports: ready-made reports (revenue, refunds, aged receivables, MRR and more) with charts and summary figures.
- Custom reports: reports you build yourself from any data source on your plan, save, share with your team and have emailed on a schedule.
All dates are worked out in South African time (Africa/Johannesburg, UTC+2). Reports only ever read your own organisation's data.
Plan and permissions#
| To | You need |
|---|---|
| Open Reports and run standard reports | reports:read (View reports). Standard reports do not need the Report builder plan feature. |
| Build, save, duplicate, edit or delete custom reports | A plan that includes Report builder, plus reports:build (Build and save custom reports). |
| View saved custom reports | A plan that includes Report builder, plus reports:read. |
| Edit, delete or schedule other users' saved reports | reports:manage (Manage all saved reports; Admin by default) as well as reports:build. |
| Report on a particular kind of data | The plan feature for that data source (if any) and the source's read permission, e.g. transactions:read. See the data source table below. |
By default Admin and Staff have both report permissions and Viewer has reports:read only. See Roles & permissions to change this with a custom role.
Each standard report and data source is checked separately. If your plan does not include the module behind it, it is shown as Locked with the feature it needs; if your role cannot read that data, it is shown as No access.
If your plan stops including the Report builder, your saved reports are kept but cannot be opened, and scheduled deliveries are skipped until the feature is back on your plan.
Standard reports#
Open a standard report from Reports. Most have several views (for example "By month" and "By gateway") that you switch between at the top of the report, and some show summary figures above the table.
| Key | Report | What it shows | Views | Default range (date used) | Needs |
|---|---|---|---|---|---|
revenue | Revenue summary | Gross collected, fees and net for payments with status complete, partially_refunded or refunded, with a payment count. | By month, By gateway, By product | This year (payment date) | transactions:read |
transactions_by_status | Transactions by status | Count and value of payments by outcome. | By status, By day and status | Last 30 days (created date) | transactions:read |
refunds | Refunds | Refunds issued, with reason, customer and the original payment reference. | List, By status | Last 30 days (created date) | refunds:read |
aged_receivables | Outstanding invoices (aged receivables) | Sent or overdue invoices with an outstanding balance, bucketed as current, 1-30, 31-60, 61-90 and 90+ days overdue. | Ageing summary, By customer, Invoices | All time (issue date) | Invoicing; invoices:read |
customer_ltv | Customer list with lifetime value | Every customer with payment count, last payment, total paid, total refunded and net lifetime value, highest first. | Customers | All time (customer created) | customers:read |
subscription_mrr | Subscription MRR, ARR & churn | Recurring revenue normalised to a month, plus trials. Summary figures: MRR, ARR, active subscriptions, in trial, new in period, churned in period (with churn rate). | MRR by plan, By status, Trials | This month (only used for the new/churned figures; MRR is as of today) | Recurring card billing; subscriptions:read |
debit_collections | Debit order collections | Collected vs unpaid and rejected debit order lines, with unpaid reasons. Summary figures: success rate, collected, unpaid and rejected amounts. | By status, By month, Unpaid & rejected | Last 30 days (batch action date) | Debit orders; debit_orders:read |
payment_link_performance | Payment link performance | Views, payments, conversion rate and revenue per payment link. | Links | All time (link created) | Payment links; payment_links:read |
coupon_usage | Coupon usage | Redemptions and discount given per coupon code, and each redemption. | By coupon, Redemptions | This year (redeemed date) | Coupons; coupons:read |
eft_awaiting_review | EFT orders awaiting review | Manual EFT orders with proof of payment uploaded and waiting for review, oldest first. | Awaiting review | All time (created date) | Payment links; eft:read |
MRR counts subscriptions that are active or past due, converting each subscription's amount × quantity to a monthly value from its billing frequency. ARR is MRR × 12. The churn rate is churned ÷ (active + churned) for the selected period.
The debit order success rate is collected ÷ (collected + unpaid + rejected) for lines whose batch action date is in the range.
Date ranges#
Every report has a date range picker. The presets are: All time, Today, Yesterday, Last 7 days, Last 30 days, This week, Last week, This month, Last month, This quarter, Last quarter, This year, Last year and Custom range. Weeks start on Monday. A custom range includes both the start and end dates.
Report builder#
Choose Reports → New report to open the builder. You work through four steps: pick a data source, choose what to show, preview, then save (and optionally schedule). The preview updates as you change the report and shows the first 100 rows or groups.
Data sources#
A report runs against one data source. Sources whose module is not on your plan are shown with Upgrade: needs …; sources your role cannot read are shown with Your role cannot view this data.
| Key | Source | Contains | Plan feature | Permission |
|---|---|---|---|---|
transactions | Transactions | Every payment attempt across your gateways, debit orders and EFT. | - | transactions:read |
customers | Customers | Customer records with lifetime value. | - | customers:read |
products | Products | Your catalogue with units sold and revenue. | - | products:read |
refunds | Refunds | Refunds issued against payments. | - | refunds:read |
invoices | Invoices | Invoices with balances and ageing. | Invoicing | invoices:read |
invoice_payments | Invoice payments | Payments recorded against invoices (EFT, cash, card...). | Invoicing | invoices:read |
payment_links | Payment links | Hosted checkout links with clicks, payments and revenue. | Payment links | payment_links:read |
eft_orders | EFT orders | Manual EFT payments and proof-of-payment reviews. | Payment links | eft:read |
subscriptions | Customer subscriptions | Subscriptions with MRR / ARR (normalised to a month). | Recurring card billing | subscriptions:read |
subscription_events | Subscription events | Lifecycle history: activations, renewals, failures, cancellations. | Recurring card billing | subscriptions:read |
coupon_redemptions | Coupon redemptions | Discount codes used at checkout and on subscriptions. | Coupons | coupons:read |
mandates | Debit order mandates | Debit order authorities (bank details masked). | Debit orders | debit_orders:read |
debit_order_entries | Debit order collections | Batch lines: collected, unpaid and rejected debit orders. | Debit orders | debit_orders:read |
statement_lines | Statement lines | Imported statement lines and their match status. | Reconciliation | reconciliation:read |
webhook_deliveries | Webhook deliveries | Outbound webhook attempts to your endpoints. | REST API & API keys | webhooks:read |
audit_log | Audit log | User activity trail. | Audit log | audit:read |
accounting_sync_jobs | Accounting sync jobs | Invoices, payments and refunds pushed to your accounting system. | Accounting integrations | accounting:read |
Every source has a default date field used by the date range (for example Created for transactions, Issue date for invoices and Batch action date for debit order collections). You can pick any other date field of the source instead.
Columns and filters#
When you pick a source, a sensible set of default columns is added. Add, remove and reorder columns (up to 60). Fields can come from related records, for example a transaction's gateway, customer, product, invoice number or payment link title.
Add up to 30 filters. The operators on offer depend on the field's type:
| Field type | Operators |
|---|---|
| Text | equals, does not equal, contains, is one of, is empty, is not empty |
| Choice (e.g. status) | equals, does not equal, is one of, is empty, is not empty |
| Number and money | equals, does not equal, greater than, at least, less than, at most, between, is empty, is not empty |
| Date | greater than, at least, less than, at most, between, is empty, is not empty |
| Yes / no | equals, is empty, is not empty |
For is one of, enter comma-separated values. Between needs both values. All filters must match (they are combined with AND).
Grouping, summaries and charts#
- Group by up to two fields. When you group by a date, choose a bucket: day, week (starting Monday), month, quarter or year. Empty values are grouped as (none).
- Add up to 12 summaries per group: Count (of rows, or of rows where a field is filled in), Sum, Average, Min and Max of a numeric or money field. If you group without adding a summary, a row count is added for you.
- Grouped reports can be shown as a bar, line or pie chart. Ungrouped reports have no chart.
- Results include a totals row for summaries and for summable number and money columns.
Sorting and row limits#
Sort by one field, ascending or descending. In a grouped report you can sort by a grouped field or a summary. Set a Row limit (1 to 50,000) to return only the top rows, or leave it blank for all rows.
Saving and sharing reports#
In the builder's last step give the report a name (required, up to 200 characters) and an optional description, then save.
- Share with everyone in the team who can view reports is ticked by default. Shared reports appear under Shared with the team for other users; unshared reports are private to you.
- Opening a saved report runs it live. You can change its date range on the report page without editing it.
- Anyone with
reports:buildcan Duplicate a report they can see; the copy is private, unscheduled and named "… (copy)". - Only the report's owner, or a user with
reports:manage(Manage all saved reports; Admins by default), can edit, delete or schedule it; both also needreports:build. Deleting cannot be undone. - Creating, updating, deleting and exporting reports are recorded in the audit log.
Scheduled email delivery#
A saved report can be emailed automatically. Choose an Email delivery option when saving:
| Schedule | Sent | Data covered |
|---|---|---|
| Don't email | - | - |
| Daily | Every day at 06:00 | Yesterday |
| Weekly | Mondays at 06:00 | Last week (Monday to Sunday) |
| Monthly | 1st of the month at 06:00 | Last month |
- Times are South African time. The scheduled period replaces the report's own date range.
- Format: Excel (XLSX, the default) or CSV, attached to the email.
- Recipients: comma-separated email addresses, at least one and at most 20. Invalid addresses are ignored and duplicates removed.
- The email uses the
report_deliverytemplate (see Email) and includes the report name, the period, the row count and a link to the report.
Deliveries are sent by the platform's scheduled job (POST /api/cron/reports on the API service, run hourly on the hour, cron 0 * * * *, South African time), which processes up to 200 due reports per run and then moves each report to its next delivery time. A report is skipped (and simply waits for its next delivery time) when:
- your plan no longer includes the Report builder;
- it has no valid recipients;
- it has no owner (the user who created it was deleted), since there is no one whose access could be checked; or
- the report's owner has been deactivated or no longer has
reports:read. Scheduled reports run with the owner's current permissions, so a source the owner can no longer read makes the delivery fail.
The saved report page shows when it was last sent and when it is next due.
CSV and XLSX exports#
Every standard and saved report has Export CSV and Export XLSX buttons. The export uses the date range and view currently shown and contains all rows (up to the 50,000 record limit), not just the on-screen preview. Files are named after the report and the date, e.g. revenue-summary-2026-09-26.xlsx.
- CSV: UTF-8 with a byte-order mark (opens cleanly in Excel), comma-separated with CRLF line endings. Dates are written as South African local time (
yyyy-mm-dd hh:mm), money with two decimals and yes/no fields asYes/No. Text that starts with=,+,-or@is prefixed with an apostrophe so spreadsheets do not treat it as a formula. - XLSX: one worksheet with a bold, frozen header row; dates as real Excel dates and money as numbers with two decimals.
Exporting needs reports:read plus access to the report's data source; exporting a saved report also needs the Report builder on your plan. Each export is recorded in the audit log.