Workflow: Qualify new leads in Google Sheets via OpenAI's GPT-4
Integrations: googleSheets, googleSheetsTrigger, merge, openAi, set, stickyNote

{"id": "8FLJK1NsduFL0Y5P", "meta": {"instanceId": "fb924c73af8f703905bc09c9ee8076f48c17b596ed05b18c0ff86915ef8a7c4a"}, "name": "Qualify new leads in Google Sheets via OpenAI's GPT-4", "tags": [{"id": "y9tvM3hISJKT2jeo", "name": "Ted's Tech Talks", "createdAt": "2023-08-15T22:12:34.260Z", "updatedAt": "2023-08-15T22:12:34.260Z"}], "nodes": [{"id": "1f179325-0bec-4e5c-8ebd-0a2bb3ebefaa", "name": "Merge", "type": "n8n-nodes-base.merge", "position": [1440, 340], "parameters": {"mode": "combine", "options": {}, "combinationMode": "mergeByPosition"}, "typeVersion": 2.1}, {"id": "7b548661-2b32-451f-ba52-91ca86728f1e", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [358, 136.3642172523962], "parameters": {"width": 442, "height": 360.6357827476038, "content": "### 1. Create a Google Sheet document\n* This template uses Google Sheet document connected to Google Forms, but a standalone Sheet document will work too\n* Adapt initial trigger to your needs: check for new entries periodically or add a manual trigger\n\n[Link to the Google Sheet template](https://docs.google.com/spreadsheets/d/1jk8ZbfOMObvHGGImc0sBJTZB_hracO4jRqfbryMgzEs)"}, "typeVersion": 1}, {"id": "308b4dce-4656-47bd-b217-69565b1c34f6", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [820, 420], "parameters": {"width": 471, "height": 322, "content": "### 2. Provide lead qualification instructions\n* Create a __system message__ with overall instructions\n* Add a __user message__ with the JSON variables\n* Set node parses the resulting JSON object, but you can also request a plain string response in the system message"}, "typeVersion": 1}, {"id": "c00442ca-98cf-4296-b084-f0881ce4fd39", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [1320, 222.18785942492013], "parameters": {"width": 355, "height": 269.81214057507987, "content": "### 3. Combine the initial data with GPT response\n* This Merge node puts together original records from the google sheet and responses from the OpenAI"}, "typeVersion": 1}, {"id": "62643a4c-a69c-4351-9960-20413285ff33", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [1700, 220], "parameters": {"width": 398, "height": 265, "content": "### 4. Update the Google Sheet document\n* Provide __Column to Match On__ (usually a timestamp in case of Google Forms)\n* Enter the result from GPT into a separate column"}, "typeVersion": 1}, {"id": "4cd58340-81c4-46c7-b346-25a9b6ef2910", "name": "Update lead status", "type": "n8n-nodes-base.googleSheets", "position": [1860, 340], "parameters": {"columns": {"value": {"Rating": "={{ $json.reply.rating }}", "Timestamp": "={{ $json.Timestamp }}"}, "schema": [{"id": "Timestamp", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Timestamp", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Email Address", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Email Address", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Your name", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Your name", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Your business area", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Your business area", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Your team size", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Your team size", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Rating", "type": "string", "display": true, "required": false, "displayName": "Rating", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "row_number", "type": "string", "display": true, "removed": true, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["Timestamp"]}, "options": {}, "operation": "update", "sheetName": {"__rl": true, "mode": "list", "value": 72739218, "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1jk8ZbfOMObvHGGImc0sBJTZB_hracO4jRqfbryMgzEs/edit#gid=72739218", "cachedResultName": "Form Responses 1"}, "documentId": {"__rl": true, "mode": "list", "value": "1jk8ZbfOMObvHGGImc0sBJTZB_hracO4jRqfbryMgzEs", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1jk8ZbfOMObvHGGImc0sBJTZB_hracO4jRqfbryMgzEs/edit?usp=drivesdk", "cachedResultName": "Join Community (Responses)"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "RtRiRezoxiWkzZQt", "name": "Ted's Tech Talks Google account"}}, "typeVersion": 4.2}, {"id": "fea0acee-13b6-441a-8cf9-c8fedbc4617d", "name": "Extract JSON reply", "type": "n8n-nodes-base.set", "position": [1120, 580], "parameters": {"fields": {"values": [{"name": "reply", "type": "objectValue", "objectValue": "={{ JSON.parse($json.message.content) }}"}]}, "include": "selected", "options": {}}, "typeVersion": 3.2}, {"id": "0a0608fe-894f-4eb5-b690-233c6dfc0428", "name": "Qualify leads with GPT", "type": "n8n-nodes-base.openAi", "position": [900, 580], "parameters": {"prompt": {"messages": [{"role": "system", "content": "Your task is to qualify incoming leads. Leads are form submissions to a closed community group. Use the following criteria for a quality lead:\n\n1. We are looking for decision makers who run companies or who have some teams. The bigger the team - the better. Basically, everyone with some level of responsibility should be accepted. This is the main criterion.\n2. Email from a non-standard domain. Ideally this should be a corporate domain, but this is a secondary criterion.\n\nPlease thing step by step whether a lead is quality or not?\n\nIf at least one of the criteria satisfy, reply with \"qualified\" in response. Otherwise reply \"not qualified\". Reply with a JSON of the following structure: {\"rating\":\"string\",\"explanation\":\"string\"}. Reply only with with the JSON and nothing more!"}, {"content": "=Here's a lead info:\nName: {{ $json['Your name'] }}\nEmail: {{ $json['Email Address'] }}\nBusiness area: {{ $json['Your business area'] }}\nSize of the team: {{ $json['Your team size'] }}"}]}, "options": {"temperature": 0.3}, "resource": "chat", "chatModel": "gpt-4-turbo-preview"}, "credentials": {"openAiApi": {"id": "rveqdSfp7pCRON1T", "name": "Ted's Tech Talks OpenAi"}}, "typeVersion": 1.1}, {"id": "22fdec69-a4a9-430d-9950-79195799ae7a", "name": "Check for new entries", "type": "n8n-nodes-base.googleSheetsTrigger", "position": [520, 340], "parameters": {"event": "rowAdded", "options": {}, "pollTimes": {"item": [{"mode": "everyMinute"}]}, "sheetName": {"__rl": true, "mode": "list", "value": 72739218, "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1jk8ZbfOMObvHGGImc0sBJTZB_hracO4jRqfbryMgzEs/edit#gid=72739218", "cachedResultName": "Form Responses 1"}, "documentId": {"__rl": true, "mode": "list", "value": "1jk8ZbfOMObvHGGImc0sBJTZB_hracO4jRqfbryMgzEs", "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1jk8ZbfOMObvHGGImc0sBJTZB_hracO4jRqfbryMgzEs/edit?usp=drivesdk", "cachedResultName": "Join Community (Responses)"}}, "credentials": {"googleSheetsTriggerOAuth2Api": {"id": "m33qCYf9eEvSgo0x", "name": "Ted's Tech Talks Google Sheets Trigger"}}, "typeVersion": 1}], "active": false, "pinData": {}, "settings": {"callerPolicy": "workflowsFromSameOwner", "executionOrder": "v1", "saveManualExecutions": true, "saveExecutionProgress": true, "saveDataSuccessExecution": "all"}, "versionId": "ffad0998-1a6b-469d-9297-6d7fd88387b9", "connections": {"Merge": {"main": [[{"node": "Update lead status", "type": "main", "index": 0}]]}, "Extract JSON reply": {"main": [[{"node": "Merge", "type": "main", "index": 1}]]}, "Check for new entries": {"main": [[{"node": "Merge", "type": "main", "index": 0}, {"node": "Qualify leads with GPT", "type": "main", "index": 0}]]}, "Qualify leads with GPT": {"main": [[{"node": "Extract JSON reply", "type": "main", "index": 0}]]}}}