{ "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": { "id": "JxzF93M0SJ00jDD9", "name": "HubSpot account" } }, "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": { "id": "1IOLtYX7aTspCAN8", "name": "OpenAI Pollup" } }, "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": { "id": "JxzF93M0SJ00jDD9", "name": "HubSpot account" } }, "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": { "id": "g7C5Z9V9vQUbsLIw", "name": "IMAP account" } }, "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": { "id": "JxzF93M0SJ00jDD9", "name": "HubSpot account" } }, "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 } ] ] } } }