# Renewal signal board for every HubSpot customer account

> 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.

- Workflow type: app
- Services: Exa, HubSpot
- Categories: Sales, Operations
- Published: 2026-08-21

## What it does

- Turns your existing HubSpot customer accounts into a board of cards, one per account, showing the funding, acquisition, layoff, leadership change and product launch news published about that company lately.
- Opens by default on the accounts with a renewal inside the next 90 days, so your team works the ones that actually matter this quarter first.
- Gives every card a Write the account brief button that sends an assistant off to do deeper research, then files the finished brief onto the HubSpot record as a note and stamps the account with the date it was last researched.
- Lets you dismiss a story as noise so it never comes back, and shows at a glance which accounts have gone stale since anyone last looked at them.

## What you'll need

- A HubSpot account where your customers live as company records
- An Exa account for the web research
- A date field on your HubSpot companies that holds the renewal or contract end date, if you want the 90 day default view
- Account managers or customer success reps who prep for renewals and QBRs

## Prompt

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.

## How to customize

- Choose which accounts appear: filter by lifecycle stage, by account owner, or by how soon the renewal lands
- Change which signal types count and how heavily each one weighs into the ranking
- Set how deep the account brief research goes and cap what each brief is allowed to spend
- Change how many days without research counts as stale

## FAQ

### Does this change anything in my HubSpot data?

Only two things, and only when you ask for them. When a brief finishes it is filed onto the account as a note, and the account gets a last researched date so the board knows it is fresh. Nothing else in HubSpot is touched.

### What if we do not track a renewal date in HubSpot?

The board still works. You point it at whichever date field you use for contract end or renewal, and if you do not have one you can filter by lifecycle stage or account owner instead and sort by how strong and recent the news is.

### How current is the news on each card?

Signals are pulled live from the open web and ranked by how recent and how significant they are. You can refresh an account on demand, and the board shows when each account was last swept so nothing looks fresher than it is.

### What happens when I dismiss a story as noise?

It disappears from that account and stops resurfacing on future sweeps for everyone on the team. Dismissed stories stay in a list you can review, so you can put one back if you change your mind.

### How long does an account brief take to come back?

Deeper research runs in the background rather than making you wait. The card shows a pending state while it works and updates itself the moment the brief is ready, so you can kick off several accounts at once and come back to them.

Use this prompt in General Input: https://www.generalinput.com/prompts/renewal-signal-board-for-every-hubspot-customer-account