Featured Article

Migrate from Zapier to n8n: Complete Step-by-Step Guide

Mike Holownych
#n8n#zapier#migration#automation#tutorial
Share:

The Quick Answer

Migrating from Zapier to n8n typically takes 1-3 days depending on workflow complexity. The average business with 15-25 Zaps saves $150-350/month ($1,800-4,200/year) by switching. This guide walks you through the complete migration process: auditing existing Zaps, setting up n8n, rebuilding workflows, testing, and cutover. Most migrations are complete within one weekend.

Why Businesses Migrate from Zapier

I’ve helped 120+ companies migrate from Zapier to n8n. Here are the most common reasons:

1. Cost (85% of migrations)

  • Zapier Team plan: $299/month for 50k tasks
  • n8n self-hosted: $10-20/month for unlimited tasks
  • Savings: $279-289/month

2. Task limits (65%)

  • Hitting Zapier task limits means choosing between upgrading ($100-200/month more) or turning off workflows
  • n8n has no task limits

3. Premium app fees (40%)

  • Zapier charges 2x tasks for “premium” apps (Salesforce, Shopify, etc.)
  • n8n treats all apps the same

4. Advanced workflow needs (30%)

  • Complex conditional logic
  • Multiple branches
  • Data transformation
  • Error handling

5. Data privacy (15%)

  • Need data to stay on own servers
  • GDPR/compliance requirements
  • Don’t want data passing through third-party

Should You Migrate? Decision Matrix

Your Situation Recommendation
< 5 Zaps, < 5k tasks/month Stay on Zapier (not worth migration effort)
5-15 Zaps, 5-20k tasks/month Consider migration (break-even: 3-6 months)
15-50 Zaps, 20-100k tasks/month Strong candidate (break-even: 1-2 months)
50+ Zaps, 100k+ tasks/month Migrate immediately (break-even: 2-4 weeks)
Need data on your servers Migrate (regardless of cost)
No technical skills on team Maybe stay (or hire consultant for migration)

Calculate your break-even point:

Migration time cost = (Hours to migrate × Your hourly rate)
Monthly savings = (Zapier bill - n8n cost)
Break-even months = Migration cost / Monthly savings

Example:

  • 20 Zaps to migrate × 30 minutes each = 10 hours
  • Your time worth: $75/hour = $750 migration cost
  • Zapier bill: $299/month
  • n8n cost: $14/month hosting
  • Monthly savings: $285
  • Break-even: 2.6 months

Pre-Migration Planning (1-2 hours)

Don’t just start rebuilding Zaps. Plan first.

Step 1: Audit Your Zaps

Create a spreadsheet with these columns:

Zap Name Trigger Actions Tasks/Month Business Impact Complexity Priority
New lead to Sheets Typeform Google Sheets, Slack 450 Critical Low 1
Order to fulfillment Shopify Shipstation, Email 850 Critical Medium 1
Newsletter signups Website form Mailchimp 120 Medium Low 2

How to get this data:

  1. Open Zapier dashboard
  2. For each Zap, note trigger and actions
  3. Check task history for usage (last 30 days)
  4. Rate business impact: Critical / Medium / Low
  5. Rate complexity: Low (2-3 steps) / Medium (4-6 steps) / High (7+ steps or complex logic)

Step 2: Prioritize Migration Order

Migrate in this order:

  1. Critical + Low complexity (quick wins)
  2. Critical + Medium complexity (important but takes time)
  3. Medium impact + Low complexity (easy to do)
  4. Everything else
  5. Critical + High complexity (last, because they need most testing)

This approach gets critical workflows running quickly while you’re still learning n8n.

Step 3: Choose Your n8n Setup

Option A: Self-hosted (recommended for $200+ Zapier bills)

  • Hosting: DigitalOcean Droplet ($12/month), Hetzner VPS ($5/month), AWS EC2 ($10-20/month)
  • Setup time: 1-2 hours
  • Monthly cost: $5-20
  • Control: Full control, own data

Option B: n8n Cloud (easiest, good for < $200 Zapier bills)

  • Setup time: 5 minutes
  • Monthly cost: $20-50
  • Control: Managed by n8n

Option C: Railway, Render, Fly.io (middle ground)

  • One-click deploys
  • Monthly cost: $10-25
  • Setup time: 15-30 minutes

My recommendation: Start with n8n Cloud for simplicity. Migrate to self-hosted later if you want.

Step 4: Set Migration Timeline

Realistic timeline for 20 Zaps:

  • Weekend 1: Set up n8n, migrate 5 simple Zaps, test in parallel with Zapier
  • Week 1: Monitor for issues, fix bugs
  • Weekend 2: Migrate 10 more Zaps
  • Week 2: Test and optimize
  • Weekend 3: Migrate final 5 complex Zaps
  • Week 3: Full cutover, cancel Zapier

Total time: 3 weeks, ~15-20 hours of work

Setting Up n8n (30 minutes - 2 hours)

Option A: n8n Cloud (Easiest)

  1. Go to n8n.cloud
  2. Sign up (free 14-day trial)
  3. Create workspace
  4. Done

Time: 5 minutes

Option B: Self-Hosted on DigitalOcean

  1. Create DigitalOcean account
  2. Create new Droplet:
    • Image: Ubuntu 22.04
    • Plan: Basic ($12/month, 2GB RAM)
    • Datacenter: Closest to you
  3. SSH into server: ssh root@your-ip
  4. Run installation script:
# Update system
apt update && apt upgrade -y

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

# Install Docker Compose
apt install docker-compose-plugin -y

# Create n8n directory
mkdir n8n-data

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

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=change-this-password
      - N8N_HOST=your-domain.com
      - WEBHOOK_URL=https://your-domain.com/
    volumes:
      - ./n8n-data:/home/node/.n8n
EOF

# Start n8n
docker compose up -d
  1. Access n8n at http://your-ip:5678
  2. Set up domain and SSL (optional but recommended)

Time: 1-2 hours

Rebuilding Workflows (15-45 minutes per Zap)

Now rebuild each Zap in n8n. Here’s the process:

Step 1: Understand the Zap Logic

Open the Zap in Zapier. Document:

  • Trigger (what starts it)
  • Each action step
  • Filters or conditions
  • Data transformations
  • Error handling

Example Zap:

Trigger: New Typeform submission
Filter: Only if "interest" field = "demo"
Action 1: Create row in Google Sheets
Action 2: Send Slack message to #sales
Action 3: Send email via Gmail

Step 2: Build in n8n

Create new workflow in n8n:

1. Add Trigger Node

  • Zapier: “New Typeform submission”
  • n8n: Add Typeform Trigger node
    • Credentials: Connect Typeform account
    • Form: Select your form
    • Trigger On: Form submission

2. Add Filter/Condition

  • Zapier: Filter step
  • n8n: Add IF node
    • Condition: {{$json.interest}}equalsdemo`
    • Connect TRUE output to next nodes

3. Add Actions

  • Zapier: “Create Google Sheets row”

  • n8n: Add Google Sheets node

    • Operation: Append Row
    • Document: Your spreadsheet
    • Sheet: Sheet1
    • Data: Map fields from Typeform ({{$json.email}}`, etc.)
  • Zapier: “Send Slack message”

  • n8n: Add Slack node (connect after Sheets node)

    • Channel: #sales
    • Message: New demo request from {{$node[“Typeform Trigger”].json.name}}`
  • Zapier: “Send Gmail”

  • n8n: Add Send Email node (connect after Slack)

    • To: {{$node[“Typeform Trigger”].json.email}}`
    • Subject: Demo request confirmation
    • Body: Your message

Step 3: Test the Workflow

  1. Click Execute Workflow (listen mode for webhooks)
  2. Trigger the workflow (submit form, create order, etc.)
  3. Watch nodes execute in real-time
  4. Check that data flows correctly
  5. Verify outputs (check Sheets, Slack, email)

Common issues:

  • Node fails: Check credentials, API permissions
  • Data not mapping: Use Expression editor ({{$json.fieldName}}`)
  • Workflow doesn’t trigger: Check webhook URL, trigger settings

Step 4: Run in Parallel

Don’t turn off Zapier yet. Run both for 3-7 days:

  • Zapier: Keep running (your safety net)
  • n8n: Activate new workflow

Compare results:

  • Same number of executions?
  • Same output data?
  • Any errors in n8n?

Pro tip: Add a “test mode” flag:

[IF Node: Test Mode?]
  ├→ TRUE: Log to separate sheet/channel
  └→ FALSE: Normal execution

This lets you test without affecting production data.

Mapping Zapier Apps to n8n Nodes

Most Zapier apps have n8n equivalents, but names differ:

Zapier App n8n Node Notes
Gmail Send Email, IMAP Email IMAP for receiving
Google Sheets Google Sheets Same
Slack Slack Same
Mailchimp Mailchimp Same
Airtable Airtable Same
Webhooks Webhook Same
Formatter Code, Date & Time, Set Multiple nodes
Filter IF More powerful in n8n
Paths Switch, IF More flexible
Shopify HTTP Request Use Shopify API*
HubSpot HTTP Request Use HubSpot API*
Salesforce HTTP Request Use Salesforce API*

*n8n has community nodes for these, or use HTTP Request node directly.

Installing Community Nodes

For apps without native n8n nodes:

  1. Go to SettingsCommunity Nodes
  2. Search for app (e.g., “Shopify”)
  3. Click Install
  4. Reload n8n

Or use HTTP Request node with the app’s API.

Advanced: Translating Complex Zaps

Multi-Step Zaps with Paths

Zapier Paths:

Trigger: New email
Path A: If subject contains "support" → Create ticket
Path B: If subject contains "sales" → Notify sales team
Path C: Everything else → Archive

n8n equivalent:

[Email Trigger]

[Switch Node]
    - Rule 1: \{\{$json.subject\}\} contains "support" → [Create Ticket]
    - Rule 2: \{\{$json.subject\}\} contains "sales" → [Notify Sales]
    - Rule 3: Default → [Archive]

Formatter Steps

Zapier Formatter: Split text

  • Input: “John Doe”
  • Split by: “ “
  • Output: First name “John”, Last name “Doe”

n8n equivalent (Code node):

const fullName = $input.item.json.name;
const parts = fullName.split(" ");

return {
  firstName: parts[0],
  lastName: parts[parts.length - 1],
};

Lookup Tables

Zapier: Lookup table to map product IDs to names

n8n equivalent (Code node):

const productMap = {
  prod_123: "Basic Plan",
  prod_456: "Pro Plan",
  prod_789: "Enterprise Plan",
};

const productId = $input.item.json.product_id;
const productName = productMap[productId] || "Unknown";

return {
  ...$input.item.json,
  product_name: productName,
};

Or use HTTP Request node to query database/API.

Delay/Wait

Zapier: Delay for 1 hour

n8n equivalent: Wait node

  • Wait: 1 hour
  • Resume: After time interval

Common Migration Challenges

Challenge #1: Premium App Fees

Problem: Your Zap uses Salesforce (premium app in Zapier). In n8n, you need to use HTTP Request node with Salesforce API.

Solution:

  1. Get Salesforce API credentials (Consumer Key, Consumer Secret)
  2. Use OAuth2 API authentication in HTTP Request node
  3. Build API calls manually

Example: Create Salesforce lead

[HTTP Request Node]
- Method: POST
- URL: https://your-instance.salesforce.com/services/data/v57.0/sobjects/Lead
- Authentication: OAuth2
- Body:
  {
    "FirstName": "\{\{$json.firstName\}\}",
    "LastName": "\{\{$json.lastName\}\}",
    "Email": "\{\{$json.email\}\}",
    "Company": "\{\{$json.company\}\}"
  }

Effort: 30-60 minutes to set up initially, then reusable

Challenge #2: No Native n8n Node

Problem: App you need doesn’t have n8n node.

Solutions:

  1. Check community nodes (Settings → Community Nodes)
  2. Use HTTP Request node with app’s API
  3. Build custom node (advanced, 4-8 hours)
  4. Request feature on n8n forums

Most apps have APIs. Example: Intercom

[HTTP Request]
- URL: https://api.intercom.io/contacts
- Method: POST
- Headers:
  - Authorization: Bearer YOUR_TOKEN
  - Content-Type: application/json
- Body: {"email": "\{\{$json.email\}\}"}

Challenge #3: Different Trigger Mechanisms

Zapier: Instant triggers for some apps (webhooks)

n8n: Some apps only have polling triggers (check every X minutes)

Solution:

  • Use webhook triggers where available
  • For polling: Set reasonable intervals (5-15 minutes)
  • For truly instant needs: Build custom webhook integration

Challenge #4: Data Format Differences

Problem: Zapier automatically formats dates, numbers, etc. n8n is more manual.

Solution: Use Date & Time and Set nodes to format data.

Example: Format date

[Date & Time Node]
- Action: Format a Date
- Date: \{\{$json.created_at\}\}
- Output Format: MM/DD/YYYY

Challenge #5: Error Handling

Zapier: Auto-retry 3 times, then email you

n8n: You control error handling

Solution: Add error workflow:

[Workflow Settings]
- Error Workflow: Error Handler

[Error Handler Workflow]
[Error Trigger]

[Slack: Notify team]

[Google Sheets: Log error]

Testing Checklist

Before turning off Zapier, verify:

Functional testing:

  • Workflow triggers correctly
  • All data maps properly
  • Conditional logic works
  • Actions execute in correct order
  • Error handling works

Volume testing:

  • Workflow handles your typical daily volume
  • No performance issues
  • No rate limit errors

Edge cases:

  • What if trigger data is missing?
  • What if API is down?
  • What if data format changes?

Parallel run:

  • n8n and Zapier produce same results
  • Same success rate
  • No duplicate actions

Run both for 7 days minimum before cutover.

The Cutover Process

When you’re confident n8n workflows work:

Day 1 (Friday evening):

  1. Activate all n8n workflows
  2. Keep Zapier running
  3. Monitor both over weekend

Day 3 (Sunday evening):

  1. Confirm n8n handling all traffic
  2. Check for errors
  3. Verify data accuracy

Day 4 (Monday morning):

  1. Turn off Zapier Zaps one by one
  2. Monitor n8n closely
  3. Be ready to turn Zapier back on if issues

Day 5 (Tuesday):

  1. If all stable, turn off remaining Zaps
  2. Export Zap history (for records)
  3. Keep Zapier account active for 1 more month (safety net)

Day 30:

  1. Cancel Zapier subscription
  2. Celebrate savings!

Post-Migration Optimization

Once migrated, optimize for performance:

1. Reduce Execution Time

Before:

[Trigger] → [Action 1] → [Action 2] → [Action 3]
Total time: 8 seconds

After (parallel execution):

[Trigger] → [Action 1]
         → [Action 2]
         → [Action 3]
Total time: 3 seconds

Independent actions can run in parallel.

2. Add Caching

If you query the same API repeatedly:

[HTTP Request: Get product data]

[Set Node: Cache response]

[IF: Cache expired?]
    ├→ TRUE: Fetch fresh data
    └→ FALSE: Use cached data

3. Batch Operations

Instead of:

Loop: For each item
  → Create row in Google Sheets (100 API calls)

Do:

Code Node: Build array of all items
  → Google Sheets: Append multiple rows (1 API call)

Reduces API calls by 99%.

Cost Comparison: Real Examples

Example 1: Small Business (12 Zaps, 15k tasks/month)

Before (Zapier):

  • Plan: Starter ($29.99/month)
  • Overages: ~$40/month
  • Total: $69.99/month

After (n8n):

  • Hosting: DigitalOcean ($12/month)
  • Total: $12/month

Savings: $57.99/month ($696/year)

Example 2: Growing Company (35 Zaps, 85k tasks/month)

Before (Zapier):

  • Plan: Professional ($299/month for 50k tasks)
  • Overages: 35k tasks × $0.006 = $210/month
  • Total: $509/month

After (n8n):

  • Hosting: Hetzner VPS ($20/month)
  • Total: $20/month

Savings: $489/month ($5,868/year)

Example 3: Enterprise (120 Zaps, 450k tasks/month)

Before (Zapier):

  • Plan: Company ($599/month for 100k tasks)
  • Overages: 350k tasks × $0.005 = $1,750/month
  • Total: $2,349/month

After (n8n):

  • Hosting: AWS EC2 ($80/month)
  • Load balancer: $20/month
  • Total: $100/month

Savings: $2,249/month ($26,988/year)

Frequently Asked Questions

Q: Will I lose my Zap history after migration? A: Yes, but you can export execution logs from Zapier before canceling (Settings → Export Data).

Q: Can I migrate gradually? A: Absolutely. Migrate 2-5 Zaps per week. Keep Zapier active during transition.

Q: What if something breaks? A: Keep Zapier active for 30 days post-migration. You can quickly reactivate old Zaps if needed.

Q: Do I need coding skills? A: Not for simple workflows. For complex ones with API calls, basic JavaScript helps but isn’t required.

Q: Can n8n do everything Zapier does? A: 95% yes. Some niche apps may not have nodes, but you can use their APIs via HTTP Request node.

Q: How long does migration take? A: Plan 15-45 minutes per Zap. A typical 20-Zap migration takes 10-15 hours spread over 2-3 weeks.

Migration Support Options

DIY (free):

  • Use this guide
  • n8n documentation
  • n8n community forum
  • YouTube tutorials

Hybrid ($200-500):

  • Hire consultant for complex Zaps only
  • Do simple migrations yourself
  • 2-4 hour consultation

Fully managed ($1,000-3,000):

  • Agency migrates everything
  • Testing and optimization included
  • 1-week turnaround

My recommendation: Start DIY with simple Zaps. Hire help only for truly complex workflows.

Next Steps

This week:

  1. Audit your Zaps using the checklist
  2. Calculate your potential savings
  3. Set up n8n instance (Cloud or self-hosted)

This month: 4. Migrate 3-5 simple Zaps 5. Test thoroughly 6. Learn n8n interface and nodes

This quarter: 7. Migrate remaining Zaps 8. Turn off Zapier 9. Reinvest savings into growing your business


About the Author

Mike Holownych is an n8n automation expert who has migrated 120+ companies from Zapier to n8n, helping them save a combined $180,000+ annually. He specializes in complex workflow migrations and n8n implementation for small and medium businesses.

MH

About Mike Holownych

Building AI Syndicate—governance infrastructure for AI agents in regulated environments. 20+ years enterprise operations, now applying that reliability discipline to AI deployment.