A small n8n starter workflow for client handoff documentation. It helps builders document which values are safe for a client to edit, who owns credentials, what changed after delivery, and what proof was run before handoff.
Client-facing workflows often break after delivery because the handoff is informal. This template creates a repeatable settings block, change log entry, and handoff checklist that can be copied into real client workflows before delivery.
{
"client_name": "Replace with client or internal owner",
"workflow_owner": "Replace with accountable person",
"safe_notification_email": "owner@example.com",
"safe_edit_threshold": "Only edit notification copy, recipients, wait times, and labels without testing.",
"last_tested_at": "YYYY-MM-DD HH:MM timezone",
"change_date": "YYYY-MM-DD",
"modified_by": "Name of person making the change",
"reason": "[CLIENT] Explain why this change was made",
"risk_level": "none | low | breaking",
"test_evidence": "Known-good input produced expected output at timestamp",
"trigger_confirmed": "What starts this workflow?",
"required_inputs_confirmed": "Which fields are required and what happens when one is missing?",
"credentials_confirmed": "Which account owns each credential?",
"failure_test_confirmed": "What deliberate failure test was run?",
"owner_safe_edits_confirmed": "Which fields can the client edit without touching logic?"
}
{
"name": "Client Handoff Settings + Change Log Template",
"nodes": [
{
"parameters": {},
"id": "manual-trigger",
"name": "Manual Trigger",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
-620,
40
]
},
{
"parameters": {
"content": "## Client handoff settings\n\nUse this starter structure before handing a workflow to a client.\n\n1. Put safe editable values in the Client Settings node.\n2. Keep a change log entry whenever the workflow is modified.\n3. Run the handoff checklist before delivery.\n4. Copy these values into your client handoff doc.",
"height": 260,
"width": 380
},
"id": "handoff-note",
"name": "How To Use This Template",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-820,
-280
]
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "client-name",
"name": "client_name",
"value": "Replace with client or internal owner",
"type": "string"
},
{
"id": "workflow-owner",
"name": "workflow_owner",
"value": "Replace with accountable person",
"type": "string"
},
{
"id": "safe-email",
"name": "safe_notification_email",
"value": "owner@example.com",
"type": "string"
},
{
"id": "safe-threshold",
"name": "safe_edit_threshold",
"value": "Only edit notification copy, recipients, wait times, and labels without testing.",
"type": "string"
},
{
"id": "last-tested",
"name": "last_tested_at",
"value": "YYYY-MM-DD HH:MM timezone",
"type": "string"
}
]
},
"options": {}
},
"id": "client-settings",
"name": "Client Settings - Safe To Edit",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-360,
40
]
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "change-date",
"name": "change_date",
"value": "YYYY-MM-DD",
"type": "string"
},
{
"id": "modified-by",
"name": "modified_by",
"value": "Name of person making the change",
"type": "string"
},
{
"id": "change-reason",
"name": "reason",
"value": "[CLIENT] Explain why this change was made",
"type": "string"
},
{
"id": "risk-level",
"name": "risk_level",
"value": "none | low | breaking",
"type": "string"
},
{
"id": "test-evidence",
"name": "test_evidence",
"value": "Known-good input produced expected output at timestamp",
"type": "string"
}
]
},
"options": {}
},
"id": "change-log-entry",
"name": "Change Log Entry",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-80,
40
]
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "trigger-check",
"name": "trigger_confirmed",
"value": "What starts this workflow?",
"type": "string"
},
{
"id": "input-check",
"name": "required_inputs_confirmed",
"value": "Which fields are required and what happens when one is missing?",
"type": "string"
},
{
"id": "credentials-check",
"name": "credentials_confirmed",
"value": "Which account owns each credential?",
"type": "string"
},
{
"id": "failure-check",
"name": "failure_test_confirmed",
"value": "What deliberate failure test was run?",
"type": "string"
},
{
"id": "owner-check",
"name": "owner_safe_edits_confirmed",
"value": "Which fields can the client edit without touching logic?",
"type": "string"
}
]
},
"options": {}
},
"id": "handoff-checklist",
"name": "Handoff Checklist",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
200,
40
]
}
],
"connections": {
"Manual Trigger": {
"main": [
[
{
"node": "Client Settings - Safe To Edit",
"type": "main",
"index": 0
}
]
]
},
"Client Settings - Safe To Edit": {
"main": [
[
{
"node": "Change Log Entry",
"type": "main",
"index": 0
}
]
]
},
"Change Log Entry": {
"main": [
[
{
"node": "Handoff Checklist",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"staticData": null,
"tags": [
{
"name": "handoff"
},
{
"name": "documentation"
},
{
"name": "client-delivery"
}
],
"triggerCount": 0,
"updatedAt": "2026-05-10T17:20:00.000Z",
"versionId": "n8n-client-handoff-template-v1"
}
Workflow name
Client Handoff Settings + Change Log Template
Category
Productivity
Description
A small n8n starter workflow for client handoff documentation. It helps builders document which values are safe for a client to edit, who owns credentials, what changed after delivery, and what proof was run before handoff.
Why this is useful
Client-facing workflows often break after delivery because the handoff is informal. This template creates a repeatable settings block, change log entry, and handoff checklist that can be copied into real client workflows before delivery.
Included nodes
Example output
{ "client_name": "Replace with client or internal owner", "workflow_owner": "Replace with accountable person", "safe_notification_email": "owner@example.com", "safe_edit_threshold": "Only edit notification copy, recipients, wait times, and labels without testing.", "last_tested_at": "YYYY-MM-DD HH:MM timezone", "change_date": "YYYY-MM-DD", "modified_by": "Name of person making the change", "reason": "[CLIENT] Explain why this change was made", "risk_level": "none | low | breaking", "test_evidence": "Known-good input produced expected output at timestamp", "trigger_confirmed": "What starts this workflow?", "required_inputs_confirmed": "Which fields are required and what happens when one is missing?", "credentials_confirmed": "Which account owns each credential?", "failure_test_confirmed": "What deliberate failure test was run?", "owner_safe_edits_confirmed": "Which fields can the client edit without touching logic?" }Public reference
https://n8n-handoff-kit.vercel.app/free-n8n-handoff-template.html
Workflow JSON
{ "name": "Client Handoff Settings + Change Log Template", "nodes": [ { "parameters": {}, "id": "manual-trigger", "name": "Manual Trigger", "type": "n8n-nodes-base.manualTrigger", "typeVersion": 1, "position": [ -620, 40 ] }, { "parameters": { "content": "## Client handoff settings\n\nUse this starter structure before handing a workflow to a client.\n\n1. Put safe editable values in the Client Settings node.\n2. Keep a change log entry whenever the workflow is modified.\n3. Run the handoff checklist before delivery.\n4. Copy these values into your client handoff doc.", "height": 260, "width": 380 }, "id": "handoff-note", "name": "How To Use This Template", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -820, -280 ] }, { "parameters": { "assignments": { "assignments": [ { "id": "client-name", "name": "client_name", "value": "Replace with client or internal owner", "type": "string" }, { "id": "workflow-owner", "name": "workflow_owner", "value": "Replace with accountable person", "type": "string" }, { "id": "safe-email", "name": "safe_notification_email", "value": "owner@example.com", "type": "string" }, { "id": "safe-threshold", "name": "safe_edit_threshold", "value": "Only edit notification copy, recipients, wait times, and labels without testing.", "type": "string" }, { "id": "last-tested", "name": "last_tested_at", "value": "YYYY-MM-DD HH:MM timezone", "type": "string" } ] }, "options": {} }, "id": "client-settings", "name": "Client Settings - Safe To Edit", "type": "n8n-nodes-base.set", "typeVersion": 3.4, "position": [ -360, 40 ] }, { "parameters": { "assignments": { "assignments": [ { "id": "change-date", "name": "change_date", "value": "YYYY-MM-DD", "type": "string" }, { "id": "modified-by", "name": "modified_by", "value": "Name of person making the change", "type": "string" }, { "id": "change-reason", "name": "reason", "value": "[CLIENT] Explain why this change was made", "type": "string" }, { "id": "risk-level", "name": "risk_level", "value": "none | low | breaking", "type": "string" }, { "id": "test-evidence", "name": "test_evidence", "value": "Known-good input produced expected output at timestamp", "type": "string" } ] }, "options": {} }, "id": "change-log-entry", "name": "Change Log Entry", "type": "n8n-nodes-base.set", "typeVersion": 3.4, "position": [ -80, 40 ] }, { "parameters": { "assignments": { "assignments": [ { "id": "trigger-check", "name": "trigger_confirmed", "value": "What starts this workflow?", "type": "string" }, { "id": "input-check", "name": "required_inputs_confirmed", "value": "Which fields are required and what happens when one is missing?", "type": "string" }, { "id": "credentials-check", "name": "credentials_confirmed", "value": "Which account owns each credential?", "type": "string" }, { "id": "failure-check", "name": "failure_test_confirmed", "value": "What deliberate failure test was run?", "type": "string" }, { "id": "owner-check", "name": "owner_safe_edits_confirmed", "value": "Which fields can the client edit without touching logic?", "type": "string" } ] }, "options": {} }, "id": "handoff-checklist", "name": "Handoff Checklist", "type": "n8n-nodes-base.set", "typeVersion": 3.4, "position": [ 200, 40 ] } ], "connections": { "Manual Trigger": { "main": [ [ { "node": "Client Settings - Safe To Edit", "type": "main", "index": 0 } ] ] }, "Client Settings - Safe To Edit": { "main": [ [ { "node": "Change Log Entry", "type": "main", "index": 0 } ] ] }, "Change Log Entry": { "main": [ [ { "node": "Handoff Checklist", "type": "main", "index": 0 } ] ] } }, "pinData": {}, "settings": { "executionOrder": "v1" }, "staticData": null, "tags": [ { "name": "handoff" }, { "name": "documentation" }, { "name": "client-delivery" } ], "triggerCount": 0, "updatedAt": "2026-05-10T17:20:00.000Z", "versionId": "n8n-client-handoff-template-v1" }