Grain recap queue: draft, send, and log call follow-ups

By General Input

One screen your reps and CSMs open after every customer call to see what still needs a recap, draft it, send it, and file it on the CRM record.

Integrations

  • Grain
  • Gmail
  • HubSpot

Type

App

Categories

  • Sales
  • Customer Support

Build me an app that my sales reps and customer success managers open after every customer call to get the recap out the door. Think of it as a recap desk, not an automation: the person opens it, works the queue, and leaves when the queue is empty.

The main view is a queue of recent Grain recordings that still have no recap sent, newest first. Build the queue from Grain List Recordings, following the cursor pagination to cover the last 30 days, and enrich each row with Grain Get Recording. Each row shows the call title, the date and duration, the external attendees, and the AI summary and highlights from Grain. Grain only returns the enrichment fields (AI summary, highlights, participants) on Business and Enterprise plans, so when they come back empty fall back to Grain Get Transcript and derive a short summary and the speaker list from the transcript, so a row is never blank.

Clicking a row opens a side panel with the full transcript from Grain Get Transcript, laid out with speaker names and timestamps and searchable within the panel, so the rep can check exactly what was said before the recap goes out.

Match each call to a person in HubSpot by attendee email. For each external attendee, try HubSpot Get Contact with idProperty set to email; if that misses, fall back to HubSpot Search Contacts on the email address and then on the email domain. Once a contact is matched, pull its company with HubSpot Get Company and its open deals with HubSpot Search Deals filtered to deals that are not closed, and show the company name plus each open deal with its stage, amount, and close date right beside the call. If nothing matches confidently, show an unmatched state with a search box that runs HubSpot Search Contacts so the rep can pin the correct contact to the call by hand.

Every row has a Draft recap button that kicks off a background agent. The agent reads the full transcript along with the Grain summary and the HubSpot context, then writes a short client-ready email in plain language covering three things: what was agreed, the open questions, and the next step with a specific date. It places the result in Gmail with Create a Draft, addressed to the external attendees on the call, and writes the draft id and the draft body back into the app so the row flips to Drafted and the body appears in an editable box in the row. Show the agent as running on that row while it works, and surface an error state on the row if it fails so the rep can retry.

The rep edits the recap inside the app. Saving edits pushes the change to Gmail with Update a Draft so the draft in their mailbox always matches what is on screen. Sending uses Gmail Send a Draft. Re-running Draft recap on a row that already has a draft should replace the existing Gmail draft rather than creating a second one.

Sending also files the same recap on the matched HubSpot contact and deal using HubSpot Create Note, associated to the contact, the company, and the open deal, so the CRM record matches what the customer actually received. The note body is the recap that was really sent, not the original generated version. Once the note is filed, the row flips to done and drops out of the default queue view, with a Sent tab where the rep can see recent sends.

Two rules shape the queue. Internal-only calls, meaning calls where every attendee uses the workspace's own email domain, are filtered out by default with a toggle to show them. And any call older than three days that still has no recap sent gets an Overdue flag with clear visual weight, with the threshold configurable in a small settings area along with the internal domain list. Add a filter for call owner so each person sees their own calls by default with a show all toggle, plus a search box over call title and matched company.

Persist per recording: the status (needs recap, drafting, drafted, sent), the Gmail draft id, the generated body and the edited body, the matched HubSpot contact, company and deal ids, the sent timestamp, and who sent it. The status is shared across the team so two people never send the same customer two recaps, and the queue is correct the moment someone reopens the app.

Related prompts

Explore more prompts
Win back LiveChat visitors whose chats went unansweredTurn 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 conversationChase the paperwork every new client and vendor still owesLusha prospecting workbench with credit-safe revealsWhich companies your LinkedIn ads reach, matched to your CRM