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.
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.
| Check | Description | Status |
|---|---|---|
| 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 |
- Scrape LinkedIn Posts via Apify
- Analyze Trending Themes
- Identify themes from posts
A single slow external call can block the entire workflow execution. At high trigger frequency, accumulated stuck executions can exhaust the n8n execution queue.
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.
- Scrape LinkedIn Posts via Apify
- Analyze Trending Themes
- Identify themes from posts
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.
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.
- Create posts
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.
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.
- Add LinkedIn posts to sheet
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.
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.
- Add LinkedIn posts to sheet1
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.
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.
- Analyze Trending Themes
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.
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.
- Identify themes from posts
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.
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
Currently covers AI/LLM nodes. Non-AI API costs will be added in a future update.
- Analyze Trending Themes
- Identify themes from posts
- Full payload in prompt — unbounded input tokens
- No output cap — unbounded output tokens
- Agent iteration risk — no max iterations set
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.
- Create posts
- Create posts1
no max iterations set
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.
| # | Issue title | Issue description | Affected nodes | |||
|---|---|---|---|---|---|---|
| 1 | Cost Risk | AI node has no output token cap | Node "Analyze Trending Themes" has no | Analyze Trending Themes | High | 85% |
| 2 | Cost Risk | AI node has no output token cap | Node "Identify themes from posts" has no | Identify themes from posts | High | 85% |
| 3 | Reliability | External 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 posts1 | High | 90% |
| 4 | Reliability | Finding: missing credentials | Analyze Trending Themes: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host) | Analyze Trending Themes | High | 80% |
| 5 | Reliability | Finding: missing credentials | Identify themes from posts: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host) | Identify themes from posts | High | 80% |
| 6 | Reliability | Finding: missing credentials | Anthropic Chat Model: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host) | Anthropic Chat Model | High | 80% |
| 7 | Reliability | Finding: missing credentials | Create posts: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host) | Create posts | High | 80% |
| 8 | Reliability | Finding: missing credentials | Anthropic Chat Model1: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host) | Anthropic Chat Model1 | High | 80% |
| 9 | Reliability | Finding: missing credentials | Create posts1: credentialsPresent=false. ai_languageModel sub-node checked for credentials (not the host) | Create posts1 | High | 80% |
| 10 | Reliability | Fragile 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 posts | High | 85% |
| 11 | Reliability | No 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 JavaScript1 | High | 85% |
| 12 | Cost Risk | AI agent has no iteration limit | Agent node "Analyze Trending Themes" has no | Analyze Trending Themes | Medium | 85% |
| 13 | Cost Risk | AI agent has no iteration limit | Agent node "Identify themes from posts" has no | Identify themes from posts | Medium | 85% |
| 14 | Cost Risk | AI agent has no iteration limit | Agent node "Create posts" has no | Create posts | Medium | 85% |
| 15 | Cost Risk | AI agent has no iteration limit | Agent node "Create posts1" has no | Create posts1 | Medium | 85% |
| 16 | Reliability | AI 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 Themes | Medium | 75% |
| 17 | Reliability | AI 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 posts | Medium | 75% |
| 18 | Reliability | Fragile 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 Themes | Medium | 75% |
| 19 | Reliability | Fragile 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 posts | Medium | 75% |
| 20 | Reliability | Fragile 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 text | Medium | 85% |
| 21 | Reliability | Fragile 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 sheet | Medium | 85% |
| 22 | Reliability | Fragile 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 posts1 | Medium | 75% |
| 23 | Reliability | Fragile 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 sheet1 | Medium | 85% |
| 24 | Cost Risk | Full 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 Themes | Medium | 80% |
| 25 | Cost Risk | Full 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 posts | Medium | 80% |
| 26 | Naming | Finding: poor naming generic | 1 node(s) use default/generic names.. Node "Edit Fields" (n8n-nodes-base.set) has a generic default name. | Edit Fields | Low | 90% |
| 27 | Security | Finding: 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 Apify | Low | 100% |
| 28 | Security | Finding: 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 Posts | Low | 100% |
| 29 | Security | Finding: 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 posts | Low | 100% |
| 30 | Security | Finding: 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 themes | Low | 100% |
| 31 | Security | Finding: 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 sheet | Low | 100% |
| 32 | Security | Finding: 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 sheet | Low | 100% |
| 33 | Security | Finding: 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 themes1 | Low | 100% |
| 34 | Security | Finding: 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 sheet1 | Low | 100% |
| 35 | Reliability | Fragile 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 Engagement | Low | 75% |
| 36 | Reliability | Fragile 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 Posts | Low | 75% |
| 37 | Reliability | Fragile 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 sheet | Low | 75% |
| 38 | Reliability | Fragile 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 Fields | Low | 75% |
| 39 | Reliability | Finding: 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 Themes | Info | 70% |
| 40 | Reliability | Finding: 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 posts | Info | 70% |
| 41 | Reliability | Finding: 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 Model | Info | 70% |
| 42 | Reliability | Finding: 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 posts | Info | 70% |
| 43 | Reliability | Finding: 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 Model1 | Info | 70% |
| 44 | Reliability | Finding: 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 posts1 | Info | 70% |