Migrate from Zapier to n8n: Complete Step-by-Step Guide
Quick answer: Migrate 10 Zapier zaps to n8n in 2-3 hours. Save $240-600/year.
Here’s the complete migration plan.
Why Migrate?
Zapier costs:
- Professional: $240/year (750 tasks/month)
- Team: $1,248/year (2,000 tasks/month)
- Company: $5,988/year (50,000 tasks/month)
n8n costs:
- Self-hosted: $60/year (unlimited tasks)
- Cloud: $240/year (5,000 executions/month)
Savings: $180-5,928/year
Pre-Migration Checklist
✅ Document current Zapier zaps:
- List all active zaps
- Note trigger app and actions
- Understand business logic
- Identify dependencies
✅ Deploy n8n: Follow my n8n deployment guide
✅ Check app availability: Most popular apps work in n8n. Check n8n integrations.
✅ Plan downtime: Budget 2-3 hours for migration. Consider migrating zaps individually rather than all at once.
Step 1: Audit Your Zapier Account
Export zap list:
- Zapier Dashboard → Zaps
- Note each zap:
- Trigger: What starts it?
- Actions: What happens?
- Filters: Any conditions?
- Frequency: How often does it run?
Example inventory:
1. Google Forms → Google Sheets (Form responses)
2. Stripe → Slack (New customer alert)
3. Gmail → Trello (Email to task)
4. Schedule → SendGrid (Weekly report)
5. Typeform → Mailchimp (Add subscriber)
Step 2: Rebuild in n8n (One Zap at a Time)
Example Migration: Google Forms → Google Sheets
Zapier zap:
Trigger: New Google Forms response
Action: Add row to Google Sheets
n8n workflow:
1. Add "Google Forms Trigger" node
- Select form
- Test trigger
2. Add "Google Sheets" node
- Operation: Append
- Select spreadsheet
- Map fields:
- Email: \{\{$json.email\}\}
- Name: \{\{$json.name\}\}
- Timestamp: \{\{$json.timestamp\}\}
3. Test workflow
4. Activate
Time: 10-15 minutes per simple zap
Step 3: Common Zap Conversions
Zapier Filter → n8n IF Node
Zapier:
Only continue if Order Total > $100
n8n:
Add IF node
- Value 1: \{\{$json.order_total\}\}
- Operation: Larger
- Value 2: 100
Zapier Delay → n8n Wait Node
Zapier:
Delay for 1 day
n8n:
Add Wait node
- Amount: 1
- Unit: Days
Zapier Formatter → n8n Function Node
Zapier:
Format: Extract email domain
n8n:
const email = $json.email;
const domain = email.split('@')[1];
return [{ json: { domain } }];
Step 4: Handle Missing Apps
If app not available in n8n:
Option 1: HTTP Request Node
Most apps have APIs. Use HTTP Request node.
Example: Airtable (before native node existed)
HTTP Request node
- Method: POST
- URL: https://api.airtable.com/v0/BASE_ID/TABLE_NAME
- Headers:
- Authorization: Bearer YOUR_API_KEY
- Content-Type: application/json
- Body: JSON data
Option 2: Zapier Integration
n8n has a Zapier node! Keep some zaps in Zapier, trigger from n8n.
Option 3: Request Community Node
Check n8n community nodes or request one.
Step 5: Test Thoroughly
Testing checklist:
✅ Manual test (Execute Workflow button) ✅ Real trigger test (submit actual form, place test order) ✅ Edge cases (empty fields, large data, special characters) ✅ Error handling (what happens if API fails?) ✅ Notifications (are you getting expected alerts?)
Test for 1-2 days before deactivating Zapier zap.
Step 6: Run in Parallel
Don’t deactivate Zapier immediately!
Run both for 1 week:
- Zapier zap stays active
- n8n workflow also active
- Compare results daily
- Fix any discrepancies in n8n
After 1 week of perfect n8n performance: → Deactivate Zapier zap → Delete after 30 days (keep as backup)
Common Migration Issues
Issue: Webhook URLs Changed
Problem: Zapier webhook URL differs from n8n.
Solution:
- Update webhook URL in sending app
- Or use Zapier’s webhook as intermediary temporarily
- Or set up redirect from old webhook to new
Issue: Date Format Differences
Problem: Zapier formats dates as “MM/DD/YYYY”, n8n uses ISO8601.
Solution: Use Function node to convert:
const date = new Date($json.date);
const formatted = date.toLocaleDateString('en-US');
return [{ json: { date: formatted } }];
Issue: Missing Fields
Problem: Zapier auto-filled some fields, n8n doesn’t.
Solution: Add Set node to provide default values:
Set node
- phone: \{\{$json.phone || 'Not provided'\}\}
- country: \{\{$json.country || 'US'\}\}
Cost Savings Calculator
Small Business (10 zaps, 500 tasks/month)
Zapier Professional:
$19.99/month × 12 = $240/year
n8n Self-Hosted:
$5/month VPS × 12 = $60/year
Migration time: 3 hours @ $50/hour = $150
Total Year 1: $210
Savings Year 1: $30 Savings Year 2+: $180/year
Growing Business (25 zaps, 2,500 tasks/month)
Zapier Team:
$103.50/month × 12 = $1,242/year
n8n Self-Hosted:
$10/month VPS × 12 = $120/year (upgraded VPS)
Migration time: 8 hours @ $50/hour = $400
Total Year 1: $520
Savings Year 1: $722 Savings Year 2+: $1,122/year
Migration Timeline
Small setup (5-10 zaps):
- Day 1: Audit and document (1 hour)
- Day 2: Rebuild first 5 zaps (2 hours)
- Day 3: Rebuild remaining zaps (1 hour)
- Week 1: Test in parallel
- Week 2: Deactivate Zapier
Large setup (25+ zaps):
- Week 1: Audit and prioritize (4 hours)
- Week 2-3: Rebuild critical zaps (10 hours)
- Week 4: Rebuild remaining zaps (6 hours)
- Week 5-6: Test in parallel
- Week 7: Deactivate Zapier
Post-Migration Checklist
✅ All zaps converted to n8n workflows ✅ Tested for 1 week with no issues ✅ Error notifications configured ✅ Team trained on n8n interface ✅ Documentation updated ✅ Zapier account downgraded/cancelled
Keep Zapier free tier for 1-2 months as emergency backup.
FAQ
Q: Can I migrate gradually?
Yes! Migrate 1-2 zaps per week. No need to do all at once.
Q: What if migration goes wrong?
Keep Zapier active during testing. Easy to rollback.
Q: Do I need technical skills?
Basic understanding helps. If you built zaps in Zapier, you can handle n8n.
Q: How long does migration take?
10-15 minutes per simple zap. Complex zaps: 30-60 minutes.
Q: Will I lose data during migration?
No. Historical data stays in original apps. Only new triggers go to n8n.
Related:
About: I’m Mike Holownych. I help businesses migrate from Zapier to n8n. Learn more →
More Posts You'll Love
Based on your interests and activity