Featured Article

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

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

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 SituationRecommendation
< 5 Zaps, < 5k tasks/monthStay on Zapier (not worth migration effort)
5-15 Zaps, 5-20k tasks/monthConsider migration (break-even: 3-6 months)
15-50 Zaps, 20-100k tasks/monthStrong candidate (break-even: 1-2 months)
50+ Zaps, 100k+ tasks/monthMigrate immediately (break-even: 2-4 weeks)
Need data on your serversMigrate (regardless of cost)
No technical skills on teamMaybe 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 NameTriggerActionsTasks/MonthBusiness ImpactComplexityPriority
New lead to SheetsTypeformGoogle Sheets, Slack450CriticalLow1
Order to fulfillmentShopifyShipstation, Email850CriticalMedium1
Newsletter signupsWebsite formMailchimp120MediumLow2

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 Appn8n NodeNotes
GmailSend Email, IMAP EmailIMAP for receiving
Google SheetsGoogle SheetsSame
SlackSlackSame
MailchimpMailchimpSame
AirtableAirtableSame
WebhooksWebhookSame
FormatterCode, Date & Time, SetMultiple nodes
FilterIFMore powerful in n8n
PathsSwitch, IFMore flexible
ShopifyHTTP RequestUse Shopify API*
HubSpotHTTP RequestUse HubSpot API*
SalesforceHTTP RequestUse 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

I help entrepreneurs build self-running businesses with DashNex + automation. n8n automation expert specializing in e-commerce, affiliate marketing, and business systems.