kipn.ai
Shared workflow report

Daily Viral Content Radar Pro (AnyAPI)

Analyzed

Executive Summary
n8n
Production RiskHigh

Fragile expression — likely to fail when production data shape differs from test data — 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.

Cost ExposureCritical

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.

Observability Gap

Side-effect node has no audit trail — If this action is disputed, replayed, or causes a data inconsistency, there is no structured record of what was sent, when, and with what data. Debugging requires cross-referencing n8n execution history with the external system's own logs.

51/ 100
Overall
Risk: HighCost: Critical
Reliability
0
Security
100
Cost Risk
45
Observability
84
AI Governance
100
Naming
100
Complexity
92
Nodes
34
Edges
28
External calls
11
LLM nodes
6
AI via HTTP
0
Loops
0
Error handlers
0
Unreachable
0
Max depth
11
Workflow Graph
Graph
34 nodes · 28 edges
100%
click a node to highlight its upstream & downstream paths
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

1 / 9 external nodes have timeout

Partial
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

1 of 6 AI nodes missing token cap

Partial
AI Output Format

Free-form output will break downstream parsers

1 of 6 AI nodes lack structured output

Partial
Activity Logging

Side effects unlogged

Missing
Write Deduplication

Webhook replays may create duplicate records

Present

Run this analysis on your own workflows

Break Points
1Fragile expressionRisk HighConfidence 85%1 node affected
Affected Nodes:
  • Save Niche
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:
  • In `columns.value.niche`, change {{ $json.output.niche }} to {{ $json?.output.niche }}.
  • In `columns.value.keywords`, change {{ ($json.output.searchTerms || []).join(', ') }} to {{ ($json?.output?.searchTerms || [])?.join(', ') }}.
  • In `columns.value.business`, change {{ $json.output.business }} to {{ $json?.output.business }}.
  • In `columns.value.audience`, change {{ $json.output.audience }} to {{ $json?.output.audience }}.

3Missing timeoutRisk MediumConfidence 90%8 nodes affected
Affected Nodes:
  • Extract Niche
  • Niche Model
  • Save Niche
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.


4Fragile expressionRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Extract Niche
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:
  • In `text`, change {{ $json.output.data.title }} to {{ $json?.output?.data?.title }}.

5Fragile expressionRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Write Script
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:
  • In `text`, change {{ $('Resolve Niche').item.json.niche }} to {{ $('Resolve Niche')?.item?.json?.niche }}.

6Missing error handlerRisk MediumConfidence 85%15 nodes affected
Affected Nodes:
  • Extract Niche
  • Niche Model
  • Niche Parser
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.


7No AI token capRisk MediumConfidence 85%1 node affected
Affected Nodes:
  • Extract Niche
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.


8Fragile expressionRisk MediumConfidence 75%1 node affected
Affected Nodes:
  • Email the Brief
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:
  • In `subject`, change {{ $json.niche }} to {{ $json?.niche }}.
  • In `message`, change {{ $json.html }} to {{ $json?.html }}.

9Retry without idempotencyRisk MediumConfidence 75%1 node affected
Affected Nodes:
  • Deep Scrape
What happens:

If the external service processes the first request but n8n receives a timeout or transient error, the retry sends a duplicate request. Depending on the service, this can create duplicate records, send duplicate emails, or charge a customer twice.

Recommended Fix:

Add an Idempotency-Key header (or equivalent for the target API) using a deterministic value derived from trigger data — for example, the order ID, event ID, or a hash of the request payload. This allows the API to recognize and deduplicate the retry.


10Fan-out without error handlingRisk MediumConfidence 70%5 nodes affected
Affected Nodes:
  • Split Terms
  • Combine Sources
  • Virality Analyst
What happens:

If any one branch fails or is slow, the downstream Merge node either hangs waiting for the branch or receives incomplete data. The error from the failed branch may not be clearly attributed in execution logs.

Recommended Fix:

Add error handling on each branch before the merge point. Consider whether it is acceptable for one branch failure to abort the others, or whether partial results should be passed forward with a failure flag.

Cost Hotspots

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

1Multiple cost risksHigh exposure40 pts1 node affected
Affected Nodes:
  • Extract Niche
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.


2Unfiltered pollLow exposure10 pts1 node affected
Affected Nodes:
  • Every Morning 8AM
What happens:

full dataset fetched on every run

Recommended Fix:

Add a time-based filter parameter using $now minus the trigger interval (e.g., updatedAfter: {{ DateTime.now().minus({ hours: 1 }).toISO() }}). Alternatively, track the last-processed timestamp in a database or workflow static data and filter to records newer than that point.


3Agent iteration riskLow exposure10 pts2 nodes affected
Affected Nodes:
  • Virality Analyst
  • Write Script
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 (32)
#Issue titleIssue descriptionAffected nodes
1Cost RiskAI node has no output token cap

Node "Extract Niche" has no maxTokens or equivalent parameter set. Output length is controlled solely by the model.

Extract NicheHigh85%
2ReliabilityExternal call with no timeout configured

Node "Extract Niche" makes an external call with no timeout parameter set. The n8n execution will wait indefinitely if the provider is slow or unresponsive.

Extract Niche, Niche Model, Save Niche, Read Niche, Virality Analyst, Analyst Model, Write Script, Script ModelHigh90%
3ReliabilityFragile expression — likely to fail when production data shape differs from test data

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

Extract NicheHigh85%
4ReliabilityFragile expression — likely to fail when production data shape differs from test data

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

Save NicheHigh85%
5ReliabilityFragile expression — likely to fail when production data shape differs from test data

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

Write ScriptHigh85%
6ReliabilityNo error handler or failure notification path

Workflow has 15 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.

Extract Niche, Niche Model, Niche Parser, Save Niche, Read Niche, Resolve Niche, Rank Top Viral, Virality Analyst, Analyst Model, Analyst Parser, Build Digest, Write Script, Script Model, Render HTML, Email the BriefHigh85%
7Cost RiskAI agent has no iteration limit

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

Extract NicheMedium85%
8Cost RiskAI agent has no iteration limit

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

Virality AnalystMedium85%
9Cost RiskAI agent has no iteration limit

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

Write ScriptMedium85%
10ReliabilityAI output drives downstream logic without a structured format

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

Write ScriptMedium75%
11ComplexityFinding: complexity nodes

Workflow contains 34 active nodes (threshold: >30 medium, >60 high, >100 critical).

Medium100%
12ReliabilityFragile expression — likely to fail when production data shape differs from test data

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

Virality AnalystMedium75%
13ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Email the Brief" contains expression(s) with risky patterns that assume fields are always present.

Email the BriefMedium75%
14Cost RiskFull or large payload detected in AI prompt

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

Extract NicheMedium80%
15ReliabilityHigh fan-out with external calls — partial failure risk at merge point

Workflow fans out into 3 parallel branches, each calling an external service. No per-branch error handling was detected before the merge point.

Split Terms, Combine Sources, Virality Analyst, Virality Analyst, Virality AnalystMedium70%
16ReliabilityRetry enabled on write operation without idempotency key

Node "Deep Scrape" has retry enabled on an operation detected as a likely write (HTTP method: POST). No idempotency header was found in the node configuration.

Deep ScrapeMedium75%
17Cost RiskScheduled workflow fetches all records with no incremental filter

Node "Read Niche" fetches all records with no time-based or incremental filter. Every execution retrieves the full dataset.

Every Morning 8AM, Read NicheMedium70%
18ObservabilitySide-effect node has no audit trail

Node "Save Niche" performs a write node: "save niche" (sideeffect: external_write) operation with no logging or audit trail detected downstream.

Save NicheMedium70%
19ObservabilitySide-effect node has no audit trail

Node "Email the Brief" performs a write node: "email the brief" (sideeffect: external_write) operation with no logging or audit trail detected downstream.

Email the BriefMedium70%
20ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "AnyAPI: Scrape Website" contains expression(s) with risky patterns that assume fields are always present.

AnyAPI: Scrape WebsiteLow75%
21ReliabilityFragile expression — likely to fail when production data shape differs from test data

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

TikTok TopLow75%
22ReliabilityFragile expression — likely to fail when production data shape differs from test data

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

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

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

Instagram ReelsLow75%
24ReliabilityFragile expression — likely to fail when production data shape differs from test data

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

X SearchLow75%
25ReliabilityFragile expression — likely to fail when production data shape differs from test data

Node "Log Viral Finds" contains expression(s) with risky patterns that assume fields are always present.

Log Viral FindsLow75%
26ReliabilityFinding: external without retry

Node "Extract Niche" (@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.

Extract NicheInfo70%
27ReliabilityFinding: external without retry

Node "Niche Model" (@n8n/n8n-nodes-langchain.lmChatOpenRouter) 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.

Niche ModelInfo70%
28ReliabilityFinding: external without retry

Node "Read Niche" (n8n-nodes-base.dataTable) is a read-only external call with no retry configured.. sideEffect: read_only, role: external_read. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures.

Read NicheInfo70%
29ReliabilityFinding: external without retry

Node "Virality Analyst" (@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.

Virality AnalystInfo70%
30ReliabilityFinding: external without retry

Node "Analyst Model" (@n8n/n8n-nodes-langchain.lmChatOpenRouter) 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.

Analyst ModelInfo70%
31ReliabilityFinding: external without retry

Node "Write Script" (@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.

Write ScriptInfo70%
32ReliabilityFinding: external without retry

Node "Script Model" (@n8n/n8n-nodes-langchain.lmChatOpenRouter) 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.

Script ModelInfo70%

Catch workflow risks before they catch you