Account health board that puts product usage next to your CRM

Your customer success team opens one board where every account's logins, seats and usage trend sit beside its owner, plan and renewal date.

App
LookerHubSpotSlack BotSalesCustomer SupportResearch & MonitoringAI Reports
PromptCreate

Build an account health board for our customer success team. Right now product usage lives in Looker and account context lives in HubSpot, and nobody joins them, so a CSM preparing for a weekly account review opens two tools and reconciles them by hand. This app is the joined view: one row per customer account, the HubSpot fields on the left, the Looker usage numbers on the right, sorted so the accounts in trouble float to the top.

Start with a setup screen, because the join between the two systems is the thing that makes or breaks this app. Do not assume names match across Looker and HubSpot. Let an admin configure: which HubSpot company property holds the account identifier that Looker knows the customer by (for example a numeric account id property, or the company domain), the Looker model and explore to query, the Looker dimension holding that same account identifier, and the measures to read for logins, active seats and any usage total. Let the admin also pick the Slack channel the customer success team watches. Persist this configuration for the whole workspace, and show a clear warning on the board if it has not been filled in yet. Offer Search Looks so the admin can browse saved Looks and pick one by name instead of hand building a query, and support both paths: a saved Look run with Run Look, or a query the app composes with Run Inline Query.

The board lists our customer accounts from HubSpot using Search Companies, filtered to actual customers using whichever lifecycle stage or customer flag property the admin points at. Show company name, owner, plan, renewal date and the configured account identifier on each row. Resolve HubSpot owner ids to human names with List Owners.

For each visible account show logins, active seats and a usage trend. Fetch these from Looker with a single Run Inline Query covering the whole visible page of accounts rather than one query per row: filter the configured account identifier dimension to the set of identifiers on screen, group by that dimension and by week or month, pull the measures back in one call, then join the returned rows to the HubSpot companies inside the handler. Compute the trend as the change between the most recent complete period and the prior one, render it as a small sparkline plus an up or down percentage, and make every usage column sortable. Default the sort to steepest decline first, so the accounts losing usage are the first thing on screen. Add visible risk badges for accounts with zero logins in the current period and for accounts whose renewal date falls inside the next ninety days.

The board is per user. On load, match the logged in viewer to a HubSpot owner by email address using List Owners, and default the board to the accounts that owner owns. Put a clear toggle in the header to switch to the whole book of business, and remember each viewer's last choice. If the viewer's email does not match any HubSpot owner, fall back to the whole book and say plainly why.

Clicking a row opens a detail view for that account. On one side show that account's Looker usage history for the last twelve months as a chart plus a table of periods, fetched with the same Run Inline Query pattern scoped to the single account identifier, or with Run Look when the admin configured a saved Look. On the other side show the HubSpot company properties that matter for a review: owner, plan, renewal date, lifecycle stage, employee count, last activity date and any custom health fields. Below both, list the health briefs already written for this account, newest first.

Put a Research this account button on every row and on the detail view. It kicks off a background agent scoped to that one account. The agent pulls that account's usage history from Looker with Run Inline Query or Run Look, reads the full HubSpot company record, and writes a short health brief of roughly two hundred words covering the usage trend in plain language, the risk signals it can actually see in the data, and one suggested next step for the account owner. It then files the brief onto the company record using HubSpot Create Note associated with that company id, and posts it to the configured customer success channel using Slack Bot Send a Message, naming the account and its owner so the right person sees it, with the trend summary and a link back to this app.

Show the agent's progress on the row that started it. When it finishes, store the brief in the app so it appears in the account detail view and in a briefs list without anyone opening HubSpot or Slack, keeping the brief text, who ran it and when.

Practical notes: cache each board load's usage numbers for a few minutes and give the user a manual refresh button, since the Looker queries are the slow part. Handle accounts whose configured identifier property is blank by showing them in a separate group labelled as not linked to usage data rather than dropping them silently, because that list is exactly what the admin needs to fix. Show honest empty states when Looker returns no rows for an account instead of rendering a zero that looks like real data.

What does this prompt do?

  • Lists your customer accounts from HubSpot with the owner, plan and renewal date already attached to each row
  • Pulls each account's product usage out of Looker and shows logins, active seats and a usage trend right on the row, sorted so declining accounts come first
  • Opens any account to see its full usage history beside its HubSpot record, so you stop reconciling two tools by hand before a review
  • Adds a Research this account button that writes a short health brief covering the usage trend, the risk signals and a suggested next step, files it on the HubSpot company and posts it to your customer success channel in Slack

What do I need to use this?

  • A Looker account with product usage data broken out per customer
  • A HubSpot account where your customer companies live, with an owner and renewal date on each one
  • A Slack workspace with a channel your customer success team watches
  • One thing to know before setup: which HubSpot company field holds the identifier Looker knows that customer by, such as an account id or the company domain

How can I customize it?

  • Which usage measures appear as columns, for example logins and active seats today, or seats and events consumed later
  • How steep a drop has to be before an account gets flagged as declining, and how far ahead renewal dates count as urgent
  • Which Slack channel the health briefs post to, and whether the board opens on your own accounts or the whole book by default

FAQs

How does the board know which usage rows belong to which account?
You tell it during setup. You pick the HubSpot company field that holds the identifier Looker uses for that customer, such as an account id or the company domain, and the matching field in Looker. Nothing assumes the two systems use the same names, which is the part that usually breaks this kind of join. Any account with that field left blank gets grouped separately so you can see exactly what needs fixing.
Does everyone see the same accounts?
No. The board opens on the accounts owned by whoever is logged in, matched to their HubSpot owner record by email address. A toggle in the header switches to the whole book of business when a manager wants the full picture, and the board remembers each person's last choice.
Does the Research button change anything in HubSpot?
It adds a note to the company record with the health brief, and posts the same brief to your customer success channel so the account owner sees it. It does not edit any existing properties, change the deal, or email the customer.
Our usage data is already in a saved Look. Can we use that instead?
Yes. During setup you can browse your existing Looks by name and pick one, or let the app build the query itself against a model and explore. Both paths work, so you do not have to rebuild reporting you already have.
Will this be slow if we have hundreds of accounts?
The board asks Looker for the whole visible page of accounts in one request rather than one request per row, and holds the numbers for a few minutes with a refresh button when you want them live. That keeps a weekly review board fast even on a long customer list.

Related templates

A brand asset library your marketing team actually searches

Every logo, photo, video cut and ad export in one searchable grid, with previews, campaign tags and rights expiry dates at a glance.

General Input Storage
General Input Database
JigsawStack
+1
App
Turn Mailjet email clicks into ranked HubSpot follow-ups

Twice a day we spot the people clicking your pricing and demo pages, create a follow-up task for their owner, and post a ranked recap to Slack.

Mailjet
HubSpot
Slack Bot
Agentic Task
Clean out the Looker dashboards and Looks nobody opens

One board showing every dashboard and Look with its folder, owner and favorite count, so you can find dead content and retire it safely.

Looker
Slack Bot
App
LiveKit live operations console for room moderation

Watch every live room on one screen, remove disruptive guests, start recordings and end stuck sessions without anyone opening a terminal.

LiveKit
Slack Bot
General Input Database
App
Wake up dormant Keap leads with a researched reason

Every Monday we find leads who never bought, research a real reason to reach out, and send a short personal email instead of another check in.

Keap
Slack Bot
Agentic Task
iMessage campaign console with pre-flight checks and delivery board

Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.

LoopMessage
Google Sheets
HubSpot
App

Stop keeping usage in one tab and account context in another.

Give your customer success team a single board for weekly account review, with the numbers and the CRM record finally on the same row.