FlowGuardPre-deployment review for n8n
All reports

Workflow review

webhook_to_sheets

1 critical1 high1 medium2 low
Risk before
54 / 100
Risk after fixes
6 / 100
Findings
5
Fixed automatically
4 / 5

Needs a human decision (1)

FlowGuard could not apply these fixes safely, so the fixed workflow leaves them unchanged.

  1. Code · Rename to 'Normalise Submission Fields' or similar.

Findings

SeverityCategoryNodeIssue and fixStatus
criticalsecurityLog Submission

Postgres executeQuery uses inline n8n expressions ({{ $json.name }}, {{ $json.email }}, etc.) with no queryReplacement; user-supplied input can break out of the string literal and execute arbitrary SQL.

Fix: Replace inline expressions with $1, $2, $3, $4 positional parameters and set options.queryReplacement to the array of values.

Fixed
highreliabilityAppend to Sheet

Google Sheets node has no retryOnFail; transient Google API errors (rate limits, 503) will permanently lose the submission from the sheet.

Fix: Set retryOnFail: true, maxTries: 3, waitBetweenTries: 2000.

Fixed
mediumreliabilityForm Webhook

Webhook responds immediately (onReceived) before downstream Postgres and Sheets writes complete; a failure in Log Submission or Append to Sheet cannot be surfaced to the caller.

Fix: Change responseMode to 'lastNode' and add a Respond to Webhook terminal node, so errors can return a 500 to the form.

Fixed
lowdocsCode

Node still has the default name 'Code', making the workflow graph ambiguous.

Fix: Rename to 'Normalise Submission Fields' or similar.

Manual
lowdocs(workflow)

Workflow name 'My workflow 3' is a default placeholder, making it impossible to identify in the n8n workflow list.

Fix: Rename to 'Event Signup → Postgres + Sheets' or similar.

Fixed

Fixed workflow

criticalhighmediumlow
flowchart LR
    n0["Form Webhook"]
    n1["Normalise Submission Fields"]
    n2["Log Submission"]
    n3["Append to Sheet"]
    n4["Respond 200"]
    n0 --> n1
    n1 --> n2
    n2 --> n3
    n3 --> n4
    classDef red fill:#fdecea,color:#8a1c12,stroke:#d0402b,stroke-width:1.5px
    classDef orange fill:#fdf0e3,color:#7a3a06,stroke:#d9731a,stroke-width:1.5px
    classDef yellow fill:#fbf5dc,color:#5e4b05,stroke:#b8960f,stroke-width:1.5px
    classDef blue fill:#e8f0fb,color:#153e75,stroke:#3d74c4,stroke-width:1.5px
    classDef clean fill:#f6f7f9,color:#2b3139,stroke:#c3c8cf
    class n0 yellow
    class n1 clean
    class n2 red
    class n3 orange
    class n4 clean