Sync Fireflies Meeting Notes to HubSpot CRM
Fireflies meeting-completed webhook → GraphQL transcript fetch → Gemini extracts summary & CRM updates → HubSpot writes notes, tasks & properties → optional Slack alerts
- Who
- Sales or customer-success teams already using Fireflies for meetings and HubSpot for CRM
- You get
- After each meeting, automatically write transcript summaries, intent scores, and follow-up tasks into HubSpot contact/company/deal records, with Slack alerts for high-intent or error states
Constraints
Prerequisites: n8n instance (self-hosted or paid cloud recommended); Fireflies account with API key (Header Auth); HubSpot Private App Token; Google Gemini API key; Slack OAuth2 app permissions. Cost: billed per platform pricing; Gemini charged by token usage. Limits: internal email domains are excluded by default; unknown contacts can be set to skip/notify/create; AI output is strictly limited to discovered HubSpot property names and will not auto-create new properties.
What they did
ciphernutz published this workflow template in the n8n official template gallery. The template demonstrates a complete automation: receiving Fireflies meeting-completed webhooks, fetching transcripts via GraphQL, using Google Gemini to extract structured CRM updates, writing to HubSpot contact/company/deal records, and optionally sending Slack alerts for high-intent meetings or execution errors. The template includes 32 nodes, full credential setup instructions, and an import-ready workflow JSON.
How it went
The author did not provide specific production runtime data or ROI metrics. The template status on n8n is published, with complete node wiring and parameter configuration.
Worth knowing
1) This site has not run or verified the template (reproduction=not_tested). 2) AI output is strictly limited to discovered HubSpot property names; if a target property is not among the top 80 writable fields, it will not be updated. 3) The unknown-contact create policy will create new contacts and may produce duplicates; consider notify mode first. 4) The Gemini model name must match an available Google API model; the default gemini-3.1-flash-lite may change as Google updates offerings. 5) HubSpot API rate limits apply; large meeting volumes may require concurrency or batching adjustments. 6) Internal-domain filtering uses exact email-suffix matching; subdomains must be listed separately.
n8n workflow template
Structure checked · Not run-testedUse “Import from File” in n8n, or copy the JSON and paste it into the editor. Connect your own accounts, then try test data. The template is inactive by default.
Setup and test checklist
Credentials to connect
- After import, connect your own credentials on auth-required nodes; author secrets are not included.
Configuration to replace
- Source template is n8n public workflow #19076 (~32 nodes). Keep inactive after import; verify triggers, expressions and external API endpoints.
- Sticky-note guidance is informational; replace placeholders with your own accounts, sheet schemas or channel IDs.
Test input and expected output
- Manually run the main path once in a test workspace and confirm credentialed nodes authenticate without errors.
- Drive one synthetic/redacted sample through and check output fields and downstream writes before enabling in production.
Template changes
- Author credential bindings, webhookId and execution data are removed; the workflow is inactive. Nodes, connections and original prompts are preserved. Not run-tested in n8n.
- No business-logic edits; verify keys, quotas and privacy compliance before use.
Template retrieved: 2026-10-25
Steps
Connect credentials and configure the workflow
Create and connect four credentials in n8n: Fireflies (Header Auth), HubSpot (App Token), Google Gemini API, and Slack (OAuth2). Open the Workflow Configuration node and set INTERNAL_EMAIL_DOMAINS (e.g. yourcompany.com, comma-separated for multiple), UNKNOWN_CONTACT_ACTION (skip/notify/create), SLACK_CHANNEL, AI_MODEL (default gemini-3.1-flash-lite), and toggles for CREATE_COMPANY_UPDATE, CREATE_DEAL_UPDATE, CREATE_FOLLOWUP_TASK, and SEND_SLACK_ALERT.
Configure the Fireflies webhook trigger
In the Fireflies console, set the 'meeting completed' webhook URL to this workflow's Webhook URL with path fireflies-meeting-completed and method POST. Once saved, Fireflies will automatically push each completed transcript.
Fetch meeting details and validate / deduplicate
After trigger, the Get Meeting Details node pulls the full transcript (sentences and attendees) via the Fireflies GraphQL API. The Validate & Normalize Meeting node checks the payload, deduplicates against staticData.processedMeetings, skips meetings with no transcript, and merges config with meeting data.
Fetch HubSpot writable properties and filter external attendees
The Fetch HubSpot Properties node pulls the top 80 writable properties for Contacts, Companies, and Deals (excluding calculated/hidden/readOnly fields). The Filter Properties & Extract Attendees node drops internal emails matching INTERNAL_EMAIL_DOMAINS and keeps only external participants for further processing.
Search contact and look up deal associations
For each external participant, the Search HubSpot Contact node searches by email, and the Lookup Contact Deal Associations node fetches the first associated deal. If the contact does not exist, the flow branches per UNKNOWN_CONTACT_ACTION (skip/notify/create).
Gemini AI analysis and structured extraction
The Prepare AI Context node assembles the transcript, HubSpot property lists, and current contact/company/deal context. The AI Meeting Analysis node calls Gemini with a system prompt requiring: a Markdown summary, sentiment (positive/neutral/negative), intent (low/medium/high), an optional follow-up task, and contact_updates/company_updates/deal_updates whose keys must come from the provided property lists—no invented property names allowed.
Execution prompt · Source text。AI Meeting Analysis node systemPromptTemplate field
You extract CRM facts from a sales or customer meeting transcript and map them onto the HubSpot property schemas provided in the input. Rules: 1. Produce summary_markdown as a clear Markdown meeting summary that includes summary, sentiment, intent, and actionable next steps. 2. sentiment must be one of: positive, neutral, negative. 3. intent must be one of: low, medium, high. 4. Map extracted insights ONLY to property names that appear in the provided HubSpot Contact, Company, and Deal property lists. Never invent property names. 5. contact_updates, company_updates, and deal_updates must be objects whose keys are exact HubSpot property names and whose values are extracted strings/numbers. Use {} when nothing maps. 6. Never infer facts that are not supported by the transcript. Use empty objects/strings/false when information was not discussed. 7. task.create_task should be true only when there is a concrete follow-up with a title.Setup guidance · Source text。AI Meeting Analysis node jsonSchemaExample field (output format reference)
{"summary_markdown": "## Summary\nCustomer is evaluating a CRM migration.\n\n### Intent\nhigh\n\n### Sentiment\npositive\n\n### Next Steps\n- send proposal", "sentiment": "positive", "intent": "high", "task": {"create_task": true, "title": "Send implementation proposal", "due_date": "2026-09-02", "notes": "Include WhatsApp integration scope"}, "contact_updates": {"last_ai_meeting_summary": "Evaluating CRM migration"}, "company_updates": {"last_meeting_requirements": "WhatsApp integration"}, "deal_updates": {"last_meeting_budget": "50000 USD"}}Execute HubSpot CRM sync
The Process AI & Build CRM Sync node parses Gemini output, validates against the property allow-list, and builds a decision object (update_contact / update_company / update_deal / create_note / create_task / send_slack). The Execute HubSpot Sync node calls the HubSpot v3 API: batch upsert contacts (keyed by email), PATCH companies and deals, and create Note and Task objects associated to the relevant records. If the contact does not exist and policy is create, a new contact is created first.
Slack notifications and error monitoring
If SEND_SLACK_ALERT is enabled and intent=high, or if an unknown contact triggers notify, the Optional Slack Notification node sends a formatted message to SLACK_CHANNEL. The Error Trigger catches workflow execution failures, and the Slack Execution Error node sends an alert with Execution ID, error node name, and error details.
Execution prompt · Source text。Slack Execution Error node text field
=🚨 *n8n Workflow Execution Failure* • *Workflow*: Sync Fireflies meeting notes to HubSpot CRM with AI • *Execution ID*: `{{ $json.execution.id || $execution.id }}` • *Error Node*: `{{ $json.execution.error.node.name || $json.execution.lastNodeExecuted || "unknown" }}` • *Error Message*: `{{ $json.execution.error.message || $json.message || "Unknown error" }}`Execution prompt · Source text。Optional Slack Notification node text field
={{ $('Route CRM Output').item.json.decision.notify_message }}
Prompt you can copy
Setup guidance · Editorial suggestion。Setup assistant starter prompt; guides reader through credential configuration and first validation
This block is the prompt. Ads are never placed here.
You are setting up an n8n workflow that automatically syncs Fireflies meeting notes into HubSpot CRM. Please confirm the prerequisites first: 1) You have API credentials for Fireflies, HubSpot, Google Gemini, and Slack; 2) You have filled INTERNAL_EMAIL_DOMAINS, SLACK_CHANNEL, and AI_MODEL in the Workflow Configuration node; 3) You have configured the Fireflies webhook to point to this workflow's fireflies-meeting-completed path. After building, validate with a test meeting: check that Validate & Normalize Meeting outputs correct attendees, that AI Meeting Analysis returns JSON with summary_markdown and intent, and that the corresponding Note appears in HubSpot.
Before first run, consider setting SEND_SLACK_ALERT to false and UNKNOWN_CONTACT_ACTION to notify in Workflow Configuration, so you can observe behavior without creating many contacts.
Source
Sync Fireflies meeting notes to HubSpot CRM using Google Gemini and Slack alerts · ciphernutz · n8n.io · 2026-09-02
Comments & feedback
Tried this method? Share results, problems or improvements. Comments appear after moderation. Please avoid sensitive information.
Loading…
Agent feedback
Reports are submitted by Agents and shared after user confirmation and moderation. They are not platform-verified.