{
  "id": "aQdxmqj12Lr2QOxk",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Meeting Debrief \u2192 HubSpot CRM",
  "tags": [],
  "nodes": [
    {
      "id": "6b041fb7-dfe3-44be-9440-e943c80c358c",
      "name": "Gmail Trigger",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        128,
        -1152
      ],
      "parameters": {
        "simple": false,
        "filters": {
          "sender": "user@example.com",
          "labelIds": [
            "INBOX"
          ],
          "includeSpamTrash": false
        },
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "2abc8171-865e-40ed-8b30-5af017eaf015",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        -1664
      ],
      "parameters": {
        "width": 448,
        "height": 704,
        "content": "## Meeting Debrief \u2192 HubSpot CRM Automation\n\nThis workflow automatically converts meeting summary emails into structured HubSpot CRM updates using AI. It is designed for teams that use meeting recording or note-taking tools (such as tl;dv, Zoom summaries, or internal recap emails) and want to eliminate manual CRM data entry after sales or discovery calls.Instead of sales reps writing notes and updating HubSpot manually, this automation reads the meeting summary email, extracts key sales information using OpenAI, and creates CRM-ready records automatically.\n### How it works\n\n\t\u2022\tThe workflow starts when a new meeting summary email arrives in Gmail.\n\t\u2022\tThe email body is cleaned and normalized into a single summary field.\n\t\u2022\tThe summary is sent to OpenAI, which extracts structured sales data.\n\t\u2022\tThe AI response is parsed into valid JSON.\n\t\u2022\tHubSpot records are created or updated automatically.\n### Setup steps:\n\n\t1.\tConnect your Gmail account (used to receive meeting summaries).\n\t2.\tConnect your OpenAI API credentials.\n\t3.\tConnect your HubSpot account.\n\t4.\tUpdate the Gmail sender filter."
      },
      "typeVersion": 1
    },
    {
      "id": "350b54cd-806b-4d4b-9264-2c3a2f6fec69",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        48,
        -1664
      ],
      "parameters": {
        "color": 7,
        "height": 704,
        "content": "## Step:1 Gmail Trigger \u2014 Meeting Summary Intake\n\nTriggers the workflow when a new meeting summary email is received in Gmail.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "71a0750b-ecef-490b-bc0e-2a0eafe69f64",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        304,
        -1664
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 704,
        "content": "## Step:2 Prepare & Normalize Summary\n\nExtracts and prepares the meeting summary text from the email for AI processing.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "19e518b9-fe26-4cc3-9017-f12e8d1ea54c",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        -1664
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 704,
        "content": "## Step:3 AI Extraction \u2014 Structured Sales Data\n\nUses OpenAI to extract structured sales insights from the meeting summary.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f532d0db-b6ef-44df-9f45-55300e75e125",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        -1664
      ],
      "parameters": {
        "color": 7,
        "width": 192,
        "height": 704,
        "content": "## Step:4 Parse AI JSON Output\n\nCleans and parses the AI response into valid JSON fields for CRM usage.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "1faa593f-4d7d-4c2f-a9c5-c5321e9e6e3a",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1088,
        -1664
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 704,
        "content": "## Step:5 HubSpot CRM Updates\n\nCreates or updates HubSpot contact, deal, and meeting engagement automatically.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a9ee7b9e-c970-48cb-acb6-58a4a2a55dc0",
      "name": "Prepare Meeting Summary",
      "type": "n8n-nodes-base.set",
      "position": [
        368,
        -1152
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "99f2ba4c-8820-402b-b9af-0d191c109cd9",
              "name": "summary",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "1a7099fe-6db1-4082-8d56-0a1348201e84",
      "name": "Parse AI JSON Output",
      "type": "n8n-nodes-base.function",
      "position": [
        912,
        -1152
      ],
      "parameters": {
        "functionCode": "const text =\n  $json.output[0].content[0].text;\n\nreturn [\n  {\n    json: JSON.parse(text)\n  }\n];\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c4e22869-7c4a-4e44-b927-b1385da499e6",
      "name": "Create Meeting Engagement",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        1520,
        -1152
      ],
      "parameters": {
        "type": "meeting",
        "metadata": {
          "body": "=\n{{ $('Parse AI JSON Output').item.json.problem + '\\n\\nNext Steps:\\n' + $('Parse AI JSON Output').item.json.next_actions.join('\\n') }}\n\n\n\n\n"
        },
        "resource": "engagement",
        "authentication": "appToken",
        "additionalFields": {
          "associations": {
            "dealIds": "={{ $json.dealId }}\n",
            "contactIds": "={{$node[\"Create or Update Contact\"].json.properties.hs_object_id.value}}\n"
          }
        }
      },
      "credentials": {
        "hubspotAppToken": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "980f3f23-a396-4f94-a12c-1c6f58f25988",
      "name": "AI Extraction",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        592,
        -1152
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "options": {},
        "responses": {
          "values": [
            {
              "role": "system",
              "content": "You are a sales operations assistant.\n\nExtract CRM-ready structured data from meeting summaries.\n\nRules:\n- Email may be missing. If missing, set email = null.\n- If no contact email exists, extract company name instead.\n- Return ONLY valid JSON.\n- Do not use markdown or code fences.\n\nRequired keys:\ncompany,\nemail,\nproblem,\nbudget,\ndecision_maker,\ntiming,\ncompetitors,\nnext_actions\n"
            },
            {
              "content": "=Meeting summary:\n{{ $json.summary }}\n"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "587f24da-f3c2-4686-af6f-904dc3d7e817",
      "name": "Update Deal",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        1344,
        -1152
      ],
      "parameters": {
        "stage": "closedwon",
        "authentication": "appToken",
        "additionalFields": {
          "amount": "={{ $('Parse AI JSON Output').item.json.budget }}",
          "dealName": "={{ $('Parse AI JSON Output').item.json.company }}",
          "pipeline": "default",
          "description": "={{ $('Parse AI JSON Output').item.json.problem }}"
        }
      },
      "credentials": {
        "hubspotAppToken": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bc47d572-c59f-4bdd-bd14-9921339f9cf8",
      "name": "Create or Update Contact",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        1152,
        -1152
      ],
      "parameters": {
        "email": "=",
        "resource": "contact",
        "authentication": "appToken",
        "additionalFields": {}
      },
      "credentials": {
        "hubspotAppToken": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "14e6b21d-4dd2-4bf6-adb1-46e53573b3e1",
  "connections": {
    "Update Deal": {
      "main": [
        [
          {
            "node": "Create Meeting Engagement",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Extraction": {
      "main": [
        [
          {
            "node": "Parse AI JSON Output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail Trigger": {
      "main": [
        [
          {
            "node": "Prepare Meeting Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI JSON Output": {
      "main": [
        [
          {
            "node": "Create or Update Contact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Meeting Summary": {
      "main": [
        [
          {
            "node": "AI Extraction",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create or Update Contact": {
      "main": [
        [
          {
            "node": "Update Deal",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}