Mailgun to GoHighLevel, the zero downtime SOP
Keep templates, keep suppression, keep transactional on Mailgun if you want, rebuild marketing in GoHighLevel.
🏆 Start your Highlevel journey today
Objective
Move marketing email and automation from Mailgun to GoHighLevel in 7 days, protect deliverability, keep suppression intact, avoid list fatigue.
Scope
- In scope, Mailgun Mailing Lists, templates, basic segments, campaigns, webhooks, suppressions
- Out of scope, deep app transactional logic, keep that on Mailgun or your app SMTP
Roles
- Owner, approves DNS changes and final cutover
- Marketing ops, runs exports, imports, template rebuilds, workflow logic
- Dev or admin, DNS, webhooks, store connections
Prerequisites
- GoHighLevel account ready
- Access to DNS, SPF, DKIM, DMARC
- Exports from Mailgun, contacts, lists, suppressions, any campaign metadata
- If ecommerce, Stripe connected, or Shopify or WooCommerce connected
Timeline and tasks
Day 0, sender domain and plan
- Create a dedicated sending subdomain, for example mail.yourbrand.com
- Add SPF, DKIM, DMARC in DNS, verify inside GoHighLevel
- Pick your path, keep Mailgun as custom SMTP in GoHighLevel for week 1, or send natively and warm cohorts
Day 1, export and field mapping
- From Mailgun, export contacts, list membership, variables if lists were used
- Export suppressions, unsubscribes, bounces, complaints
- Decide mapping, lists to tags, variables to custom fields, segments to Smart Lists
- Create missing custom fields in GoHighLevel, for example last_engaged_at, source, plan_tier
Day 2, import with proper suppression
- Import active contacts, map email, name, phone, fields, tags
- Import suppressions into a holding tag, for example tag, suppressed_email
- Run a one time Workflow, if tag suppressed_email then set Email DND true, then remove the tag
- Build Smart Lists that mirror your key segments, 90 day engaged, VIP, product owners, trials
Day 3, forms, pages, attribution
- Rebuild forms in GoHighLevel Forms, add hidden fields, utm_source, utm_medium, utm_campaign, gclid, wbraid, fbclid
- Recreate top landing pages in Funnels or Sites. If needed for one day, embed the old form, then replace it
- Confirm Payments or store connections for purchase events
Day 4, campaigns to Workflows
- Rebuild, Welcome, Lead magnet, Nurture, Promo, Reactivation, Post purchase
- Triggers to use, form submitted, tag added, purchase received, appointment status changed, Email Event opened or clicked
- Replace webhook branches with Workflow conditions. When you need external events, use Webhook actions to receive or send
- Add a preference center flow that updates fields and toggles Email DND based on choices
Day 5, templates and warmup
- Recreate templates in the GoHighLevel builder, header, footer, legal, unsubscribe, preferences
- If sending through Mailgun via custom SMTP inside GoHighLevel, send to recent clickers first, then openers, then 90 day engaged
- If sending with GoHighLevel native, use the same cohort warmup. Hold cold contacts for a re permission run
Day 6, cutover
- Swap all embedded forms and pages to GoHighLevel versions
- Pause Mailgun campaign jobs or cron tasks. Keep the account active for reporting for two to four weeks
- Turn on Google Ads offline conversions and Meta Conversions API from Workflows
Day 7, monitor and tighten
- Watch opens, clicks, replies, unsubscribes, complaints, bounce codes, attributed conversions
- Consolidate tags, standardize naming, lock Smart Lists and core Workflows
- Document DNS, list health, mapping, automations, and send thresholds for future hires
Mapping guide, Mailgun to GoHighLevel
Mailgun item | GoHighLevel target | Notes |
---|---|---|
Mailing Lists | Tags | Use prefixes, list_newsletter, list_buyers |
Variables | Custom fields | Mirror names one to one |
Segments or filters | Smart Lists | Recreate with tags, fields, dates, activity |
Campaigns | Workflows or Campaigns | Triggers, waits, conditions, goal checks |
Templates | Email Templates | Replace variables with merge fields or custom values |
Unsubs, bounces, complaints | Email DND | Import with a tag, flip DND via Workflow, then remove tag |
Webhooks, events | Workflow Webhook steps | Receive or push as needed |
Forms, site hooks | Forms, Surveys, Funnels, Sites | Add hidden UTMs and click IDs |
One audience strategy. Use tags and Smart Lists. Avoid duplicate lists.
Preference center, fast build
- Create a Profile Update form with checkboxes for topics and frequency
- On submit, update fields and tags, if full opt out, set Email DND true
- Send a confirmation email for audit trail
Deliverability checklist
- SPF, DKIM, DMARC pass, From domain matches the authenticated domain
- Warm by cohorts, recent clickers, then openers, then 90 day engaged
- Complaint rate under 0.1 percent, hard bounces under 2 percent
- Email Event filters scoped to each send inside Workflows
- Validate suppression, sample contacts on DND never receive mail
QA, acceptance, rollback
- QA, Smart List counts match old segments within 5 percent, template variables render correctly, preference form updates fields and DND
- Acceptance, first two sends hit target inbox placement and KPIs on the engaged cohort
- Rollback, if inboxing drops, send via Mailgun SMTP inside GoHighLevel, reduce volume, send only to last 30 day clickers, fix root cause before expanding
Common pitfalls and fixes
- Segment counts are off, align rolling windows, time zones, and last_engaged_at logic
- Branches on opens or clicks do not run, scope Email Event to the same message or campaign and extend waits
- Template variables break, map to GoHighLevel merge fields, seed test with sample data
- Reputation dip, keep Mailgun SMTP for week one, then migrate traffic gradually
About transactional email
Keep true transactional mail on Mailgun, receipts, OTPs, password resets. Run marketing and lifecycle from GoHighLevel. This separation protects reputation during warmup.
FAQ
Can I keep my suppression list
Yes. Import unsubscribes, bounces, and complaints with a suppression tag, then flip Email DND via a Workflow.
Can I keep sending through Mailgun during migration
Yes. Connect Mailgun as custom SMTP in GoHighLevel, warm cohorts, then switch to native sending later if you prefer.
How do I replace webhook automations
Use Workflow triggers and conditions. Add Webhook actions to receive or send app events.
Do I need to re confirm my list
No, if status and suppression are handled as above. Only new opt ins use your double opt in Workflow.
What about transactional email
Keep it on Mailgun. Send marketing from GoHighLevel. Cleaner reputation, cleaner warmup.