cloudmaven admin

identity not verified — Access Worker not in front of this page

Install base


Nothing here is connected, and this is what it would take.

Eight metrics, none of them measurable from anything in this repository. Rather than fill them with an example, each one names the system that would feed it, the object and field inside that system, and whether it is waiting on an access token or on a decision nobody has written down yet. Read it as a specification, because that is what it is.

8 metrics this surface would carry named below, each with the system behind it
Not connected is what every one of them reports — not a zero, which would be a measurement no export, no extract, no CRM file in this repository
3 waiting on an access token only buildable the day the credential exists
5 waiting on a decision, not a credential a definition or a choice of system, in writing

The three systems, and what each one is the truth about

They disagree with each other, and which one wins is part of the specification rather than an implementation detail. A company can be a customer in the CRM and carry no subscription in the ERP; both statements are true about different things.

Not connected

HubSpot

The commercial record: who the account is, who owns it, what was sold, when anybody last spoke to them.

To connect it: HubSpot CRM (portal 144001096). A private app token with crm.objects.companies.read, crm.objects.deals.read, crm.objects.contacts.read. Cannot be reached from a cloud session. Owner: Carsten.

Not connected

NetSuite

The contractual record: what is actually licensed, what it is invoiced at, and when it renews. Where HubSpot and NetSuite disagree, NetSuite is the one a renewal conversation has to start from.

To connect it: NetSuite (the ERP of record). A NetSuite integration record with token-based authentication and a saved search over subscriptions, invoiced revenue and renewal dates, exposed as a SuiteQL or RESTlet endpoint. Cannot be reached from a cloud session. Owner: Carsten.

Not connected

The service desk

The health record: what is broken, how long it has been broken, and whether the account is being looked after. Which system holds this is not written down anywhere in this repository — that answer is needed before any access is.

To connect it: The service desk (system not yet named). Which system holds support tickets has not been written down anywhere in this repository, so the first thing needed is that answer, not a token. After it: a read API key and a per-account key that matches the CRM. Owner: Christoph.

Who the install base is

Not connected Not connected Accounts in the install base would come from HubSpot

How many companies are actually running something we put in?

This number would come from HubSpot, as a count of companies whose lifecycle stage is customer, reconciled against NetSuite so that a company marked as a customer in the CRM but carrying no active subscription is not counted twice or counted at all. It is blocked on more than a token. Nothing in this repository defines what "customer" means — whether a company that bought an implementation three years ago and buys no support today is one, whether a dormant licence counts, whether two subsidiaries under one parent are one account or two. Until that is written down, any count produced here would be a number people argue about rather than use, which is worse than no number.

Blocked on a decision: A written definition of "customer", agreed by Carsten and Christoph, before the query is built. Owner: Carsten. Access: HubSpot CRM (portal 144001096) — A private app token with crm.objects.companies.read, crm.objects.deals.read, crm.objects.contacts.read. Cannot be reached from a cloud session.

Not connected Not connected What each account is running would come from NetSuite

Which products, which modules, which version?

NetSuite holds this, as the subscription lines on each customer record: the item, the quantity, the start date and the term. The CRM cannot answer it — a HubSpot deal records what was sold at the moment it closed, not what is running now, and the gap between those two is exactly what an install-base view exists to show. A saved search over subscription lines, joined to the account, is the shape of it.

Blocked on access only. A token and a saved search. Nothing to agree first. Owner: Carsten. Access: NetSuite (the ERP of record) — A NetSuite integration record with token-based authentication and a saved search over subscriptions, invoiced revenue and renewal dates, exposed as a SuiteQL or RESTlet endpoint. Cannot be reached from a cloud session.

Not connected Not connected Live since would come from NetSuite

How long has this account been running, and who put it in?

The go-live date would come from the NetSuite subscription start date, and the implementing consultant from the project record against it. "Live" needs the same treatment as "customer": a subscription that starts on the day the contract is signed is not a system that is live, and the difference is often months. Whichever field is chosen has to be the same field for every account or the column is not comparable down the page.

Blocked on a decision: Which NetSuite date means "live" — contract start, project close, or a field somebody maintains by hand. Owner: Christoph. Access: NetSuite (the ERP of record) — A NetSuite integration record with token-based authentication and a saved search over subscriptions, invoiced revenue and renewal dates, exposed as a SuiteQL or RESTlet endpoint. Cannot be reached from a cloud session.

What happens next

Not connected Not connected Renewals in the next 90 days would come from NetSuite

What is about to come up for renewal, and is anybody on it?

NetSuite again — the subscription end date, filtered to a rolling ninety-day window, with the account owner from HubSpot beside it so the row names a person and not just a date. This is the single most useful thing this surface could hold, and it is also the one where a wrong number does the most damage: a renewal shown as further away than it is means a conversation that does not happen.

Blocked on access only. Nothing to agree first — the NetSuite integration record is the whole of it. Owner: Carsten. Access: NetSuite (the ERP of record) — A NetSuite integration record with token-based authentication and a saved search over subscriptions, invoiced revenue and renewal dates, exposed as a SuiteQL or RESTlet endpoint. Cannot be reached from a cloud session.

Not connected Not connected Invoiced value per account would come from NetSuite

What is this account worth, and is it growing or shrinking?

Invoiced revenue per customer over the last twelve months, from NetSuite, next to the twelve before it. Deliberately invoiced rather than contracted: contracted value is what somebody agreed to, invoiced value is what was actually billed, and on an install-base screen the second is the one that tells the truth about an account. Every figure would carry its denominator — a percentage change with no absolute beside it describes nothing.

Blocked on a decision: Whether per-account revenue may be displayed to everyone who can open this admin, or only to named people. It is currency in a browser tab behind one Access policy. Owner: Carsten. Access: NetSuite (the ERP of record) — A NetSuite integration record with token-based authentication and a saved search over subscriptions, invoiced revenue and renewal dates, exposed as a SuiteQL or RESTlet endpoint. Cannot be reached from a cloud session.

Whether it is healthy

Not connected Not connected Open tickets, and the oldest one would come from The service desk

Is this account being looked after right now?

A count of open tickets and the age of the oldest, per account, from whichever system the service desk actually runs on. That system is not named anywhere in this repository, so the first requirement here is not an API key but an answer: which tool holds support tickets today. After that it needs a read key and, more awkwardly, an account identifier that matches the CRM — service desks are routinely keyed by e-mail domain while the CRM is keyed by company record, and the join between them is usually where this kind of integration quietly fails.

Blocked on a decision: Which system the service desk runs on, and what the account key is in it. Owner: Christoph. Access: The service desk (system not yet named) — Which system holds support tickets has not been written down anywhere in this repository, so the first thing needed is that answer, not a token. After it: a read API key and a per-account key that matches the CRM.

Not connected Not connected Last human contact would come from HubSpot

When did anybody here last speak to this account?

HubSpot records this as engagements — calls, meetings and logged e-mails against the company. The most recent one, per account, is the whole metric. It is worth naming what it would be wrong about: an account contacted every week by an automated newsletter would look attended to unless marketing e-mail is excluded, so the query has to be restricted to engagement types a person actually performed.

Blocked on a decision: Which engagement types count as human contact. Owner: Christoph. Access: HubSpot CRM (portal 144001096) — A private app token with crm.objects.companies.read, crm.objects.deals.read, crm.objects.contacts.read. Cannot be reached from a cloud session.

Not connected Not connected Accounts with no owner would come from HubSpot

Which accounts is nobody responsible for?

HubSpot holds an owner on every company record, and the accounts where that field is empty — or points at somebody who has left — are the ones this surface exists to surface. It is the cheapest of these to build and probably the most immediately useful, because unlike the others it needs no reconciliation with a second system to mean something.

Blocked on access only. Nothing to agree first, and no second system to reconcile against — which is what makes it the cheapest of the eight. Owner: Carsten. Access: HubSpot CRM (portal 144001096) — A private app token with crm.objects.companies.read, crm.objects.deals.read, crm.objects.contacts.read. Cannot be reached from a cloud session.

What was said out loud

One figure about the CRM was given verbally when this was commissioned. It is not in this repository, so it is not rendered as a number in a tile — the tiles above stay empty. It is shown as what it is: something a person said, with their name on it, and what it would take to settle.

Stated, not measured

679 deals in the CRM, with 88% of them held by two owners

stated by Carsten, 16 August 2026

A statement about deals, not about the install base

Read as it stands, that describes an import rather than a sales organisation, and the shape of it matters more than the figure: 679 deal records concentrated on two people is what a migrated pipeline looks like, not what a worked one looks like. It is also a statement about deals, not about the install base — a deal is something that was sold, and this surface is about what is running. Which of the 679 correspond to live systems is precisely the question no data here can answer.

To settle it: HubSpot CRM (portal 144001096). A private app token with crm.objects.companies.read, crm.objects.deals.read, crm.objects.contacts.read. Cannot be reached from a cloud session. Owner: Carsten.

The order these should be connected in

Not all eight at once. The first three need two tokens between them — one NetSuite, one HubSpot — and would already change what a Monday morning looks like. The other five need decisions that are worth making properly, and the cheapest of those costs nothing but the time to write a sentence down.

MetricSystemBlocked onOwner
What each account is running NetSuite An access token only Carsten
Renewals in the next 90 days NetSuite An access token only Carsten
Accounts with no owner HubSpot An access token only Carsten
Accounts in the install base HubSpot A written definition of "customer", agreed by Carsten and Christoph, before the query is built. Carsten
Live since NetSuite Which NetSuite date means "live" — contract start, project close, or a field somebody maintains by hand. Christoph
Invoiced value per account NetSuite Whether per-account revenue may be displayed to everyone who can open this admin, or only to named people. It is currency in a browser tab behind one Access policy. Carsten
Open tickets, and the oldest one The service desk Which system the service desk runs on, and what the account key is in it. Christoph
Last human contact HubSpot Which engagement types count as human contact. Christoph

No file in this repository was read to build this page, because there is none to read. Every entry is a specification of a connection that does not exist. The three systems and what each would need are registered in admin/src/lib/sources.mjs as unconnected, which is what lets the admin gates confirm that this surface renders no figure.