no code chaos vs one powerful workflow

Self-Hosted n8n with OpenClaw: Why It Beats Zapier and Make

Self-hosted n8n beats Zapier and Make on cost, privacy and capability — but only when you stop treating it as “free Zapier” and start running it like infrastructure. The difference between a hobby instance that breaks every week and a production automation backbone is about four hours of correct setup.

I run n8n in production for client marketing stacks, usually alongside Mautic, Postal and a monitoring layer. Here is exactly how I do it, what it costs, and where the SaaS alternatives genuinely still win.

The real cost comparison

Zapier and Make price by task and operation. n8n on a VPS prices by server. Those are not the same curve.

Monthly tasks Zapier Make (Core) n8n Cloud n8n self-hosted
1,000 ~$20 ~$9 ~$20 ~$6 (VPS share)
10,000 ~$80 ~$18 ~$50 ~$6
50,000 ~$350 ~$49 ~$150 ~$12 (bigger VPS)
250,000 ~$1,500+ ~$190 ~$500+ ~$25
1,000,000 Negotiate hard ~$700 Enterprise ~$40–60

Two honest caveats. First: n8n counts a “execution” per workflow run, not per step — so a 20-step workflow is one execution on self-hosted, but 20 operations on Make. Second: the VPS number ignores your time. If you have never administered a Linux box, add real hours — or budget for a professional setup.

Deploying n8n properly

Docker Compose baseline

# /opt/n8n/docker-compose.yml
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    ports: ["127.0.0.1:5678:5678"]
    environment:
      N8N_HOST: automation.yourdomain.com
      N8N_PROTOCOL: https
      WEBHOOK_URL: https://automation.yourdomain.com/
      GENERIC_TIMEZONE: Africa/Casablanca
      N8N_ENCRYPTION_KEY: ${ENCRYPTION_KEY}
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: n8n-postgres
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: ${DB_PASS}
      EXECUTIONS_DATA_PRUNE: "true"
      EXECUTIONS_DATA_MAX_AGE: "336"        # 14 days
      N8N_RUNNERS_ENABLED: "true"
      OUTBOUND_HTTP_PROXY: ""
    volumes:
      - n8n_data:/home/node/.n8n
      - /etc/localtime:/etc/localtime:ro
    depends_on: [n8n-postgres]

  n8n-postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      POSTGRES_DB: n8n
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: ${DB_PASS}
    volumes: ["pg_data:/var/lib/postgresql/data"]

volumes:
  n8n_data:
  pg_data:
The one mistake that destroys installs: losing N8N_ENCRYPTION_KEY. Every stored credential becomes undecryptable — not resettable, undecryptable. Generate it once, store it in a password manager, and back it up with the DB. If n8n auto-generates it for you, write it down immediately.

Four settings everyone skips

  • Postgres, not SQLite. SQLite is fine for one workflow on your laptop. The moment you have webhooks and cron firing concurrently, it locks. Postgres from day one.
  • WEBHOOK_URL must be your public HTTPS URL, not the container address. Wrong value = webhooks that test fine locally and 404 in production.
  • Bind to 127.0.0.1 and put Caddy/nginx/Traefik in front for TLS. Never expose 5678 directly with basic auth as your only defence.
  • Prune execution data. Default retention will eat your disk and slow the UI. 14 days is a good balance; keep errors longer.

Queue mode when you outgrow one process

If workflows start queueing behind each other, switch to worker mode:

EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=n8n-redis
QUEUE_HEALTH_CHECK_ACTIVE=true
# main container: N8N_ROLE=main    worker container: N8N_ROLE=worker

On my own stack, running queue mode with a dedicated worker on Redis DB 2 keeps long-running AI workflows from blocking webhook responses. That matters when a client form post needs to answer in under two seconds.

What to automate first

The highest ROI is not exotic AI demos. It is the boring glue that currently costs you manual minutes every day.

Marketing stack (pairs with Mautic + Postal)

  • Bounce and complaint handling. Postal webhook → n8n → update contact in Mautic and tag the segment. List hygiene stops being a chore.
  • Lead routing. Form submission → enrich → score → create contact in CRM → Slack/Telegram alert to sales with context.
  • Re-engagement. Nightly cron pulls non-openers from the last 60 days and queues a win-back campaign.

Business operations

  • Invoice to sheet. Email received with PDF attachment → parse → append row → notify on Telegram.
  • Support triage. Incoming email → classify intent with an LLM → label → assign → draft a reply for human approval.
  • Content pipeline. Notion/Airtable row marked “ready” → generate variants → post → log the URL back.

Infrastructure hygiene

  • Backup verification, not just backup execution — restore into a scratch DB and assert row counts.
  • Certificate expiry checks with escalating alerts at 21/14/7 days.
  • Disk pressure self-heal: alert, then run a vetted cleanup workflow automatically.

Where OpenClaw fits: agents, not workflows

n8n is deterministic. Great — determinism is why you can trust it with money and customer data. But deterministic tools are clumsy when the task is “read this messy inbox and decide what matters.”

That is the gap an agent framework fills. OpenClaw runs as a persistent assistant with its own workspace, memory files, scheduled tasks, subagents and tool access — messaging channels, shell, browser, MCP servers. Where n8n excels at “when X happens, run steps 1-2-3”, OpenClaw handles “keep an eye on this, judge it, and act”.

The practical split I use

Need Use Why
Trigger → fixed steps → integration n8n Auditable, retryable, visual, cheap
Human-in-the-loop approval before an action n8n (wait nodes) Explicit pause, clear state
Ambiguous input needing judgement OpenClaw Reasoning + tool choice per situation
Scheduled checks with adaptive timing OpenClaw Tightens or backs off based on activity
Conversational interface over your stack OpenClaw Telegram/WebChat as an admin surface
Anything touching money or bulk email n8n You want a log, not a judgement call

They are not competitors. My favourite pattern is n8n calling an OpenClaw agent turn for the fuzzy middle step, then n8n performing the deterministic write. The agent decides; the workflow executes and records.

The other direction works too: n8n exposes an MCP server, so an OpenClaw agent can list, edit and publish workflows as tools. That is how you get “check my automations and tell me why yesterday’s campaign did not send” without writing a dashboard.

The honest limits of self-hosting

  • You are the SLA. When n8n Cloud has a bad day, their team fixes it. When yours does, it is 11pm and you are reading Docker logs. Factor that into the “savings”.
  • Community nodes vary wildly. Some are superb; some are abandoned and break on upgrade. Pin versions, test upgrades on a staging copy.
  • Data center / AI nodes cost real money — LangChain-style nodes with large documents can hammer CPU. Run them on a worker, not the main process.
  • Upgrade is your job. n8n ships fast. Semantic version bumps occasionally change node behaviour. Read the changelog before touching production.

Still cheaper than Zapier at almost any volume — as long as someone is accountable for the box.

Want this running without doing it yourself?

I deploy n8n and OpenClaw on your VPS: Postgres, TLS, webhook URLs, backups, monitoring, and working automations wired to your existing tools — plus an agent layer you can talk to on Telegram.

Book the OpenClaw / AI agent setup →

Need the marketing stack too? target=”_blank” rel=”noopener”>Mautic + Postal deployment →

Frequently asked questions

Is self-hosted n8n really free?

The software is free under the fair-code Sustainable Use License. You pay for the server, and for your time. The licence restricts offering n8n itself as a competing hosted service — running it for your own business or for a client’s infrastructure is fine.

What size VPS do I need?

2 vCPU / 4 GB handles most marketing automation comfortably. Add a worker container before you add CPU. If you run heavy AI/data-centre nodes, separate that container out.

Can n8n replace Mautic?

No — they overlap less than people assume. Mautic owns contacts, segments, scoring and campaign state over months. n8n owns point-in-time glue. Best stacks use both: n8n moves data in and out of Mautic, Mautic stays the source of truth for the audience.

How do I keep webhooks secure?

Random path + a header token checked in a first node + IP allowlist where the sender has stable IPs. For anything sensitive, mutual TLS or a signed payload you verify before acting.

Do I need both n8n and OpenClaw?

If your work is “app A to app B on trigger”, n8n alone is enough. If you want an assistant that monitors, judges, remembers context and acts on your infrastructure conversationally, add OpenClaw. Most of my client stacks end up with both.

Job Hunting?

Apply Here

15987