Mailgun → SendGrid
Move sending domains and sender identities, spf, dkim, and dmarc alignment, suppressions, bounces, complaints, and unsubscribes, templates, versions, and layouts, api payloads and provider sdks, webhooks and event semantics, dedicated ips and warm-up state, inbound email routes from Mailgun to SendGrid with a reversible cutover, explicit exception ledger, and evidence-backed verification.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
Mailgun
- Flexible APIs, routing, validation, and regional infrastructure suit engineering-led email systems
- Audience, campaigns, automations, and reporting live in one publishing system
- Domain configuration, event handling, suppression behavior, and account regions require careful operation
- Automation logic, analytics history, and deliverability settings are not very portable
SendGrid
- High-volume email APIs, templates, marketing tools, dedicated IPs, and a broad ecosystem cover many sending models
- Audience, campaigns, automations, and reporting live in one publishing system
- Account reputation, subusers, suppression scopes, and product complexity require disciplined governance
- Automation logic, analytics history, and deliverability settings are not very portable
SendGrid: High-volume email APIs, templates, marketing tools, dedicated IPs, and a broad ecosystem cover many sending models. This removes a major source-side concern: Domain configuration, event handling, suppression behavior, and account regions require careful operation.
What you lose: Flexible APIs, routing, validation, and regional infrastructure suit engineering-led email systems. What you inherit: Account reputation, subusers, suppression scopes, and product complexity require disciplined governance.
Jump to a section
Know the shape of the move.
This timeline assumes
- Up to 50 sending domains, 10 million suppression records, 500 templates, and 100 event consumers
- Administrators control both Mailgun and SendGrid, including billing, identity, APIs, integrations, and export permissions.
- Mailgun remains intact and recoverable until SendGrid completes one representative operating cycle.
- A production-shaped pilot includes every object type, access class, edge case, and failure path.
- The migration team preserves stable source identifiers and records durable evidence for every blocking check.
What survives the move.
“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.
| Item | Outcome | Impact | What happens | Mitigation |
|---|---|---|---|---|
| Sending domains and sender identities | manual | critical | Domains, verified senders, return paths, tracking hosts, and regional endpoints require new verification. A successful bulk job therefore does not prove semantic parity between Mailgun and SendGrid. | Inventory and rebuild sending domains and sender identities, then test normal, edge, failure, and rollback behavior. |
| SPF, DKIM, and DMARC alignment | manual | critical | DNS records and alignment behavior change and must coexist safely during cutover. A successful bulk job therefore does not prove semantic parity between Mailgun and SendGrid. | Inventory and rebuild spf, dkim, and dmarc alignment, then test normal, edge, failure, and rollback behavior. |
| Suppressions, bounces, complaints, and unsubscribes | partial | critical | Suppression categories, scopes, timestamps, reasons, and wildcard behavior differ. A successful bulk job therefore does not prove semantic parity between Mailgun and SendGrid. | Map suppressions, bounces, complaints, and unsubscribes explicitly, pilot every feature class, and reconcile accepted, changed, rejected, and excluded items. |
| Templates, versions, and layouts | partial | high | Template languages, substitution syntax, reusable layouts, and version history require conversion. A successful bulk job therefore does not prove semantic parity between Mailgun and SendGrid. | Map templates, versions, and layouts explicitly, pilot every feature class, and reconcile accepted, changed, rejected, and excluded items. |
| API payloads and provider SDKs | manual | critical | Authentication, endpoint shape, personalization, attachments, scheduling, and error responses differ. A successful bulk job therefore does not prove semantic parity between Mailgun and SendGrid. | Inventory and rebuild api payloads and provider sdks, then test normal, edge, failure, and rollback behavior. |
| Webhooks and event semantics | manual | critical | Delivery, bounce, open, click, complaint, and retry events use different names and identifiers. A successful bulk job therefore does not prove semantic parity between Mailgun and SendGrid. | Inventory and rebuild webhooks and event semantics, then test normal, edge, failure, and rollback behavior. |
| Dedicated IPs and warm-up state | lost | critical | IP reputation and warm-up progress do not transfer between providers. A successful bulk job therefore does not prove semantic parity between Mailgun and SendGrid. | Archive dedicated ips and warm-up state as dated source evidence and define the new destination baseline. |
| Inbound email routes | manual | high | Inbound domains, parsing, MIME behavior, storage, spam handling, and callbacks require reconstruction. A successful bulk job therefore does not prove semantic parity between Mailgun and SendGrid. | Inventory and rebuild inbound email routes, then test normal, edge, failure, and rollback behavior. |
| Message history and activity logs | partial | high | Retention windows and export coverage limit historical delivery evidence. A successful bulk job therefore does not prove semantic parity between Mailgun and SendGrid. | Map message history and activity logs explicitly, pilot every feature class, and reconcile accepted, changed, rejected, and excluded items. |
| Subusers, permissions, billing, and limits | manual | high | Accounts, API key scopes, quotas, rate limits, and billing ownership use provider-specific controls. A successful bulk job therefore does not prove semantic parity between Mailgun and SendGrid. | Inventory and rebuild subusers, permissions, billing, and limits, then test normal, edge, failure, and rollback behavior. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| Mailgun: Sending domains and sender identities | SendGrid: approved sending domains and sender identities representation | manual | Preserve source IDs, ownership, timestamps, access intent, and an explicit exception status for sending domains and sender identities. |
| Mailgun: SPF, DKIM, and DMARC alignment | SendGrid: approved spf, dkim, and dmarc alignment representation | manual | Preserve source IDs, ownership, timestamps, access intent, and an explicit exception status for spf, dkim, and dmarc alignment. |
| Mailgun: Suppressions, bounces, complaints, and unsubscribes | SendGrid: approved suppressions, bounces, complaints, and unsubscribes representation | transform | Preserve source IDs, ownership, timestamps, access intent, and an explicit exception status for suppressions, bounces, complaints, and unsubscribes. |
| Mailgun: Templates, versions, and layouts | SendGrid: approved templates, versions, and layouts representation | transform | Preserve source IDs, ownership, timestamps, access intent, and an explicit exception status for templates, versions, and layouts. |
| Mailgun: API payloads and provider SDKs | SendGrid: approved api payloads and provider sdks representation | manual | Preserve source IDs, ownership, timestamps, access intent, and an explicit exception status for api payloads and provider sdks. |
| Mailgun: Webhooks and event semantics | SendGrid: approved webhooks and event semantics representation | manual | Preserve source IDs, ownership, timestamps, access intent, and an explicit exception status for webhooks and event semantics. |
| Mailgun: Dedicated IPs and warm-up state | No destination | unsupported | Retain immutable source evidence; do not manufacture destination-native history. |
| Mailgun: Inbound email routes | SendGrid: approved inbound email routes representation | manual | Preserve source IDs, ownership, timestamps, access intent, and an explicit exception status for inbound email routes. |
| Mailgun: Message history and activity logs | SendGrid: approved message history and activity logs representation | transform | Preserve source IDs, ownership, timestamps, access intent, and an explicit exception status for message history and activity logs. |
Make the move recoverable.
Create the source-of-truth backup
Preserve Mailgun data, configuration, access, and operating evidence before any destination write.
- Export every available Mailgun object and binary in scope, including sending domains and sender identities, spf, dkim, and dmarc alignment, suppressions, bounces, complaints, and unsubscribes, templates, versions, and layouts.
- Capture configuration and runtime dependencies for api payloads and provider sdks, webhooks and event semantics, dedicated ips and warm-up state, inbound email routes.
- Record counts, sizes, owners, timestamps, access classes, financial totals where applicable, and known exceptions.
- Hash immutable exports, record tool versions and commands, and transform working copies only.
Proof to capture: A signed manifest accounts for every scoped record class, configuration object, binary, count, total, exception, and hash.
Identity, schema, and disposition registry
Preserve stable identity and make every mapping or exclusion reviewable.
- Inventory source types, identifiers, owners, states, and access.
- Define one approved destination representation or explicit archive decision.
- Reject unmapped critical items and produce an exception ledger.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Dependency-ordered migration package
Load prerequisite identities and configuration before dependent records and runtime actions.
- Normalize encoding, timestamps, identifiers, nulls, and destination limits.
- Run a representative pilot and retain request, response, and rejection evidence.
- Reconcile the final delta before enabling destination production writers.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
The things most likely to hurt.
These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.
A completed migration hides missing or altered sending domains and sender identities
Headline counts look plausible while semantic, access, or relationship checks fail.
- Consequence
- The destination becomes authoritative with incomplete or misleading business data.
- Mitigation
- Reconcile by type, state, owner, access class, and representative record rather than total count alone.
Stop if: Any critical item lacks a verified destination, approved transformation, explicit exclusion, or recoverable archive.
Mailgun and SendGrid both perform production actions
Users, schedules, webhooks, integrations, or traffic continue changing both systems.
- Consequence
- State diverges or customers receive duplicate, contradictory, or unsafe actions.
- Mitigation
- Freeze source writers and transfer one production owner at a time with an approved rollback.
Stop if: An unapproved source writer or destination duplicate action appears after the freeze.
Destination access or security is broader than approved
A representative restricted user can read, change, export, or trigger an unauthorized item.
- Consequence
- Confidential, regulated, financial, or security-sensitive data is exposed or changed.
- Mitigation
- Apply least privilege before bulk loading and test every access class using ordinary identities.
Stop if: Any unauthorized read, write, export, administrative action, or secret access succeeds.
Do the work in this order.
- Days 1–4 · inventory
Inventory and decisions
8–16 hours active2–4 days elapsedOwner, legal, security, and finance review waiting- Inventory Mailgun data, configuration, identities, integrations, limits, and billing.
- Approve scope, owners, mappings, exclusions, acceptance thresholds, and rollback authority.
Depends on: Mailgun and SendGrid administrator access
Stop / go checkpointExport?
Go when: Every critical item and production action has an owner and disposition.
Stop when: Authority, retention, billing, access, or system ownership is unclear.
- Days 3–8 · backup
Backup and reconcile
8–20 hours active2–5 days elapsedProvider export processing waiting- Create immutable data, configuration, binary, and audit exports.
- Reconcile source counts, totals, sizes, access classes, and hashes.
Depends on: Approved inventory and retention location
Stop / go checkpointTransform?
Go when: The signed source manifest and exports agree.
Stop when: Any critical dataset, binary, configuration, or recovery path is absent.
- Days 6–20 · pilot
Map, transform, and pilot
25–70 hours active5–12 days elapsedDestination processing and owner review waiting- Configure SendGrid and transform a production-shaped pilot.
- Test normal records, every feature class, edge cases, permissions, failures, and rollback.
Depends on: Verified source backup and approved mapping registry
Stop / go checkpointScale?
Go when: Every pilot mapping and blocking verification check passes.
Stop when: Any critical invariant, access boundary, or production action lacks a safe destination.
- Days 18–35 · cutover
Bulk load, final delta, and switch
20–55 hours active2–8 days elapsedImports, propagation, indexing, or synchronization waiting- Freeze production writes and automated actions in Mailgun.
- Apply and reconcile the final delta, switch ownership to SendGrid, and run all blocking checks.
Depends on: Passed pilot, stakeholder go decision, and rehearsed rollback
Stop / go checkpointOpen production?
Go when: SendGrid is the sole production owner and every critical exception is resolved.
Stop when: A source writer remains active, a blocking check fails, or rollback is unavailable.
- Days 25–45 · observe
Observe and close
9–19 hours active7–14 days elapsedRepresentative operating-cycle evidence waiting- Monitor correctness, access, failures, latency, delivery, cost, and user outcomes.
- Sign the verification report and close rollback only after stable evidence.
Depends on: Verified cutover
Stop / go checkpointClose rollback?
Go when: No trigger occurs during the approved observation period.
Stop when: Data, access, delivery, routing, cost, or business results regress.
Cut over with a way back.
Cutover
Make SendGrid the only production system without losing the final Mailgun delta.
- Freeze user, integration, schedule, and API writes in Mailgun.
- Capture and reconcile the final source delta against the last verified checkpoint.
- Apply the approved delta and configuration changes to SendGrid.
- Switch traffic, domains, integrations, credentials, automation, and user entry points in dependency order.
- Run every blocking verification check and keep the source intact.
Proof to capture: SendGrid alone owns production, totals reconcile, exceptions are signed, and every blocking check has durable evidence.
Rollback
Return production ownership to Mailgun without losing destination-era changes.
- Stop new user, integration, schedule, and API writes in SendGrid.
- Restore prior Mailgun traffic, domains, credentials, automation, and integration ownership.
- Export and classify the SendGrid post-cutover delta.
- Apply safe destination-era changes back to Mailgun without duplicating actions.
- Run the same blocking checks against the restored source.
Proof to capture: Mailgun again owns production with current data and no duplicate destination action.
- Unexplained critical count, value, relationship, or checksum variance
- Missing, corrupted, or exposed critical data
- Duplicate production action or unresolved split-brain state
- Failed access, security, delivery, routing, performance, or integration check
- A critical feature has no safe destination replacement or rollback path
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | Sending domains and sender identities reconciliation | Compare source inventory, transformed output, destination results, and a stratified sample for sending domains and sender identities. | Every in-scope item is present, intentionally transformed, explicitly excluded, or retained in the signed source archive. | Sending domains and sender identities ledger with counts, exceptions, sample IDs, and owner sign-off. | |
V-02Blocking | SPF, DKIM, and DMARC alignment reconciliation | Compare source inventory, transformed output, destination results, and a stratified sample for spf, dkim, and dmarc alignment. | Every in-scope item is present, intentionally transformed, explicitly excluded, or retained in the signed source archive. | SPF, DKIM, and DMARC alignment ledger with counts, exceptions, sample IDs, and owner sign-off. | |
V-03Blocking | Suppressions, bounces, complaints, and unsubscribes reconciliation | Compare source inventory, transformed output, destination results, and a stratified sample for suppressions, bounces, complaints, and unsubscribes. | Every in-scope item is present, intentionally transformed, explicitly excluded, or retained in the signed source archive. | Suppressions, bounces, complaints, and unsubscribes ledger with counts, exceptions, sample IDs, and owner sign-off. | |
V-04Blocking | Templates, versions, and layouts reconciliation | Compare source inventory, transformed output, destination results, and a stratified sample for templates, versions, and layouts. | Every in-scope item is present, intentionally transformed, explicitly excluded, or retained in the signed source archive. | Templates, versions, and layouts ledger with counts, exceptions, sample IDs, and owner sign-off. | |
V-05Blocking | API payloads and provider SDKs reconciliation | Compare source inventory, transformed output, destination results, and a stratified sample for api payloads and provider sdks. | Every in-scope item is present, intentionally transformed, explicitly excluded, or retained in the signed source archive. | API payloads and provider SDKs ledger with counts, exceptions, sample IDs, and owner sign-off. | |
V-06Blocking | Webhooks and event semantics reconciliation | Compare source inventory, transformed output, destination results, and a stratified sample for webhooks and event semantics. | Every in-scope item is present, intentionally transformed, explicitly excluded, or retained in the signed source archive. | Webhooks and event semantics ledger with counts, exceptions, sample IDs, and owner sign-off. | |
V-07Blocking | Dedicated IPs and warm-up state reconciliation | Compare source inventory, transformed output, destination results, and a stratified sample for dedicated ips and warm-up state. | Every in-scope item is present, intentionally transformed, explicitly excluded, or retained in the signed source archive. | Dedicated IPs and warm-up state ledger with counts, exceptions, sample IDs, and owner sign-off. | |
V-08 | Inbound email routes reconciliation | Compare source inventory, transformed output, destination results, and a stratified sample for inbound email routes. | Every in-scope item is present, intentionally transformed, explicitly excluded, or retained in the signed source archive. | Inbound email routes ledger with counts, exceptions, sample IDs, and owner sign-off. |
Remove the scaffolding safely.
Safe after: One complete operating cycle, at least seven stable days, and owner sign-off on every blocking check and exception.
- Create final Mailgun exports and archive verification, access, financial, and rollback evidence.
- Revoke temporary credentials, API keys, webhooks, elevated roles, and migration network access.
- Remove obsolete jobs, embeds, domains, integrations, collectors, routes, and DNS records.
- Keep the source intact and read-only through the approved legal and operational retention window.
- Cancel paid plans only after billing, legal, security, evidence, and recovery review.
- Schedule the next SendGrid backup, restore test, access review, and migration-playbook review.
Verify against the primary material.
Platform behavior changes. Check these sources and the review dates above before executing a production migration.
- Mailgun: official portability and migration documentationAccessed 2026-07-20
- SendGrid: official portability and migration documentationAccessed 2026-07-20