Welcome to Elamar
Select a dashboard or tool from the menu above to get started.
Dashboards
Select a dashboard to view
Tools
Automation and utility tools
Room Status
Physical LED busy lights driven by PBX and Teams presence
Configuration
Live Status
Devices
| Staff Name | Device Name | PBX Ext | Teams User ID | Status | Last Seen | Actions |
|---|---|---|---|---|---|---|
| Loading... | ||||||
Database
Database management and queries
Management Dashboard
Reporting
Generate monthly client reports
Generate Report
Backup
MSP360 backup monitoring and status for managed clients
Select a Client
Choose a client from the dropdown above to view their backup status and history.
Finance Dashboard
Key financial metrics from Xero
Operations Dashboard
Unified view of Datto RMM, MSP360 Backup & Datto SaaS Protection
Tech Utilisation
Remote Technical Staff — capacity utilisation, time categories & planning
Loading utilisation data…
Prepayment Tracker
Track purchase prepayments and reconcile against Xero account 620
Cash Flow Forecast
Xero-powered cash flow projections
Cash Flow Projection
| Company | Invoice # | Invoiced | ADR | Expected Date | Amount | Type |
|---|---|---|---|---|---|---|
| Loading transactions... | ||||||
These patterns were detected by analysing your historical bank transactions. Approve patterns to include them in your forecast.
| Description | Contact | Avg Amount | Type | Day of Month | Frequency | Occurrences | Status | Actions |
|---|---|---|---|---|---|---|---|---|
| No patterns analysed yet. Click "Analyse Patterns" to scan your transaction history. | ||||||||
Create different scenarios to compare "what-if" forecasts. Each scenario can have its own set of manual entries.
Credit Cards
Xero transactions on each card since the last statement date are summed to calculate the statement balance. That amount is forecast as a cash outflow on the payment due date — matching how UK full-payment credit cards work.
| Card / Account Name | Statement Date | Payment Due | Statement Balance (est.) | Next Payment | Actions |
|---|---|---|---|---|---|
| Loading... | |||||
Billing Items – Pax8 Clients
Pax8 subscriptions matched against M365 Partner Center tenants
Client Subscription Summary
Subscription Details
Click a client row above to view their Pax8 subscriptions
Dashboard Overview
Database: msp_dash
Tables in Database
Loading tables...
Database Tables
Select a table to view its data
Table Data
Select a table to view its data
Database Query
Results
Run a query to see results
Integrations
Connect and configure external services
Autotask
PSA ticketing system integration for syncing companies, contacts, tickets, and more.
UptimeRobot
Website and server monitoring with real-time uptime status and alerts.
Datto RMM
Remote monitoring and management platform for device oversight and automation.
Datto SaaS Protection
Cloud backup and protection for Microsoft 365 and Google Workspace data.
MSP360 Backup
Managed backup solution with endpoint protection and cloud storage.
ITQuoter
Cloud-based CPQ software for quotes, proposals, and order management.
Pax8
Cloud commerce marketplace for ordering, subscriptions, and billing management.
M365 Partner Center
Microsoft Partner Center for CSP customer management and license tracking.
OpenAI
AI-powered assistant using GPT models for intelligent analysis and automation.
Keap CRM
CRM and sales automation for managing contacts, companies, and pipelines.
Xero
Cloud accounting for invoices, bank reconciliation, and financial reporting.
SendGrid
Send transactional and notification emails from the platform.
vPenTest
Automated penetration testing platform with vulnerability assessments and security reports.
IT Glue
IT documentation platform for managing organizations, configurations, contacts, and passwords.
Bicom PBXware
Phone system integration for real-time extension status, call presence, and busy light control.
Microsoft Graph
Microsoft 365 integration for Teams presence, user status, and busy light control via the Graph API.
More Coming Soon
Additional integrations will be added here as they become available.
Autotask
Autotask API configuration and sync
Last Sync Times
Loading sync status...
API Usage
Autotask limits API calls to 10,000 per hour. Monitor your usage to prevent lockouts.
Manual Sync
Trigger a manual sync from Autotask. This will fetch the latest data.
Tech Utilisation Sync
Sync data required for the Tech Utilisation dashboard: departments, billing codes, time entries, time off, and holidays.
Full Ticket Sync
Use this if you're missing tickets. Fetches ALL tickets from Autotask and marks deleted tickets.
Deletion Reconciliation
Check for tickets that have been deleted in Autotask and mark them as deleted locally. This helps clean up tickets that no longer exist.
Automatic Sync Schedule
Configure when syncs run. Changes apply immediately if scheduler is running.
Business Hours
Sync Jobs
Autotask API Configuration
Update your Autotask API credentials. Changes take effect immediately.
Database Setup
First time? Click this button to create the required database tables.
Auto Ticket Canceller
Automatically cancel tickets based on configurable rules
Auto-Cancel Rules
Rules are checked against new tickets every 5 minutes. Matching tickets will be automatically cancelled in Autotask.
| Name | Status | Match Logic | Conditions | Actions |
|---|---|---|---|---|
| Loading rules... | ||||
Manual Run
Manually trigger the auto-cancel process to check new tickets against all active rules.
Activity Log
Recent tickets that were automatically cancelled.
| Date/Time | Ticket # | Title | Rule | Match Reason |
|---|---|---|---|---|
| Loading logs... | ||||
Ticket Routing Rules
Automatically route tickets to different companies or queues based on configurable rules
Routing Rules
Rules are checked against new tickets every 5 minutes. Matching tickets will be automatically routed to the specified company and/or queue in Autotask.
| Name | Status | Match Logic | Conditions | Route To | Actions |
|---|---|---|---|---|---|
| Loading rules... | |||||
Manual Run
Manually trigger the routing process to check new tickets against all active rules.
Routing Log
Recent tickets that were automatically routed.
| Date/Time | Ticket # | Title | Rule | Changes |
|---|---|---|---|---|
| Loading logs... | ||||
Database & Deployment
Pull the latest updates from Git and deploy without SSH access.
Current Status
-
-
Deploy Updates
Pull latest changes, promote to production, or rollback if needed.
Pull Latest Changes
Pull the latest code from GitHub and restart this server.
Promote to Production
Merge dev into main, install dependencies, and restart production.
Version History
Recent commits with deployment information. Use the rollback button to revert to a previous version.
| Hash | Message | Author | Date | Deployed | Actions |
|---|---|---|---|---|---|
| Loading... | |||||
Database Information
User Management
Manage dashboard users and permissions
Users
| Username | Display Name | Role | Status | Last Login | Actions | |
|---|---|---|---|---|---|---|
| Loading users... | ||||||
Change Your Password
Permissions
Review and manage user permissions and access
Permission reference
Each permission controls access to specific views or actions. Admins have all permissions.
Users & their permissions
| User | Role | Permissions | Actions |
|---|---|---|---|
| Loading... | |||
TV Displays
Manage public dashboard URLs for TV screens
Public Dashboards
Create public URLs for dashboards to display on TV screens without login.
| Name | Type | URL | Refresh | Alert | Status | Actions |
|---|---|---|---|---|---|---|
| Loading... | ||||||
Alert Configuration
When alerts are enabled, a red pulsing border will appear on the TV display if:
- New Tickets > 1 - More than 1 ticket in "New" status created today
- Unassigned Tickets > 1 - More than 1 ticket with no assigned resource
UptimeRobot
Website and server monitoring integration
Account Information
Loading account info...
Monitors Overview
Loading monitors...
API Configuration
Enter your UptimeRobot API key to enable monitoring integration.
vPenTest
Automated penetration testing and vulnerability assessment
Connection Status
Checking connection...
Organizations
Loading organizations...
Scheduled Tests
Loading schedules...
Recent Assessments
Loading assessments...
API Configuration
Enter your vPenTest API key to enable penetration testing integration.
IT Glue
IT documentation and knowledge management platform
Connection Status
Checking connection...
Quick Stats
Loading stats...
Flexible Asset Types
Loading flexible asset types...
Organizations
Loading organizations...
Configurations (Devices/Assets)
Loading configurations...
API Configuration
Enter your IT Glue API key to enable documentation integration.
Datto RMM
Remote monitoring and management integration
Account Information
Loading account info...
Devices Overview
Loading devices...
API Usage
Datto RMM limits API calls to 600 requests per 60 seconds. Monitor your usage to prevent rate limiting.
API Configuration
Enter your Datto RMM API credentials to enable device monitoring integration.
API Information
Access tokens expire after 100 hours
600 requests per 60 seconds
OAuth 2.0 with API Key/Secret
Datto SaaS Protection
Microsoft 365 and Google Workspace backup protection
Protected Domains
Loading domains...
Backup Statistics
Loading statistics...
API Configuration
Enter your Datto SaaS Protection API credentials. Generate keys from the Datto Partner Portal under Admin > Integrations > API Keys.
API Information
https://api.datto.com/v1/saas
Basic Auth (Public/Secret Keys)
/domains, /seats, /bulkSeatChange
MSP360 Backup
Managed backup platform for endpoint protection
Backup Overview
Loading statistics...
Backup Status
Loading monitoring data...
Companies
Loading companies...
API Configuration
Enter your MSP360 API credentials. Generate them in the MSP360 console under Settings > General > API.
API Information
https://api.mspbackups.com
Bearer Token (via /api/Provider/Login)
/Users, /Companies, /Monitoring, /Computers
ITQuoter
Quoting and proposal management platform
Quoter Overview
Loading statistics...
Recent Quotes
Loading quotes...
Contacts
Loading contacts...
API Configuration
Enter your ITQuoter (Quoter) API credentials. Generate them in your Quoter account under Account > API Keys.
API Information
https://api.quoter.com/v1
OAuth 2.0 Client Credentials
Access: 1 hour / Refresh: 24 hours
5 requests per second
Pax8
Cloud commerce marketplace and subscription management
Pax8 Overview
Loading statistics...
Subscriptions
Loading subscriptions...
Recent Invoices
Loading invoices...
API Configuration
Enter your Pax8 API credentials. Generate them in the Pax8 app under Settings > Integrations > API Keys.
API Information
https://api.pax8.com/v1
OAuth 2.0 Client Credentials
Access tokens valid for 24 hours
1,000 calls per minute
M365 Partner Center
Microsoft Partner Center for CSP customer and license management
M365 Partner Center Overview
Loading statistics...
CSP Customers
Loading customers...
API Configuration
Enter your Azure AD app registration credentials. Create an app in Azure Portal > Azure Active Directory > App registrations.
Setup Instructions
- Go to Azure Portal > App registrations
- Click "New registration" and name it (e.g., "MSC Portal Partner Center")
- Set "Supported account types" to "Accounts in any organizational directory"
- After creation, note the Application (client) ID and Directory (tenant) ID
- Go to "Certificates & secrets" > "New client secret" and save the value
- Go to "API permissions" > "Add permission" > "Microsoft Graph"
-
Choose "Application permissions" and add:
Contracts.Read.All(under Directory or Contracts) - Click "Grant admin consent" for your organization
-
Note: This uses Microsoft Graph
(
graph.microsoft.com/v1.0/contracts) to list CSP customer tenants. The app must be registered in your partner tenant (the tenant that holds the CSP relationship), not a customer tenant.
API Information
https://api.partnercenter.microsoft.com/v1
OAuth 2.0 Client Credentials
CSP Indirect Reseller
App+User auth requires MFA from April 2026
OpenAI
AI-powered assistant and analysis engine
API Status
Loading API status...
Available Models
Loading models...
Quick Test
Send a test prompt to verify the API connection and model response.
API Configuration
Enter your OpenAI API key. Generate one from your OpenAI account at platform.openai.com/api-keys.
API Information
https://api.openai.com/v1
Bearer Token (API Key)
Varies by model and tier
Pay-per-token usage based
Keap CRM
CRM, sales automation, and contact management
Keap Overview
Loading statistics...
Recent Contacts
Loading contacts...
Tags
Loading tags...
OAuth2 Configuration
Connect to Keap using OAuth2. Get your Client ID and Secret from the Keap Developer Portal.
Connection status: Checking...
API Information
https://api.infusionsoft.com/crm/rest/v1
OAuth 2.0 with Bearer Token
/contacts, /companies, /tags, /opportunities
Xero
Cloud accounting and financial management
Xero Overview
Loading...
Recent Invoices
Loading invoices...
Contacts
Loading contacts...
API Configuration
Xero uses OAuth 2.0 authorization. Register an app at developer.xero.com, then enter your credentials below and connect your Xero organisation.
API Information
https://api.xero.com/api.xro/2.0
OAuth 2.0 Authorization Code
Access: 30 min / Refresh: 60 days
/Invoices, /Contacts, /Accounts, /Organisation
SendGrid
Send emails from the platform
Status
Loading...
Send test email
Send a test email to verify the integration (admin only).
Email Templates
Customise the emails sent automatically by the portal. Each template supports
{{variable}} placeholders — available variables are shown per template.
Loading templates...
API Configuration
Enter your SendGrid API key and sender details. You can create an API key in SendGrid → Settings → API Keys. Leave API key blank to keep the current value.
Bicom PBXware
Phone system integration for extension status and call presence
Connection Status
Loading...
Extensions
Loading extensions...
API Configuration
Enter your Bicom PBXware API credentials. Find your API key in PBXware Admin → Settings → API Keys.
Microsoft Graph API
Microsoft 365 integration for Teams presence and user status
Connection Status
Loading...
Used By
The Microsoft Graph integration provides Teams presence data to the following features:
- Room Status — Operations → Tools → Room Status (busy light presence)
Azure App Registration
Register an app in Azure Active Directory and grant it the Presence.Read.All application permission.
1. Go to portal.azure.com → Azure Active Directory → App registrations → New registration
2. Add API permission: Microsoft Graph → Application →
Presence.Read.All3. Click Grant admin consent
4. Create a client secret under Certificates & secrets
5. Copy the Tenant ID, Client ID, and secret value above
Help & Documentation
Guides and reference for every area of the Elamar portal
Auto Ticket Canceller
Automatically cancels Autotask tickets that match configurable rules. Runs on a scheduled sync and can also be triggered manually.
How it works
On each run, the engine fetches all New (status = 1) and Awaiting MSC Response (status = 24) tickets. Each ticket is tested against every active rule. When a match is found the ticket status is set to Cancelled in Autotask and the event is written to the cancellation log.
If a previously cancelled ticket is reopened (e.g. by an Autotask auto-responder changing its status back to New or Awaiting MSC Response), the engine will automatically re-cancel it on the next run.
The run is skipped automatically if the Autotask API usage threshold exceeds 70%.
Auto-responder handling
Autotask auto-responders can reply to a ticket the moment it is created, which changes its status from New (1) to Awaiting MSC Response (24) before the canceller job runs. If only New tickets were checked, those tickets would be silently skipped and never cancelled.
To prevent this, the engine evaluates tickets in both the New and Awaiting MSC Response statuses.
If an auto-responder fires after the canceller has already cancelled a ticket, it can change the status back to Awaiting MSC Response. The engine detects this and will re-cancel the ticket on the next run.
Re-cancellations are recorded in the cancellation log with a [re-cancelled] tag in the match reason and an updated timestamp.
Rule fields
| Field | Description |
|---|---|
| Name | Required. A descriptive label for the rule. |
| Active | Toggle to enable or disable the rule without deleting it. |
| Match Logic |
OR (default) — cancel if any condition
matches. AND — cancel only if all conditions
match.
|
| Sender Email | Email address or pattern to match against the ticket sender. |
| Sender Email Match |
contains (default), exact, or
ends_with.
|
| Title Keywords | Comma-separated keywords checked against the ticket title. |
| Title Match | contains (default) or exact. |
| Description Keywords | Comma-separated keywords checked against the ticket description body. Always uses contains matching. |
Match logic in detail
The ticket is cancelled if at least one of the configured conditions matches. Blank fields are ignored.
Example: Sender email set to noreply@ — any ticket
from an address containing that string is cancelled, regardless of title
or description.
The ticket is cancelled only when every configured condition matches. Blank fields are skipped but at least one condition must be set.
Example: Sender email noreply@ AND title keyword
automated — both must be true.
Email matching detail
The engine checks two email sources per ticket:
- The contact email from the linked Autotask contact record.
-
A sender email extracted from a
From:line in the ticket description (used for email-to-ticket submissions where the contact may be the recipient, not the sender).
If either source matches the rule's email pattern, the email condition is satisfied.
Running rules
- Scheduled: Runs automatically as part of the Autotask sync job.
-
Manual: Click Run Now in the Auto Ticket Canceller
view. Requires the
manage_toolspermission.
Permissions
| Action | Required permission |
|---|---|
| View rules & logs | view_tools |
| Manually run rules | manage_tools |
| Create / edit / delete / toggle rules | Admin only |
Cancellation log
Every cancelled ticket is recorded in the Cancellation Log tab with the ticket number, title, matched rule name, and the reason the rule fired. This log is read-only and is used to prevent tickets being processed twice.
Ticket Routing
Automatically reassigns newly-created Autotask tickets to the correct company, queue, issue type, and/or sub-issue type — without anyone having to touch them manually.
How it works
On each run, the engine fetches all New (status = 1) tickets that have not previously been routed. Each ticket is tested against every active rule in order. When a match is found, the configured target fields are updated in Autotask via the API and the action is written to the routing log.
First-match-wins: once a ticket matches a rule, no further rules are evaluated for that ticket.
No re-routing: a ticket that already has a routing log entry is permanently excluded from future runs.
The run is skipped automatically if the Autotask API usage threshold exceeds 70%.
Rule fields — matching conditions
| Field | Description |
|---|---|
| Name | Required. A descriptive label for the rule. |
| Active | Toggle to enable or disable without deleting. |
| Match Logic |
OR (default) or AND — controls how
conditions combine.
|
| Sender Email | Email pattern matched against the ticket sender. |
| Sender Email Match |
contains (default), exact, or
ends_with.
|
| Title Keywords | Comma-separated keywords checked against the ticket title. |
| Title Match | contains (default) or exact. |
| Description Keywords | Comma-separated keywords checked against the ticket description (always contains). |
Rule fields — routing actions
At least one target field must be set — a rule with no action is rejected.
| Field | What it changes |
|---|---|
| Target Company |
Reassigns the ticket to a different Autotask company
(companyID).
|
| Target Queue | Moves the ticket to a specific queue (queueID). |
| Target Issue Type | Sets the Autotask issue type (issueType). |
| Target Sub-Issue Type |
Sets the sub-issue type (subIssueType), filtered by the
selected issue type in the UI.
|
Match logic in detail
The ticket is routed if any configured condition matches. Blank fields are ignored.
The ticket is routed only when all configured conditions match. At least one condition must be set.
Email matching checks both the contact email (linked contact
record) and a sender email extracted from a
From: line in the description. A match on either is sufficient.
Running rules
- Scheduled: Runs automatically every 5 minutes as part of the sync scheduler. Also fires once on server startup (after a 15-second delay).
-
Manual: Click Run Now in the Ticket Routing view.
Requires the
manage_toolspermission.
Permissions
| Action | Required permission |
|---|---|
| View rules, logs, last-run status | view_tools |
| Manually trigger a run | manage_tools |
| Create / edit / delete / toggle rules | Admin only |
Routing log
Every routed ticket produces one log entry recording: ticket number, title, matched rule name, match reason, and a before/after snapshot of every field that changed (company, queue, issue type, sub-issue type). The log is read-only and prevents tickets from being re-processed.
Room Status (Busy Light)
Drives physical WS2812B LED rings connected to ESP32 microcontrollers on staff desks. Each device glows a colour reflecting that person's real-time availability, pulled from the Bicom PBX and/or Microsoft Teams.
Status colours
| Colour | Status | Condition |
|---|---|---|
| 🔴 Red | Busy | PBX: BUSY / INUSE / RINGING / ONHOLD, or Teams: Busy / DoNotDisturb / on a call |
| 🟠 Orange | Away | Teams: BeRightBack / Away |
| 🟢 Green | Available | Teams: Available |
| ⚪ Grey | Unknown | No data, PBX: UNAVAILABLE / INVALID, or Teams: Offline |
| ⚫ Off | Disabled | Device marked as inactive |
Priority rule: PBX on-call state takes priority over Teams presence when both sources are available.
Data sources
Provides real-time extension call state (BUSY, INUSE, RINGING, ONHOLD, etc.) via the PBXware API.
Configured in: Settings → Integrations → Bicom PBXware
Provides Teams presence (availability + activity) for up to 650 users per batch via the Graph API.
Configured in: Settings → Integrations → Microsoft Graph
Both integrations are optional — the system degrades gracefully if either is not configured.
How the hardware works
Each ESP32 device polls
GET /api/busy-light/device/:token/colour every 15 seconds. This
endpoint is public (no login required) — the unique
64-character device token in the URL is the only authentication.
The endpoint returns { r, g, b, status, brightness }. The firmware
sets the LED ring to that colour immediately. If the device is inactive, it
receives { r:0, g:0, b:0, brightness:0 } (LEDs off).
WiFi connection states on the device: pulsing blue = connecting, dim red = failed, dim blue = lost connection.
Device configuration
| Field | Description |
|---|---|
| Staff Name | Display name shown in the portal UI. |
| Device Name | Friendly label for the physical device. |
| PBX Extension | Extension number to look up in Bicom PBXware. |
| Teams User ID | Azure AD Object ID for Microsoft Graph presence lookup. |
| Active | Inactive devices receive black/off RGB and are skipped by the poller. |
Settings
| Setting | Default | Description |
|---|---|---|
| Busy Light Enabled | Off | Master on/off switch for the server-side poller. |
| Poll Interval | 15 seconds | How often the server polls PBX and Teams (range: 5–300 seconds). Changing this restarts the poller immediately. |
Firmware generation
The portal generates a ready-to-flash Arduino sketch per device via the Firmware button. The sketch has the device token and portal hostname pre-filled. Flash it to any ESP32 board with a WS2812B LED ring on GPIO 5.
Required Arduino libraries: FastLED and ArduinoJson.
Permissions
| Action | Required permission |
|---|---|
| View Room Status page and live status | view_tools |
| Add / edit / delete devices | Admin only |
| Save settings, force manual poll | Admin only |
| ESP32 device polling the colour endpoint | Token in URL only (no login) |
Ops Dashboard
A unified real-time overview of three tool integrations — Datto RMM, MSP360 Backup, and Datto SaaS Protection — on a single screen. Auto-refreshes every 5 minutes.
Summary stat cards
| Card | What it shows |
|---|---|
| RMM Devices | Total device count + online percentage. |
| Offline Devices | Count of offline devices + total site count. |
| Backup Plans | Total MSP360 monitoring plans + success rate % (green ≥95%, amber ≥80%, red <80%). |
| Backup Issues | Combined error + warning count with breakdown label. |
| SaaS Domains | Datto SaaS domain count + total licensed seats. |
| SaaS Storage | Total storage used + active seat count. |
Datto RMM detail
- Device Types — breakdown of all devices by type/class, sorted by count.
- Top Sites — top 10 sites by device count.
- Offline Devices — up to 20 sites with up to 5 offline devices each, showing hostname, device class, and last-seen time.
MSP360 Backup detail
- Failed Backups — up to 10 plans with Error status, showing computer name, company, plan name, and error message.
- Warnings — up to 10 plans with Warning status.
- Companies with Issues — up to 10 companies ranked by total issues, with error and warning badge counts.
Datto SaaS Protection detail
A full-width table of all protected domains showing seats used, seats licensed, and storage used.
Data sources & permissions
Data is fetched live from Datto RMM, MSP360, and Datto SaaS Protection APIs on
each load. Each section is hidden if that integration is not connected. Requires
the view_dashboards permission.
Reporting
Generates formatted monthly client reports from Autotask ticket data, with a PDF download option. All data is sourced from the local database — no live API calls are needed to generate a report.
Report builder inputs
| Input | Description |
|---|---|
| Client | Dropdown of all active Autotask companies. |
| Month & Year | Defaults to the previous month. Year range covers the current year and 2 previous years. |
| Include Sections | 9 individually toggleable checkboxes — all enabled by default. |
| Exclude Contacts | Searchable typeahead to exclude specific contacts from the "Top Ticket Creators" section. Exclusions are saved per-client. |
Report sections
| # | Section | Content |
|---|---|---|
| 1 | Tickets Opened & Closed | Total opened, total closed, net change, daily activity chart. |
| 2 | Resolution Times | Average, minimum, and maximum resolution hours; breakdown by priority. |
| 3 | Tickets by Priority | Count per priority with chart. |
| 4 | Tickets by Status | Count per status with chart. |
| 5 | Top Sub-Issue Types | Top 10 sub-issue types with parent issue type. |
| 6 | Month-over-Month Comparison | Current vs. previous month for opened and closed, with change %. |
| 7 | Top Ticket Creators | Top 5 contacts by ticket count (respects the exclusion list). |
| 8 | Account Summary | Active tickets, total all-time tickets, this month opened/closed. |
| 9 | Additional Notes | Static boilerplate text appended to the report. |
Export & permissions
Click Download PDF to export the rendered report. The file is
named ClientName_Report_Month_Year.pdf.
Requires the view_reporting permission.
Backup
Monitors MSP360 backup plans across all clients. Select a client to see live plan statuses, historical run data, storage trends, and purge events per server.
Client summary cards
After selecting a client from the dropdown, four stat cards appear:
- Computers — total computer count for the client.
- Success — plans with a successful last run.
- Warnings — plans with warning status.
- Errors — plans with error or failed status.
Backup status table
Columns: Computer, Plan, Type, Last Run, Status, Files Copied, Files Failed, Data Copied, Duration.
Filterable by Plan name, Status (All / Success / Warning / Error), and Computer name (free text). A filter summary shows "Showing X of Y jobs".
Status values: Success (0), Warning (1), Error/Failed (2), Running (3), Interrupted (4).
Server detail modal (click any computer name)
Opens a three-tab modal for the selected computer:
| Tab | Content |
|---|---|
| History | Historical backup runs from the local database: Date/Time, Plan, Status, Files Copied, Files Failed, Data Copied, Duration. |
| Storage | Daily storage snapshots per destination. Rows where storage decreased (purge events) are highlighted in red. Includes a Sync Storage Data button to pull current sizes from MSP360 on demand. |
| Events | Purge events only: Date, Destination, Change (size decrease), Previous Size, New Size. |
Permissions
Requires the view_integrations permission. The MSP360 integration
must be configured in Settings → Integrations → MSP360 Backup.
Tech Utilisation
Monitors the capacity utilisation of the Remote Technical Staff department — tracking whether engineers are working enough hours and whether those hours are being spent on the right activities. All data comes from Autotask time entries stored locally.
KPI cards
| Card | Description |
|---|---|
| Team Utilisation % | Productive hours ÷ available hours for the selected period. |
| Billable % | Billable hours as a percentage of productive hours. Target: 75–85%. |
| Avg Daily Hours | Average hours worked per engineer per day. Target: 6.0–6.5 hrs. |
| Capacity Status | Spare / Healthy / Closing In / At Capacity based on the 4-week rolling average. |
| Productive vs Available Hours | Raw hour totals for the period. |
| Team Members | Count of engineers in the configured department. |
Charts & panels
- Weekly Utilisation Trend — 8-week rolling chart showing capacity vs target line.
- Time Category Breakdown — pie/bar chart of hours by category (Billable Support, Project Work, Operational / Internal, Service Improvement, Training, Presales, Other, Leave / Unavailable), filterable per engineer.
- Per-Engineer Cards — individual utilisation card for each resource.
- Capacity Planning Panel — 4-week rolling average on a gauge with zones: Spare (<75%), Healthy (75–80%), Closing In (80–85%), At Capacity (≥90%).
- Time Entry Detail Table — full paginated list of individual time entries: Date, Resource, Hours, Billable Hrs, Category, Work Type, Notes.
Date range filters
Quick presets: This Week, Last Week, This Month, Last Month, Last 4 Weeks. Also supports a custom date range picker. The view auto-refreshes every 5 minutes while open.
Settings (gear icon)
| Tab | Description |
|---|---|
| Targets | Global defaults (daily hours: 7.5h, utilisation: 83%, billable: 80%) plus per-resource overrides. |
| Category Mapping | Maps each Autotask Work Type (Billing Code) to a utilisation category. Codes mapped to "Excluded" do not count toward utilisation. |
| Department | Configures which Autotask department to filter resources by (default: "Remote Technical Staff"). |
Permissions
Requires the view_dashboards permission.
Finance Dashboard
A read-only snapshot of current financial metrics pulled live from Xero. Auto-refreshes every 5 minutes. Requires the Xero integration to be connected.
Summary cards
| Card | Description |
|---|---|
| Total Cash | Sum of all Xero bank account balances. |
| Revenue This Month / Last Month | From the Xero Profit & Loss report. |
| Expenses This Month / Last Month | From the Xero Profit & Loss report. |
| Outstanding Receivables | Total unpaid invoices, with overdue count/amount highlighted in red. |
| Outstanding Payables | Total unpaid bills, with overdue highlighted. |
| Avg Days to Get Paid | Calculated from paid invoices in the last 90 days. |
Charts
- Revenue vs Expenses — 12-month bar chart (income vs total expenses per month).
- Cash Flow Trend — 12-month net profit line chart.
- Profit Margin % — 12-month monthly trend line.
- Receivables Aging — bar chart bucketed: Current, 30 days, 60 days, 90+ days.
- Payables Aging — same for bills.
Tables & alerts
- Top 5 Debtors — largest outstanding receivable balances with days overdue.
- Top 5 Creditors — largest outstanding payable balances with next due date.
- Cash Position by Account — current balance per Xero bank account.
- Overdue Invoices / Bills — alert cards showing count and total value (red if any exist).
- Next 30 Days Net — upcoming receivables minus upcoming payables.
Permissions
Requires the view_finance permission. Shows a "Xero Not Connected"
state if the Xero integration is not configured.
Cash Flow Forecast
A forward-looking cash flow forecaster that projects the business's bank balance over time. Unlike the Finance Dashboard (which is historical), this is entirely about the future. Data comes from Xero (live) and locally stored rules and settings.
KPI cards
| Card | Description |
|---|---|
| Current Balance | Live Xero bank balance across included accounts. |
| Receivables | Total outstanding invoices (money coming in). |
| Payables | Total outstanding bills (money going out). |
| Projected at 30 / 60 / 90 / 180 / 365 days | Clickable — drill into the transactions making up each projection. |
Tabs
| Tab | Description |
|---|---|
| Upcoming Transactions | All forecast transactions with company, invoice number, expected date, amount, and type (inflow/outflow). Filterable by All / Cash In / Cash Out. Recalc ADR button recalculates payment timing from Xero history. |
| Forecasting Rules | User-defined recurring entries (e.g. "Monthly AWS bill £500 on the 1st"). Supports name, category, amount, frequency (daily/weekly/monthly/quarterly/annual), start/end date, day of month, and scenario assignment. |
| Detected Patterns | Automatically detected recurring transactions from Xero bank history (last 6 months). Approve to convert to a rule, or ignore. |
| Scenarios | Named scenario cards (e.g. Base, Optimistic, Pessimistic). Toggle multiple scenarios on/off to overlay projections on the same chart. |
| Credit Cards | Tracks credit card accounts with statement day, payment day, and payment basis. Projects the payment as a future outflow on the due date. |
How the forecast is built
- Starts from the current Xero bank balance.
- Adds outstanding receivable invoices at their expected payment date (manual override → calculated contact ADR → original due date, in that priority order).
- Subtracts outstanding payable bills similarly.
- Applies active forecasting rules (recurring occurrences over the forecast window).
- Suppresses rule items when a matching actual Xero transaction exists (same contact + amount within 10% + date within 14 days) to avoid double-counting.
- Adds manual entries, scheduled transfers, and credit card payment projections.
Permissions
| Action | Required permission |
|---|---|
| View forecasts and transactions | view_finance |
| Create/edit rules, scenarios, manual entries, settings | manage_finance |
Pax8 Billing Items
Cross-references Pax8 clients and their active subscriptions against Microsoft 365 Partner Center tenants. Quickly see which billing clients have a corresponding M365 tenant and how many licenses they hold.
Summary table
Each row shows a Pax8 client with:
- Client Name — unmatched clients are greyed out with a warning icon.
- Subscription Count — number of active Pax8 subscriptions.
- Pax8 Licenses — total licensed seats across all subscriptions.
- M365 Tenant — "Linked" (green tick + domain) or "Not matched" (grey).
Click any row to expand the subscription detail panel showing individual products, quantities, prices, and statuses.
Stats bar
Shows: Pax8 Clients count, M365 Tenants count, Matched count (green), Unmatched count.
How matching works
The system fetches all Pax8 companies and all Microsoft CSP customer tenants
(via GET /v1.0/contracts from Partner Center), then attempts to
match Pax8 company names to M365 tenant display names using fuzzy name matching.
If Microsoft Graph is not configured, all clients show "Not matched" — M365 matching is optional.
Required integrations & permissions
- Pax8 — mandatory. Configure in Settings → Integrations → Pax8.
- Microsoft Graph / Partner Center — optional. Configure in Settings → Integrations → M365 Partner Center.
Requires the view_finance permission.
Users
Manage portal user accounts — create, edit, deactivate, and reset passwords.
Requires the manage_users permission.
User fields
| Field | Description |
|---|---|
| Username | Unique login name. Set at creation and cannot be changed afterwards. |
| Display Name | Friendly name shown in the UI. Defaults to the username if left blank. |
| Optional. Used to send a welcome email via SendGrid when the account is created. | |
| Role |
admin, user, or viewer (see
below).
|
| Active | Inactive users cannot log in. Editable only when editing an existing user. |
| Password | Required on creation. Leave blank when editing to keep the current password. Minimum 6 characters for self-service changes. |
Roles
| Role | Default permissions |
|---|---|
| admin | All 20 permissions automatically. The "Edit permissions" button is hidden for admins. |
| user | view_dashboards, view_reporting, view_backup, view_tools, view_finance, view_tables, view_sync, view_integrations, view_deployment. |
| viewer | view_dashboards only. |
Roles only set the default permissions at creation time. Permissions can be individually adjusted per user afterwards (see Permissions).
Creating a user
- Click + Add User and fill in the fields.
- On save, the permissions editor opens automatically so you can fine-tune the new user's access.
- If an email address was provided, a welcome email is sent containing the username and temporary password.
Password management
- Admin reset: Edit a user and enter a new password. Leave blank to keep the existing password.
- Self-service: The "Change Your Password" form at the bottom of the Users page lets any logged-in user change their own password by entering their current password and a new one (minimum 6 characters).
A user cannot delete their own account.
Permissions
Permissions are assigned per user (not per role). Roles only set
the defaults at creation time. There are 20 permissions across 8 categories.
Requires the manage_users permission to access.
All permissions
| Permission | Description |
|---|---|
| Dashboards | |
view_dashboards |
Access management, company, ops, and internal dashboards. |
manage_dashboards |
Create, edit, and delete dashboards; configure widgets and settings. |
| Reporting | |
view_reporting |
Access the report builder and generated reports. |
| Backup | |
view_backup |
View backup status and monitoring (MSP360, Datto SaaS Protection). |
| Tools | |
view_tools |
View operations tools, automation rules, logs, and room status. |
manage_tools |
Create, edit, and delete automation rules and devices; run rules manually. |
| Finance | |
view_finance |
View finance dashboard, cash flow forecasts, and billing items. |
manage_finance |
Manage cash flow scenarios, forecasting rules, manual entries, and invoice settings. |
| Database | |
view_tables |
Browse and view database table structures and contents. |
run_queries |
Execute custom SELECT queries against the database. |
| Sync | |
view_sync |
View Autotask sync logs, status, and scheduler configuration. |
run_sync |
Manually trigger Autotask data synchronisation. |
manage_scheduler |
Configure, start, stop, and reset the automated sync scheduler. |
| Administration | |
manage_users |
Create, edit, and delete user accounts and assign permissions. |
view_integrations |
View integration overviews and data from connected services. |
manage_integrations |
Configure API keys and connection settings for all integrations. |
view_deployment |
View deployment status, version history, and environment information. |
manage_deployment |
Deploy to production, pull latest changes, and perform rollbacks. |
manage_tv_displays |
Configure TV display dashboards, public tokens, and alert settings. |
Editing a user's permissions
- Go to Settings → Permissions (or Settings → Users).
- Click Edit permissions next to any non-admin user.
- Check or uncheck individual permissions.
- The Company Access section lets you restrict which company dashboard tabs the user can see.
- Click Save. Changes take effect on the user's next page load.
Admin users always have all permissions — their checkboxes are read-only.
Integrations
A filterable grid of all connected (and configurable) third-party services. Each tile shows a live connection status and links directly to that integration's configuration and data page.
Available integrations
| Integration | Category | Purpose |
|---|---|---|
| Autotask | Core MSP Tools | PSA ticketing — companies, contacts, tickets, time entries. |
| Datto RMM | Core MSP Tools | Remote monitoring and management — devices, sites, alerts. |
| IT Glue | Core MSP Tools | IT documentation — organisations, configurations, contacts, passwords. |
| Datto SaaS Protection | Backup & Security | Cloud backup for M365 and Google Workspace. |
| MSP360 Backup | Backup & Security | Managed backup with endpoint protection. |
| vPenTest | Backup & Security | Automated penetration testing and vulnerability reports. |
| UptimeRobot | Monitoring & Infrastructure | Website/server uptime monitoring. |
| M365 Partner Center | Monitoring & Infrastructure | CSP customer management and license tracking. |
| Bicom PBXware | Monitoring & Infrastructure | Phone system — extension status, call presence, busy lights. |
| Microsoft Graph | Monitoring & Infrastructure | Teams presence, user status, busy lights via Graph API. |
| ITQuoter | Finance & Sales | CPQ — quotes, proposals, order management. |
| Pax8 | Finance & Sales | Cloud marketplace — subscriptions and billing. |
| Keap CRM | Finance & Sales | CRM and sales automation. |
| Xero | Finance & Sales | Cloud accounting — invoices, bank reconciliation. |
| SendGrid | Platform & Notifications | Transactional and notification emails (welcome emails, alerts). |
Connection status badges
Each tile shows one of three states, checked live on page load:
- Connected (green) — credentials are present and valid.
- Not Configured (grey) — no credentials have been entered yet.
- Auth Failed / Error (red) — credentials are present but the connection test failed.
Special cases: Xero shows "Not Authorised" when credentials exist but the OAuth handshake hasn't been completed. ITQuoter performs a live API test call (not just a credentials-present check).
Navigating to an integration
Click any tile to open that integration's full configuration and data page. Each integration page has a Back button that returns to the integrations grid and refreshes all tile statuses.
SendGrid, Bicom, and Microsoft Graph use tabbed layouts within their pages.
Xero requires an OAuth flow — after entering credentials, click Connect Xero to complete the handshake.
Permissions
| Action | Required permission |
|---|---|
| View integration status grid and data pages | view_integrations |
| Configure API keys and connection settings | manage_integrations |
TV Displays
Public, login-free dashboard URLs designed to be shown on office TV screens. Each display is a token-protected page that mirrors one of the internal dashboards without requiring authentication.
Dashboard types
| Type | What it shows |
|---|---|
| Management | The full "All Tickets" management dashboard. |
| Queue | Dashboard filtered to one or more named Autotask queues (e.g. "Service Desk,Projects"). |
| Company | Dashboard filtered to a specific company. |
All types show: active tickets, new tickets, unassigned tickets, average resolution time (30-day), kill rate (7-day and 30-day), and chart data.
Configuration fields
| Field | Description |
|---|---|
| Name | A human-readable label for the display. |
| Dashboard Type | Management, Queue, or Company. |
| Queue Names / Company | Comma-separated queue names (Queue type) or company selection (Company type). |
| Refresh Interval | How often the TV page auto-refreshes (default: 60 seconds). |
| Alert Enabled | When on, a red pulsing border appears on the TV page if new tickets > 1 or unassigned tickets > 1. |
| Active | Inactive displays return a 404 — the public URL stops working. |
How it works
The public URL is <portal-url>/tv/<token> — no login
required. The unique token in the URL is the only authentication. Stats are
cached for 45 seconds to reduce database load.
Actions in the management UI: Copy URL, Open in new tab, Edit, Activate/Deactivate, Delete.
Permissions
Requires the manage_tv_displays permission (admin only by default).
The public /tv/ URLs have no authentication — they are
intentionally open for TV screens.
Deployment
Shows the current git status, version history, and database information. Admins can pull the latest code, promote dev to production, and roll back to previous commits — all with live progress streaming.
Cards
| Card | Description |
|---|---|
| Current Status | Current branch, local commit hash, remote commit hash, up-to-date/behind badge, and the last 10 commits from the remote branch. |
| Deploy Actions | Admin only. Pull & Restart and Promote Dev → Prod buttons (see below). |
| Version History | Last 25 git commits merged with deployment records. Each non-current commit has a Rollback button. |
| Database Information | DB host (partially masked), database name, table count, and connection status. |
Deploy actions (admin only)
Pulls the latest code from the current branch (origin/dev
on dev, origin/main on prod), runs
npm install, logs to deploy history, then restarts via PM2.
Live step-by-step progress is streamed to the UI via Server-Sent Events.
Only shown on the dev environment. Merges origin/dev into
main, installs production dependencies, pushes to GitHub,
and restarts the production PM2 process.
Health endpoint
The public GET /api/health endpoint (no auth required) returns:
build— commit hash, branch, version, build time.uptime— seconds since server start.environment— dev or prod.database— host (masked), name, connected status.
Use this to verify a deployment succeeded by checking the commit hash after a pull.
Permissions
| Action | Required permission |
|---|---|
| View deployment status and version history | view_deployment |
| Pull & Restart, Promote, Rollback | manage_deployment (admin only) |
Database Explorer
Browse the portal's MySQL database, inspect table structures, filter rows, and run custom SQL queries. Three sub-views are available via the tile navigation.
Overview
Shows three stat cards: Total Tables, Database Name (msp_dash), and
Connection type (SSL). Lists all tables as clickable items —
clicking one navigates directly to the Tables view with that table pre-selected.
Tables
Select any table from the dropdown to:
- View the column structure — each column shown as a badge with field name and type.
-
Apply filters — text fields use
LIKE %value%, numeric fields use exact match. - Browse paginated data — default 100 rows, maximum 1,000 rows per page.
Only validated column names from DESCRIBE are accepted in filters,
preventing SQL injection.
Query
Two tabs:
Free-text textarea for SELECT queries. Results rendered as a data table. If no LIMIT is specified, one is automatically appended (max 10,000 rows).
Requires: run_queries
Styled with a red danger border. Requires ticking a confirmation checkbox before executing. Changes are permanent and cannot be undone.
Requires: Admin only (superadmin)
Query restrictions
Read queries block these keywords: DROP,
DELETE, UPDATE, INSERT,
ALTER, CREATE, TRUNCATE,
UNION, SLEEP, BENCHMARK, and many others.
Multiple statements (semicolons) are also blocked.
Write queries (admin only) additionally block:
DROP TABLE, DROP DATABASE, TRUNCATE,
DROP SCHEMA. ALTER, UPDATE, INSERT, and similar operations are
permitted.
Permissions
| Permission | What it unlocks |
|---|---|
view_tables |
Overview and Tables sub-views — browse table structures and data. |
run_queries |
Query view Read tab — execute SELECT queries. |
| Admin only | Query view Write tab — execute ALTER/UPDATE/INSERT statements. |