Mautic campaign import and export

Mautic can import pre-configured campaigns from ZIP files created by its export function, through the interface, the command line or the API. This page explains how to move campaigns between your own instances safely and what to verify after import.

On this page

How do you move a tested Mautic campaign from staging to production?

Mautic imports pre-configured campaigns from ZIP files created by its export function, and the same package can be loaded through the Mautic interface, the command line or the API. Teams need this when a campaign built and tested on a staging instance must reach production without being rebuilt by hand. The same need appears after a reinstall that removes campaigns, and when a proven campaign is copied as a starting template to another instance. This is an instance-to-instance transfer, so both the staging and production installations, and the path between them, should run in infrastructure your organization controls.

Start on the source instance. The export function packages campaign data, external assets and dynamic content into one ZIP file. Before you rely on that file, open it and confirm that every asset and dynamic content block the campaign uses is included. Then list the dependencies the export does not explain on its own, such as the segments the campaign filters on, the custom contact fields it reads, and the email templates it sends. Confirm with your own configuration whether these must already exist on production, because a campaign that references a missing object will not behave as tested.

Choose the loading method based on who runs the transfer and how often. The Mautic interface accepts ZIP files only, which suits a one-off move led by a marketing operations lead. The command line and API endpoints can also import correctly structured JSON files, which suits a repeatable release process. Confirm the exact commands, endpoints and file structure against the documentation for your installed release line, since the import behavior is tied to the version you run. Test the chosen method on a non-production target before you use it on the live instance.

Plan the checks that come after the import. Imported campaigns do not run on their own: Mautic depends on cron jobs for campaign updates and campaign triggers, and the project documentation says these jobs should be staggered. Confirm that production runs those jobs before the campaign is expected to act on contacts. Review every imported campaign, its contact sources and its send settings, and keep it inactive until a named approver has signed off. Most of the transfer effort is in these reviews and dependency checks, not in the file load itself.

Treat the ZIP file as a controlled artifact. It can carry configuration details, content and references that your organization may not want widely copied, so store it in access-controlled storage and record which staging build and campaign version it came from. When you request a quote from an implementation partner, ask for the transfer scope in writing: the number of campaigns, the assets and dependencies to be verified, the import method, the test target and the post-import review. Those items drive the effort more than the file size does.

Which Mautic campaign import route fits your team

This table compares the four ways to bring a campaign into Mautic: the interface ZIP import, the command line, the API and JSON files. Read each row against your team's skills and how often campaigns move, then pick the route that fits your release process. The main takeaway is that only the interface route is limited to ZIP files, while the command line and API routes also accept correctly structured JSON.

Import routeFile types acceptedWho usually runs itWhen it fits
Interface ZIP importZIP files only, ideally created by Mautic's export functionCampaign managers and marketing operations staff working in the admin UIOccasional moves of a single campaign where a manual review of the import is wanted
Command line importZIP files and correctly structured JSON filesPlatform or DevOps engineers with shell access to the Mautic serverRepeatable moves between staging and production, and scripted or batched imports
API importZIP files and correctly structured JSON filesDevelopers or integration engineers calling Mautic from a pipeline or toolAutomated promotion from a release pipeline or when another system generates campaign definitions
JSON optionCorrectly structured JSON only, via command line or APIEngineers who generate or maintain the campaign definition filesWhen campaign definitions are kept in version control and reviewed as code
Export-created ZIP as sourceZIP from Mautic's export, carrying campaign data, external assets and dynamic contentWhoever exports from the source instance, often the same team that importsPreferred starting point when assets and dynamic content must travel with the campaign
Confirm exact syntaxNot applicableEngineer preparing the runbookBefore any run: confirm command and endpoint syntax against the Mautic 7.0 import documentation for your version

What a Mautic campaign export ZIP carries into another instance

The export ZIP is the unit you move between instances, so know what it contains before you plan a transfer. Mautic's export function produces a ZIP that includes campaign data, external assets and dynamic content, and Mautic recommends importing these exports over hand-built files. That recommendation matters because a campaign is rarely one record. Its events, decision branches, timing and the content those events send are stored together, and rebuilding them by hand on a second instance invites small differences that are hard to spot later. Keep each export tied to the source instance and the date it was made, so you can show which version of a campaign reached production.

Before you import, confirm what the target instance already holds. A campaign refers to other objects, such as segments that define its audience, forms that capture submissions, email templates that supply content, and custom fields that hold contact attributes. Make an inventory of every dependency the source campaign uses, then check each one on the target by name and identifier. An object that exists with the same name but a different identifier can leave the imported campaign pointing at the wrong thing. An object that does not exist at all can leave a reference broken or cause the import to fail. Do not assume that a dependency missing from the target will be created for you.

Verify what the file carries instead of assuming it. Run a test import into a non-production instance that holds the objects you inventoried. Then open each imported campaign and check every event, every decision path, each linked email or form, and the segment used as the audience. Confirm whether assets arrive as copies on the target or still refer back to the source. Record what came across intact, what was dropped and what needed rewiring. Name the person who signs off the test, and decide in advance whether a gap is fixed by creating the object on the target with the same identifier, by editing the campaign, or by delaying the move.

Plan the gaps and the activation step together. Whoever recreates missing segments, forms and templates on the target needs permission to do so, so check the roles on the target before the test, not during the production window. Import through the interface accepts ZIP files only, while the command line and API can also take correctly structured JSON, so confirm the format you will use if the move is scripted. Keep imported campaigns inactive until the checks pass. Campaign updates and triggers depend on scheduled cron jobs, so confirm those jobs run on the target before you expect any campaign to act on contacts.

How to import a Mautic campaign export without breaking production

This sequence moves a campaign from staging to production in an order that catches broken assets, missing dependencies and wrong contact paths before live contacts reach them. Each step ends with a check you can record. Steps that depend on your installed version are marked for confirmation.

  1. Confirm both instances share a release line

    Start by confirming that staging and production run the same release line. Mautic's support windows differ by release, so check each instance against the releases page to see which lines still receive security support. Confirm the PHP and database requirements for that release on the requirements page. Confirm with your release notes whether a mismatch can be imported safely, since this depends on your installed version. Done when both instances report the same line and production runs a line that is still in security support.

  2. Export the campaign from staging

    Open the campaign in the staging instance and use Mautic's export function to create a ZIP file. The docs recommend this format because it packages campaign data together with external assets and dynamic content. Export only after the final test changes are saved, so the ZIP reflects the version you tested. Name the file with the campaign and the export date, and record which staging version produced it. Done when the ZIP exists and you can name the campaign and the staging instance it came from.

  3. Review the ZIP contents before importing

    Extract the ZIP on a secure workstation and inspect it before any instance touches it. Confirm that it contains the campaign data, the external assets and the dynamic content you expect from the staging campaign. Compare that list with what the campaign references in staging, and note anything missing or unexpected. The interface accepts ZIP files only, so keep the exported ZIP as the file you carry forward. Done when you have a written inventory that matches the staging campaign and every file is explained.

  4. Back up production database and files

    Before any import touches production, back up the production database and the Mautic files. Restore that backup to a separate environment and confirm Mautic starts there, because an untested backup gives little assurance. Treat the backup as your recovery path if the import changes production data in an unexpected way. Confirm the backup method and retention with your operations team, since these depend on your hosting and database setup. Done when a restore has been proven in a separate environment and the backup is labeled with the planned import.

  5. Import into a non-production copy first

    Create a copy of production, or use a dedicated staging instance that matches it, and import the ZIP there through the Mautic interface. The interface supports ZIP files only. The command line and API endpoints can also import correctly structured JSON files, which matters if you automate the process, so confirm how your version exposes these options. Done when the campaign appears in the non-production instance under the expected name, with its settings and steps visible in the campaign editor.

  6. Check referenced assets and dynamic content

    Open each asset and piece of dynamic content the campaign uses in the non-production copy and confirm it resolves. Check that linked emails, forms, segments and dynamic content blocks open without errors and show the content from the ZIP. Note any reference that points to a missing item, because it must be resolved before anyone tests the contact path. Fix the gaps in the copy, then repeat the inventory from the review step. Done when every referenced item resolves and the inventory matches the expected list.

  7. Check campaign structure and contact flow

    Confirm that the scheduled parts of Mautic run on the copy. The docs state that segment updates, campaign updates and campaign triggers depend on cron jobs, which should be staggered, so check that the copy's schedule matches your plan. If the campaign sends queued email, confirm the messenger consumer is running too. Add test contacts that meet each entry condition, then compare each contact's path through decisions, waits and actions with the expected path from the campaign design. Done when every test contact lands on the expected branch. Confirm trigger timing against your version's documentation.

  8. Import into production in a planned window

    Schedule the production import for a window agreed with the business owners and change approvers, and tell them what will change. Import the same ZIP you reviewed and tested, so production receives the version that passed. Run the same checks on production: the campaign is listed, its assets and dynamic content resolve, and test contacts follow the expected path. Keep the backup available until these checks pass. Done when the production campaign is listed, its checks pass, and the change record names the ZIP file and the instance versions used.

Why an imported campaign does not run until cron and messaging are working

An imported campaign can look finished in the Mautic interface and still send nothing. The reason is that Mautic does not move contacts through a campaign on its own. It relies on scheduled cron jobs to update segments, update campaigns and fire campaign triggers, and the Mautic cron jobs documentation says these jobs should be staggered so they do not all run at the same moment. A campaign that was exported from a working instance carries its structure, assets and dynamic content, but it carries none of the scheduling that makes it run. Until the target instance has those jobs configured and running, the import is inert, however correct the steps look on screen.

Email delivery adds a second dependency. Segment emails are sent by a broadcasts command, which is a separate scheduled task from the campaign jobs. When emails are queued rather than sent immediately, a messenger consumer must be running to pick them up and deliver them. If that worker is not running, messages will appear as queued or pending, and the campaign report may show activity that never reaches a recipient. This is the failure most likely to be missed during a staging-to-production move, because the contact counts and campaign diagram still look healthy while the queue grows.

Before the first live trigger, confirm three things on the production server, not only in the staging copy. First, check the cron schedule for each Mautic job, including the frequency and the offsets between jobs, against the current cron jobs documentation for your release line. Second, confirm that the messenger consumer and the broadcasts command are running under a process supervisor or service definition that restarts them after a failure or reboot, and that the worker user has the file permissions it needs. Third, verify that the email transport settings on production point at the intended sending service. Ask your team who owns each of these settings and where they are recorded.

Then prove the path end to end with one campaign before enabling the full set. Choose a single test contact or internal test segment, a campaign with one trigger and one email, and watch the event through each stage: segment membership is updated, the trigger fires, the email is queued, the consumer delivers it, and the send is visible in the contact timeline. Record the time each step took and the log entries that show it. If any stage stalls, fix the scheduling or worker issue first, because adding more campaigns will only multiply the queue. Once one path behaves as expected, repeat the check for each distinct trigger type in the imported set.

Security and operational risks when campaigns move between instances

Moving campaigns between instances through the interface, command line or API creates risk at each hand-off. The five cards below cover the file, the secrets it may carry, the environment it lands in, the live campaigns it could overwrite and the record of who approved it. Each card names the control to put in place and what to confirm in your own environment.

Importing a file from an untrusted source

A campaign ZIP file carries more than a flow diagram. The export includes external assets and dynamic content, which become part of your Mautic instance once imported. A file from an agency, a former vendor or an unverified download may contain content your team did not write. Control: limit import rights to a named group, accept files only from exports of instances you trust, and review the ZIP contents before any import runs. Confirm which roles in your version can import through the interface, command line and API.

Credentials embedded in assets or integrations

Assets and integration settings can hold API keys, tokens or passwords entered into a campaign step or plugin configuration. Copying an export to another instance carries those values with it, and staging copies may be less protected than production. Control: search the extracted files for key-like strings before import, remove secrets from assets, and issue separate credentials for each instance from its own secret store. Confirm which integration settings are included in an export and which must be reconfigured after import.

Personal data moving into staging

The export described in the docs carries campaign data, assets and dynamic content. Contact data usually reaches staging through the testing process, such as sending test runs to real segments or copying a production database for debugging. Control: test with synthetic or consenting test contacts, give staging the same access restrictions as production, and record the data flow in your processing records. Confirm what a campaign's segment and contact references resolve to after import.

Overwriting live campaigns with matching identifiers

An imported campaign that uses an identifier already in use on production could change or replace the live version. Confirm in the import documentation for your version how Mautic handles an existing identifier before running any file on a live instance. Control: take a database and asset backup as a restore point, test the import on a restored copy first, and compare campaign IDs and names against production. Avoid running imports while scheduled campaign and segment jobs are active.

Losing track of who approved the import

Campaign changes that reach production without a record make later incidents hard to explain. A change record should name the requester, the source instance and version, the ZIP file's checksum, the reviewer and the import time. Control: require a named approver before the import role is used, store the change record alongside the ZIP file, and log the post-import check. Confirm which actions your instance records in its activity or audit views and how long those records are kept.

Where Mautic campaign moves usually go wrong after the import succeeds

The first failure pattern is a campaign that imports cleanly but points at a segment, form, asset or dynamic content item that has a different name, or no equivalent, on production. The import itself may not flag this, so the review has to start inside the campaign builder. Open each decision and action that references another object and confirm that it resolves to a named object on the target, with no empty field showing. Compare the referenced names against a list taken from production before any campaign is enabled. Record each mismatch in a remap log with the source name, the target object, the person who approved the substitution, and whether the campaign should be rebuilt or the object renamed.

The second pattern is a release mismatch between source and target. An export made on one release can carry campaign structure that another release handles differently, and the failures are not always visible on the import screen. Before the import, record the exact version shown on each instance and check its release line against the Mautic releases page, since a target on a line near the end of its support window carries its own risk. After the import, look for campaign nodes that display as unrecognized, action types that are missing, or steps that do not run when tested with a sample contact. Record both version strings, the import date, and the decision to align versions or re-export from a matching source before trying again.

The third pattern is an import into a live instance during active sends. The campaign may be correct, yet contacts start moving through it while the team is still checking it, or emails from an earlier campaign are still queued to contacts the new one now targets. Review the timestamps in the campaign's contact and event history against the import time, and check whether any broadcast or email jobs were running at that moment. Confirm the published state of the campaign and compare the number of contacts added to it with the size of the segment you expected. Record the import time, the sends in progress before and after the import, contact counts per campaign step, and who authorized enabling the campaign, so that any later complaint can be traced.

The fourth pattern is the quietest: the campaign looks correct, but its triggers never fire because cron is not configured on the target. Mautic depends on scheduled jobs for segment updates, campaign updates and campaign triggers, and its cron jobs documentation says these jobs should be staggered. A fresh server or a rebuilt instance may have none of them in place. Check the scheduler on the target for each job, then confirm that the last-run times advance over a full day, not just once after setup. Enroll a test contact that meets the entry condition and watch whether it moves to the next step. If queued emails are involved, confirm that the messenger consumer is running. Record each job's owner, schedule, last successful run and the result of the test contact, and repeat this check after every server change.

Limits to confirm before you rely on Mautic campaign import and export

The Mautic documentation sets out how campaign import works, but several points depend on your own instances. Confirm each item below in your own environment, on both source and target, before you plan a staging-to-production move that relies on an export.

ZIP files only in the interface

The Mautic interface accepts ZIP files only for campaign import. The docs recommend ZIP files created by Mautic's export function, which carry campaign data, external assets and dynamic content. Confirm that your export process produces these archives on the source, and that your team does not expect the interface to accept a hand-built file. Check the archive contents after each export and before you upload to the target.

Dependencies present on the target

An exported campaign can reference assets, dynamic content and other objects that must already exist on the target instance. Confirm which dependencies the import expects, including external assets, dynamic content, segments, custom fields and any plugin-provided campaign actions, and whether the target already holds them. Compare the lists from both instances. A plugin installed on staging but absent from production is a difference to find before the import, not during it.

Version compatibility between source and target

Export and import are only as reliable as the version pairing between source and target. Record the exact Mautic version on each instance and check both against the supported release lines on the Mautic releases page and the requirements page. Confirm PHP, database and web server support on the target as well, because the platform requirements apply there too. If the versions differ, plan the upgrade on the target before the import and retest after it.

Which release line the target runs

Mautic 7.2 (Absolunto) has active and security support until 30 September 2026. Mautic 7.3 is planned as the long-term support release, with security support through 31 December 2027. Confirm which line your target will run on and how long you need security patches on it. A campaign library built for a line that ends in 2026 may need another move later, so this choice affects how often you will repeat the import.

JSON import through CLI or API

The docs say the command line and API endpoints can also import correctly structured JSON files, but the interface does not. Confirm that your release supports this path, the command or endpoint name, and the exact structure it expects. Test a small campaign first. Do not build a JSON export pipeline on the assumption that it matches the ZIP format, because the structure must be verified on your version.

Documentation does not replace testing

The import docs describe intended behavior, but they cannot show how your campaigns, segments and integrations will behave on your instances. Run a test import of a representative campaign into a staging copy of the target. Then check the campaign flow, triggers, emails and any connected CRM actions. Record the results and the version pair you tested, so the same steps can be repeated before each production move.

What buyers ask about Mautic campaign migration effort, cost and ownership

How long does a Mautic campaign migration take?

No single duration applies to every move, so the timeline follows from the written list of campaigns, dependencies and checks agreed before work starts. The number of campaigns, the assets and dynamic content they reference, and how many environments sit between your development, staging and production instances all change the schedule. Ask the provider to state the phases, the environments each phase touches, and the dates that depend on your change window and approver availability. A provider that cannot tie the timeline to a named list of campaigns is describing an estimate, not a plan.

What drives the effort of moving Mautic campaigns between instances?

The main drivers are:

  • Dependencies: segments, custom fields, emails, external assets and dynamic content that a campaign references. Each one must exist, or be recreated, on the target instance.
  • Environments: each additional instance adds an export, import and verification cycle.
  • Staging and production differences: plugin versions, sender settings, URLs and Mautic version can differ and change how a campaign behaves.
  • Cron and messaging setup: Mautic relies on staggered cron jobs for segment updates, campaign updates and triggers, a broadcasts command for segment emails, and a messenger consumer when emails are queued. Each target instance needs these running before campaigns are tested.
  • Testing scope: the number of test contacts, paths and triggers you want to verify.
Can our marketing operations team move Mautic campaigns without outside help?

A capable internal team can move a small number of campaigns between instances that run the same Mautic release, the same plugins and the same server setup. Mautic supports exporting campaigns to ZIP files, which carry campaign data, external assets and dynamic content, and importing them through the interface, the command line or the API. The interface accepts ZIP files only, while the command line and API can also import correctly structured JSON files. Outside help becomes more useful when campaigns depend on many segments and assets, when cron and the messenger consumer must be configured on the target, or when production changes need a documented approval and rollback path.

What do we need to provide for a Mautic campaign migration?

Plan to provide access to both instances, including administrator accounts or the command line access needed for export and import. Name one approver who can accept each campaign for production, and assign test contacts in each segment so that paths and triggers can be checked without contacting real customers. Agree on a change window that fits your release calendar, and confirm who can change cron entries and the messenger service on each server. Share the list of external assets, sender settings and integrations the campaigns depend on. Missing any of these usually moves the work into a later phase, which affects the quote.

How is a fixed-scope quote built for Mautic campaign migration?

A fixed-scope quote follows from a written list of campaigns, the dependencies each one uses, the environments involved and the checks to run after import. Each campaign line should state what moves, what is recreated, what is tested and who approves it. Ask the provider to separate one-time work, such as export, import, configuration and testing, from recurring costs. Mautic itself is free, self-hosted software with no paid edition of the product, so your costs are the infrastructure you run it on and the labor to move and support it. Ask for the assumptions behind each line so a change in scope can be priced transparently.

Does the Mautic version need to match between staging and production?

Confirm the Mautic release and PHP version on both instances before exporting, because differences can change how a campaign imports and behaves. Mautic 7.0 requires PHP 8.2, 8.3, 8.4 or 8.5, MySQL 5.7 or higher with InnoDB or MariaDB 10.2 or higher, and a supported web server such as Apache, Nginx or IIS. Mautic's release cadence includes monthly patch releases, minor releases every three months and major releases every two years, so the two instances may drift apart over time. Record the versions and plugin list for each instance in the scope, and ask the provider how any version gap will be handled.

Who owns the campaigns and data after a Mautic migration?

The work runs inside infrastructure your organization controls, and the campaigns, assets and contact data stay in your Mautic instances. DeployOpen plans, implements and documents this work in your environment, so the deliverables and handover should be written into the scope before work starts. Confirm in writing who holds the export files, the configuration notes, the cron and messenger documentation and any credentials created during the project. Ask what happens to temporary export files and test data after cutover, and who is responsible for keeping each instance on a supported release line after the project closes.

How DeployOpen scopes and delivers a Mautic campaign move

DeployOpen treats a Mautic campaign move as a planned change between instances you control, such as staging to production. The work starts with an agreed written scope, then covers export, import, verification and handover, with ongoing support available as a retainer.

How we scope

  • Inventory the campaigns, segments, assets and dynamic content that the move must carry between instances.
  • Confirm which campaigns move as ZIP exports and which need a separate rebuild or a JSON import through the command line or API.
  • Record in the written scope which cron jobs, the broadcasts command and any messenger consumer must be set up on the target instance.

How we build

  • Export campaigns from the source instance and check that each ZIP carries its campaign data, external assets and dynamic content.
  • Import into a non-production target using the interface, command line or API, and fix dependencies such as missing assets or segments before cutover.
  • Test each imported campaign's triggers and decisions against a controlled set of test contacts, and document the results.

How we hand over

  • Deliver a runbook covering the export and import steps, the order of operations and the rollback approach agreed in scope.
  • Document the campaign inventory before and after the move, so your team can compare the two instances.
  • Walk your administrators through the import process and the checks they should repeat for later moves.

How we support

  • Offer ongoing support as a retainer for later campaign moves, troubleshooting and changes to the target environment.
  • Review campaign imports again after upgrades to the Mautic release line you run, since campaign behavior should be retested after upgrades.
  • Confirm with your team which support scope, response expectations and fees apply before any retainer starts.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.