kipn.ai
Shared workflow report

Report 1 Newest

Analyzed

Executive Summary
n8n
Production RiskHigh

External call with no timeout configured — A single slow external call can block the entire workflow execution. At high trigger frequency, accumulated stuck executions can exhaust the n8n execution queue.

Cost ExposureHigh

AI node has no output token cap — Without a cap, models occasionally produce very long outputs — particularly when given an ambiguous or open-ended prompt. This increases cost unpredictably and can cause downstream parsing to fail if the consumer expects a bounded response.

47/ 100
Overall
Risk: HighCost: High
Reliability
0
Security
76
Cost Risk
22
Observability
100
AI Governance
100
Naming
97
Complexity
100
Nodes
25
Edges
24
External calls
LLM nodes
AI via HTTP
Loops
Error handlers
Unreachable
Max depth
Controls Matrix
Present Partial Missing
CheckDescriptionStatus
Failure Alerting

Failures silent — only visible in execution log

Missing
Retry on Failure

Transient failures cause permanent stops

Present
Request Timeouts

Slow providers can block execution indefinitely

Missing
Duplicate Prevention

Retry on write events creates duplicate records

Missing
Empty Response Handling

Zero-result lookups break downstream logic

Present
AI Output Limits

Output cost and parsing risk unbounded

2 of 6 AI nodes missing token cap

Partial
AI Output Format

Free-form output will break downstream parsers

2 of 6 AI nodes lack structured output

Partial
Activity Logging

Side effects unlogged

Present
Write Deduplication

Webhook replays may create duplicate records

Present
Break Points
1Missing timeoutRisk HighConfidence 90%7 nodes affected
Affected Nodes:
  • Scrape LinkedIn Posts via Apify
  • Analyze Trending Themes
  • Identify themes from posts
What happens:

A single slow external call can block the entire workflow execution. At high trigger frequency, accumulated stuck executions can exhaust the n8n execution queue.

Recommended Fix:

Set a timeout under the node's Additional Options. A value of 10,000–30,000 ms (10–30 seconds) is a reasonable starting point for most APIs; adjust based on the provider's documented SLA.


2Missing error handlerRisk HighConfidence 85%13 nodes affected
Affected Nodes:
  • Scrape LinkedIn Posts via Apify
  • Analyze Trending Themes
  • Identify themes from posts
What happens:

Operators cannot tell from external signals that a run failed. Silent failures go undetected until a downstream system shows missing data or a user reports a problem.

Recommended Fix:

Connect a dedicated Error Workflow in workflow settings, or add a per-node onError: "continueErrorOutput" path that sends an alert via Slack, email, or a logging service.


3Fragile expressionRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Create posts
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed — causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:

Replace deep property chains with optional chaining: $json.a?.b?.c. Guard array access: check $json.items?.length > 0 before $json.items[0]. Add fallback values: $json.field ?? 'default'. For $('NodeName') references: be aware that renaming the node breaks the expression silently.


4Fragile expressionRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Add LinkedIn posts to sheet
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed — causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:

Replace deep property chains with optional chaining: $json.a?.b?.c. Guard array access: check $json.items?.length > 0 before $json.items[0]. Add fallback values: $json.field ?? 'default'. For $('NodeName') references: be aware that renaming the node breaks the expression silently.


5Fragile expressionRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Add LinkedIn posts to sheet1
What happens:

These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed — causing a runtime error or silent null propagation at the point of the expression.

Recommended Fix:

Replace deep property chains with optional chaining: $json.a?.b?.c. Guard array access: check $json.items?.length > 0 before $json.items[0]. Add fallback values: $json.field ?? 'default'. For $('NodeName') references: be aware that renaming the node breaks the expression silently.


6No AI token capRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Analyze Trending Themes
What happens:

Without a cap, models occasionally produce very long outputs — particularly when given an ambiguous or open-ended prompt. This increases cost unpredictably and can cause downstream parsing to fail if the consumer expects a bounded response.

Recommended Fix:

Set maxTokens to a value appropriate for the task. Classification tasks rarely need more than 100 tokens; structured JSON output typically needs 200–500; long-form summaries may need 1,000–2,000. Start conservative and increase if needed.


7No AI token capRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Identify themes from posts
What happens:

Without a cap, models occasionally produce very long outputs — particularly when given an ambiguous or open-ended prompt. This increases cost unpredictably and can cause downstream parsing to fail if the consumer expects a bounded response.

Recommended Fix:

Set maxTokens to a value appropriate for the task. Classification tasks rarely need more than 100 tokens; structured JSON output typically needs 200–500; long-form summaries may need 1,000–2,000. Start conservative and increase if needed.

Run this analysis on your own workflows

Cost Hotspots

Currently covers AI/LLM nodes. Non-AI API costs will be added in a future update.

1Multiple cost risksHigh exposure40 pts2 nodes affected
Affected Nodes:
  • Analyze Trending Themes
  • Identify themes from posts
Cost risks:
  • Full payload in promptunbounded input tokens
  • No output capunbounded output tokens
  • Agent iteration riskno max iterations set
Recommended Fix:

Set maxTokens to a value appropriate for the task. Classification tasks rarely need more than 100 tokens; structured JSON output typically needs 200–500; long-form summaries may need 1,000–2,000. Start conservative and increase if needed.


2Agent iteration riskLow exposure10 pts2 nodes affected
Affected Nodes:
  • Create posts
  • Create posts1
What happens:

no max iterations set

Recommended Fix:

Set maxIterations to 10–20 for most agentic tasks. Monitor actual iteration counts in execution history and adjust up if legitimate tasks are being cut short.

Raw Findings (44)
#Issue titleIssue descriptionAffected nodes
1Cost RiskAI node has no output token cap

Node "Analyze Trending Themes" has no maxTokens or equivalent parameter set. Output length is controlled solely by the model.

Analyze Trending ThemesHigh85%
2Cost RiskAI node has no output token cap

Node "Identify themes from posts" has no maxTokens or equivalent parameter set. Output length is controlled solely by the model.

Identify themes from postsHigh85%
3ReliabilityExternal call with no timeout configured

Node "Scrape LinkedIn Posts via Apify" makes an external call with no timeout parameter set. The n8n execution will wait indefinitely if the provider is slow or unresponsive.

Scrape LinkedIn Posts via Apify, Analyze Trending Themes, Identify themes from posts, Anthropic Chat Model, Create posts, Anthropic Chat Model1, Create posts1High90%
4ReliabilityFinding: missing credentials

Analyze Trending Themes: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host)

Analyze Trending ThemesHigh80%
5ReliabilityFinding: missing credentials

Identify themes from posts: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host)

Identify themes from postsHigh80%
6ReliabilityFinding: missing credentials

Anthropic Chat Model: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host)

Anthropic Chat ModelHigh80%
7ReliabilityFinding: missing credentials

Create posts: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host)

Create postsHigh80%
8ReliabilityFinding: missing credentials

Anthropic Chat Model1: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host)

Anthropic Chat Model1High80%
9ReliabilityFinding: missing credentials

Create posts1: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host)

Create posts1High80%
10ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Create posts" contains expression(s) with risky patterns that assume fields are always present.

Create postsHigh85%
11ReliabilityNo error handler or failure notification path

Workflow has 13 high-risk nodes (external calls or writes) with no configured error workflow and no inline notification path. If a production execution fails, the failure only appears in execution history.

Scrape LinkedIn Posts via Apify, Analyze Trending Themes, Identify themes from posts, Anthropic Chat Model, Code in JavaScript, Create posts, Aggregate reddit posts from sheet, Set variables for text, Anthropic Chat Model1, Aggregate LinkedIn Posts, Edit Fields, Create posts1, Code in JavaScript1High85%
12Cost RiskAI agent has no iteration limit

Agent node "Analyze Trending Themes" has no maxIterations or equivalent parameter. The agent will continue calling tools until it decides to stop or hits a platform-level limit.

Analyze Trending ThemesMedium85%
13Cost RiskAI agent has no iteration limit

Agent node "Identify themes from posts" has no maxIterations or equivalent parameter. The agent will continue calling tools until it decides to stop or hits a platform-level limit.

Identify themes from postsMedium85%
14Cost RiskAI agent has no iteration limit

Agent node "Create posts" has no maxIterations or equivalent parameter. The agent will continue calling tools until it decides to stop or hits a platform-level limit.

Create postsMedium85%
15Cost RiskAI agent has no iteration limit

Agent node "Create posts1" has no maxIterations or equivalent parameter. The agent will continue calling tools until it decides to stop or hits a platform-level limit.

Create posts1Medium85%
16ReliabilityAI output drives downstream logic without a structured format

Node "Analyze Trending Themes" produces free-form text output that flows into downstream logic with no Output Parser or JSON mode configured.

Analyze Trending ThemesMedium75%
17ReliabilityAI output drives downstream logic without a structured format

Node "Identify themes from posts" produces free-form text output that flows into downstream logic with no Output Parser or JSON mode configured.

Identify themes from postsMedium75%
18ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Analyze Trending Themes" contains expression(s) with risky patterns that assume fields are always present.

Analyze Trending ThemesMedium75%
19ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Identify themes from posts" contains expression(s) with risky patterns that assume fields are always present.

Identify themes from postsMedium75%
20ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Set variables for text" contains expression(s) with risky patterns that assume fields are always present.

Set variables for textMedium85%
21ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Add LinkedIn posts to sheet" contains expression(s) with risky patterns that assume fields are always present.

Add LinkedIn posts to sheetMedium85%
22ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Create posts1" contains expression(s) with risky patterns that assume fields are always present.

Create posts1Medium75%
23ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Add LinkedIn posts to sheet1" contains expression(s) with risky patterns that assume fields are always present.

Add LinkedIn posts to sheet1Medium85%
24Cost RiskFull or large payload detected in AI prompt

Node "Analyze Trending Themes" receives text: large-payload keyword 'content' in its prompt parameter. This sends an unbounded amount of data to the model.

Analyze Trending ThemesMedium80%
25Cost RiskFull or large payload detected in AI prompt

Node "Identify themes from posts" receives text: large-payload keyword 'body' in its prompt parameter. This sends an unbounded amount of data to the model.

Identify themes from postsMedium80%
26NamingFinding: poor naming generic

1 node(s) use default/generic names.. Node "Edit Fields" (n8n-nodes-base.set) has a generic default name.

Edit FieldsLow90%
27SecurityFinding: sanitized sensitive data

Node "Scrape LinkedIn Posts via Apify" contains 2 sanitized placeholder value(s) — this workflow was previously sanitized; real values were stripped.. parameters.url. parameters.jsonBody

Scrape LinkedIn Posts via ApifyLow100%
28SecurityFinding: sanitized sensitive data

Node "Save Scraped Posts" contains 2 sanitized placeholder value(s) — this workflow was previously sanitized; real values were stripped.. parameters.documentId.cachedResultUrl. parameters.sheetName.cachedResultUrl

Save Scraped PostsLow100%
29SecurityFinding: sanitized sensitive data

Node "Get old Reddit posts" contains 2 sanitized placeholder value(s) — this workflow was previously sanitized; real values were stripped.. parameters.documentId.cachedResultUrl. parameters.sheetName.cachedResultUrl

Get old Reddit postsLow100%
30SecurityFinding: sanitized sensitive data

Node "Get old themes" contains 2 sanitized placeholder value(s) — this workflow was previously sanitized; real values were stripped.. parameters.documentId.cachedResultUrl. parameters.sheetName.cachedResultUrl

Get old themesLow100%
31SecurityFinding: sanitized sensitive data

Node "Append or update row in sheet" contains 2 sanitized placeholder value(s) — this workflow was previously sanitized; real values were stripped.. parameters.documentId.cachedResultUrl. parameters.sheetName.cachedResultUrl

Append or update row in sheetLow100%
32SecurityFinding: sanitized sensitive data

Node "Add LinkedIn posts to sheet" contains 2 sanitized placeholder value(s) — this workflow was previously sanitized; real values were stripped.. parameters.documentId.cachedResultUrl. parameters.sheetName.cachedResultUrl

Add LinkedIn posts to sheetLow100%
33SecurityFinding: sanitized sensitive data

Node "Get old themes1" contains 2 sanitized placeholder value(s) — this workflow was previously sanitized; real values were stripped.. parameters.documentId.cachedResultUrl. parameters.sheetName.cachedResultUrl

Get old themes1Low100%
34SecurityFinding: sanitized sensitive data

Node "Add LinkedIn posts to sheet1" contains 2 sanitized placeholder value(s) — this workflow was previously sanitized; real values were stripped.. parameters.documentId.cachedResultUrl. parameters.sheetName.cachedResultUrl

Add LinkedIn posts to sheet1Low100%
35ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Filter Recent Posts with Engagement" contains expression(s) with risky patterns that assume fields are always present.

Filter Recent Posts with EngagementLow75%
36ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Save Scraped Posts" contains expression(s) with risky patterns that assume fields are always present.

Save Scraped PostsLow75%
37ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Append or update row in sheet" contains expression(s) with risky patterns that assume fields are always present.

Append or update row in sheetLow75%
38ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Edit Fields" contains expression(s) with risky patterns that assume fields are always present.

Edit FieldsLow75%
39ReliabilityFinding: external without retry

Node "Analyze Trending Themes" (@n8n/n8n-nodes-langchain.agent) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_agent. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Analyze Trending ThemesInfo70%
40ReliabilityFinding: external without retry

Node "Identify themes from posts" (@n8n/n8n-nodes-langchain.agent) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_agent. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Identify themes from postsInfo70%
41ReliabilityFinding: external without retry

Node "Anthropic Chat Model" (@n8n/n8n-nodes-langchain.lmChatAnthropic) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_model_call. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Anthropic Chat ModelInfo70%
42ReliabilityFinding: external without retry

Node "Create posts" (@n8n/n8n-nodes-langchain.agent) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_agent. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Create postsInfo70%
43ReliabilityFinding: external without retry

Node "Anthropic Chat Model1" (@n8n/n8n-nodes-langchain.lmChatAnthropic) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_model_call. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Anthropic Chat Model1Info70%
44ReliabilityFinding: external without retry

Node "Create posts1" (@n8n/n8n-nodes-langchain.agent) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_agent. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Create posts1Info70%

Catch workflow risks before they catch you