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 →
{
"name": "WorkFlow 02",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "months",
"triggerAtHour": 4
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
464,
-48
],
"id": "6d478e7e-0d9b-46c2-8698-6e1150c147c7",
"name": "Schedule Trigger"
},
{
"parameters": {
"values": {
"string": [
{
"name": "_log.workflow",
"value": "={{$workflow.name}}"
},
{
"name": "_log.executionId",
"value": "={{$execution.id}}"
}
]
},
"options": {}
},
"id": "23249eb1-67de-4c5e-b3af-5bbaf04fcb7f",
"name": "Log Meta (expressions)",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [
672,
-48
]
},
{
"parameters": {
"functionCode": "return items.map(i => {\n const startedAt = new Date().toISOString();\n i.json._log = {\n runId: startedAt,\n workflow: i.json._log?.workflow || null,\n executionId: i.json._log?.executionId || null,\n startedAt,\n ok: 0,\n ko: 0,\n actions: [],\n failedNodes: {}\n };\n return i;\n});"
},
"id": "439894a7-58fa-43a4-9274-054debc7276d",
"name": "Start Log",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
896,
-48
]
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "0ff44095-4d62-4f1f-bfb9-2e388a445177",
"name": "ResponsableID",
"value": "={{ $('Get Certificat1').item.json.properties[\"Responsable Certificat\"].relation[0].id }}",
"type": "string"
},
{
"id": "0e44ba96-4d9d-4136-a501-9f05d295a723",
"name": "Ressource",
"value": "={{ $json.properties.Ressources.url }}",
"type": "string"
},
{
"id": "18982cbc-326a-43eb-a3c6-4de2a0fd1fe8",
"name": "FournisseurID",
"value": "={{ $('Get Certificat1').item.json.properties[\"Master Fournisseurs\"].relation[0].id }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1424,
-48
],
"id": "64fab1c9-71f6-4fa9-bf55-01ea8a928a8d",
"name": "Edit Certificat",
"notesInFlow": false,
"alwaysOutputData": false,
"onError": "continueRegularOutput"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "5b9d675b-f310-4d38-8702-a54be31c4fc3",
"name": "id",
"value": "={{ $json.id }}",
"type": "string"
},
{
"id": "f58754f5-864b-4399-9c99-9fb132aaad1b",
"name": "name",
"value": "={{ $('Get Certificat2').item.json.name }}",
"type": "string"
},
{
"id": "649b3fc3-21c3-49c1-90fe-f7ffe19dac8b",
"name": "property_ressources",
"value": "={{ $('Get Certificat2').item.json.property_ressources }}",
"type": "string"
},
{
"id": "a772f876-d663-4c8f-aaae-75887fda765a",
"name": "property_contr_le_certificat",
"value": "={{ $('Get Certificat2').item.json.property_contr_le_certificat }}",
"type": "string"
},
{
"id": "fc146c4a-d723-4d12-902d-8f4e8cceb478",
"name": "property_date_due",
"value": "={{ $('Get Certificat2').item.json.property_date_due }}",
"type": "object"
},
{
"id": "366690af-0831-48a6-9443-0509cb47d774",
"name": "Request",
"value": "={{ $('Get Certificat2').item.json.property_certificat_request }}",
"type": "boolean"
},
{
"id": "7dfff0c8-c3b5-4a22-a398-687579fe4fc0",
"name": "ResponsableID",
"value": "={{ $('Edit Certificat').item.json.ResponsableID }}",
"type": "string"
},
{
"id": "815a5b7f-50f5-44fb-9c3e-184ffeecc47d",
"name": "Ressource",
"value": "={{ $('Edit Certificat').item.json.Ressource }}",
"type": "string"
},
{
"id": "3829dd80-6740-4b7d-ad80-a5c35e49ea96",
"name": "FournisseurID",
"value": "={{ $json.property_master_fournisseurs[0] }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
2192,
-64
],
"id": "6687322a-cd08-43de-90d2-62ada32e411b",
"name": "Edit Certificat1",
"notesInFlow": false,
"onError": "continueRegularOutput"
},
{
"parameters": {
"resource": "databasePage",
"operation": "getAll",
"databaseId": {
"__rl": true,
"value": "{{NOTION_DB_ID_CERTIFICATS_FOURNISSEURS}}",
"mode": "list",
"cachedResultName": "Certificats Fournisseurs",
"cachedResultUrl": "https://www.notion.so/{{NOTION_DB_ID_CERTIFICATS_FOURNISSEURS}}"
},
"returnAll": true,
"simple": false,
"options": {}
},
"type": "n8n-nodes-base.notion",
"typeVersion": 2.2,
"position": [
1120,
-48
],
"id": "e3f7874c-ee17-4200-a32b-cd320b485d70",
"name": "Get Certificat1",
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"onError": "continueErrorOutput",
"notes": "Master Fournisseur : 40%5Bsd"
},
{
"parameters": {
"resource": "databasePage",
"operation": "getAll",
"databaseId": {
"__rl": true,
"value": "{{NOTION_DB_ID_CERTIFICATS_FOURNISSEURS}}",
"mode": "list",
"cachedResultName": "Certificats Fournisseurs",
"cachedResultUrl": "https://www.notion.so/{{NOTION_DB_ID_CERTIFICATS_FOURNISSEURS}}"
},
"returnAll": true,
"options": {}
},
"type": "n8n-nodes-base.notion",
"typeVersion": 2.2,
"position": [
1696,
-48
],
"id": "c26fb28c-f280-45ef-bada-4f3c33eb2f11",
"name": "Get Certificat2",
"executeOnce": true,
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"onError": "continueErrorOutput"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "914db486-7189-4138-a940-bb7bb6b17c91",
"leftValue": "={{ $json.property_contr_le_certificat }}",
"rightValue": "=\ud83d\udcdd \u00e0 valider",
"operator": {
"type": "string",
"operation": "contains"
}
},
{
"id": "7f2d53da-733f-4ffc-b7cf-b7a4745ea403",
"leftValue": "={{ $json.Request }}",
"rightValue": "",
"operator": {
"type": "boolean",
"operation": "false",
"singleValue": true
}
},
{
"id": "aa646d5e-6523-4088-b3df-3fad80bca75c",
"leftValue": "={{ $json.property_date_due }}",
"rightValue": "",
"operator": {
"type": "object",
"operation": "notEmpty",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
2400,
-64
],
"id": "9cd321b6-67b0-4019-9909-452b88080124",
"name": "If"
},
{
"parameters": {
"batchSize": 5,
"options": {}
},
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [
2384,
176
],
"id": "be335902-72e0-4ae1-8cfb-58894f29120e",
"name": "Loop Over Items",
"retryOnFail": false,
"onError": "continueErrorOutput"
},
{
"parameters": {
"values": {
"string": [
{
"name": "_lastNode",
"value": "={{$prevNode.name}}"
},
{
"name": "_hadError",
"value": "={{ $json.error !== undefined }}"
},
{
"name": "_errMsg",
"value": "={{ $json.error?.message || ''}}"
}
]
},
"options": {}
},
"id": "b7210ec5-3bda-4dd2-b990-732c2150ebce",
"name": "Log Snapshot3",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [
2112,
192
]
},
{
"parameters": {
"functionCode": "return items.map(i => {\n const log = i.json._log || {};\n \n // LIGNE 5 CORRIG\u00c9E\n const nodeName = i.json._lastNode || 'UnknownNode';\n \n const failed = !!i.json._hadError || !!i.json.error;\n \n // Message adaptatif\n const msg = i.json.error?.message || \n i.json._errMsg || \n (failed ? 'Erreur d\u00e9tect\u00e9e' : 'Succ\u00e8s');\n \n (log.actions ||= []).push({ node: nodeName, ok: !failed, msg });\n \n if (failed) {\n log.ko = (log.ko || 0) + 1;\n log.failedNodes = log.failedNodes || {};\n log.failedNodes[nodeName] = true;\n } else {\n log.ok = (log.ok || 0) + 1;\n }\n \n i.json._log = log;\n return i;\n});"
},
"id": "7a8ead8b-468d-40ff-8ceb-e5d302ed0731",
"name": "Update Log3",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
1952,
-64
]
},
{
"parameters": {
"functionCode": "return items.map(i => {\n const log = i.json._log || {};\n \n // LIGNE 5 CORRIG\u00c9E\n const nodeName = i.json._lastNode || 'UnknownNode';\n \n const failed = !!i.json._hadError || !!i.json.error;\n \n // Message adaptatif\n const msg = i.json.error?.message || \n i.json._errMsg || \n (failed ? 'Erreur d\u00e9tect\u00e9e' : 'Succ\u00e8s');\n \n (log.actions ||= []).push({ node: nodeName, ok: !failed, msg });\n \n if (failed) {\n log.ko = (log.ko || 0) + 1;\n log.failedNodes = log.failedNodes || {};\n log.failedNodes[nodeName] = true;\n } else {\n log.ok = (log.ok || 0) + 1;\n }\n \n i.json._log = log;\n return i;\n});"
},
"id": "e117c747-201f-4f4c-b500-31d92e6f03e8",
"name": "Update Log",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
2880,
240
]
},
{
"parameters": {
"functionCode": "return items.map(i => {\n const log = i.json._log || {};\n \n // LIGNE 5 CORRIG\u00c9E\n const nodeName = i.json._lastNode || 'UnknownNode';\n \n const failed = !!i.json._hadError || !!i.json.error;\n \n // Message adaptatif\n const msg = i.json.error?.message || \n i.json._errMsg || \n (failed ? 'Erreur d\u00e9tect\u00e9e' : 'Succ\u00e8s');\n \n (log.actions ||= []).push({ node: nodeName, ok: !failed, msg });\n \n if (failed) {\n log.ko = (log.ko || 0) + 1;\n log.failedNodes = log.failedNodes || {};\n log.failedNodes[nodeName] = true;\n } else {\n log.ok = (log.ok || 0) + 1;\n }\n \n i.json._log = log;\n return i;\n});"
},
"id": "447a5eef-60ff-471c-8f62-6b3f2154dadf",
"name": "Update Log4",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
2160,
432
]
},
{
"parameters": {},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
3344,
576
],
"id": "b5dad519-0eb8-4d3c-80e5-907c19752464",
"name": "Merge"
},
{
"parameters": {
"numberInputs": 3
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
4032,
-32
],
"id": "1ae639c4-c12d-48e8-9676-e60c29354e7d",
"name": "Merge1"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "Nph7coAgeAm16pwp",
"mode": "list",
"cachedResultName": "Logger - Send to Notion"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"mode": "each",
"options": {
"waitForSubWorkflow": true
}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
4624,
-16
],
"id": "bbe2ffd4-85ee-4412-9897-35214c5a3e57",
"name": "Execute Logger - Send to Notion"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "5b9d675b-f310-4d38-8702-a54be31c4fc3",
"name": "id",
"value": "={{ $json.id }}",
"type": "string"
},
{
"id": "f58754f5-864b-4399-9c99-9fb132aaad1b",
"name": "name",
"value": "={{ $('Get Certificat2').item.json.name }}",
"type": "string"
},
{
"id": "649b3fc3-21c3-49c1-90fe-f7ffe19dac8b",
"name": "property_ressources",
"value": "={{ $('Get Certificat2').item.json.property_ressources }}",
"type": "string"
},
{
"id": "a772f876-d663-4c8f-aaae-75887fda765a",
"name": "property_contr_le_certificat",
"value": "={{ $('Get Certificat2').item.json.property_contr_le_certificat }}",
"type": "string"
},
{
"id": "fc146c4a-d723-4d12-902d-8f4e8cceb478",
"name": "property_date_due",
"value": "={{ $('Get Certificat2').item.json.property_date_due }}",
"type": "object"
},
{
"id": "366690af-0831-48a6-9443-0509cb47d774",
"name": "Request",
"value": "={{ $('Get Certificat2').item.json.property_certificat_request }}",
"type": "boolean"
},
{
"id": "7dfff0c8-c3b5-4a22-a398-687579fe4fc0",
"name": "ResponsableID",
"value": "={{ $('Edit Certificat').item.json.ResponsableID }}",
"type": "string"
},
{
"id": "815a5b7f-50f5-44fb-9c3e-184ffeecc47d",
"name": "Ressource",
"value": "={{ $('Edit Certificat').item.json.Ressource }}",
"type": "string"
},
{
"id": "3829dd80-6740-4b7d-ad80-a5c35e49ea96",
"name": "FournisseurID",
"value": "={{ $('Edit Certificat1').item.json.FournisseurID }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
3088,
240
],
"id": "35ba7308-c158-42eb-a1c4-8608fe5bbdc9",
"name": "Edit Certificat2",
"notesInFlow": false,
"onError": "continueRegularOutput"
},
{
"parameters": {
"functionCode": "return items.map(i => {\n const log = i.json._log || {};\n \n // LIGNE 5 CORRIG\u00c9E\n const nodeName = i.json._lastNode || 'UnknownNode';\n \n const failed = !!i.json._hadError || !!i.json.error;\n \n // Message adaptatif\n const msg = i.json.error?.message || \n i.json._errMsg || \n (failed ? 'Erreur d\u00e9tect\u00e9e' : 'Succ\u00e8s');\n \n (log.actions ||= []).push({ node: nodeName, ok: !failed, msg });\n \n if (failed) {\n log.ko = (log.ko || 0) + 1;\n log.failedNodes = log.failedNodes || {};\n log.failedNodes[nodeName] = true;\n } else {\n log.ok = (log.ok || 0) + 1;\n }\n \n i.json._log = log;\n return i;\n});"
},
"id": "b2b36bd3-d2e6-4a03-b826-330c7efeae63",
"name": "Update Log5",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
3504,
256
]
},
{
"parameters": {
"values": {
"string": [
{
"name": "_lastNode",
"value": "={{ ($workflow.name || 'Unknown Workflow') + \" - \" + ($json._log?.actions?.find(action => !action.ok)?.node || Object.keys($json._log?.failedNodes || {})[0] || 'UnknownNode') }}"
},
{
"name": "_hadError",
"value": "={{ $json.error !== undefined }}"
},
{
"name": "_errMsg",
"value": "={{ $json.error?.message || ''}}"
}
]
},
"options": {}
},
"id": "e673f47e-1414-4dc0-acb3-cc753ecb2f5a",
"name": "Log Snapshot",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [
1136,
592
]
},
{
"parameters": {
"functionCode": "return items.map(i => {\n const log = i.json._log || {};\n \n // LIGNE 5 CORRIG\u00c9E\n const nodeName = i.json._lastNode || 'UnknownNode';\n \n const failed = !!i.json._hadError || !!i.json.error;\n \n // Message adaptatif\n const msg = i.json.error?.message || \n i.json._errMsg || \n (failed ? 'Erreur d\u00e9tect\u00e9e' : 'Succ\u00e8s');\n \n (log.actions ||= []).push({ node: nodeName, ok: !failed, msg });\n \n if (failed) {\n log.ko = (log.ko || 0) + 1;\n log.failedNodes = log.failedNodes || {};\n log.failedNodes[nodeName] = true;\n } else {\n log.ok = (log.ok || 0) + 1;\n }\n \n i.json._log = log;\n return i;\n});"
},
"id": "2e81f42b-d1cc-4c1d-8a65-862a8fbd4f6e",
"name": "Update Log2",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
1424,
592
]
},
{
"parameters": {
"functionCode": "const i = items[0];\nconst log = i.json._log || {};\nlog.finishedAt = new Date().toISOString();\n\nconst start = new Date(log.startedAt || log.runId || Date.now()).getTime();\nconst end = new Date(log.finishedAt).getTime();\nlog.durationSec = Math.round((end - start) / 1000);\n\n// \ud83c\udfaf CORRECTION : Extraire les noms de n\u0153uds uniques des \u00e9checs\nconst failedNodeNames = [];\nconst uniqueErrorMessages = [];\n\n// Parcourir les actions pour identifier les \u00e9checs\nif (log.actions && Array.isArray(log.actions)) {\n log.actions.forEach(action => {\n if (!action.ok) {\n // Ajouter le nom du n\u0153ud s'il n'est pas d\u00e9j\u00e0 pr\u00e9sent\n if (!failedNodeNames.includes(action.node)) {\n failedNodeNames.push(action.node);\n }\n \n // Ajouter le message d'erreur s'il n'est pas d\u00e9j\u00e0 pr\u00e9sent\n if (action.msg && !uniqueErrorMessages.includes(action.msg)) {\n uniqueErrorMessages.push(action.msg);\n }\n }\n });\n}\n\n// \ud83c\udfaf R\u00c9SULTATS CORRIG\u00c9S\nlog.failedNodesList = failedNodeNames; // Noms uniques des n\u0153uds en \u00e9chec\nlog.uniqueErrorMessages = uniqueErrorMessages; // Messages d'erreur uniques\nlog.errorSummary = uniqueErrorMessages.join(' | '); // Compilation des erreurs\n\n// Stats am\u00e9lior\u00e9es\nlog.stats = {\n totalProcessed: log.ok + log.ko,\n successCount: log.ok,\n failureCount: log.ko,\n successRate: `${Math.round((log.ok / (log.ok + log.ko)) * 100)}%`,\n uniqueFailedNodes: failedNodeNames.length,\n distinctErrors: uniqueErrorMessages.length\n};\n\ni.json._log = log;\nreturn [i];"
},
"id": "897af704-43ec-4b30-b894-c0baa85fb5c2",
"name": "Finish Log",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
4432,
-16
]
},
{
"parameters": {
"jsCode": "// Consolidation COMPL\u00c8TE des logs\nconst logData = {\n workflow: $('Log Meta (expressions)').first().json._log?.workflow || \"WorkFlow 01\",\n executionId: $execution.id,\n startedAt: $('Start Log').first().json._log?.startedAt,\n finishedAt: new Date().toISOString(),\n runId: $('Start Log').first().json._log?.runId,\n \n // Consolidation des compteurs\n ok: $input.all().reduce((sum, item) => sum + (item.json._log?.ok || 0), 0),\n ko: $input.all().reduce((sum, item) => sum + (item.json._log?.ko || 0), 0),\n failedNodes: $input.all().flatMap(item => item.json._log?.failedNodes || []),\n \n // Logique Actions\n actions: (() => {\n const koCount = $input.all().reduce((sum, item) => sum + (item.json._log?.ko || 0), 0);\n if (koCount === 0) {\n return [{ msg: \"Pass\" }];\n } else {\n const allActions = $input.all().flatMap(item => item.json._log?.actions || []);\n return allActions.filter(action => action.msg !== \"Pass\");\n }\n })()\n};\n\nreturn [{ json: { _log: logData } }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
4224,
-16
],
"id": "3e75e53a-33d6-435d-b370-f771be11e5d4",
"name": "One Item"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "JRduRVzWHtHDooRk",
"mode": "list",
"cachedResultName": "WorkFlow 02.01"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"mode": "each",
"options": {
"waitForSubWorkflow": true
}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
3296,
240
],
"id": "ce99e657-63d9-47fa-9b2f-0f696b8a66a1",
"name": "Workflow 02.01",
"alwaysOutputData": true,
"onError": "continueErrorOutput"
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "Log Meta (expressions)",
"type": "main",
"index": 0
}
]
]
},
"Log Meta (expressions)": {
"main": [
[
{
"node": "Start Log",
"type": "main",
"index": 0
}
]
]
},
"Start Log": {
"main": [
[
{
"node": "Get Certificat1",
"type": "main",
"index": 0
}
]
]
},
"Edit Certificat": {
"main": [
[
{
"node": "Get Certificat2",
"type": "main",
"index": 0
}
]
]
},
"Get Certificat1": {
"main": [
[
{
"node": "Edit Certificat",
"type": "main",
"index": 0
}
],
[
{
"node": "Log Snapshot",
"type": "main",
"index": 0
}
]
]
},
"Get Certificat2": {
"main": [
[
{
"node": "Update Log3",
"type": "main",
"index": 0
}
],
[
{
"node": "Log Snapshot",
"type": "main",
"index": 0
}
]
]
},
"Edit Certificat1": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"If": {
"main": [
[
{
"node": "Log Snapshot3",
"type": "main",
"index": 0
}
],
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
],
[
{
"node": "Update Log",
"type": "main",
"index": 0
}
],
[
{
"node": "Update Log4",
"type": "main",
"index": 0
}
]
]
},
"Log Snapshot3": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Update Log3": {
"main": [
[
{
"node": "Edit Certificat1",
"type": "main",
"index": 0
}
]
]
},
"Update Log": {
"main": [
[
{
"node": "Edit Certificat2",
"type": "main",
"index": 0
}
]
]
},
"Update Log4": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 2
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "One Item",
"type": "main",
"index": 0
}
]
]
},
"Edit Certificat2": {
"main": [
[
{
"node": "Workflow 02.01",
"type": "main",
"index": 0
}
]
]
},
"Update Log5": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Log Snapshot": {
"main": [
[
{
"node": "Update Log2",
"type": "main",
"index": 0
}
]
]
},
"Update Log2": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"One Item": {
"main": [
[
{
"node": "Finish Log",
"type": "main",
"index": 0
}
]
]
},
"Finish Log": {
"main": [
[
{
"node": "Execute Logger - Send to Notion",
"type": "main",
"index": 0
}
]
]
},
"Workflow 02.01": {
"main": [
[
{
"node": "Update Log5",
"type": "main",
"index": 0
}
],
[
{
"node": "Update Log4",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "167661db-0efe-4e74-8f90-e8c2b2b4f83d",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "KzsADm4gzoQWzTkn",
"tags": [
{
"createdAt": "2025-08-14T02:16:11.616Z",
"updatedAt": "2025-08-14T02:16:11.616Z",
"id": "1OOcQbUVIxPSDlKG",
"name": "Certificat Fournisseur"
},
{
"createdAt": "2025-09-05T21:34:33.550Z",
"updatedAt": "2025-09-05T21:34:33.550Z",
"id": "LZmLOxWE5K3Pq3XN",
"name": "Scan Certificat"
}
]
}
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.
notionApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
WorkFlow 02. Uses notion. Scheduled trigger; 23 nodes.
Source: https://github.com/WealthFinPilot/notion-qms-platform/blob/main/exports/workflows/wf-02-scan-certificat.json — 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.
WorkFlow 05. Uses notion, httpRequest. Scheduled trigger; 44 nodes.
WorkFlow 08. Uses notion, httpRequest. Scheduled trigger; 37 nodes.
This template is designed for social media managers, content creators, data analysts, and anyone who wants to automatically save and analyze their Meta Threads posts in Notion.