Renewal signal board for every HubSpot customer account

By General Input

Open one board before every renewal or QBR to see what the open web has said about each customer lately, then have an assistant write the brief into HubSpot.

Integrations

  • Exa
  • HubSpot

Type

App

Categories

  • Sales
  • Operations

Build me an app my account managers open before every renewal and QBR: a board of our existing customer accounts from HubSpot, where each account is a card showing what the open web has said about that company lately. Today the team preps by googling each account the night before, and I want that replaced with one screen they return to every week.

The main view is a board of account cards. A handler builds the account list from HubSpot: use Search Companies when a filter is applied so the filtering happens server side, and List Companies for the unfiltered sweep. Give me a filter bar at the top with a lifecycle stage picker, an account owner picker populated from HubSpot List Owners, and a renewal window control. Default the board to accounts with a renewal date inside the next 90 days, using whichever company date property holds renewal or contract end date, and let me choose that property once in a small settings panel so the app is not hardcoded to one portal's schema. If no renewal property is configured, fall back to filtering by lifecycle stage and owner and say so in the empty state instead of showing a broken filter.

For each account on the board, a handler sweeps the web with Exa Search using the company name and domain, looking for five signal types: funding, acquisition, layoffs, leadership change and product launch. Run a focused search per signal type rather than one vague query, and use the search categories that fit: news and financial report for funding, acquisition and layoff coverage, company for product and corporate pages. Bias toward recent results and pass the company domain through so results about a same named company elsewhere do not slip in. Classify each result into one of the five signal types, give it a signal strength score based on how significant the event is and how credible the source looks, and keep the published date. Cache sweep results per account so opening the board is fast, and put a Refresh button on each card plus a Refresh all on the board.

Each card shows the account name, the renewal date and days remaining, the account owner, the last researched date, and the top few signals as compact rows with signal type, headline, source and date. Sort the board by a blend of signal strength and recency so the accounts with the biggest recent news float to the top, and let me switch the sort to soonest renewal. Show staleness clearly: an account whose last researched date is older than the threshold I set gets a visible stale marker, and accounts never researched are marked as such.

Clicking a signal opens a reading pane with the clean readable text of that page, pulled with Exa Get Contents, plus the source link, the published date and the signal type. Every signal row has a Dismiss as noise action. Dismissals persist in the app keyed by account plus source URL, apply for the whole team rather than just the person who clicked, and filter that result out of future sweeps for that account. Keep a Dismissed list per account with who dismissed it and when, and let someone restore one.

Every card has a Write the account brief button that kicks off a background agent for deeper research. The agent starts an asynchronous run with Exa Create Agent Run, passing the company name, domain, renewal date, the signals currently on the card, and instructions to produce a renewal ready brief: what changed at this company recently, what it implies for our relationship, risks to the renewal, expansion angles, and the questions the account manager should ask on the call. Set a sensible effort tier and a spend cap through the budget max cost setting, and expose both in the settings panel. Agent runs are asynchronous, so the card must immediately show a pending state with the run started time, and the app polls Get Agent Run until the run completes, fails or is still working. Show the finished brief in the app, in a panel next to the signals.

When the brief is ready, file it back to the CRM: HubSpot Create Note with the brief body, associated to that company record, and HubSpot Update Company to stamp the last researched date property so the board immediately shows the account as fresh. Show both writes as they happen and confirm them on the card. If either write fails, keep the brief in the app, show the error inline on the card, and offer a retry rather than losing the work.

A few rules to bake in. Never write anything to HubSpot beyond the brief note and the last researched date stamp. Let several briefs run at once without blocking the board, and keep each card independent so one failed sweep or run does not blank the page. Remember each viewer's filter and sort choices between visits, but keep dismissals and briefs shared across the team. Surface the estimated research cost of a brief before it runs so nobody is surprised by the spend, and show a clear empty state when an account genuinely has no news, since silence is a useful answer for a renewal too.

Related prompts

Explore more prompts
Turn Mailjet email clicks into ranked HubSpot follow-upsiMessage campaign console with pre-flight checks and delivery boardA searchable RFP answer library your bid team drafts fromSee which target accounts just started advertising on LinkedInAccount health board that puts product usage next to your CRMLook up a customer's full chat history mid conversationLusha prospecting workbench with credit-safe revealsWhich companies your LinkedIn ads reach, matched to your CRMLead response desk with a running clock on every new leadApprove Lusha enrichment field by field before HubSpot saves it