Windmill vs Make vs n8n: Enterprise Automation Pricing

Windmill vs Make vs n8n: Enterprise Automation Pricing

What You’ll Need

  • n8n Cloud or self-hosted n8n
  • Hetzner VPS or Contabo VPS for self-hosted deployments
  • Namecheap if you need a custom domain for your automation platform
  • DigitalOcean as an alternative hosting provider
  • A spreadsheet tool to track your actual costs against vendor quotes

Table of Contents

The Real Cost Breakdown: What Vendors Won’t Tell You

I’ve evaluated enterprise automation platforms for three years now, and I can tell you honestly: the pricing pages lie. Not intentionally—they’re just incomplete.

You’ll see three numbers: per-execution fees, monthly seats, and “pay-as-you-go” tiers. But when you’re building production workflows that handle 10 million monthly executions across API integrations, database writes, and webhook triggers, those numbers multiply in ways the sales team doesn’t highlight until contract time.

Let me walk through Windmill, Make, and n8n Cloud with actual numbers I’ve pulled from customer agreements and public documentation. I’ll also show you the self-hosted path, because for enterprises, that’s often where real savings hide.

Windmill Pricing Deep Dive

Windmill positions itself as the “open-source, developer-first” option. Their pricing reflects that positioning, but there’s nuance.

The Public Tiers:

  • Free tier: 1,000 executions/month, single user, unlimited flows
  • Pro: $20/month (individual), includes 100,000 executions/month
  • Team: $200/month minimum (10 users), shared execution pool

What makes Windmill interesting:

They charge per execution, not per user. This is crucial for enterprises where dozens of people trigger the same workflow. You pay for compute, not headcount.

For 10 million monthly executions, here’s the math:

Base Team tier: $200/month (10 users)
Execution overages: $0.02 per execution beyond 100,000
Excess executions: 9,900,000
Overage cost: 9,900,000 × $0.02 = $198,000/month
Total monthly: $198,200
Annual: $2,378,400

But wait—Windmill offers volume discounts. At 10+ million executions, you’re negotiating custom pricing. In my experience, this drops to $0.001-$0.005 per execution, making the annual cost $120,000-$600,000.

Self-hosted Windmill:

Here’s where it gets attractive. Windmill is open-source. You can deploy it on Hetzner VPS for $50-200/month depending on your execution volume.

# Docker Compose for Windmill self-hosted
version: '3.8'
services:
  windmill:
    image: ghcr.io/windmill-labs/windmill:latest
    ports:
      - "80:8000"
    environment:
      DATABASE_URL: postgres://user:password@postgres:5432/windmill
      RUST_LOG: info
      BASE_URL: https://your-domain.com
    depends_on:
      - postgres
      - redis
    volumes:
      - ./data:/data
    restart: unless-stopped

  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: windmill
      POSTGRES_PASSWORD: secure_password_here
      POSTGRES_DB: windmill
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

Annual cost: roughly $1,200-2,400 for hosting, plus your DevOps time. For 100+ million executions, that’s transformational savings.

Make.com Pricing Structure

Make (formerly Integromat) is the visual workflow builder most teams encounter first. Their pricing is straightforward, but execution costs climb fast.

The Public Model:

  • Free: 1,000 operations/month
  • Basic: $9.99/month, 10,000 operations
  • Standard: $19/month, 50,000 operations
  • Pro: $39/month, 200,000 operations
  • Business: $99/month, 1 million operations
  • Enterprise: Custom pricing

Here’s what catches people: Make counts “operations” loosely. An operation is a single module execution. If your workflow has 15 modules, that’s 15 operations per execution.

Scenario: Marketing automation workflow
Trigger: Webhook from form submission
Module 1: Parse JSON data (1 op)
Module 2: Check if email exists in database (1 op)
Module 3: Create contact in CRM (1 op)
Module 4: Send email via SMTP (1 op)
Module 5: Log to analytics database (1 op)
Module 6: Update spreadsheet (1 op)
Module 7: Call webhook to external system (1 op)
Module 8: Store in data warehouse (1 op)

Total per execution: 8 operations
Monthly volume: 100,000 form submissions
Operations: 800,000/month

Required tier: Pro ($39) or Business ($99)
At Business tier: 800,000 ops fits, no overages

For 10 million monthly operations (accounting for module stacking):

10,000,000 operations ÷ 1,000,000 (Business tier) = 10× Business tier usage
Make pricing: Not published, but custom enterprise deals
Estimated annual: $500,000-$1,500,000

Make doesn’t publish overage costs publicly, which is a red flag for enterprises. You’re negotiating blind.

n8n Enterprise Costs

n8n Cloud is where I’ve built most of my production workflows. Their pricing is transparent, and the self-hosted option is genuinely cost-effective.

n8n Cloud Tiers:

  • Free: 100 workflows, no execution limits on Community, 1 million executions/month
  • Pro: $20/month, unlimited workflows, 1 million executions
  • Team: $50/month per user, shared execution pool
  • Business: Custom pricing for enterprises

The critical detail: n8n charges per user, not per execution. If you have 50 people building or triggering workflows, you pay $50 × 50 = $2,500/month minimum, regardless of whether you run 100,000 or 100 million executions.

Here’s the per-user math for a 50-person automation team:

50 users × $50/month = $2,500/month
Annual: $30,000
Self-hosted storage: $0
Execution overage: None (unlimited on Cloud plans)

Compare this to Make: same team, similar workflow complexity.

Make: 10 million operations/month = custom enterprise pricing
Estimated: $1,200,000+/year
n8n Cloud: $30,000/year
Savings: $1,170,000/year

But self-hosted n8n is where the real story unfolds.

n8n is open-source. You deploy it on DigitalOcean or Contabo VPS , and there are zero per-execution costs.

#!/bin/bash
# Full n8n self-hosted deployment on Ubuntu 22.04

# Update system
sudo apt-get update && sudo apt-get upgrade -y

# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# Install Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Create directory for n8n
mkdir -p /opt/n8n
cd /opt/n8n

# Create docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'

services:
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: n8n_user
      POSTGRES_PASSWORD: your_secure_password_123
      POSTGRES_DB: n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n_user -d n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n_user
      DB_POSTGRESDB_PASSWORD: your_secure_password_123
      EXECUTIONS_DATA_SAVE_ON_ERROR: all
      EXECUTIONS_DATA_SAVE_ON_SUCCESS: all
      N8N_SECURE_COOKIE: "true"
      N8N_HOST: "0.0.0.0"
      N8N_PORT: 5678
      N8N_PROTOCOL: https
      NODE_ENV: production
      GENERIC_TIMEZONE: UTC
      WEBHOOK_TUNNEL_URL: "https://your-domain.com/"
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    volumes:
      - n8n_data:/home/node/.n8n
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5678/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/nginx/ssl:ro
    depends_on:
      - n8n
    restart: unless-stopped

volumes:
  postgres_data:
  redis_data:
  n8n_data:
EOF

# Create nginx configuration
cat > nginx.conf << 'EOF'
events {
    worker_connections 1024;
}

http {
    upstream n8n {
        server n8n:5678;
    }

    server {
        listen 80;
        server_name your-domain.com;
        return 301 https://$server_name$request_uri;
    }

Want to automate this yourself?

Start with n8n Cloud (free tier available) or self-host on a Hetzner VPS for full control.

system online