This workflow corresponds to n8n.io template #5830 — we link there as the canonical source.
This workflow follows the Agent → Google Sheets 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 →
{
"id": "H97gy2uk3IGrx6Lx",
"name": "Calendly Request to Saleshandy's Sequence: Smart Lead Routing with AI",
"tags": [],
"nodes": [
{
"id": "dfa5f332-e942-48c3-9723-9121536687a5",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
1320,
800
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Qualified",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "727b9d7f-1a9f-48c4-89c7-0a34af7247ea",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $('Edit Fields').item.json.score }}",
"rightValue": 7
}
]
},
"renameOutput": true
},
{
"outputKey": "Unqualified",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "21041fa2-9a48-47d9-875d-d49750bd194a",
"operator": {
"type": "number",
"operation": "lte"
},
"leftValue": "={{ $('Edit Fields').item.json.score }}",
"rightValue": 4
}
]
},
"renameOutput": true
}
]
},
"options": {
"fallbackOutput": "extra",
"renameFallbackOutput": "Semiqualified"
}
},
"typeVersion": 3.2
},
{
"id": "a09456bc-76fa-4e15-a692-54fda7c66108",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
540,
820
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "={\n \"score\": {{ $json.output }}\n}\n "
},
"typeVersion": 3.4
},
{
"id": "2ebece46-c2f8-45b5-8545-add7d7b48c14",
"name": "AI Agent4",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
200,
820
],
"parameters": {
"text": "={{JSON.stringify($json)}}",
"options": {
"systemMessage": "You are an AI scoring agent that evaluates user input data related to Calendly requests. Your goal is to analyze the provided user data and assign a single-digit numeric score ranging from -1 to 10, based on the quality, completeness, and validity of the input. Return only the numeric score as a single digit or -1, with no additional text or explanation.\n\nInstructions:\n\nExamine the user input data carefully.\n\nValidate that all required fields are properly filled and formatted.\n\nAssess the data quality and completeness.\n\nProduce only one integer score between:\n\n0 to 10 (single digit except for 10, which is two digits but acceptable as max score),\n\nOr -1 if the input is invalid or unusable.\n\nReturn just the numeric value with no extra words or characters.\n\nOutput Format:\n\nReturn only a single integer value: -1 or a number from 0 to 10.\n\nThis instruction should ensure the AI only outputs the score itself. Let me know if you want it stricter to only single digit (0-9) and treat 10 differently!"
},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "be6123a6-dc02-45a2-a22b-d276fe825e93",
"name": "OpenAI Chat Model3",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
200,
1020
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "0c773831-4da9-40ea-887a-76b7974c1464",
"name": "Get data from calendly",
"type": "n8n-nodes-base.webhook",
"position": [
-200,
820
],
"parameters": {
"path": "calendly-webhook",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "bdccf89c-83e1-4370-a4af-c92d8556ddd0",
"name": "Wait for meeting booked",
"type": "n8n-nodes-base.wait",
"position": [
740,
820
],
"parameters": {
"unit": "minutes"
},
"typeVersion": 1.1
},
{
"id": "381cea98-a7d8-4200-86a6-38c2974513f8",
"name": "get status, if meeting booked",
"type": "n8n-nodes-base.httpRequest",
"position": [
920,
820
],
"parameters": {
"url": "https://api.calendly.com/scheduled_events",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "invitee_email",
"value": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[2].answer }}"
},
{
"name": "Score",
"value": "={{ $('Edit Fields').item.json.score }}"
},
{
"name": "organization",
"value": "https://api.calendly.com/organizations/AAAAAAAAAAAA"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "ADD YOUR CALENDLY CREDENTIALS"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "65cd70df-ea17-460b-9df9-9b4c71eda276",
"name": "switch meeting booked",
"type": "n8n-nodes-base.switch",
"position": [
1100,
820
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Not Booked",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5147242f-8a6e-4807-a66b-7c460f7e6b9e",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $json.pagination.count }}",
"rightValue": 0
}
]
},
"renameOutput": true
}
]
},
"options": {
"fallbackOutput": "extra",
"renameFallbackOutput": "Booked"
}
},
"typeVersion": 3.2
},
{
"id": "40a0fc3c-f6dc-4d12-8b50-b0faf279070e",
"name": "Add to sequence for qualified",
"type": "n8n-nodes-base.httpRequest",
"position": [
1560,
600
],
"parameters": {
"url": "https://open-api.saleshandy.com/v1/sequences/prospects/import-with-field-name",
"method": "POST",
"options": {},
"jsonBody": "={\n \"prospectList\": [\n {\n \"First Name\": \"{{ $('Get data from calendly').item.json.body.payload.questions_and_answers[0].answer }}\",\n \"Email\": \"{{ $('Get data from calendly').item.json.body.payload.questions_and_answers[2].answer }}\"\n }\n ],\n \"stepId\": \"ADD YOUR SALESHANDY SEQUENCE ID\",\n \"verifyProspects\": false,\n \"conflictAction\": \"overwrite\"\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "x-api-key",
"value": "ADD YOUR SALESHANDY CREDENTIALS"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "07996d74-a0be-4106-9c34-8efd7ea13f25",
"name": "Add to sequence for unqualified",
"type": "n8n-nodes-base.httpRequest",
"position": [
1560,
800
],
"parameters": {
"url": "https://open-api.saleshandy.com/v1/sequences/prospects/import-with-field-name",
"method": "POST",
"options": {},
"jsonBody": "={\n \"prospectList\": [\n {\n \"First Name\": \"{{ $('Get data from calendly').item.json.body.payload.questions_and_answers[0].answer }}\",\n \"Email\": \"{{ $('Get data from calendly').item.json.body.payload.questions_and_answers[1].answer }}\"\n }\n ],\n \"stepId\": \"ADD YOUR SALESHANDY SEQUENCE ID\",\n \"verifyProspects\": false,\n \"conflictAction\": \"overwrite\"\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "x-api-key",
"value": "ADD YOUR SALESHANDY CREDENTIALS"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "a381effc-6c33-4a5d-844f-70715be4dba0",
"name": "Add to sequence for semi-qualified",
"type": "n8n-nodes-base.httpRequest",
"position": [
1560,
1000
],
"parameters": {
"url": "https://open-api.saleshandy.com/v1/sequences/prospects/import-with-field-name",
"method": "POST",
"options": {},
"jsonBody": "={\n \"prospectList\": [\n {\n \"First Name\": \"{{ $('Get data from calendly').item.json.body.payload.questions_and_answers[0].answer }}\",\n \"Email\": \"{{ $('Get data from calendly').item.json.body.payload.questions_and_answers[1].answer }}\"\n }\n ],\n \"stepId\": \"ADD YOUR SALESHANDY SEQUENCE ID\",\n \"verifyProspects\": false,\n \"conflictAction\": \"overwrite\"\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "x-api-key",
"value": "ADD YOUR SALESHANDY CREDENTIALS"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "efe56897-d9da-4144-95dd-90aacc1aee44",
"name": "Append row for meeting booked",
"type": "n8n-nodes-base.googleSheets",
"position": [
1320,
1040
],
"parameters": {
"columns": {
"value": {
"Name": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[0].answer }}",
"Email": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[1].answer }}",
"Created At": "={{ $('Get data from calendly').item.json.body.payload.created_at }}\n",
"Phone number": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[2].answer.replace(/^\\+/, '') }}\n",
"Event Scheduled": "={{ $('Get data from calendly').item.json.body.payload.result.type }}\n",
"Score Out of 10": "={{ JSON.parse($('AI Agent4').item.json.output)[0].json }}\n",
"What solution you want a demo for?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[4].answer }}\n",
"What is your company size (Team members)?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[6].answer }}\n",
"How many emails do you want to send per month?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[5].answer }}",
"What is your monthly budget for cold emailing?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[7].answer }}\n",
"Are you looking for any specific feature/support?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[8].answer }}\n"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone number",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What solution you want a demo for?",
"type": "string",
"display": true,
"required": false,
"displayName": "What solution you want a demo for?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "How many emails do you want to send per month?",
"type": "string",
"display": true,
"required": false,
"displayName": "How many emails do you want to send per month?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What is your company size (Team members)?",
"type": "string",
"display": true,
"required": false,
"displayName": "What is your company size (Team members)?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What is your monthly budget for cold emailing?",
"type": "string",
"display": true,
"required": false,
"displayName": "What is your monthly budget for cold emailing?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Are you looking for any specific feature/support?",
"type": "string",
"display": true,
"required": false,
"displayName": "Are you looking for any specific feature/support?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Event Scheduled",
"type": "string",
"display": true,
"required": false,
"displayName": "Event Scheduled",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Score Out of 10",
"type": "string",
"display": true,
"required": false,
"displayName": "Score Out of 10",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created At",
"type": "string",
"display": true,
"required": false,
"displayName": "Created At",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Email"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk/edit#gid=0",
"cachedResultName": "Meeting Booked"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk/edit?usp=drivesdk",
"cachedResultName": "n8n calendly meetings"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "e56cfc44-9343-4e34-9484-dd8154e9d001",
"name": "Append row for qualified",
"type": "n8n-nodes-base.googleSheets",
"position": [
1760,
600
],
"parameters": {
"columns": {
"value": {
"Name": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[0].answer }}",
"Email": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[1].answer }}",
"Created At": "={{ $('Get data from calendly').item.json.body.payload.created_at }}\n",
"Phone number": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[2].answer.replace(/^\\+/, '') }}\n",
"Event Scheduled": "={{ $('Get data from calendly').item.json.body.payload.result.type }}\n",
"Score Out of 10": "={{ JSON.parse($('AI Agent4').item.json.output)[0].json }}\n",
"What solution you want a demo for?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[4].answer }}\n",
"What is your company size (Team members)?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[6].answer }}\n",
"How many emails do you want to send per month?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[5].answer }}",
"What is your monthly budget for cold emailing?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[7].answer }}\n",
"Are you looking for any specific feature/support?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[8].answer }}\n"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone number",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What solution you want a demo for?",
"type": "string",
"display": true,
"required": false,
"displayName": "What solution you want a demo for?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "How many emails do you want to send per month?",
"type": "string",
"display": true,
"required": false,
"displayName": "How many emails do you want to send per month?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What is your company size (Team members)?",
"type": "string",
"display": true,
"required": false,
"displayName": "What is your company size (Team members)?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What is your monthly budget for cold emailing?",
"type": "string",
"display": true,
"required": false,
"displayName": "What is your monthly budget for cold emailing?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Are you looking for any specific feature/support?",
"type": "string",
"display": true,
"required": false,
"displayName": "Are you looking for any specific feature/support?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Event Scheduled",
"type": "string",
"display": true,
"required": false,
"displayName": "Event Scheduled",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Score Out of 10",
"type": "string",
"display": true,
"required": false,
"displayName": "Score Out of 10",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created At",
"type": "string",
"display": true,
"required": false,
"displayName": "Created At",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Email"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1130158977,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk/edit#gid=1130158977",
"cachedResultName": "Qualified"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk/edit?usp=drivesdk",
"cachedResultName": "n8n calendly meetings"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "c8e1977c-939f-4492-a54c-7c02c3cdb913",
"name": "Append row for unqualified",
"type": "n8n-nodes-base.googleSheets",
"position": [
1760,
800
],
"parameters": {
"columns": {
"value": {
"Name": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[0].answer }}",
"Email": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[1].answer }}",
"Created At": "={{ $('Get data from calendly').item.json.body.payload.created_at }}\n",
"Phone number": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[2].answer.replace(/^\\+/, '') }}\n",
"Event Scheduled": "={{ $('Get data from calendly').item.json.body.payload.result.type }}\n",
"Score Out of 10": "={{ JSON.parse($('AI Agent4').item.json.output)[0].json }}\n",
"What solution you want a demo for?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[4].answer }}\n",
"What is your company size (Team members)?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[6].answer }}\n",
"How many emails do you want to send per month?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[5].answer }}",
"What is your monthly budget for cold emailing?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[7].answer }}\n",
"Are you looking for any specific feature/support?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[8].answer }}\n"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone number",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What solution you want a demo for?",
"type": "string",
"display": true,
"required": false,
"displayName": "What solution you want a demo for?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "How many emails do you want to send per month?",
"type": "string",
"display": true,
"required": false,
"displayName": "How many emails do you want to send per month?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What is your company size (Team members)?",
"type": "string",
"display": true,
"required": false,
"displayName": "What is your company size (Team members)?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What is your monthly budget for cold emailing?",
"type": "string",
"display": true,
"required": false,
"displayName": "What is your monthly budget for cold emailing?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Are you looking for any specific feature/support?",
"type": "string",
"display": true,
"required": false,
"displayName": "Are you looking for any specific feature/support?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Event Scheduled",
"type": "string",
"display": true,
"required": false,
"displayName": "Event Scheduled",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Score Out of 10",
"type": "string",
"display": true,
"required": false,
"displayName": "Score Out of 10",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created At",
"type": "string",
"display": true,
"required": false,
"displayName": "Created At",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Email"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1211117888,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk/edit#gid=1211117888",
"cachedResultName": "Unqualified"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk/edit?usp=drivesdk",
"cachedResultName": "n8n calendly meetings"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "41f159ea-9191-49cc-9b25-739bd8020c72",
"name": "Append row for semi-qualified",
"type": "n8n-nodes-base.googleSheets",
"position": [
1760,
1000
],
"parameters": {
"columns": {
"value": {
"Name": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[0].answer }}",
"Email": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[1].answer }}",
"Created At": "={{ $('Get data from calendly').item.json.body.payload.created_at }}\n",
"Phone number": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[2].answer.replace(/^\\+/, '') }}\n",
"Event Scheduled": "={{ $('Get data from calendly').item.json.body.payload.result.type }}\n",
"Score Out of 10": "={{ JSON.parse($('AI Agent4').item.json.output)[0].json }}\n",
"What solution you want a demo for?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[4].answer }}\n",
"What is your company size (Team members)?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[6].answer }}\n",
"How many emails do you want to send per month?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[5].answer }}",
"What is your monthly budget for cold emailing?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[7].answer }}\n",
"Are you looking for any specific feature/support?": "={{ $('Get data from calendly').item.json.body.payload.questions_and_answers[8].answer }}\n"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone number",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What solution you want a demo for?",
"type": "string",
"display": true,
"required": false,
"displayName": "What solution you want a demo for?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "How many emails do you want to send per month?",
"type": "string",
"display": true,
"required": false,
"displayName": "How many emails do you want to send per month?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What is your company size (Team members)?",
"type": "string",
"display": true,
"required": false,
"displayName": "What is your company size (Team members)?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "What is your monthly budget for cold emailing?",
"type": "string",
"display": true,
"required": false,
"displayName": "What is your monthly budget for cold emailing?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Are you looking for any specific feature/support?",
"type": "string",
"display": true,
"required": false,
"displayName": "Are you looking for any specific feature/support?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Event Scheduled",
"type": "string",
"display": true,
"required": false,
"displayName": "Event Scheduled",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Score Out of 10",
"type": "string",
"display": true,
"required": false,
"displayName": "Score Out of 10",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created At",
"type": "string",
"display": true,
"required": false,
"displayName": "Created At",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Email"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 214030636,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk/edit#gid=214030636",
"cachedResultName": "Semiqualified"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17lZFMl1VKx_TbZ26rOq36PQssW9_X1P58QSBX8h9JRk/edit?usp=drivesdk",
"cachedResultName": "n8n calendly meetings"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "52c2fda3-da17-4c40-9c68-9153b12b391c",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
1980,
800
],
"parameters": {
"width": 640,
"height": 280,
"content": "\n## Unqualified Lead Logger\nStores disqualified leads and AI scores for GTM visibility and analysis.\n\u2192 Scores \u2264 4\n\u2192 Logged but not routed to cold email outreach campaigns\n\nThese updated names and sticky notes follow best practices for:\n\n\ud83d\udc49 Descriptive, action-based node names\n\n\u2705 Clear purpose for each sticky note\n\n\ud83d\udca1 Easy for first-time users and reviewers in the Creator Hub"
},
"typeVersion": 1
},
{
"id": "5a986254-8d11-478a-9842-2fb9ab0537fc",
"name": "Sticky Note11",
"type": "n8n-nodes-base.stickyNote",
"position": [
1980,
1100
],
"parameters": {
"width": 640,
"height": 120,
"content": "## Semiqualified Lead Logger\nAppends or updates leads with moderate potential (scores between 5\u20136) for nurturing.\n\u2192 Sheet: \"Demo Requests\"\n\u2192 All fields mapped dynamically from form & AI Agent"
},
"typeVersion": 1
},
{
"id": "edf9c60b-48b1-4cce-9bbf-13a562cdbc64",
"name": "Sticky Note12",
"type": "n8n-nodes-base.stickyNote",
"position": [
1980,
620
],
"parameters": {
"width": 640,
"content": "\n## Qualified Lead Logger\nUpdates Google Sheet with qualified lead details, AI score, and other fields pulled from the Calendly form.\n\u2192 Sheet: \"Demo Requests\"\n\u2192 Match by: Email\n\ud83d\udc49 Used for Sales-ready leads scoring 7 or above"
},
"typeVersion": 1
},
{
"id": "f5099929-8030-4ca3-83ce-4c2bbb258ecb",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1140,
400
],
"parameters": {
"height": 360,
"content": "\n## Meeting Status Switch\nEvaluates the Calendly API response to see if the invitee booked a meeting.\n\nIf pagination.count === 0 \u2192 route as Not Booked\n\nIf there\u2019s at least 1 event \u2192 path goes to Booked\n\nUsed for personalizing follow-up or filtering out no-shows."
},
"typeVersion": 1
},
{
"id": "e6b9b0f3-f011-423e-a0c3-1f93789d5185",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1980,
260
],
"parameters": {
"width": 640,
"height": 340,
"content": "## Lead Qualification & Logging\nThis section routes leads into segments based on the AI score and logs them into Google Sheets for visibility.\n\nRoute Lead by AI Score:\n\u27a4 If Score \u2265 7 \u2192 Qualified\n\u27a4 If Score \u2264 4 \u2192 Unqualified\n\u27a4 Score between 5\u20136 \u2192 Semiqualified\n\nLog Lead to Google Sheet:\nSaves all lead details + score + event status for reporting and follow-up.\nUses form responses to fill dynamic fields like name, email, budget, and interest area.\n\n\u2705 Keeps GTM & RevOps teams in sync\n\ud83d\udcc1 Automatically updates existing rows (by email) or adds new ones"
},
"typeVersion": 1
},
{
"id": "07843fe1-d334-4bed-89ce-f0b01a940bc7",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
180,
20
],
"parameters": {
"width": 780,
"height": 540,
"content": "\ud83e\udde0 This AI Agent scores leads from 1 to 10 using structured data from Calendly form submissions.\n\n\u2705 Scoring is based on:\n- Email domain (business vs. free)\n- Country code in phone number (geo-priority)\n- Product/solution interest (single vs. multiple)\n- Monthly usage volume\n- Company size\n- Monthly budget\n- Additional notes (intent, urgency, discounts)\n\n\ud83c\udf0d If the phone country code is **not in the allowed list**, the agent returns `-1`.\n\n\ud83d\udee0\ufe0f Customizable Parameters:\n- Approved country codes (in prompt)\n- Usage volume thresholds\n- Budget brackets\n- Importance (weight) of each factor\n- Definition of \u201cqualified lead\u201d\n\n\ud83d\udd27 Edit the AI Agent node\u2019s **system prompt** to tailor the logic to your company\u2019s lead qualification needs.\n\n\ud83d\udce6 Model routing is handled via the **Model Selector node**, allowing use of Claude, GPT, Gemini, Mistral, or OpenRouter.\n\n\ud83c\udfaf Use this to automate SDR prioritization, CRM enrichment, or sales pipeline segmentation.\n"
},
"typeVersion": 1
},
{
"id": "a41af615-7f9d-4f2e-a0bc-33cca534ba05",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
560
],
"parameters": {
"width": 360,
"content": "\n## Calendly Webhook \n\nTriggers when someone submits the Calendly Routing Form.\nMake sure this URL is added as a webhook in your Calendly form settings."
},
"typeVersion": 1
},
{
"id": "5e3a509d-a7aa-4217-833e-1fbca1b5fee8",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
740
],
"parameters": {
"color": 3,
"width": 300,
"height": 300,
"content": "## Update Calendly Webhook\n\n\n\n\n\n\n\n\n\n\n\nhttps://developer.calendly.com/api-docs/c1ddc06ce1f1b-create-webhook-subscription"
},
"typeVersion": 1
},
{
"id": "27e10a58-8403-4529-bd34-9e01459ee868",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
140,
640
],
"parameters": {
"color": 3,
"width": 340,
"height": 520,
"content": "## Update Prompt if required \n(as per your data)"
},
"typeVersion": 1
},
{
"id": "d6c3f2b8-75f7-460e-b88c-7fc125989a8e",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
840,
720
],
"parameters": {
"color": 3,
"width": 250,
"height": 640,
"content": "## Update Calendly Webhook\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLooks up scheduled events for this user's email to check if they actually booked a Calendly meeting.\n\nUses the invitee\u2019s email from the Calendly form response\n\nFilters events within your Calendly organization\n\nHelps you decide whether to proceed with Saleshandy routing based on meeting status\n\n\u2705 Input: Email from form\n\u2705 Output: List of scheduled events (if any)"
},
"typeVersion": 1
},
{
"id": "8efa2d12-c4d4-400f-aef1-1e43839e9d55",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
1480,
260
],
"parameters": {
"color": 3,
"width": 480,
"height": 960,
"content": "## Update Saleshandy API and Connect Google Sheets\n\nGoogle sheets must have these columns for all sheets -> meeting booked, Qualified, Unqualified, semiqualified\n\nName, Email, Phone number, What solution you want a demo for?, How many emails do you want to send per month?\tWhat is your company size (Team members)?, What is your monthly budget for cold emailing?, Are you looking for any specific feature/support?, Event Scheduled, Score Out of 10, Created At"
},
"typeVersion": 1
},
{
"id": "837cfd15-de6a-4360-8582-5e0c29342646",
"name": "Map Data",
"type": "n8n-nodes-base.code",
"position": [
20,
820
],
"parameters": {
"jsCode": "const qaList = $json.body.payload.questions_and_answers;\n\nconst output = {};\n\nfor (const qa of qaList) {\n if (qa.question && qa.answer !== undefined) {\n // Generate key dynamically: lowercase, replace non-alphanumerics with underscores\n const key = qa.question\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_') // replace non-alphanumeric characters with underscore\n .replace(/^_+|_+$/g, ''); // remove leading/trailing underscores\n \n output[key] = qa.answer;\n }\n}\n\nreturn [{ json: output }];\n"
},
"typeVersion": 2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "3a1a620c-3781-481a-8976-d42d814dda0b",
"connections": {
"Switch": {
"main": [
[
{
"node": "Add to sequence for qualified",
"type": "main",
"index": 0
}
],
[
{
"node": "Add to sequence for unqualified",
"type": "main",
"index": 0
}
],
[
{
"node": "Add to sequence for semi-qualified",
"type": "main",
"index": 0
}
]
]
},
"Map Data": {
"main": [
[
{
"node": "AI Agent4",
"type": "main",
"index": 0
}
]
]
},
"AI Agent4": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Wait for meeting booked",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model3": {
"ai_languageModel": [
[
{
"node": "AI Agent4",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"switch meeting booked": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
],
[
{
"node": "Append row for meeting booked",
"type": "main",
"index": 0
}
]
]
},
"Get data from calendly": {
"main": [
[
{
"node": "Map Data",
"type": "main",
"index": 0
}
]
]
},
"Wait for meeting booked": {
"main": [
[
{
"node": "get status, if meeting booked",
"type": "main",
"index": 0
}
]
]
},
"Add to sequence for qualified": {
"main": [
[
{
"node": "Append row for qualified",
"type": "main",
"index": 0
}
]
]
},
"get status, if meeting booked": {
"main": [
[
{
"node": "switch meeting booked",
"type": "main",
"index": 0
}
]
]
},
"Add to sequence for unqualified": {
"main": [
[
{
"node": "Append row for unqualified",
"type": "main",
"index": 0
}
]
]
},
"Add to sequence for semi-qualified": {
"main": [
[
{
"node": "Append row for semi-qualified",
"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.
googleSheetsOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This n8n template captures every “Request a Demo” booking in Calendly, uses OpenAI to score and qualify leads in real time, routes them into the correct Saleshandy sequence, and logs all data in Google Sheets for full GTM visibility.
Source: https://n8n.io/workflows/5830/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
⏺ 🚀 How it works
This n8n workflow orchestrates a powerful suite of AI Agents and automations to manage and optimize various aspects of an e-commerce operation, particularly for platforms like Shopify. It leverages La
leads. Uses supabase, gmail, formTrigger, httpRequest. Webhook trigger; 62 nodes.
🧠 Gwen – The AI Voice Marketing Agent Gwen is your intelligent voice-powered marketing assistant built in n8n. She combines the power of OpenAI, ElevenLabs, and automation workflows to handle content
Tired of grinding out YouTube content? This n8n workflow turns AI into your personal video factory—creating engaging, faceless shorts on autopilot. Perfect for creators, marketers, or side-hustlers lo