This workflow follows the Execute Workflow Trigger → Gmail 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 →
{
"nodes": [
{
"id": "2804a082-c17b-482f-828d-901dab7e7a11",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-160,
40
],
"parameters": {},
"typeVersion": 1
},
{
"id": "58d51340-5246-4089-ae63-f16ff4be184e",
"name": "Get list of owners",
"type": "n8n-nodes-base.httpRequest",
"position": [
280,
40
],
"parameters": {
"url": "https://api.hubapi.com/crm/v3/owners",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "hubspotOAuth2Api"
},
"credentials": {
"hubspotOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "335ffd8c-68fa-4d55-85e9-462963a8a291",
"name": "Get list of clients for owner",
"type": "n8n-nodes-base.httpRequest",
"position": [
280,
575
],
"parameters": {
"url": "https://api.hubapi.com/crm/v3/objects/contacts/search",
"method": "POST",
"options": {},
"jsonBody": "={\n \"filterGroups\": [\n {\n \"filters\": [\n {\n \"propertyName\": \"hubspot_owner_id\",\n \"operator\": \"EQ\",\n \"value\": \"{{ $('When Executed by Another Workflow').item.json.ownerId }}\"\n }\n ]\n }\n ],\n \"properties\": [\"firstname\", \"lastname\", \"email\", \"linkedinURL\", \"company\"],\n\"limit\": 200,\n\"after\": {{ $node['Edit'].json[\"sofar\"] }}\n} ",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "hubspotOAuth2Api"
},
"credentials": {
"hubspotOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "5d116139-1764-4d3a-8696-d280fb7e9d8f",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-210,
-260
],
"parameters": {
"color": 4,
"width": 420,
"height": 460,
"content": "## Settings\n- Set in \"Set data here\" the email you are registered with in Hubspot as an Owner, and the link of a Google sheet copied [from this one](https://docs.google.com/spreadsheets/d/1y17jIU6JnNPcmazWf2GsmRpdjBBMnkN41tRJnAO5KrQ/edit?usp=sharing)\n"
},
"typeVersion": 1
},
{
"id": "a8a15bd4-5a46-4f70-87bd-4db7170b4928",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
720,
575
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "d5df6d6c-ff5f-46ad-a8d4-38e326d7415e",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $node['Edit'].json.sofar }}",
"rightValue": "={{ $('Get list of clients for owner').item.json.total }}"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "eda30bd9-95bb-43d4-8981-479036103dd1",
"name": "Edit",
"type": "n8n-nodes-base.set",
"position": [
60,
575
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8a403dc5-2b05-430d-b1cc-39f70f5ac82d",
"name": "sofar",
"type": "number",
"value": "=0"
},
{
"id": "dca65b15-f545-42f1-90df-37efb03e267d",
"name": "results",
"type": "array",
"value": "[]"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "4c6c8217-6610-413e-8b1c-185a96e44882",
"name": "Increment Page",
"type": "n8n-nodes-base.set",
"position": [
500,
500
],
"parameters": {
"values": {
"number": [
{
"name": "sofar",
"value": "={{$node[\"Edit\"].json[\"sofar\"] = $node[\"Edit\"].json[\"sofar\"] + $('Get list of clients for owner').item.json.results.length}}"
}
]
},
"options": {}
},
"executeOnce": true,
"typeVersion": 1
},
{
"id": "58f53fe6-36a4-4385-ba93-e15dd589c0a4",
"name": "Split Out1",
"type": "n8n-nodes-base.splitOut",
"position": [
1160,
575
],
"parameters": {
"options": {},
"fieldToSplitOut": "results"
},
"typeVersion": 1
},
{
"id": "c92983ba-bef3-463a-a6de-8f205822f359",
"name": "Merge al the entries",
"type": "n8n-nodes-base.code",
"position": [
940,
575
],
"parameters": {
"jsCode": "let results = [],\n i = 0;\n\ndo {\n try {\n results = results.concat($(\"Get list of clients for owner\").all(0, i));\n } catch (error) {\n console.log(results)\n return results;\n }\n i++;\n} while (true);"
},
"typeVersion": 2
},
{
"id": "68c51fbd-3845-4eb2-9204-d78cc30413bf",
"name": "If linkedin url is empty",
"type": "n8n-nodes-base.if",
"position": [
1820,
40
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "84952199-2e1d-4ea8-bfb8-d4aa975d6df1",
"operator": {
"type": "string",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{ $json.linkedin_url }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "18e4e4bd-4039-4770-a3d0-13edafe6103c",
"name": "if new post",
"type": "n8n-nodes-base.if",
"position": [
3580,
40
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "48d6777d-5431-4cb9-9716-5059277bac5e",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $('Get rows from document').item.json['last post'] }}",
"rightValue": "={{ $('Set last_post').item.json.last_post }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "a5623af7-6fba-43b0-be50-c9d3c52aba32",
"name": "Get list of clients",
"type": "n8n-nodes-base.executeWorkflow",
"position": [
940,
40
],
"parameters": {
"mode": "each",
"options": {},
"workflowId": {
"__rl": true,
"mode": "id",
"value": "={{ $workflow.id }}",
"cachedResultName": "={{ $workflow.id }}"
},
"workflowInputs": {
"value": {
"ownerId": "={{ $json.id }}"
},
"schema": [
{
"id": "ownerId",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "ownerId",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"ownerId"
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
}
},
"typeVersion": 1.2
},
{
"id": "9f771153-6b83-4ac0-b642-ee2d4b65a41c",
"name": "When Executed by Another Workflow",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"position": [
-160,
575
],
"parameters": {
"workflowInputs": {
"values": [
{
"name": "ownerId"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "437dc3e5-0340-41ce-aea1-36749bd054ad",
"name": "Get last post",
"type": "n8n-nodes-base.executeWorkflow",
"position": [
3140,
40
],
"parameters": {
"mode": "each",
"options": {},
"workflowId": {
"__rl": true,
"mode": "list",
"value": "rnVcO8Bw0avTm4GB",
"cachedResultName": "get personal posts for agent"
},
"workflowInputs": {
"value": {
"maxItems": 1,
"username": "={{ $json.username }}",
"responseType": "detail"
},
"schema": [
{
"id": "username",
"type": "string",
"display": true,
"required": false,
"displayName": "username",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "responseType",
"type": "string",
"display": true,
"required": false,
"displayName": "responseType",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "maxItems",
"type": "number",
"display": true,
"required": false,
"displayName": "maxItems",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "posted_after",
"display": true,
"required": false,
"displayName": "posted_after",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": true
}
},
"typeVersion": 1.2
},
{
"id": "a0dda2f2-cb89-4557-8cfc-5e3a01e34637",
"name": "Gmail",
"type": "n8n-nodes-base.gmail",
"position": [
4680,
140
],
"parameters": {
"sendTo": "={{ $('Set data here').first().json.email }}",
"message": "={{ $json.text }}",
"options": {
"appendAttribution": false
},
"subject": "Changes in your clients",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "99911831-e603-454c-b533-2e387f2008c4",
"name": "Search for user by link",
"type": "n8n-nodes-base.httpRequest",
"notes": "Search by Name and company",
"position": [
2920,
140
],
"parameters": {
"url": "https://linkedin-api8.p.rapidapi.com/get-profile-data-by-url",
"options": {},
"sendQuery": true,
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "url",
"value": "={{ $json.profileURL }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-rapidapi-host",
"value": "linkedin-api8.p.rapidapi.com"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"executeOnce": false,
"notesInFlow": true,
"typeVersion": 4.2,
"alwaysOutputData": false
},
{
"id": "903f6be4-b468-488c-aa41-50f60ee92bcb",
"name": "Do nothing",
"type": "n8n-nodes-base.noOp",
"position": [
2480,
-160
],
"parameters": {},
"typeVersion": 1
},
{
"id": "695202d6-60bd-4788-b029-0c03a9e3c89a",
"name": "Merge profileURL",
"type": "n8n-nodes-base.code",
"position": [
2700,
140
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// Add a new field called 'myNewField' to the JSON of the item\n$input.item.json.profileURL = $json.profileURL;\n\nreturn $input.item;"
},
"typeVersion": 2
},
{
"id": "ead5d235-7f73-41e4-86d3-48ad7d4cfa8d",
"name": "Set last_post",
"type": "n8n-nodes-base.set",
"position": [
3360,
40
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "93be271c-22c8-4afe-a928-e9d2593b025d",
"name": "last_post",
"type": "string",
"value": "={{ $json.text[0] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a89746c8-5fb7-4c69-930f-d0f451bcef54",
"name": "Set last_position",
"type": "n8n-nodes-base.set",
"position": [
3360,
240
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "93be271c-22c8-4afe-a928-e9d2593b025d",
"name": "last_position",
"type": "string",
"value": "={{ $json.position[0].title }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "467aa5a3-c9f5-407f-8571-e9ba333109e2",
"name": "if new position",
"type": "n8n-nodes-base.if",
"position": [
3580,
240
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "48d6777d-5431-4cb9-9716-5059277bac5e",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.last_position }}",
"rightValue": "={{ $('Get rows from document').item.json['current position'] }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "f6456ca1-bb31-4bf3-8175-7f8b5f4a65bb",
"name": "Set data here",
"type": "n8n-nodes-base.set",
"position": [
60,
40
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a43825a4-f9cd-4b38-975c-b1de771cebea",
"name": "sheetLink",
"type": "string",
"value": "https://docs.google.com/spreadsheets/d/1y17jIU6JnNPcmazWf2GsmRpdjBBMnkN41tRJnAO5KrQ/edit?gid=0#gid=0"
},
{
"id": "ea837d0b-e8d6-4594-9861-550d30f05db0",
"name": "email",
"type": "string",
"value": "zeerobug@gmail.com"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f904c3fb-9320-4b5e-92af-c7cc697eb9dc",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
220,
-260
],
"parameters": {
"color": 4,
"width": 230,
"height": 460,
"content": "## Hubspot API\nCalls a Hubpot API endpoint to get the list of Owners\nYou have to select \"Predefined credential type\" and choose \"Hubspot Oauth2 API\". Then folow the instructions [here](https://docs.n8n.io/integrations/builtin/credentials/hubspot/?utm_source=n8n_app&utm_medium=credential_settings&utm_campaign=create_new_credentials_modal#required-scopes-for-hubspot-trigger-node)"
},
"typeVersion": 1
},
{
"id": "5a499d0c-bbe5-4041-a082-6111658bf155",
"name": "Change this for testing",
"type": "n8n-nodes-base.filter",
"position": [
1160,
40
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "45031804-4846-4b03-8c8f-8f1a747986a4",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.properties.email }}",
"rightValue": "=nuno.domingues@toyotacaetano.pt"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "089690f8-ddf5-46e4-933c-152095ea02ac",
"name": "Create entry with email",
"type": "n8n-nodes-base.googleSheets",
"position": [
1380,
40
],
"parameters": {
"columns": {
"value": {
"email": "={{ $json.properties.email }}"
},
"schema": [
{
"id": "email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "linkedin_url",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "linkedin_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "last post",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "last post",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "current position",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "current position",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "date",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "date",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"email"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "url",
"value": "={{ $('Set data here').first().json.sheetLink }}"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "={{ $('Set data here').first().json.sheetLink }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5,
"alwaysOutputData": true
},
{
"id": "60617dc9-021b-41be-b7bf-0816bddba05e",
"name": "Get rows from document",
"type": "n8n-nodes-base.googleSheets",
"position": [
1600,
40
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $json.email }}",
"lookupColumn": "email"
}
]
},
"sheetName": {
"__rl": true,
"mode": "url",
"value": "={{ $('Set data here').first().json.sheetLink }}"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "={{ $('Set data here').first().json.sheetLink }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5,
"alwaysOutputData": true
},
{
"id": "21c2bbd5-75f1-4c80-a4ec-4c2870890fcf",
"name": "Search for user profile by names",
"type": "n8n-nodes-base.httpRequest",
"notes": "Search by Name and company",
"position": [
2040,
-60
],
"parameters": {
"url": "https://linkedin-api8.p.rapidapi.com/search-people",
"options": {},
"sendQuery": true,
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "firstName",
"value": "={{ $('Get list of clients').item.json.properties.firstname }}"
},
{
"name": "lastName",
"value": "={{ $('Get list of clients').item.json.properties.lastname }}"
},
{
"name": "company",
"value": "={{ $('Get list of clients').item.json.properties.company }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-rapidapi-host",
"value": "linkedin-api8.p.rapidapi.com"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"executeOnce": false,
"notesInFlow": true,
"typeVersion": 4.2,
"alwaysOutputData": false
},
{
"id": "1a6f6571-a89a-4e6e-82a5-c239661d6131",
"name": "Profile URL not found?",
"type": "n8n-nodes-base.if",
"position": [
2260,
-60
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c561dcaf-e164-46e5-8f44-8ebcd2943c78",
"operator": {
"type": "string",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{ $json.data.items[0].profileURL }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "2811ca64-1e43-4934-abc2-f1a746b2cf68",
"name": "Set the profile URL",
"type": "n8n-nodes-base.set",
"position": [
2480,
40
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "d6d3ebce-153c-44b0-a2f8-3c8ac41381cb",
"name": "profileURL",
"type": "string",
"value": "={{ $json.data.items[0].profileURL }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d79a3896-e5b3-4b63-ad04-848f34db8100",
"name": "Set the profile URL1",
"type": "n8n-nodes-base.set",
"position": [
2480,
240
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "d433d14f-b862-4f43-969e-5e911a138f8c",
"name": "profileURL",
"type": "string",
"value": "={{ $('Get rows from document').item.json.linkedin_url }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "73683bde-7431-47e2-b70f-8e0dd2725c84",
"name": "Update last post",
"type": "n8n-nodes-base.googleSheets",
"position": [
3800,
40
],
"parameters": {
"columns": {
"value": {
"date": "= {{new Date().format('dd-MM-yyyy')}}",
"email": "={{ $('Change this for testing').item.json.properties.email }}",
"last post": "={{ $('Set last_post').item.json.last_post }}",
"linkedin_url": "={{ $('Merge profileURL').item.json.profileURL }}",
"current position": "={{ $json.last_position }}"
},
"schema": [
{
"id": "email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "linkedin_url",
"type": "string",
"display": true,
"required": false,
"displayName": "linkedin_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "last post",
"type": "string",
"display": true,
"required": false,
"displayName": "last post",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "current position",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "current position",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "date",
"type": "string",
"display": true,
"required": false,
"displayName": "date",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"email"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "url",
"value": "={{ $('Set data here').first().json.sheetLink }}"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "={{ $('Set data here').first().json.sheetLink }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "71f66801-3b12-4633-a95b-c4c8788117bd",
"name": "Updates last position",
"type": "n8n-nodes-base.googleSheets",
"position": [
3800,
240
],
"parameters": {
"columns": {
"value": {
"date": "= {{new Date().format('dd-MM-yyyy')}}",
"email": "={{ $('Change this for testing').item.json.properties.email }}",
"linkedin_url": "={{ $('Merge profileURL').item.json.profileURL }}",
"current position": "={{ $json.last_position }}"
},
"schema": [
{
"id": "email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "linkedin_url",
"type": "string",
"display": true,
"required": false,
"displayName": "linkedin_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "last post",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "last post",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "current position",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "current position",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "date",
"type": "string",
"display": true,
"required": false,
"displayName": "date",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"email"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "url",
"value": "={{ $('Set data here').first().json.sheetLink }}"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "={{ $('Set data here').first().json.sheetLink }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "d67c1106-5d91-4d00-980b-1b3578a1c86f",
"name": "Set post_updated",
"type": "n8n-nodes-base.set",
"position": [
4020,
40
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "71118d71-0ea6-4b01-ac4d-a3ae1129b0e7",
"name": "post_updated",
"type": "boolean",
"value": true
},
{
"id": "f709a120-0db7-4b50-82e6-8f1f02352680",
"name": "email",
"type": "string",
"value": "={{ $('Change this for testing').item.json.properties.email }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "ad574631-3799-4f02-96ff-8683dc944331",
"name": "Set position_updated",
"type": "n8n-nodes-base.set",
"position": [
4020,
240
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "71118d71-0ea6-4b01-ac4d-a3ae1129b0e7",
"name": "position_updated",
"type": "boolean",
"value": true
},
{
"id": "1f0e817d-2ad4-4330-b683-64e31cfa4741",
"name": "email",
"type": "string",
"value": "={{ $('Change this for testing').item.json.properties.email }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "157a5e8f-7b42-4115-91a2-2f204cd6d9f6",
"name": "Generate the email text",
"type": "n8n-nodes-base.code",
"position": [
4460,
140
],
"parameters": {
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nlet client_post = []\nlet client_position = []\nfor (const item of $input.all()) {\n if(item.json.position_updated) {\n client_position.push(item.json.email)\n }\n if(item.json.post_updated) {\n client_post.push(item.json.email)\n }\n}\nlet text = ''\nif (client_post.length > 0) {\n text = text + 'There has been a post update for the following clients:\\n'\n text = text + client_post.join(\"\\n\") + \"\\n\";\n}\nif (client_position.length > 0) {\n text = text + 'There has been a position update for the following clients:\\n'\n text = text + client_position.join(\"\\n\") + \"\\n\";\n}\n\nreturn {text};"
},
"typeVersion": 2
},
{
"id": "0735e123-47ed-4b3c-9aa8-cc7d2f982e4b",
"name": "Merge on email",
"type": "n8n-nodes-base.merge",
"position": [
4240,
140
],
"parameters": {
"mode": "combine",
"options": {},
"joinMode": "keepEverything",
"fieldsToMatchString": "email"
},
"typeVersion": 3.1
},
{
"id": "88717813-9e07-4984-8e8b-7772f7c7a0e7",
"name": "Split Out owners",
"type": "n8n-nodes-base.splitOut",
"position": [
500,
40
],
"parameters": {
"options": {},
"fieldToSplitOut": "results"
},
"typeVersion": 1
},
{
"id": "5799995c-659e-4732-a35b-893692d95509",
"name": "Get current owner",
"type": "n8n-nodes-base.filter",
"position": [
720,
40
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7c6aec6e-66a9-4739-8a59-28f2ab1c4a26",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.email }}",
"rightValue": "={{ $('Set data here').first().json.email }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "637b821f-8051-4e91-a58e-85dc7e136467",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
880,
-260
],
"parameters": {
"color": 4,
"width": 230,
"height": 460,
"content": "## Calling a Sub-workflow\nFor lisibility only\n"
},
"typeVersion": 1
},
{
"id": "3bda132e-73a3-4af0-bb43-ff52f31f5a90",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1120,
-260
],
"parameters": {
"color": 4,
"width": 190,
"height": 460,
"content": "## For testing\nWe recommend to filter a small number of clients here\n"
},
"typeVersion": 1
},
{
"id": "13fb80f1-d685-4998-a534-41a0f944b6e8",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1320,
-260
],
"parameters": {
"color": 4,
"width": 430,
"height": 460,
"content": "## Preparing the Google sheet\n- Create an entry for each client with his email\n- Get rows for later comparison\n\n"
},
"typeVersion": 1
},
{
"id": "54a51950-a284-435e-8a2b-bdc0ebace3c9",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
3080,
-240
],
"parameters": {
"color": 4,
"width": 1090,
"height": 660,
"content": "## Adding other tests\nHere you can set other tests like:\n- New comments in LinkedIn\n- Hubspot activities\n- Hubspot updates\netc.\n\n"
},
"typeVersion": 1
},
{
"id": "4b197665-b31c-4fa2-8934-5b72468ca2e9",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1960,
-240
],
"parameters": {
"color": 4,
"width": 1090,
"height": 660,
"content": "## Searching for the LinkedIn URL\n- Set here you rapid API key\n- If we find the URL, searches for more info about the client\n"
},
"typeVersion": 1
},
{
"id": "665fb602-dc0a-432f-a087-ce6097f58937",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
4200,
-240
],
"parameters": {
"color": 4,
"width": 670,
"height": 660,
"content": "## Generating the alert email\n\n"
},
"typeVersion": 1
},
{
"id": "d6789f6a-aa62-44fd-9314-fc0157b6dcd8",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
-220,
400
],
"parameters": {
"color": 5,
"width": 1570,
"height": 460,
"content": "## Get all clients for this owner\nAs we are limited to 200 clients by the Hubsot API, we have to loop to get all of them\n\n"
},
"typeVersion": 1
},
{
"id": "d9a5cc09-7e4f-488a-a3dc-6a27361d9d0b",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-200,
-480
],
"parameters": {
"width": 640,
"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": {
"If": {
"main": [
[
{
"node": "Merge al the entries",
"type": "main",
"index": 0
}
],
[
{
"node": "Get list of clients for owner",
"type": "main",
"index": 0
}
]
]
},
"Edit": {
"main": [
[
{
"node": "Get list of clients for owner",
"type": "main",
"index": 0
}
]
]
},
"Split Out1": {
"main": [
[]
]
},
"if new post": {
"main": [
[
{
"node": "Update last post",
"type": "main",
"index": 0
}
],
[]
]
},
"Get last post": {
"main": [
[
{
"node": "Set last_post",
"type": "main",
"index": 0
}
]
]
},
"Set data here": {
"main": [
[
{
"node": "Get list of owners",
"type": "main",
"index": 0
}
]
]
},
"Set last_post": {
"main": [
[
{
"node": "if new post",
"type": "main",
"index": 0
}
]
]
},
"Increment Page": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Merge on email": {
"main": [
[
{
"node": "Generate the email text",
"type": "main",
"index": 0
}
]
]
},
"if new position": {
"main": [
[
{
"node": "Updates last position",
"type": "main",
"index": 0
}
]
]
},
"Merge profileURL": {
"main": [
[
{
"node": "Search for user by link",
"type": "main",
"index": 0
}
]
]
},
"Set post_updated": {
"main": [
[
{
"node": "Merge on email",
"type": "main",
"index": 0
}
]
]
},
"Split Out owners": {
"main": [
[
{
"node": "Get current owner",
"type": "main",
"index": 0
}
]
]
},
"Update last post": {
"main": [
[
{
"node": "Set post_updated",
"type": "main",
"index": 0
}
]
]
},
"Get current owner": {
"main": [
[
{
"node": "Get list of clients",
"type": "main",
"index": 0
}
]
]
},
"Set last_position": {
"main": [
[
{
"node": "if new position",
"type": "main",
"index": 0
}
]
]
},
"Get list of owners": {
"main": [
[
{
"node": "Split Out owners",
"type": "main",
"index": 0
}
]
]
},
"Get list of clients": {
"main": [
[
{
"node": "Change this for testing",
"type": "main",
"index": 0
}
]
]
},
"Set the profile URL": {
"main": [
[
{
"node": "Merge profileURL",
"type": "main",
"index": 0
}
]
]
},
"Merge al the entries": {
"main": [
[
{
"node": "Split Out1",
"type": "main",
"index": 0
}
]
]
},
"Set position_updated": {
"main": [
[
{
"node": "Merge on email",
"type": "main",
"index": 1
}
]
]
},
"Set the profile URL1": {
"main": [
[
{
"node": "Merge profileURL",
"type": "main",
"index": 0
}
]
]
},
"Updates last position": {
"main": [
[
{
"node": "Set position_updated",
"type": "main",
"index": 0
}
]
]
},
"Get rows from document": {
"main": [
[
{
"node": "If linkedin url is empty",
"type": "main",
"index": 0
}
]
]
},
"Profile URL not found?": {
"main": [
[
{
"node": "Do nothing",
"type": "main",
"index": 0
}
],
[
{
"node": "Set the profile URL",
"type": "main",
"index": 0
}
]
]
},
"Change this for testing": {
"main": [
[
{
"node": "Create entry with email",
"type": "main",
"index": 0
}
]
]
},
"Create entry with email": {
"main": [
[
{
"node": "Get rows from document",
"type": "main",
"index": 0
}
]
]
},
"Generate the email text": {
"main": [
[
{
"node": "Gmail",
"type": "main",
"index": 0
}
]
]
},
"Search for user by link": {
"main": [
[
{
"node": "Get last post",
"type": "main",
"index": 0
},
{
"node": "Set last_position",
"type": "main",
"index": 0
}
]
]
},
"If linkedin url is empty": {
"main": [
[
{
"node": "Search for user profile by names",
"type": "main",
"index": 0
}
],
[
{
"node": "Set the profile URL1",
"type": "main",
"index": 0
}
]
]
},
"Get list of clients for owner": {
"main": [
[
{
"node": "Increment Page",
"type": "main",
"index": 0
}
]
]
},
"Search for user profile by names": {
"main": [
[
{
"node": "Profile URL not found?",
"type": "main",
"index": 0
}
]
]
},
"When Executed by Another Workflow": {
"main": [
[
{
"node": "Edit",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Set data here",
"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.
gmailOAuth2googleSheetsOAuth2ApihttpHeaderAuthhubspotOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow streamlines the extraction and processing of code or data from multiple owners and their associated clients, saving hours of manual effort for developers and analysts handling large datasets. It begins with an event-driven trigger that responds to incoming requests, then fetches owner lists via HTTP requests and iterates through client details, using the splitOut node as the key step to divide and handle batches efficiently. Ideal for those integrating with services like Google Sheets for data storage or Gmail for notifications, it ensures accurate separation without custom scripting.
Use this workflow when dealing with paginated API responses that need breaking into manageable parts for further actions, such as updating spreadsheets or sending emails. Avoid it for simple, one-off tasks where a basic script suffices, or if your data volume is too small to justify the 46-node complexity. Common variations include adding AI nodes for data cleansing or adapting the HTTP requests for different APIs like Salesforce.
About this workflow
Splitout Code. Uses manualTrigger, httpRequest, stickyNote, splitOut. Event-driven trigger; 46 nodes.
Source: https://github.com/Zie619/n8n-workflows — 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.
Automate CSV imports into HubSpot without the mess. Powered by n8n. Supercharged by Pollup AI.
Echo Brand Voice Analysis (Processor) - TASK-074 Dec 10 Fix. Uses formTrigger, httpRequest, executeWorkflowTrigger, moveBinaryData. Event-driven trigger; 40 nodes.
AICARE Email Blast System. Uses googleDrive, httpRequest, googleSheets, gmail. Event-driven trigger; 39 nodes.
Tiktok to video copy (paylaşılacak). Uses httpRequest, googleDrive, googleSheets, gmail. Event-driven trigger; 39 nodes.
Automatically processes new orders added to Google Sheets. Small orders are approved instantly; large orders trigger an HTML email with one-click Approve / Reject links — each handled by an independen