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
- Windmill Pricing Deep Dive
- Make.com Pricing Structure
- n8n Enterprise Costs
- Hidden Fees Across All Three
- Building Your Cost Comparison Matrix
- Getting Started With Self-Hosted Options
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.