n8n-io/n8n · warning · WorkflowActivationError

Workflow ${formatWorkflow(dbWorkflow)} has no node to start

Error message

Workflow ${formatWorkflow(dbWorkflow)} has no node to start the workflow - at least one active trigger, poll trigger, webhook trigger, or schedule trigger node is required

What it means

Before activating a workflow, ActiveWorkflowManager runs validateWorkflowHasTriggerLikeNode against the workflow's nodes to ensure at least one node can start an execution (a trigger, poll trigger, webhook trigger, or schedule trigger). If no such starting node is present, the workflow would never run on its own, so activation is refused with a WorkflowActivationError at 'warning' level. Manual/exec-once execution is unaffected.

Source

Thrown at packages/cli/src/active-workflow-manager.ts:604

			workflow = new Workflow({
				id: dbWorkflow.id,
				name: dbWorkflow.name,
				nodes,
				connections,
				active: true,
				nodeTypes: this.nodeTypes,
				staticData: dbWorkflow.staticData,
				settings: dbWorkflow.settings,
			});

			const validation = validateWorkflowHasTriggerLikeNode(
				workflow.nodes,
				this.nodeTypes,
				STARTING_NODES,
			);

			if (!validation.isValid) {
				throw new WorkflowActivationError(
					`Workflow ${formatWorkflow(dbWorkflow)} has no node to start the workflow - at least one active trigger, poll trigger, webhook trigger, or schedule trigger node is required`,
					{ level: 'warning' },
				);
			}

			const additionalData = await WorkflowExecuteAdditionalData.getBase({
				workflowId: workflow.id,
				workflowSettings: dbWorkflow.settings,
			});

			let triggerCount = 0;
			await workflow.expression.acquireIsolate();
			try {
				if (shouldAddWebhooks) {
					added.webhooks = await this.addWebhooks(
						workflow,
						additionalData,
						'trigger',

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Add at least one trigger node (Schedule Trigger, Webhook, Polling Trigger, etc.) to the workflow before activating.
  2. Ensure the trigger node is enabled (not disabled) and its type is recognized as a trigger by n8n.
  3. If you only want manual execution, do not activate the workflow — run it via the Execute button or API instead.

Example fix

// before: no trigger
workflow.add(node({ type: 'Set' })).to(node({ type: 'Http' }));
// activation throws

// after
workflow.add(trigger({ type: 'Schedule Trigger' })).to(node({ type: 'Set' }));
Defensive patterns

Strategy: validation

Validate before calling

import { validateWorkflowHasTriggerLikeNode, STARTING_NODES } from 'n8n-workflow';

const result = validateWorkflowHasTriggerLikeNode(workflow.nodes, nodeTypes, STARTING_NODES);
if (!result.isValid) {
  throw new Error('Add a trigger node (Schedule/Webhook/Poll) before activating');
}

Type guard

function hasTriggerNode(nodes: { type: string; disabled?: boolean }[]): boolean {
  return nodes.some(n => isTriggerNodeType(n.type) && !n.disabled);
}

Try / catch

try {
  await activeWorkflowManager.add(workflowId, 'activate');
} catch (e) {
  if (e instanceof WorkflowActivationError && /no node to start/.test(e.message)) {
    // prompt user to add a trigger
    return { status: 400, message: 'Add a trigger node before activating' };
  }
  throw e;
}

Prevention

When it happens

Trigger: Activating a workflow whose only nodes are regular processing nodes (Set, HTTP Request, etc.) with no trigger; a workflow whose trigger node is disabled; a workflow built from a template that omitted the trigger; a workflow where the trigger node type is not in the STARTING_NODES set.

Common situations: Building a workflow and forgetting to add a trigger; disabling the only trigger then activating; importing a workflow that lost its trigger node; custom node types not registered as triggers.

Related errors


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/fb7e5ce06ea0254d. Report an issue: GitHub.