Pre-call prep board for your next three days of meetings

Open one board each morning to see every external meeting coming up, the deal behind it, and everything said the last time you spoke to those people.

App
GranolaHubSpotGoogle CalendarSalesPersonal ProductivityMeeting WorkflowsResearch & Monitoring
PromptCreate

Build me a pre-call prep board I open every morning before my meetings. It pulls my upcoming external meetings from Google Calendar, pairs each one with the matching HubSpot deal and with the Granola notes from every time I already met those people, and lets me kick off a background agent that writes a prep brief straight back into the app.

Main view: a list of my meetings for the next three days, grouped by day and ordered by start time. Get them with Google Calendar List Events on my primary calendar, using a time window from now to three days out, singleEvents set to true and ordered by start time so recurring meetings expand into real instances. Skip anything that is not a real meeting with other people: cancelled events, all day events, events with no attendees other than me, and event types like out of office, focus time and working location. Then skip internal-only meetings, meaning every attendee email shares my own email domain. My domain should be read from the connected Google account rather than typed in, and there should be a settings field where I can add extra domains that count as internal, for example a sister company or a contractor domain. Each row shows the meeting title, the day and start time, the external attendees with their email addresses, the matched deal, and a count of past meetings with these people.

Deal matching per row: take the external attendee emails, pull out their email domains, and find the account. Use HubSpot Search Companies filtered on the company domain property to find the account, then HubSpot Search Deals to find that company's deals, preferring the most recently updated open deal and falling back to the most recent closed one if there is nothing open. As a fallback when the domain finds no company, use HubSpot Search Contacts on the attendee email addresses and follow the contact's associated company and deals. Show the deal name, stage, amount, close date and owner on the row. Resolve the owner id to a real person's name with HubSpot List Owners, and resolve the stage id to its readable label with HubSpot List Pipelines, both cached for the session so you are not refetching them per row. If nothing matches, say so plainly on the row rather than hiding it.

Meeting history per row: Granola has no search endpoint, so list notes and match app-side. Call Granola List Notes with a created or updated filter covering roughly the last twelve months, paging through with the cursor until there are no more pages, and cache the resulting index for the session so the board does not re-list on every render. For each note, compare the note's attendee email addresses against the external attendees on the calendar row, and count a match when any external attendee overlaps, or when the attendee email domains match the account domain. The row shows that count, for example "4 past meetings", and shows zero clearly when this is a first conversation.

Detail pane: clicking a meeting opens a detail view for that account showing the full conversation history in reverse chronological order. Each past meeting shows its date, title and attendees, with the Granola summary rendered inline from the note's markdown summary. Each one expands to reveal the full transcript, fetched lazily with Granola Get Note passing include=transcript only at the moment I expand it, so opening the pane does not pull every transcript at once. The pane also shows the deal card at the top with stage, amount, close date and owner, and the attendee list for the upcoming meeting.

Every row has a "Prep me" button that starts a background agent for that meeting. The agent reads the matched prior Granola notes with Get Note using include=transcript, reads the HubSpot deal context including the deal properties and any recent notes already logged on the deal, and then writes a brief with four sections: what happened last time, commitments I made that are still open, objections that were raised and how they were handled, and a suggested agenda ending with three specific questions to ask on this call. Every claim in the brief should point at the meeting it came from, with the date, so I can jump to the source. The button shows a running state while the agent works and the brief appears in the detail pane when it lands.

Briefs persist. Store each finished brief in the app's own storage keyed by the calendar event id, along with the account domain, the deal id, the generation timestamp and the ids of the notes it was built from. When I reopen the board, any meeting with a saved brief shows the saved version immediately with its generated date, instead of re-running the agent. There is an explicit "Regenerate" action for when I want a fresh pass, which replaces the stored brief.

A second button, "Log to HubSpot", posts the brief to the matched deal with HubSpot Create Note, associated to the deal, so the rest of the team can see it on the record. Prefix the note body with the meeting title and date so it reads clearly in the deal timeline. Disable the button when there is no brief yet or no matched deal, and once a brief has been logged show when it was posted so I do not log the same brief twice.

Things to respect. Granola is read only, so every write in this app lands in HubSpot. Transcripts are not returned by default, so always pass include=transcript on Get Note when the transcript is actually needed. Granola pages are cursor based with a maximum page size of 30. Granola allows roughly 5 requests per second, so throttle the note fetches and back off exponentially when a 429 comes back. HubSpot search endpoints are limited to about 4 requests per second, so batch and cache lookups rather than firing one search per row. A Granola personal API key only sees the key owner's own notes space, so frame the whole app as "my meetings" rather than promising full team coverage, and say so in the empty state when no notes are found.

What does this prompt do?

  • Lists every external meeting on your calendar for the next three days, hiding internal-only meetings so you only see the calls that need prep
  • Shows the matching deal beside each meeting with its stage, value, close date and owner, plus how many times you have already met these people
  • Opens a detail view with the full history for that account, each past meeting summarized inline and expandable to the full transcript
  • Writes a prep brief on demand covering what happened last time, the commitments you still owe, the objections raised and three questions to ask
  • Saves every brief on the meeting so reopening the board shows what was already written, and posts it to the deal in one click so the team can read it too

What do I need to use this?

  • A Google Calendar account with the meetings you want to prep for
  • A HubSpot login with access to your deals, companies and contacts
  • Granola on a Business or Enterprise plan, with a personal API key from the desktop app
  • Your own email domain, so the board knows which meetings are internal and can skip them

How can I customize it?

  • Change the window from three days to today only, or stretch it to a full week
  • Adjust what counts as internal, for example treating contractor or partner domains as internal too
  • Reshape the brief itself, such as asking for five questions instead of three or adding a competitor section
  • Choose whether posting a brief to the deal also copies it onto the individual contacts

FAQs

Do I need Granola on a paid plan for this to work?
Yes. Personal API keys are only available on Granola's Business and Enterprise plans, and on Enterprise your workspace admin has to switch them on first. You create the key inside the Granola desktop app under Settings, then API.
Will it show meetings my teammates recorded?
No. A Granola personal key only reaches your own notes space, which is notes you created, notes shared with you, and notes in private folders shared with you. Treat this as a board for your own meetings rather than full team coverage.
Does this change anything in Granola?
Nothing. Granola is read only here, so the board only reads your past notes and transcripts. The one thing it writes is the prep brief, and that goes into HubSpot as a note on the deal.
What happens if a meeting has no deal in HubSpot?
The row still appears with the attendees and the meeting history, and simply shows that no deal was found. You can still generate a brief from the past conversations, you just will not be able to post it to a deal until one exists.
Does it re-run the brief every time I open the board?
No. Once a brief is written it is saved on that meeting, so reopening the board shows the saved version instantly. You can regenerate it deliberately if the picture has changed since you last looked.
Will this work on HubSpot Free?
Yes for the basics. Deals, companies, contacts and notes are all available on free and starter tiers, so the board can read your pipeline and post briefs back. Very large pipelines are the only thing that may need narrower filters.

Related templates

Prospecting desk that builds account lists from the live web

Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.

Hyperbrowser
HubSpot
Google Sheets
App
Plan a field sales day around drive time and neglected accounts

Pick a date, a starting point and a radius, then build a sequenced day of customer visits that lands straight on your calendar.

Geolocation
HubSpot
Google Calendar
App
Find ICP accounts, verify the emails, file them in HubSpot

One screen where reps filter for companies that fit, see who is actually reachable at each account, and save only the addresses that verify.

Hunter
HubSpot
App
Short-term rental turnover console for Home Assistant

Open one screen each morning to see every rental's locks, temperature, humidity, and next check-in, then prep the next stay in a single click.

Home Assistant
Google Calendar
Slack Bot
App
Competitive battlecard workspace ranked by open pipeline

See every competitor battlecard next to the number of open deals that name that competitor, so the cards carrying real pipeline get refreshed first.

Guru
HubSpot
Slack Bot
App
Account coverage board that shows where you are single threaded

Score every target account against the buying committee you actually need, see the exact holes, and have an assistant fill them in your CRM.

Hunter
HubSpot
App

Stop rebuilding the same context before every call.

Your past conversations and your pipeline already hold the answer. This board puts them on one screen and writes the brief for you.