Portfolio Dashboard

Active Customers
45
+3 this month
Total Licensed Seats
8,420
of 10,000 pool
Avg. Simulation Pass Rate
78%
+2.1% vs last month
Customers Needing Attention
4
sync failures, low engagement
All Customers
Sorted by health status — issues first
Customer Status Seats Tier Pass Rate Last Campaign Health
Eklund Bygg AB
eklundbygg.se
Sync Failed 85 / 100 Pro Never
Finnmark Shipping Oy
finnmarkshipping.fi
Email Unverified 210 / 250 Enterprise 61% 12 days ago
Helsingborg Medical Group
hbgmedical.se
Low Engagement 340 / 400 Enterprise 52% 28 days ago
Polar Energi AS
polarenergi.no
Setup Incomplete 0 / 150 Pro Never
Vestland Accounting
vestlandaccounting.no
Active 42 / 50 Starter 88% 3 days ago
KopparTech Solutions
koppartech.se
Active 120 / 150 Pro 81% 5 days ago
Luleå Transport AB
ltransport.se
Active 75 / 80 Pro 79% 7 days ago
Nordhavn Consulting
nordhavn.dk
Active 58 / 60 Starter 84% 2 days ago
Showing 8 of 45 customers
Dashboard data served by the cross-tenant analytics aggregation API. Health statuses derived from: sync status (provisioning API), email verification status, campaign recency, and simulation pass rate thresholds. All queries are MSP-scoped via the identity layer — no cross-MSP data leakage possible by design.

New Customer Setup

1 Create Tenant
2 Licenses
3 User Provisioning
4 Email Config
5 Branding
6 Review & Launch
Customer Details
Basic information to provision the tenant. The organization will be created immediately.
Must match the domain in the customer's email environment.
Cannot be changed after creation. Data will be stored in this region per GDPR requirements.
Tenant creation is an async operation. The API accepts the request, returns a tenant ID and provisioning job ID immediately. Actual provisioning (DB schema, storage bucket, config seeding) happens server-side in ~10-30 seconds. The wizard shows a progress indicator, then auto-advances once the status endpoint returns "ready". If provisioning fails, the user sees a clear error and can retry. Data residency selection determines which regional cluster the tenant is provisioned in — this is irreversible by design.

License Pool

Total Pool
10,000
Allocated
8,420
84.2%
Active Users
7,834
93% of allocated
Available
1,580
Over-allocated
0
No overages
Pool Utilization
84.2% allocated
7,834 active / 8,420 allocated
License Allocation by Customer
Customer Tier Allocated Active Users Utilization Status
Helsingborg Medical Group Enterprise 400 340
85%
OK
Finnmark Shipping Oy Enterprise 250 210
84%
OK
Polar Energi AS Pro 150 0
0%
No users
KopparTech Solutions Pro 150 120
80%
OK
Eklund Bygg AB Pro 100 85
85%
Sync failed
Luleå Transport AB Pro 80 75
94%
Near limit
Nordhavn Consulting Starter 60 58
97%
At limit
Vestland Accounting Starter 50 42
84%
OK
License pool data from GET /v1/msp/{id}/licenses/summary and GET /v1/msp/{id}/licenses/by-tenant. The "active users" count comes from the provisioning system (users with status=active). Over-allocation prevention is enforced server-side: POST /v1/licenses/allocate returns 409 if requested seats exceed available pool. "Near limit" threshold is configurable (default: 90%). "At limit" means active users >= 95% of allocated — triggers a proactive alert suggesting the MSP increase allocation before user sync imports more.

Customers

See the Portfolio Dashboard for the customer list view.