Meeting notes to CRM: Fireflies + Make + HubSpot
Automatically push every sales call's summary and action items into the right HubSpot contact as a note, using Fireflies Webhooks V2, the Fireflies GraphQL API and a Make scenario.
Who it's for: Sales reps, founders and account managers who forget to update the CRM after calls. Ops people who build the automation for the team. No code, but you'll paste one GraphQL query.
Time: 60 to 90 minutes · Cost: Fireflies plan with API access, a Make plan (free tier for testing) and HubSpot (free CRM works); check each vendor's pricing page
Tools: Fireflies.ai, Make, HubSpot Breeze, n8n, Fathom, Otter.ai
Prerequisites:
- A Fireflies account that records your meetings and an API key from its Integrations / API settings
- A Make account
- A HubSpot account with permission to edit contacts
- A recent recorded test meeting with an external attendee
The CRM is only as good as what reps put into it, and after a day of back-to-back calls, nobody writes thorough notes. Fireflies already produces a summary and action items for every recorded meeting. This playbook pipes them into HubSpot automatically with a Make scenario, so every contact record carries the latest conversation. Fireflies details are from its Webhooks V2 and GraphQL API docs.
How it works
- Fireflies finishes summarizing a meeting and POSTs
{ "event": "meeting.summarized", "meeting_id": "…" }to a Make webhook. - Make calls the Fireflies GraphQL API for that meeting’s title, date, attendees, overview and action items.
- Make finds each external attendee in HubSpot by email.
- Make creates a note (and optionally tasks) on that contact.
Step 1: Map what should land in the CRM
Decide the note format before you build. A useful template:
📞 {title} ({date}, {duration} min)
Summary: {overview}
Action items:
{action_items}
Recording: {transcript_url}
Agree with the team which meetings count. If you record internal stand-ups too, you’ll filter to meetings with at least one attendee outside your company domain (Step 7).
Step 2: Create the Make webhook
In Make, create a new scenario. Add the Webhooks → Custom webhook module as the trigger, click Add, name it “Fireflies summarized”, and copy the generated HTTPS URL. Leave the scenario open with Run once active so Make can learn the payload structure from the first delivery.
Step 3: Subscribe Fireflies Webhooks V2
Open the Fireflies Webhooks V2 configuration page (app.fireflies.ai/integrations/api/webhook):
- Paste the Make URL into Webhook URL.
- Optionally set a Signing Secret for payload signature verification (recommended once it works).
- Under Event Subscriptions, select meeting.summarized.
- Save, then click Send Test Event. Make should show a received bundle with
event,timestampandmeeting_id.
Note: webhooks fire for meetings you own. On Enterprise teams a Super Admin webhook can receive the team’s meetings; otherwise each rep sets up their own.
Step 4: Fetch the transcript summary with GraphQL
Add an HTTP → Make a request module:
- URL:
https://api.fireflies.ai/graphql - Method:
POST - Headers:
Authorization: Bearer YOUR_FIREFLIES_API_KEY,Content-Type: application/json - Body type: Raw, JSON, with this content (map
meeting_idfrom the webhook):
{
"query": "query Transcript($id: String!) { transcript(id: $id) { id title date duration transcript_url meeting_attendees { displayName email name } summary { overview action_items } } }",
"variables": { "id": "{{1.meeting_id}}" }
}
Turn on Parse response. Run once with your test meeting and check that data.transcript.summary.overview has text. Store the API key in a Make connection or variable rather than typing it into many modules.
Step 5: Find the HubSpot contact
Add an Iterator over meeting_attendees so each attendee is processed separately. Then a Filter that skips your own domain (email does not contain @yourcompany.com).
Next, add the HubSpot CRM module that searches contacts (search by the email property) and connect your HubSpot account. Map the attendee’s email. If HubSpot returns a contact ID you continue; if not, see Step 7.
Step 6: Create the note and tasks
Add a HubSpot module that creates an engagement or note, associated with the contact ID found above. Map the body using your Step 1 template. Fireflies returns action_items as text, so it drops straight in.
Optional: create a HubSpot task due in two business days titled “Follow up: {title}” for the deal owner. That single task is often worth more than the note, because it puts the follow-up on a calendar.
If a deal is associated with the contact, you can also associate the note with the deal so it shows on both records.
Step 7: Handle unknown attendees and errors
Real meetings are messy. Add branches with a Router:
- Contact not found: either create the contact (only if your team wants that; it can pollute the CRM) or send a Slack/email notification “New attendee {email} from meeting {title}: add to CRM?”
- Internal-only meetings: if the iterator finds no external attendees, stop.
- Empty summary: occasionally summaries change after first delivery. Fireflies’ optional Resend when a meeting’s notes change setting will re-send
meeting.summarized; if you enable it, search for an existing note first so you don’t post duplicates. - Errors: add an error handler on the HTTP module (Make’s Break directive retries later) so a temporary API failure doesn’t lose the meeting.
Step 8: Test end-to-end and roll out
Record a 5-minute test call with a colleague using an external email that exists in HubSpot. Wait for Fireflies to summarize it, then confirm:
- Make received the webhook.
- The GraphQL response has a summary.
- The note appears on the right contact, formatted correctly.
Turn the scenario ON, set scheduling to “Immediately” (webhook-triggered), and add the signing secret. Roll out rep by rep, and ask each person to check their first five notes.
Pitfalls
- Using Webhooks V1 docs from old tutorials. V1 is deprecated and its settings field is read-only. Use V2.
- Triggering on meeting.transcribed. The summary may not exist yet. Use meeting.summarized.
- Hard-coding the API key in many modules. Rotate-ability matters; centralize it.
- Pushing confidential calls into a shared CRM. Exclude HR, legal and board meetings by title keyword or calendar.
- Consent. Recording laws differ by location; many require all-party consent. Make sure your Fireflies settings and meeting invites disclose recording.
- Duplicates. Retries and resends happen. Use the meeting ID in the note text and check for it before creating.
Alternatives
Don’t use Fireflies? Fathom and Otter are popular notetakers with their own CRM integrations. Some teams skip the custom build and use a notetaker’s native HubSpot sync; it’s faster to set up but you lose control over format and filtering. Prefer self-hosting? Rebuild the same flow in n8n with a Webhook node, an HTTP Request node and the HubSpot node. See Otter vs Fireflies.
What a good note looks like
After the scenario has run for a week, a typical contact record shows a note like this:
📞 Acme <> YourCo: pricing follow-up (Oct 12, 32 min)
Summary: Dana confirmed budget approval for Q1 and wants a
security review before signing. Main concern is SSO support.
Action items:
- Send SOC 2 report and SSO docs (you)
- Dana to loop in IT lead Sam for review call
- Schedule review call week of Oct 20
Recording: https://app.fireflies.ai/view/...
Reps stop writing notes, managers see real context in pipeline reviews, and anyone picking up the account later can read the history in a minute.
Measuring whether it worked
Pick two numbers before launch and check them after a month:
- Percentage of external meetings with a CRM note (pull meetings from Fireflies, notes from HubSpot). Teams typically go from patchy coverage to nearly all.
- Follow-up speed: the time from meeting to the first follow-up email or task completion.
If coverage is high but follow-ups don’t improve, the tasks in Step 6 need owners and due dates that reps actually see. If notes are ignored, shorten them: the overview plus action items is usually enough.
FAQ
Does Fireflies have webhooks?
Yes. Fireflies Webhooks V2 can send meeting.transcribed, meeting.summarized and meeting.bot_joined events to an HTTPS URL you configure. Webhooks V1 is deprecated and new V1 webhooks cannot be saved.
What does the Fireflies webhook contain?
A small JSON payload with the event name, a timestamp and the meeting_id (the same as the transcript ID). You then query the Fireflies GraphQL API with that ID to get the summary, attendees and action items.
Which Fireflies event should trigger the CRM update?
Use meeting.summarized, because it fires once the AI summary exists. meeting.transcribed can fire before the summary is ready.
Can I do this with n8n or Zapier instead of Make?
Yes. Any tool that can receive a webhook, make an HTTP POST and call HubSpot works. The steps are the same: webhook in, GraphQL query, contact search, note create.
Will this overwrite my CRM data?
No. This playbook only creates notes and tasks associated with existing contacts; it does not edit contact properties.
Last checked against official docs: October 2026 (Fireflies Webhooks V2, Transcript query and Summary schema docs). Prices and UI labels change; confirm on each vendor's site.