Reports
The Reports page is where the business runs the numbers. Twelve canonical reports sit behind one page — Subscriber, Revenue, Service, Reseller, Usage, Expiry, Transaction, NAS, Churn, Revenue Forecast, Reseller Performance, and Top Users — each backed by a dedicated handler in report.go. Every report respects the caller’s scope: an admin sees system-wide totals; a reseller without view_all sees only their own data. All reports support CSV export and a date range that defaults to the current month.
If a number on the Dashboard doesn’t add up, drill down here — Reports is the source of truth that the Dashboard summarises in cached form.
How to get here
Section titled “How to get here”- Sidebar → Reports (chart icon).
- Direct URL:
/reports.
Requires the reports.view permission. Resellers see only their own subscribers, transactions, and resellers unless they hold subscribers.view_all / transactions.view_all / resellers.view_all.
Layout
Section titled “Layout”Reports is a tabbed page; the active tab is reflected in the URL (/reports?tab=revenue) so links to specific reports survive a refresh.
| Tab | What it covers | Backed by |
|---|---|---|
| Subscribers | Counts and trends. | GetSubscriberStats |
| Revenue | Income breakdown by type, day, reseller. | GetRevenueStats |
| Services | Service plan distribution and revenue. | GetServiceStats |
| Resellers | Per-reseller subscriber and revenue totals. | GetResellerStats |
| Usage | Top bandwidth consumers + FUP distribution. | GetUsageStats |
| Expiry | Who is about to expire, who has expired. | GetExpiryReport |
| Transactions | Raw transaction ledger, filterable by type and reseller. | GetTransactionReport |
| NAS | Sessions, bandwidth, and revenue per NAS. | GetNASStats |
| Churn | Subscribers who didn’t renew, plus reason codes. | GetChurnReport |
| Forecast | Next 12 months’ MRR projection. | GetRevenueForecast |
| Reseller KPIs | Per-reseller success rate, retention, ARPU. | GetResellerPerformance |
Subscriber Stats
Section titled “Subscriber Stats”Counts of subscribers table sliced by status, reseller, and date. Returns total / active / inactive / online / expired / expiring / new-this-month, plus a 30-day series of created vs. expired so you can spot growth or churn trends. The same numbers feed the Dashboard’s subscriber cards; the difference is Reports lets you change the date window.
Filters: reseller, service plan, status, country/region.
Revenue — the canonical 13 income types
Section titled “Revenue — the canonical 13 income types”This is the report most ISPs check daily. GetRevenueStats returns totals and a breakdown by transaction type, so you can see how much came from renewals vs. one-off top-ups vs. plan changes.
The canonical income-side transaction types — these are the only types counted as revenue, and the list is shared with the Dashboard’s Total Income card so the two pages always agree:
| Type | When it fires |
|---|---|
new | First-month charge when a subscriber is created. |
renewal | Recurring charge when the subscriber renews. |
change_service | Net amount on a mid-cycle plan change. |
service_change | Legacy spelling — kept for historical data. |
static_ip | Static-IP add-on fee. |
addon | Other add-ons (extra mailbox, second decoder, etc.). |
refill | Manual quota top-up by admin/reseller. |
data_topup | Customer-initiated GB top-up from the portal. |
prepaid_card | Prepaid card redemption. |
subscriber_topup | Account-balance top-up. |
subscriber_purchase | One-off purchase from the portal. |
reset_fup | Charged FUP reset (when configured). |
rename | Charged for changing username (when configured). |
Excluded — these are accounting movements, not income, and never count toward revenue:
transfer— moving balance between resellers.withdraw— pulling money out of a reseller’s balance.refund— returning money to a subscriber.
The report groups by day by default; switch to month or reseller. Each cell is clickable and drills into the matching transactions.
Service Stats
Section titled “Service Stats”For each service plan: subscriber count, percentage of total, revenue last 30 days, average bandwidth used. Helps identify dead plans (no subscribers in 90 days) and your most profitable tier. Useful when discussing whether to retire a low-uptake plan.
Reseller Stats
Section titled “Reseller Stats”Per-reseller: subscribers, online now, this-month revenue, this-month payouts, current balance, last login. Sorts by any column. Top-of-list often becomes the input to your monthly commission review.
Usage Stats
Section titled “Usage Stats”Two sub-views:
- Top consumers — top N subscribers by 30-day or month-to-date bytes, with username, plan, and the percentage of FUP they used. The list sorts FUP-tripped subscribers first.
- FUP distribution — counts of subscribers in each FUP tier (0 = under threshold, 1/2/3 = daily, 4/5/6 = monthly). Equivalent to the FUP Counters page, but for a chosen date.
Expiry Report
Section titled “Expiry Report”Lists subscribers by expiry_date: today, tomorrow, this week, this month, already expired. Each entry has the subscriber’s phone and a Renew quick-action. Useful for setting up an end-of-month renewal blast — select all expiring this week then send a WhatsApp reminder.
Transaction Report
Section titled “Transaction Report”Raw ledger of transactions rows. Filters by type (any of the 13 income types plus the 3 accounting types), reseller, subscriber, amount range, and date. Each row has timestamp, type badge, amount, before/after balance, and the user/collector who posted it. The CSV export of this report is the input most accountants want at the end of the month.
NAS Stats
Section titled “NAS Stats”Per-NAS counts: active sessions, total subscribers homed on this NAS, this-month new connects, this-month revenue from subscribers attached to this NAS, last seen / uptime, average bandwidth. Useful when planning capacity — if one MikroTik is at 95% session count and another at 20%, time to migrate plans.
Churn Report
Section titled “Churn Report”Subscribers who did not renew within 14 days of expiry. Lists the subscriber, their reseller, their last plan and last payment date, total revenue contributed, and a reason code (set manually when you mark them lost, or unknown if untouched). Add a reason from the dropdown to build an answer to “why did they leave?” over time.
Revenue Forecast
Section titled “Revenue Forecast”Projects the next 12 months of MRR based on the current subscriber base, their plan prices, and the observed monthly churn rate. Not a guarantee — assumes today’s mix continues — but a defensible starting point for budgeting and sales decks.
Reseller Performance KPIs
Section titled “Reseller Performance KPIs”For each reseller:
| KPI | Definition |
|---|---|
| Subscribers | Count of active, non-deleted subscribers. |
| ARPU | This-month revenue divided by subscriber count. |
| Renewal rate | Renewals this month over subscribers due to renew. |
| Net adds | New subscribers minus churned subscribers, last 30 days. |
| Commission earned | Sum of commission-eligible income times commission percent. |
| Avg. resolution time | Average ticket resolution time for tickets opened by this reseller. |
Top of the list is the best-performing reseller; bottom is who needs a phone call.
Export
Section titled “Export”Every tab has a CSV button. ExportReport returns the same data the table shows but in machine-readable form. The filename includes the report name and date range so accountants don’t mix them up. For very large exports (hundreds of thousands of transactions), the handler streams the response instead of building the full file in memory.
Common workflows
Section titled “Common workflows”Daily revenue check
Section titled “Daily revenue check”- Open Reports → Revenue, leave date = today.
- Top of the page shows total income, count of transactions, average transaction size.
- Below: breakdown by type. If renewal revenue is unusually low at end-of-month, check Expiry Report for ungenerated invoices.
- Optional: CSV export and email to your accountant.
Find your top 20 bandwidth users
Section titled “Find your top 20 bandwidth users”- Reports → Usage, set period to last 30 days, sort by bytes.
- Top 20 are your candidates for either an upsell (if their plan is small) or a FUP review (if they’re consistently hitting a tier).
- Select rows then Bulk → Send Communication to message them about plan upgrades.
Quarter-end churn review
Section titled “Quarter-end churn review”- Reports → Churn, set range to the last 90 days.
- Sort by total revenue contributed — these are the customers you actually lost money on, not the throwaway test accounts.
- Add reason codes where missing. Common:
competitor,moved,service_quality,pricing. - Pivot back to Reseller KPIs to see which reseller had the worst churn, then coach them.
Permissions
Section titled “Permissions”| Permission | What it gates |
|---|---|
reports.view | Open the Reports page. |
reports.export | Use the CSV export button. |
subscribers.view_all | See system-wide subscriber numbers. |
transactions.view_all | See system-wide revenue and transactions. |
resellers.view_all | See other resellers’ rows. |
A reseller with reports.view but no *.view_all sees their slice only — they can still benchmark themselves against their own historical data.
Related pages
Section titled “Related pages”- Dashboard — cached summary of the most-watched Reports numbers.
- Billing & Invoices — invoice data underlies Revenue, Transaction, and Forecast reports.
- Resellers — reseller detail page links back to Reseller KPIs.
- FUP Counters — the live view of the FUP distribution.
- Audit Logs — exports can be tied back to the user who ran them.