# Spot the deals that went quiet before your pipeline review

> Open one board each week to see every open deal ranked by how long it has been since anyone at that company was actually on a call.

- Workflow type: app
- Services: Granola, HubSpot
- Categories: Sales, Operations
- Published: 2026-08-24

## What it does

- Ranks every open deal by days since the last real conversation, longest silence first, so your weekly pipeline review starts from the gaps instead of someone's memory.
- Measures recency from your actual meeting notes rather than from whatever a rep remembered to log in the CRM after the call.
- Flags any deal past your silence threshold, 21 days by default, and shows deals with no conversations on record rather than hiding them.
- Opens a full conversation timeline for any account in one click, and writes a state of the account brief on demand that you can log onto the deal.

## What you'll need

- A Granola account on a Business or Enterprise plan, which is what allows a personal API key
- A HubSpot login with access to your deals, companies, owners, and notes
- Company records in HubSpot with the website domain filled in, since that is how meetings get matched to accounts

## Prompt

Build me a deal coverage board that answers one recurring question I ask every week: which of my open deals have gone quiet? I open this before my weekly pipeline review so the conversation starts from the gaps rather than from a rep's memory of who they last spoke to.

The main view is a single ranked table of my open deals. Each row shows the deal name, its stage, the amount, the deal owner, the date of the most recent Granola meeting with anyone at that company, the number of days since that conversation, and the total number of meetings held with the account. Sort the table so the longest silences float to the top. This sort order is the whole point of the board, so make days since last conversation the visually dominant column.

Pull the rows from HubSpot Search Deals, filtered to deals that are still open, meaning the stage is not closed won or closed lost. Deal records only carry a stage id, so resolve the human readable stage names through HubSpot List Pipelines and resolve owner ids into names through HubSpot List Owners. Get each account's company record and its website domain from HubSpot Search Companies, since that domain is the key the meeting matching depends on.

Match meetings to accounts app side, because Granola has no search endpoint. Page through Granola List Notes and read each note with Granola Get Note to get its attendees and its date, then compare the email domains of the attendees against the company domain from HubSpot. A note counts as a conversation with that account when at least one external attendee's email domain matches the company domain. Let me configure a list of internal domains, defaulted to my own company's domain, so that colleagues on the call never make a meeting look like a customer conversation.

Respect the Granola API limits carefully. List Notes uses cursor pagination with a maximum page size of 30, and the API sustains about 5 requests per second, so throttle the crawl and back off exponentially on any 429 response. Cache the note to company matching in app storage so the board loads fast instead of re listing my entire meeting history every time I open it. On refresh, only fetch what changed by passing the updated_after filter with the timestamp of the last successful sync, then merge the new matches into the cache. Give me a manual Refresh meetings button plus a visible last synced timestamp so I always know how current the board is.

Make the silence threshold a configurable setting with a default of 21 days. Any deal whose last conversation is older than the threshold gets visibly flagged as quiet. Deals with zero matched meetings should not be hidden. Render them as no conversations on record and sort them at the very top, since those are often the most at risk deals on the board.

Clicking any deal opens a detail view showing the full conversation timeline for that account, newest first. Every matched Granola meeting appears with its date, title, and attendee list, and the Granola summary renders inline and expandable so I can read the substance of a call without leaving the app. Show the deal's stage, amount, owner, and close date at the top of this view for context.

Put a Write account recap button on the detail view that kicks off a background agent. The agent reads every Granola note matched to that company, using Granola Get Note for the full summaries, and pulls the deal history from HubSpot with Get Deal and its associated notes. It then writes a state of the account brief covering four things: what the customer asked for, which objections are still unresolved, what commitments are outstanding on both sides including mine, and a recommended next step. The brief lands back in the app and renders inside the deal detail view, with the run status visible while the agent works so I know it is in progress.

Under each finished recap, give me a button that logs it onto the deal in HubSpot using Create Note, associated to that deal record. Only write when I click it, confirm once it has saved, and keep the recap in the app afterwards so the brief stays readable here even after it has been filed in the CRM.

Two constraints to build around. Granola is read only, so every write in this app goes to HubSpot and nothing is ever pushed back into Granola. A personal Granola API key only exposes the key owner's notes space, meaning their own notes, notes shared with them, and notes in private folders shared with them, so this is one rep's or one manager's coverage view. Keep the in app copy honest about that and do not describe the board as org wide visibility into every rep's calls.

## How to customize

- Change the silence threshold from the default 21 days to whatever your sales cycle calls for
- Limit the board to a single pipeline, one deal owner, or only deals above a certain amount
- Adjust which email domains count as internal, so your own colleagues never get counted as a customer conversation

## FAQ

### Does my whole team need to be on Granola for this to work?

No, but it is worth knowing what you will see. A personal Granola key only reaches your own notes space, meaning notes you took, notes shared with you, and notes in private folders shared with you. That makes this a coverage view for one rep or one manager rather than a company-wide picture of every call every rep has ever taken.

### Why not just use the last activity date HubSpot already shows?

Because that date only reflects what someone remembered to log. Post-call admin is the first thing that gets dropped on a busy day, and most sales teams have gaps in their CRM activity data because of it. Reading recency from your meeting notes means the column is based on a conversation that actually happened, not on paperwork.

### Does this change anything in Granola?

No. Granola is read only here, so the board only ever reads your notes and summaries. The single thing that gets written anywhere is a recap note on a HubSpot deal, and that only happens when you click the button to log it.

### What happens to deals that have never had a meeting?

They stay on the board and show as no conversations on record, sorted to the top. Those are usually the deals most worth a second look, so hiding them would defeat the point of the board.

### Will this work on a free HubSpot account?

Yes. The board reads standard deal, company, and owner records and logs plain notes, all of which free accounts include. Multiple deal pipelines are a paid HubSpot feature, so on a free account you will simply see your one pipeline.

Use this prompt in General Input: https://www.generalinput.com/prompts/spot-the-deals-that-went-quiet-before-your-pipeline-review