Automatisation Google Sheets avec n8n : gestion des clients et posts
- Ce workflow n8n a pour objectif d'automatiser la gestion des clients et des publications à l'aide de Google Sheets. Il est particulièrement utile pour les équipes marketing et commerciales qui souhaitent centraliser les informations sur leurs clients et suivre les mises à jour de leurs publications. Grâce à cette automatisation n8n, les utilisateurs peuvent récupérer des listes de clients, vérifier les nouvelles publications et mettre à jour les informations dans Google Sheets sans intervention manuelle.
- Le processus débute par un déclencheur manuel, permettant aux utilisateurs de tester le workflow à leur convenance. Ensuite, le workflow effectue une requête HTTP pour obtenir la liste des propriétaires, suivie d'une autre requête pour récupérer les clients associés. Des conditions sont mises en place pour vérifier si des informations spécifiques, comme un lien LinkedIn, sont présentes. En fonction des résultats, les données sont traitées et mises à jour dans Google Sheets, où chaque nouvelle entrée est automatiquement enregistrée.
- Les bénéfices de ce workflow incluent une réduction significative du temps passé à gérer manuellement les données, une diminution des erreurs humaines et une meilleure visibilité sur les informations clients. En intégrant cette automatisation dans leur processus, les entreprises peuvent se concentrer sur des tâches à plus forte valeur ajoutée, tout en assurant une gestion efficace de leurs données.
Workflow n8n Google Sheets, gestion des clients : vue d'ensemble
Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.
Workflow n8n Google Sheets, gestion des clients : détail des nœuds
Inscris-toi pour voir l'intégralité du workflow
Inscription gratuite
S'inscrire gratuitementBesoin d'aide ?{
"nodes": [
{
"id": "2804a082-c17b-482f-828d-901dab7e7a11",
"name": "When clicking ‘Test workflow’",
"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": {
"id": "qubiIFrowxvUdpu6",
"name": "HubSpot account for node"
}
},
"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": {
"id": "qubiIFrowxvUdpu6",
"name": "HubSpot account for node"
}
},
"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
],
"webhookId": "eea16996-1d02-4861-b83d-6145cee90ac6",
"parameters": {
"sendTo": "={{ $('Set data here').first().json.email }}",
"message": "={{ $json.text }}",
"options": {
"appendAttribution": false
},
"subject": "Changes in your clients",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"id": "DLjspol9TLgpGaXa",
"name": "Gmail account 2"
}
},
"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": {
"id": "nhoVFnkO31mejJrI",
"name": "RapidAPI Key"
}
},
"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": {
"id": "gdLmm513ROUyH6oU",
"name": "Google Sheets account"
}
},
"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": {
"id": "gdLmm513ROUyH6oU",
"name": "Google Sheets account"
}
},
"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": {
"id": "nhoVFnkO31mejJrI",
"name": "RapidAPI Key"
}
},
"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": {
"id": "gdLmm513ROUyH6oU",
"name": "Google Sheets account"
}
},
"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": {
"id": "gdLmm513ROUyH6oU",
"name": "Google Sheets account"
}
},
"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 ‘Test workflow’": {
"main": [
[
{
"node": "Set data here",
"type": "main",
"index": 0
}
]
]
}
}
}Workflow n8n Google Sheets, gestion des clients : pour qui est ce workflow ?
Ce workflow s'adresse aux équipes marketing et commerciales des PME et grandes entreprises qui cherchent à optimiser la gestion de leurs clients et publications. Un niveau technique intermédiaire est recommandé pour la personnalisation du workflow.
Workflow n8n Google Sheets, gestion des clients : problème résolu
Ce workflow résout le problème de la gestion manuelle des données clients et des publications, qui peut être chronophage et sujet à des erreurs. En automatisant ces processus, les utilisateurs gagnent du temps et réduisent les risques d'erreurs, tout en assurant que les informations sont toujours à jour et accessibles. L'intégration de Google Sheets permet une gestion centralisée et efficace des données.
Workflow n8n Google Sheets, gestion des clients : étapes du workflow
Étape 1 : Le workflow est déclenché manuellement par l'utilisateur.
- Étape 1 : Une requête HTTP est envoyée pour obtenir la liste des propriétaires.
- Étape 2 : Une autre requête récupère les clients associés à chaque propriétaire.
- Étape 3 : Des conditions vérifient la présence de liens LinkedIn et d'autres informations.
- Étape 4 : Les données sont mises à jour dans Google Sheets, avec des entrées créées pour chaque client et publication.
- Étape 5 : Les informations sont consolidées et les mises à jour sont enregistrées pour un suivi efficace.
Workflow n8n Google Sheets, gestion des clients : guide de personnalisation
Pour personnaliser ce workflow, commencez par modifier l'URL des requêtes HTTP pour qu'elles correspondent à vos API spécifiques. Vous pouvez également ajuster les paramètres des noeuds Google Sheets, comme le nom de la feuille et les colonnes à utiliser. Si vous souhaitez intégrer d'autres outils, explorez les noeuds disponibles dans n8n et ajoutez-les selon vos besoins. Assurez-vous de tester chaque modification pour garantir le bon fonctionnement du flux. Enfin, pensez à sécuriser vos données en utilisant des authentifications appropriées pour les API.