Monitoring for n8n, Make, Zapier and custom workflows

Automations don't fail loudly.
They just stop.

Tacet watches your workflows from outside your infrastructure — so when the machine running them goes down, the thing meant to report it is still up.

Fully external Nothing installed in your environment
Five questions Answered for every workflow run
Git-backed Every observation kept as an auditable record
15 minutes Default silence budget before an alert

The blind spot

A quiet week and a dead workflow look the same

Most monitoring tells you when something went wrong. Almost none of it tells you when something stopped happening at all.

The monitor dies with the host

If the thing watching your automation runs on the same machine, an outage takes both. You get no error message because there is nothing left running to send one.

Dashboards show what ran, not what didn't

A workflow that stopped triggering leaves no failed run to click on. It leaves nothing at all — which on a chart is indistinguishable from a genuinely quiet period.

Nobody can say what it costs

Model and API spend accrues per run, across several vendors, on several bills. Without a per-run record there is no honest way to answer which workflow is the expensive one.

How it works

Four steps, none of them inside your systems

Tacet reads run metadata through each platform's own API. It never sits in the execution path, so it cannot slow a workflow down or take one with it when it fails.

  1. 01

    Collect

    Emitters read run history from each platform's own API and from local hooks. Tacet records metadata — when, how long, what status — not the contents of your workflows.

    emitters/n8n_pull.py emitters/claude_hook.py
  2. 02

    Observe from outside

    Collection runs on separate infrastructure, on a schedule. It pulls everything newer than the last watermark and never assumes the observed machine is still alive.

    ops/ingest.py instances.json
  3. 03

    Fold

    Events fold into one immutable row per run, keyed by a deterministic ID. Collection can re-run as often as it likes and never double-counts a thing.

    obs/fold.py daily/YYYY-MM-DD.jsonl
  4. 04

    Report the silence

    Every source has a freshness budget. When a watermark stops advancing past that budget, Tacet names the system that went quiet — and how long ago it last spoke.

    ops/freshness.py ops/alert.py

Try it

Watch a workflow go quiet

Drag the slider to age a simulated outage. The workflow has stopped running — but it has not thrown an error, because nothing is running to throw one.

invoice-sync · run timeline --:--:-- UTC
0 min — healthy

In-process monitor Runs on the same host as the workflow

200 OK

No exceptions thrown. Last check passed.

uptime 4d 02h · checks 1,152 · errors 0

Alerts raised 0

Tacet Runs outside, on separate infrastructure

Fresh

Watermark advancing. Next collection on schedule.

last run 0 min ago · budget 15 min · run 9921e4

Alerts raised 0 — nothing to report

The five questions Tacet answers for every workflow

How often did it run? 24 today
Did it work? Success
How long did it take? 1.42 s
What did it cost? $0.0024
Did it go quiet? No

Cost accounting

A number appears only if it was measured

An estimate presented as a figure is worse than no figure at all, because it gets quoted. Tacet reports what it counted and is explicit about the rest.

Nothing is estimated into place

No modelled averages, no filling gaps with a plausible figure. A run that cannot be priced is reported as unpriced — never quietly counted as zero.

Cache tokens are priced as cache tokens

A cached read costs a fraction of a fresh one; writing to cache costs more than a fresh one, and more again at longer retention. Flattening those into a single rate is how a bill gets overstated many times over.

A partial total says so, beside the number

If one line in the period can't be priced, the total carries that caveat where you read it — rather than silently excluding the line and looking complete.

Rates are allowed to expire

Introductory pricing has an end date. Past it, Tacet stops pricing that model and tells you — instead of carrying a stale rate forward and quietly understating the total.

Sample — spend by model, 30 days

Example
Example breakdown of model spend over thirty days, showing one unpriced line
Line Runs Cost
Input tokens 4,120 $38.60
Output tokens 4,120 $96.15
Cache reads 3,880 $11.90
Cache writes — 1 hour 612 $52.44
Runs with no model recorded 37 unpriced
Total 12,769 $199.09

Partial: 37 runs predate model recording and cannot be priced. They are reported here rather than counted as $0.00.

What you get

Four things, in plain language

Written to be read by whoever is on call — not only by the person who built the workflow.

Status page

One state word per system, the last failure by name, and who to escalate to. No log reading required.

Answers: is anything broken right now?

Silence alerts

When a system stops reporting past its freshness budget, you get a message naming it and how long it has been quiet.

Answers: what stopped, and when?

Cost ledger

Spend per run, per model and per workflow, with anything unmeasurable marked as such instead of rounded to zero.

Answers: which workflow is the expensive one?

Audit report

A written review of what your automations actually do, what they cost, and where they are quietly failing — with the evidence behind every claim.

Answers: what is really going on in here?

Find out what your automations are actually doing

An audit takes your existing workflows as they are. Nothing is installed in your environment, and nothing changes until you decide it should.