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

Client-by-client cold email pipeline review for agencies

Pick a client and a date range to see sent, replies, meetings booked and the real deal value your cold email produced, campaign by campaign.

Instantly
HubSpot
Slack Bot
App
Partner tier review board for quarterly promotion calls

Work every partner tier decision from one board, with the revenue and commission numbers, clear promotion thresholds, and AI review briefs.

Introw
HubSpot
Slack
App
Reconcile partner commissions between HubSpot and Introw

Open one board at month end to find every closed deal missing a commission, every commission with no deal behind it, and every amount that does not add up.

Introw
HubSpot
Slack
App
Hiring signal board for your customers and open pipeline

Open one board each morning to see which of your accounts are hiring, what they are building, and where your product fits the roles they just opened.

JobsPipe
HubSpot
App
Placement pricing desk for recruiting and staffing agencies

Open a live deal, see the market pay range for that role and city, set your markup, and write the agreed numbers straight back onto the deal.

Job Salary Data
HubSpot
App
Instagram comment and DM triage inbox for your team

Work every unanswered Instagram comment, Reel reply and Direct message from one queue, with claimed rows so two people never answer the same person.

Instagram
HubSpot
Slack Bot
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.