Skip to content
Ops Log
Decision MemoAI & Automation28 July 202610 min read

Choosing a workflow engine: what a self-hosted n8n actually costs to run

A decision memo comparing Power Automate licence-and-request-ceiling pricing against the real running cost of a self-hosted n8n, with vendor list prices checked on 2026-07-28, the figures from one operated instance, and a break-even script you fill in with your own flow counts and operator hours.

MJ
Michal Jatczak
Founder, ITSailor

A self-hosted n8n has no licence line and a real bill. This memo sets the two cost shapes side by side, Power Automate priced per identity and rationed by a daily request ceiling, n8n priced per server and rationed by CPU, and ends with a break-even you compute from your own flow counts. The term that decides most of these comparisons is operator hours, which is the term most self-host plans set to zero. Sources: one operated instance and vendor documentation, checked 2026-07-28.

What the Power Automate meter charges

Microsoft's Power Automate pricing page, checked 2026-07-28, lists Premium at USD 15.00 per user per month billed yearly, Process at USD 150.00 per bot per month billed yearly, and Hosted Process at USD 215.00 per bot per month. The same page warns that the figures are shown for marketing purposes and may not reflect actual list price, so treat them as an order of magnitude and read your own price sheet or CSP quote.

Existing Power Automate Per-flow plan licences still run, but Microsoft's licensing deep-dive page classes them legacy and states they should not be renewed and should be replaced by Power Automate Process licences. The requests page names the entitlement "Power Automate Per-flow plan (legacy)". The Process capacity licence attaches to a cloud flow rather than to a person and requires the flow to sit inside a solution.

The figure that shapes an estate is the daily request ceiling, from Microsoft's Power Platform requests page.

Licence or entitlementWhat the ceiling is measured againstOfficial limit per 24 hoursTransition-period limit
Power Automate Premiumthe user, across all that user's cloud flows in the tenant40,000200,000 per cloud flow
Power Automate Processthe licence, allocated to one cloud flow250,000500,000 per licence
Power Automate Free, and Office 365 seeded rightsthe user6,00010,000 per cloud flow

Every organisation currently sits inside a transition period where the higher figures apply. Microsoft states that the official limits apply once admin-centre reporting reaches general availability and a further six months pass, so size against the official column. A separate five-minute ceiling of 100,000 requests applies regardless of licence.

Whose ceiling gets charged is the part that catches estates. Microsoft documents that automated and scheduled flows running in the background always use the limits of the owner of the process, irrespective of what started them or which connections they use, while instant flows use the limits of the account that started them. One heavy scheduled flow therefore spends a single named person's 40,000 requests, and every other flow that person owns queues behind it.

What one operated n8n instance costs

The measured half of this memo is a single instance. The ITSailor platform runs n8n at n8n.itsailor.io on one Hetzner CPX32 in Falkenstein, Ubuntu 24.04, reached through a Cloudflare Tunnel so the host exposes no inbound web port. Basis: ITSailor's Hetzner billing and server inventory, checked 2026-07-28. The combined monthly charge for that server and the BX11 storage box holding its backups is about EUR 20.49; a Directus stack shares the box.

Three properties matter more than the figure.

  • Community Edition. No n8n licence appears on the bill, and no plan-gated feature is in use.
  • A single main process. No queue mode, no worker fleet, no Redis, because the workload has never justified them.
  • An image tag pinned to an exact version rather than a moving one, so an upgrade is a deliberate act with a rollback target.

The estate is four workflows: an editorial pipeline, a weekly advisory-feed scout, an email notification path and a dormant Stripe webhook path. The figures above are evidence about a small self-hosted n8n and nothing more.

The licence line most self-host plans get wrong

n8n is not open source, and its own documentation says so. The Sustainable Use License is fair-code: source available, free to use and modify for internal business purposes, with redistribution limited to free non-commercial distribution. n8n's docs state that because Open Source Initiative licences cannot include limitations on use, n8n does not call itself open source, and files carrying ".ee." in the name sit under a separate n8n Enterprise License. A business case that writes "open source" loses that point on first read.

Plan gating shapes the cost table too. n8n's documentation states that source control and environments are "Available on Business and Enterprise plans." A plan that puts zero on the licence line and then prescribes Git-backed promotion through staging to production is describing two different products. On Community you have command-line export and import and the public REST API, which is a workable promotion path and a larger operator-hours line, not a smaller one.

Queue mode is where the infrastructure bill starts

Queue mode is n8n's horizontal scaling model. A main process serves the editor and webhook endpoints, Redis carries the job queue, and separate workers execute the runs. Main and workers must share one encryption key, and n8n's scaling documentation suggests worker concurrency of five or higher.

bash
# Shared by every node in the fleet, main and workers alike
export N8N_ENCRYPTION_KEY="<the main instance encryption key>"
export EXECUTIONS_MODE=queue
export QUEUE_BULL_REDIS_HOST=redis.internal
export QUEUE_BULL_REDIS_PORT=6379
export QUEUE_BULL_REDIS_PASSWORD="<redis password>"
export QUEUE_BULL_REDIS_TLS=true

# Workers only: a health endpoint the load balancer can poll
export QUEUE_HEALTH_CHECK_ACTIVE=true
export QUEUE_HEALTH_CHECK_PORT=5678

# One worker, pinned tag, at the documented concurrency
docker run --name n8n-worker-1 \
  --env-file /etc/n8n/worker.env \
  docker.n8n.io/n8nio/n8n:2.21.7 worker --concurrency=5

The line most cost tables omit sits in that last command. Each worker is a machine you pay for monthly, and at the volume where self-hosting is supposed to win, the worker fleet is the largest infrastructure line, ahead of Redis and the managed database. If the plan also calls for separate development, staging and production instances, multiply the whole stack by three before comparing it to a licence bill.

Data residency, for the EU operator

Power Automate is Power Platform rather than Microsoft 365, and its residency is a property of the environment. Microsoft's Power Platform regions page states that an environment created in the European Union and European Free Trade Association geography keeps its data within EU and EFTA member states.

The EU Data Boundary commitment has two conditions, and Microsoft is explicit that meeting only one places nothing inside the boundary: the tenant and all environments must sit in the EU and EFTA macro region geography, and the billing address must be in an EU Data Boundary country, a list that includes Malta. Microsoft also documents limited circumstances in which customer, personal and professional services data still leave the boundary. Those exceptions are what an auditor asks about when a DORA or NIS2 supplier answer claims EU processing.

A self-hosted n8n on an EU provider gives a shorter chain and hands you the whole obligation: the hosting processing agreement, the backup location, the log destination and the credential store all become yours to name and evidence.

Compute your own break-even

Microsoft's sizing guidance for Process capacity is actions per run multiplied by runs per day, and that product is the flow's daily Power Platform request count, to compare against the ceilings above. A worked example, on invented inputs, to show the method. Take a flow performing 40 actions per run and running 900 times a day: 40 multiplied by 900 is 36,000 requests per day. Two such scheduled flows owned by the same account total 72,000, above the 40,000 official Premium ceiling for that user. Split ownership across two Premium seats, or move one flow onto a Process licence, which also detaches it from the owner's entitlement. Power Platform request capacity add-ons raise a limit by 50,000 per 24 hours, but Microsoft notes they cannot be assigned to users or flows during the transition period.

No vendor publishes the self-hosted side, so it is cheaper only while infrastructure plus operator time stays below the licence cost it avoids.

bash
#!/usr/bin/env bash
set -euo pipefail
# Break-even between an avoided Power Automate bill and a self-hosted n8n fleet.
# Every input below is yours; none is a benchmark. Decimals are accepted.

PREMIUM_SEATS=0      # Premium seats you would otherwise buy
PROCESS_LICENCES=0   # Process licences, one per heavy cloud flow
VM_MONTHLY=0         # one VM per month, your provider's price
WORKERS=0            # worker VMs, beyond the main instance
SUPPORTING=0         # managed Postgres, Redis, object storage
OPERATOR_HOURS=0     # upgrade window, flow triage, credential rotation
OPERATOR_RATE=0      # your loaded hourly cost

# USD list prices, billed yearly, per Microsoft's pricing page on 2026-07-28.
# Arithmetic runs in awk. bash $(( )) is integer only, so a decimal price
# there yields a syntax error, a zero total and a confidently wrong verdict.
licence=$(awk -v s="$PREMIUM_SEATS" -v p="$PROCESS_LICENCES" 'BEGIN{printf "%.2f", s*15 + p*150}')
infra=$(awk -v w="$WORKERS" -v v="$VM_MONTHLY" -v s="$SUPPORTING" 'BEGIN{printf "%.2f", (w+1)*v + s}')
people=$(awk -v h="$OPERATOR_HOURS" -v r="$OPERATOR_RATE" 'BEGIN{printf "%.2f", h*r}')
selfhost=$(awk -v i="$infra" -v p="$people" 'BEGIN{printf "%.2f", i + p}')

echo "licence cost avoided : ${licence}"
echo "self-hosted cost     : ${selfhost} (infra ${infra} + people ${people})"
if awk -v a="$selfhost" -v b="$licence" 'BEGIN{exit !(a < b)}'; then
  echo "verdict: self-hosting is cheaper this month"
else
  echo "verdict: self-hosting is not cheaper this month"
fi

OPERATOR_HOURS decides the outcome, and it is the input nearly every self-host plan leaves at zero. Fill it from real work: the monthly upgrade window with a staging pass first, broken-flow triage, credential rotation, disk and backup checks. The automation ROI calculator takes the same shape of numbers for a finance reviewer.

Recommendation

  1. Microsoft-native work, a modest flow count and no platform engineer: Power Automate on Premium seats. Size the estate against the 40,000 official ceiling before purchase.
  2. A flow that must outlive its owner or run above one person's allowance: a Process licence allocated to that flow, inside a solution.
  3. Cross-stack work, an existing Git and review practice, and a named owner of the upgrade window: self-hosted n8n on Community, single main process, pinned image tag. Add queue mode once measured load forces it.
  4. A requirement for Git-backed promotion between environments: price the n8n Business or Enterprise plan in, or accept command-line and REST promotion and put those hours in the model.
  5. No one can be named for the upgrade window: do not self-host. That test settles more of these decisions than the cost table does.

Trade-offs

Power Automate trades money for a managed runtime and a mature processor position. You give up control of the daily ceiling, entitlement attaches to identities and licences rather than to machines, and on user licensing every seat that authors or triggers a premium-connector flow needs Premium. The exceptions are the Process licence above and seeded rights, which Microsoft documents as covering premium connectors only where the flow is in-context and associated with the application the licence came from.

Self-hosted n8n trades money for attention. The software licence is zero and the operational surface is entirely yours: upgrades, backups, certificate and credential rotation, queue depth, disk. The features that make a multi-environment practice comfortable sit behind the paid plans, so a Community deployment either stays simple or absorbs the promotion work by hand.

A third trade rarely gets priced: reversibility. Power Automate flows do not export into n8n, and n8n workflows do not import into Power Automate. Whichever way the decision goes, the exit is a rebuild, which argues for deciding on the shape of the work rather than on this month's licence total. Scoping that shape is what the workflow engineering service does.

Limitations, and where this does not apply

Prices here are vendor list figures in the vendor's published currency on 2026-07-28. Microsoft's pricing page warns they may not reflect actual list price for a given agreement, and n8n's plan prices change. Recheck both before a business case leaves the room.

The measured instance is one single-process Community deployment carrying four workflows on a shared host. Nothing in it validates queue mode, worker fleets or behaviour above a few thousand executions. Where this memo describes queue mode it is reading n8n's documentation; no operated fleet stands behind it, and no migration duration, engineering-hour count or payback period appears anywhere above.

This does not apply to desktop automation: attended and unattended bots, hosted machines and process mining have no n8n equivalent, and where that work is the requirement Power Automate wins without a comparison. It also stops applying where Dataverse is the system of record, where the compliance answer depends on Microsoft holding the processor obligations, or where the people building the automations do not write code.

Last verified 2026-07-28. Plan names, list prices and request ceilings checked against Microsoft's Power Automate pricing page, licence-types page, licensing deep-dive page and requests-limits page; residency against the EU Data Boundary and Power Platform regions documentation; licensing, plan gating and queue-mode configuration against n8n's own docs. Instance figures from ITSailor's Hetzner billing and server inventory, same date.

Sources and further reading

Was this field note useful?
Make the decision

Turn the trade-off into a scoped brief.

Share the constraints that differ in your environment. Michal will identify the next check needed before a delivery decision.

Start a scoped brief