AutomationFlowsEmail & Gmail › AI Email Parser to HubSpot Engagement

AI Email Parser to HubSpot Engagement

Original n8n title: Stickynote Emailreadimap

Stickynote Emailreadimap. Uses hubspot, lmChatOpenAi, chainLlm, emailReadImap. Manual trigger; 13 nodes.

Manual trigger★★★☆☆ complexityAI-powered13 nodesHubSpotOpenAI ChatChain LlmEmail Read ImapOutput Parser Structured
Email & Gmail Trigger: Manual Nodes: 13 Complexity: ★★★☆☆ AI nodes: yes Added:

This workflow follows the Chainllm → OpenAI Chat recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "id": "9f2dc93f-bae5-4419-8411-d2fff4b31f5e",
      "name": "Creates an email engagement",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        916,
        -260
      ],
      "parameters": {
        "type": "email",
        "metadata": {
          "html": "={{ $('When an email is received').item.json.textHtml || $('When an email is received').item.json.textPlain}}",
          "subject": "={{ $('When an email is received').item.json.subject }}",
          "toEmail": [
            "={{ $('When an email is received').item.json.to }}"
          ],
          "fromEmail": "={{ $('When an email is received').item.json.from }}"
        },
        "resource": "engagement",
        "authentication": "oAuth2",
        "additionalFields": {
          "associations": {
            "contactIds": "={{ $json.vid }}"
          }
        }
      },
      "credentials": {
        "hubspotOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "0a56ec28-afc6-40a9-bf42-4d8742e48eb4",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -140,
        -40
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8e53aeb6-7d84-4739-b482-b8cd844b89ac",
      "name": "Search for the contact via email",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        256,
        -260
      ],
      "parameters": {
        "operation": "search",
        "authentication": "oAuth2",
        "filterGroupsUi": {
          "filterGroupsValues": [
            {
              "filtersUi": {
                "filterValues": [
                  {
                    "value": "={{ $json.output.contact_info.email }}",
                    "propertyName": "email|string"
                  }
                ]
              }
            }
          ]
        },
        "additionalFields": {}
      },
      "credentials": {
        "hubspotOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1,
      "alwaysOutputData": true
    },
    {
      "id": "19e54445-d0cb-40f2-a11f-5e4cb22ad7ec",
      "name": "Parse the mail with AI",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        -120,
        -260
      ],
      "parameters": {
        "text": "=Get all important info from this email like first name, last name, email, phone number, name of the company, country, Postal code, city, etc. Return it as a json.  The email content:  {{ $json.textHtml || $json.textPlain}} \nFrom: {{ $json.from }} \nSubject: {{ $json.subject }}\nDate sent:  {{ $json.date }}",
        "messages": {
          "messageValues": [
            {
              "message": "=You are a professional Email parser"
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.6
    },
    {
      "id": "8b257214-0001-46aa-84df-cad844e3130b",
      "name": "When an email is received",
      "type": "n8n-nodes-base.emailReadImap",
      "position": [
        -340,
        -260
      ],
      "parameters": {
        "options": {
          "forceReconnect": 3
        }
      },
      "credentials": {
        "imap": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "32820b69-3918-4951-9ddc-45bdbcb60aca",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -440,
        -400
      ],
      "parameters": {
        "color": 4,
        "width": 280,
        "height": 300,
        "content": "## Set receiving email account\n- Ddefaults to an IMAP account node, but you can put a gmail account or any  email trigger"
      },
      "typeVersion": 1
    },
    {
      "id": "adbed044-08ae-4744-9b0c-09a225860267",
      "name": "Set the output Json",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        80,
        -40
      ],
      "parameters": {
        "jsonSchemaExample": "{\"contact_info\": \n{\n\"first name\": \n\"Thomas\",\n\"last name\": \"Vie\",\n\"position\": \n\"CTO\",\n\"company\": \n\"Pollup Data Services\",\n\"email\": \n\"Thomas@pollup.net\",\n\"phone\": \n\"+34 673626552\",\n\"website\": \n\"https://pollup.net\",\n\"address\": \n{\n\"street\": \n\"Oppelner Str. 32\",\n\"postal_code\": \n\"10997\",\n\"city\": \n\"Berlin\",\n\"country\": \n\"Germany\"\n}}}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "e58575ee-6ac8-4de1-b4db-8525146efd74",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -140,
        -400
      ],
      "parameters": {
        "color": 4,
        "width": 320,
        "height": 300,
        "content": "## Upgrade the prompt!\nThis is a very simple prompt but oit does the job. Improve it and send it to me!"
      },
      "typeVersion": 1
    },
    {
      "id": "23465910-0a89-45f7-9bbf-fb17abadc5de",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        200,
        -400
      ],
      "parameters": {
        "color": 4,
        "width": 840,
        "height": 400,
        "content": "## Hubspot integration\n- Search for the contact in hubspot\n- If it is present creates an egagement\n- It it is not, creates it and adds an engagement"
      },
      "typeVersion": 1
    },
    {
      "id": "f5573c22-85f3-4eda-ba5a-172567827991",
      "name": "contact exists?",
      "type": "n8n-nodes-base.if",
      "position": [
        476,
        -260
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "554c2aa3-dbdb-4955-8510-6b09bc762f63",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "914f2e6b-7a5f-4c9c-bd3b-4bfb2693728d",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        696,
        -360
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "75c8fc2d-dc8e-4b6c-a853-1dbd8d72f779",
              "name": "vid",
              "type": "string",
              "value": "={{ $json.id }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4c8fa2d1-e3b4-4323-bdc8-3a4e2bbc706d",
      "name": "Creates contact",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        696,
        -160
      ],
      "parameters": {
        "email": "={{ $('Parse the mail with AI').item.json.output.contact_info.email }}",
        "options": {},
        "authentication": "oAuth2",
        "additionalFields": {
          "city": "={{ $('Parse the mail with AI').item.json.output.contact_info.address.city }}",
          "country": "={{ $('Parse the mail with AI').item.json.output.contact_info.address.country }}",
          "jobTitle": "={{ $('Parse the mail with AI').item.json.output.contact_info.position }}",
          "lastName": "={{ $('Parse the mail with AI').item.json.output.contact_info['last name'] }}",
          "postalCode": "={{ $('Parse the mail with AI').item.json.output.contact_info.address.postal_code }}",
          "websiteUrl": "={{ $('Parse the mail with AI').item.json.output.contact_info.website }}",
          "companyName": "={{ $('Parse the mail with AI').item.json.output.contact_info.company }}",
          "phoneNumber": "={{ $('Parse the mail with AI').item.json.output.contact_info.phone }}",
          "streetAddress": "={{ $('Parse the mail with AI').item.json.output.contact_info.address.street }}"
        }
      },
      "credentials": {
        "hubspotOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "5f94ba18-49db-4bc0-9f0a-16a9d05ca6b0",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -440,
        -620
      ],
      "parameters": {
        "width": 460,
        "height": 200,
        "content": "## Contact me\n- If you need any modification to this workflow\n- if you need some help with this workflow\n- Or if you need any workflow in n8n, Make, or Langchain / Langgraph\n\nWrite to me: [thomas@pollup.net](mailto:thomas@pollup.net)"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Creates an email engagement",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Creates contact": {
      "main": [
        [
          {
            "node": "Creates an email engagement",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "contact exists?": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Creates contact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Parse the mail with AI",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Set the output Json": {
      "ai_outputParser": [
        [
          {
            "node": "Parse the mail with AI",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Parse the mail with AI": {
      "main": [
        [
          {
            "node": "Search for the contact via email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When an email is received": {
      "main": [
        [
          {
            "node": "Parse the mail with AI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search for the contact via email": {
      "main": [
        [
          {
            "node": "contact exists?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Stickynote Emailreadimap. Uses hubspot, lmChatOpenAi, chainLlm, emailReadImap. Manual trigger; 13 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Email & Gmail

Alrouf AI Integration (Production). Uses googleSheets, chainLlm, lmChatGoogleGemini, outputParserStructured. Manual trigger; 21 nodes.

Google Sheets, Chain Llm, Google Gemini Chat +5
Email & Gmail

Anyone who is drowning in emails Busy parents who has alot of school emails Busy executives with too many emails

Email Read Imap, HTTP Request, Chain Llm +2
Email & Gmail

This template is built for real estate agencies and agents in Spain, Italy, and Portugal who receive property inquiries through Idealista and want to respond to leads faster using automation and AI.

Gmail Trigger, Microsoft Outlook Trigger, Email Read Imap +4
Email & Gmail

In this guide, we’ll walk you through setting up an AI-driven workflow that automatically processes incoming emails using a custom AI model (e.g., Llama), prepares email content, and saves it as a Gma

Email Read Imap, Chain Llm, Lm Ollama +1
Email & Gmail

This workflow automates your email communication by listening for incoming emails and notifying you via Telegram. It then prompts you to provide a quick response, which it transforms into a polished,

Email Read Imap, Email Send, OpenAI +1