Self-hosted · Works with n8n Community & Cloud

Green doesn't mean working.

Your n8n workflow ran. n8n says success. But did the sync actually move the customers? OutcomeGuard watches outcomes, not executions — so you hear about the failure at 03:01, not three days later from a customer.

n8n execution history vs. OutcomeGuard
customer-sync — success — 12s — today 03:00
customer-sync — success — 9s — yesterday 03:00
customer-sync — success — 11s — 2 days ago
n8n sees three successes. Everyone goes home.
OutcomeGuard: input=500 processed=0 rejected=0 — conservation violated
🔴 ALERT → Discord: sync has processed nothing for 3 runs

No subscription · No telemetry · 14-day refund · 5-minute deploy

The blind spot

Execution monitors watch the process.
We watch what it was for.

0
records synced
three nights running

Last night your customer sync ran on schedule. Green check. Execution log: success. The upstream API had quietly changed its response shape — so the workflow did nothing, and reported success, because nothing errored.

Every monitoring tool built on execution state says everything is fine. Your customers disagree. OutcomeGuard evaluates the outcome contract — the counts, rates, and invariants your business actually depends on — and alerts the moment they break.

Three ways to watch

Pick your paranoia level.

Use one, two, or all three per workflow. They compose.

📊
Outcome contracts

Counts that must reconcile

Your workflow's last node reports its numbers. OutcomeGuard checks the math: processed ≥ 1, input = processed + rejected, required fields present. Catches "green but did nothing" before your customers do.

💚
Dead-man switch

Heartbeats

When an expected check-in doesn't arrive — deactivated workflow, broken schedule, dead instance — the alert fires within your grace window, not three days later.

🛰️
Zero workflow changes

Passive watch

Read-only API polling catches deactivated workflows, error runs, executions stuck "running" for hours, and schedules that stopped firing. Your n8n key never leaves your network.

Deployment

Boring on purpose.

One Docker container, one YAML file. If deployment is exciting, the product has failed.

# from the ZIP you download
$ cp config.example.yml config.yml
$ cp .env.example .env && $EDITOR .env
$ docker compose up -d
$ curl localhost:8080/healthz
{"status": "ok"}

# that's the whole install
🗄️

Stores almost nothing

Timestamps, state, violation messages. No payloads, no credentials. One SQLite file you own.

🔒

Read-only by construction

The n8n client is GET-only — enforced in its own test suite. A write capability literally cannot compile in.

🔔

Alerts where you live

Discord, Slack, Telegram, or any webhook. Failure alerts, reminders, and recovery confirmation.

OutcomeGuard — outcome integrity shield
Why operators trust it

Built like it's guarding something.
Because it is.

OutcomeGuard was designed against a written threat model, not vibes. Every security claim on this page maps to a test in its suite — and the suite runs before every release.

GET-only n8n clientwrite paths are structurally impossible, verified by CI
No outbound callsno telemetry, no update pings, no analytics — inspect the source, it's 9 files
Non-root containeruid 65532, read-only filesystem, no-new-privileges, by default
Read the full threat model →
$39.00
once. yours forever. every v1.x update included.
Buy & Download — $39

Instant ZIP download · Self-hosted, works with n8n Community & Cloud · 14-day no-questions refund