Mautic customization

Mautic customization covers custom plugins, themes, fields, templates and API integrations built so they survive upgrades. This page explains what the work includes, what drives cost and duration, and when a partner makes sense.

On this page

What Mautic customization involves

Mautic customization means changing or extending the platform without forking its core. The work usually takes one or more of these forms: custom plugins, themes, custom fields and objects, landing page and email templates, webhooks, and API integrations. Mautic is written in PHP on Symfony, so plugins and themes follow the framework's structure and the project's own extension points. Custom code that touches the contact model, forms, tracking or the API is the part most likely to break during an upgrade, so it should be listed as a managed asset from the start, with its owner, its dependencies and its tests recorded.

Most customization starts with a specific trigger. The common ones are a data model the standard contact fields cannot hold, such as account hierarchies, product holdings or regional consent categories; a required integration with an internal system that the existing CRM plugins do not cover; or branded templates that must still pass consent capture and tracking requirements. Each trigger should be written as a requirement before any build starts. Ask which fields must be filterable in segments, which events must reach other systems, and who signs off on template changes that affect consent language.

In-house or partner. A Mautic-skilled developer can usually handle small template and custom field changes, provided they test them on a staging copy of the database. Plugins, custom objects and integrations that must survive major version changes benefit from an outside review of their design and test coverage before they go live. The review question is simple: will this code still work after the next major release, and who will fix it if it does not? Your quote should separate the one-time build from the recurring work of re-testing custom code at each release.

Licensing. Mautic's GitHub repository is licensed under GPL-3.0. Custom plugins and themes that are distributed outside your organization may fall under the terms of that license, and this affects how code is shared with vendors and reused elsewhere. Confirm with counsel which ownership, license and source-availability terms apply to code written for your deployment before the statement of work is signed.

What the work includes

Each package below ends in a deliverable you own and can review. Scope them together so custom code, data model changes and integrations are planned against the Mautic release you intend to run.

Custom plugins

Mautic plugins add bundles, integrations, custom campaign actions and decision types, and form or contact behaviors that core does not provide. We build them on Mautic's plugin structure and Symfony services, with the logic kept inside the plugin rather than patched into core. You receive the source code in your repository, a packaged plugin, and a test record showing what was exercised.

Themes and branded templates

Themes control the look of landing pages, forms and emails sent from Mautic. The work covers template files, assets, and the email and landing page templates your teams will reuse. Check that brand assets, tracking and unsubscribe elements survive template edits, and confirm which template files are overridden so a later upgrade does not silently change them.

Custom fields and data model extensions

Custom fields on contacts and companies, and related data model changes, shape segmentation and consent records long after launch. We design field types, groups and naming with your team, and confirm how each field is populated, imported and reported. Ask for the data dictionary as a deliverable so later changes are traceable.

Webhooks and API integrations

Webhooks and API integrations move contact and campaign events between Mautic and internal systems such as CRMs, data warehouses or consent stores. The deliverable is the integration code, configuration, and integration documentation covering payloads, authentication, retries and error handling. Confirm the expected event volume and who owns each receiving system before build starts.

Upgrade-safe code isolation

Custom code is kept out of core files, and every extension point used is documented so maintainers know what a Mautic upgrade can affect. We record which events, services and hooks the code depends on, and keep overrides to a minimum. Ask for this register as a deliverable, since it is the main input to every future upgrade estimate.

Compatibility check against your target release

Before go-live, each custom plugin, theme and integration is checked against the Mautic release you plan to run, along with its PHP version and the database and web server requirements that release states. Confirm the target version and its support window with the Mautic releases page first. The output is a compatibility report and a test record you can rerun when the release changes.

What drives cost and duration

This table lists the scope choices that change the effort of a Mautic customization project, why each one matters and how to keep it contained before the written scope is signed.

DriverWhy it mattersHow to keep it down
Custom objects and fieldsEach custom object or field adds schema changes, mapping, forms, segment filters and test cases, and each one must survive future upgrades.Confirm which fields segments, campaigns and CRM syncs truly need, and reuse existing contact or company fields where they fit.
Template types and brand variantsLanding pages, email templates and themes multiply with each brand, language or region, and each variant needs rendering and consent checks.Limit the first release to one base theme with brand settings, and add variants later as separate change requests.
Integrations and their directionInbound, outbound and two-way syncs with external systems each need field mapping, error handling, retries and duplicate-contact rules.Start with one direction per system, document which system owns each field, and phase two-way sync.
Core changes versus extension pointsCode that edits core files is harder to upgrade and test than plugins or themes built on documented extension points.Build on plugins, event listeners and theme overrides, and record every core change so it can be reviewed at each upgrade.
Number of target Mautic versionsSupporting more than one Mautic release means separate test matrices, and the current release line changes on a published cadence.Target one release line for go-live, then confirm support dates on the Mautic releases page before choosing it.
EnvironmentsDevelopment, staging and production each need a working install, data handling rules and deployment steps, and staging must resemble production to be useful.Agree early which environments are required, use anonymized data outside production, and script deployments.
Testing depth for consent and trackingConsent capture, preference centers, tracking scripts and data subject requests change behavior that must be verified, not assumed.Write a short list of consent and tracking test cases tied to the scope, and test the highest-risk paths first.
PHP and Mautic version baselineMautic's PHP and database requirements set the baseline that custom code is built and tested against, and a version mismatch forces rework.Confirm the supported PHP range and MySQL or MariaDB version for the chosen Mautic release before any code is written.
Scope changes after sign-offRequests that alter the signed scope are priced as change requests, so late additions extend both timeline and cost.Record assumptions in the written scope, and route each new request through a change request with its own estimate.

Project phases and outputs

The sequence moves a customization from an agreed data model to a documented, tested release that your team can upgrade without rebuilding it.

  1. Discover the data model and extension points

    We review your contact model, custom fields, segments, campaigns, existing integrations and the Mautic version you will run, then identify where plugins, templates or API calls are the right extension point. You receive a discovery note listing each requested change, the Mautic hook or API it would use, and the open questions your team must answer before design starts.

  2. Design the plugin and template structure

    We design the plugin layout, configuration options, custom field and object definitions, template structure and any webhook or API flows, and agree how each piece will be named, namespaced and kept separate from core files. The output is a design note and a test plan that your team signs off before any code is written.

  3. Build in a versioned repository

    We implement the approved design in a version-controlled repository with commit history, code review and a clear split between custom code and the Mautic core, so every change can be traced and reverted. Your team receives repository access, a branch and merge convention, and a build notes file that explains how to run the code locally.

  4. Test on a staging install that matches production

    We deploy the build to a staging environment running the same Mautic version, PHP version and database engine and version as production, then run the test plan covering functional behavior, cron-driven processes, email and form paths, and consent handling. You receive a test report listing each case, its result, and any defects fixed before release.

  5. Review upgrade readiness

    Before release, we check each custom component against the Mautic release you intend to stay on, including the PHP and database requirements of that release and any core interfaces the code depends on. The output is a compatibility matrix that marks each component as compatible, needs changes, or needs a check against a later release, so the upgrade path is known before go-live.

  6. Deploy and hand over with documentation

    We deploy the approved release to production under a documented change procedure, verify the functions covered by the test plan, and hand over to your operations and marketing teams. You receive a deployment runbook, a rollback procedure, configuration and credential inventory, and a short walkthrough session recorded in the handover notes.

What goes wrong and how to prevent it

Most Mautic customization problems come from a small set of habits: editing code the upgrade path will overwrite, building against internals that change, and skipping a realistic test before production. The cards below name each failure and the step that prevents it.

Edits made directly in core files

Changes written into Mautic's core source are overwritten or conflict when the installation is upgraded to a new release. Keep custom behavior in a plugin or theme that sits beside core, and record any unavoidable core patch in a list that the upgrade test checks first. Ask the implementation partner to show where each customization lives.

Plugins built on unstable internals

A plugin that calls internal services or classes rather than documented extension points can break when a major release changes those classes. Before building, list every Mautic class and service the plugin depends on, and confirm each one against the documentation for every release in your upgrade window. Treat that list as the plugin's compatibility contract.

Templates that break tracking or consent

Custom landing page or email templates that omit the tracking script, remove the unsubscribe or preference link, or alter the consent checkbox can stop tracking or create consent records that cannot be defended. Test each template with a sample contact on the staging copy, confirm the tracking event appears in the contact timeline, and verify the preference link works before publishing.

Webhooks without retry or idempotency

An external system that receives a Mautic webhook and does not handle timeouts or repeated deliveries can create duplicate records when a request is retried. Give every receiving endpoint an idempotency key check, return success only after the record is stored, and test a forced timeout on staging to confirm that a retry does not create a second contact or deal.

Custom fields without naming or ownership

Custom fields added by different teams with inconsistent names, types and no owner make segments, reports and CRM mappings unreliable over time. Agree on a naming prefix, a field type rule and a named owner for each field before the first one is created, and keep a register that the project team reviews at every change.

Production changes without a staging test

Customizations tested only on a developer laptop often fail with the production database, PHP version, cron schedule or email volume. Build a staging copy with the same Mautic release, PHP version and database engine as production, load a sample of real-shaped contacts, and run segment, campaign and email tests there before every release. Confirm PHP and database versions per release, since Mautic's requirements differ between major versions.

What teams keep in-house and what they outsource

This table compares which Mautic customization work teams usually keep internally and which they usually hand to a partner, with the skills each area needs, so you can match the split to your PHP capacity and the custom components you will own after handover.

Work areaUsually kept in-houseUsually outsourcedSkills required
Campaign and template contentCampaign logic, email copy, segment definitions and day-to-day edits by marketing operationsInitial builds of complex landing page and email templates tied to custom fieldsHTML and email client rendering, Mautic campaign builder knowledge
Data model ownershipNaming rules, field purposes and who approves new custom fields and objectsDesigning the custom field and object schema and its migration pathsMautic data model knowledge, PHP and Symfony familiarity for schema changes
Plugin codeOwnership of the repository, review of changes and running the plugin after handoverBuilding custom plugins, event listeners and forms to a documented designPHP and Symfony familiarity, Mautic plugin architecture, Composer packaging
Theme and frontend workBrand assets, copy changes and small template tweaksCustom themes, layout changes and frontend scripts for tracked pagesHTML, CSS, JavaScript and Mautic theme structure
API integrationBusiness rules for what data moves, and monitoring of sync resultsBuilding webhooks and API clients for CRM or other systemsAPI and authentication knowledge, error handling and rate limit awareness
Testing and upgrade checksAcceptance testing of campaigns and sign-off on each releaseRegression test suites, compatibility checks of custom code against new Mautic and PHP versionsAutomated testing in PHP, Linux and web server administration, release note review
Ongoing maintenanceRoutine content work, cron health checks and reviewing reported errorsPatching custom code after Mautic major releases and fixing defects in custom componentsLinux and web server administration, PHP and Symfony familiarity, Mautic upgrade experience

How the work changes by starting point

Customization is planned before the first install, so custom fields, templates, plugins and integration points are scoped together with the base build. Testing runs against custom code from the first build, and handover includes a record of every custom component.

  • Scope: Custom fields, objects, templates and plugins are listed in the design alongside the contact model, segments and campaigns.
  • Testing: Automated and manual tests run in a staging install built from the same package and version as production.
  • Handover: Your team receives the plugin source, configuration notes and a record confirming that no core files were modified.
  • Confirm first: The target version and its PHP and database requirements, and who owns the Git repository for custom code.

What the client needs to provide

Before a customization quote can be fixed in scope, the client should have a running or planned Mautic environment with the PHP and database versions it intends to use. Mautic 7.0 requires PHP 8.2, 8.3, 8.4 or 8.5 and MySQL 5.7 or higher with InnoDB, or MariaDB 10.2 or higher, so the version pair decides which platform APIs and libraries custom code can rely on and how much compatibility testing the build needs. Staging access on a production-like server is also required, because plugin hooks, cron-driven campaign logic and webhooks cannot be verified on a laptop with confidence.

Source control where custom code will live, and named owners for the data model and each integration, decide how much work is needed before development starts. Custom fields, custom objects and plugin entities change the contact schema, so one person must approve field names, types and retention. Each integration, such as a CRM connector or webhook receiver, needs an owner who can confirm the expected payloads and error handling. Without these owners, change requests stall and the testing effort grows because acceptance criteria are not agreed.

Sample contact and template data should be provided with consent rules documented. Landing page and email templates are tested against realistic records, and consent status, channel preferences and opt-in sources affect how segments and campaigns behave. The client should also provide API credentials for connected systems, created under least privilege, so integration tests use the access the production integration will have. Each credential that is broader than needed adds review work and a security finding to the quote.

Frequently asked questions

How much does Mautic customization cost and what drives the price?

Cost follows from a written scope, since DeployOpen does not publish a price list. The main drivers are the number of plugins, custom fields and objects, template work, each integration (webhooks, API calls or CRM connectors), and the testing needed on a staging copy before release. Hosting, upgrades and any support retainer recur after launch, while design and build work is one-time. Ask each quote to itemize work by component, state what is tested and where, list assumptions about your environment, and name what is excluded.

How long does a Mautic customization project take to deliver?

Duration depends mostly on how many integrations and how much testing the scope includes. A template change moves quickly, while a plugin that syncs contacts to a CRM needs field mapping, error handling, duplicate checks and test runs on realistic data. Delays often come from the client side, so confirm staging access, sample data, API credentials and named reviewers before work starts. DeployOpen agrees timelines in the written scope, so ask for milestones tied to each deliverable and test gate.

Can our internal developers customize Mautic without an outside partner?

Often yes, if the team knows PHP and the Symfony framework, since Mautic is written in PHP on that framework. The harder part is ongoing ownership. Someone must read release notes, run tests after each monthly patch, minor and major release, and keep custom code on a PHP version the release supports. Mautic 7.0 requires PHP 8.2, 8.3, 8.4 or 8.5. Check that your team has capacity for that cycle as well as for the first build.

Will custom Mautic plugins break when a new major version releases?

They can, so design plugins to limit that risk. Major releases arrive every two years, and changes to the framework or internal APIs can alter the code your plugin calls. Keep custom code on documented extension points, avoid editing core files, maintain automated tests, and run them against the upcoming release in a staging copy. Mautic 7.3 is planned as the long-term support release with security support through 31 December 2027, which should inform when you schedule your upgrade.

Does Mautic's GPL-3.0 license affect ownership of our custom code?

Refer this question to your legal counsel. Mautic's GitHub repository is licensed under GPL-3.0, and whether your custom code counts as a derivative work, and what obligations apply if you distribute it, depends on how the code connects to Mautic and how you deliver it. Counsel should review the plugin architecture, whether code leaves your organization, and the terms in any contract with a partner who writes it. DeployOpen can document the technical structure of the code, but it does not provide legal advice.

Can an implementation partner maintain our custom Mautic code after launch?

Yes, through a retainer, provided the terms are written down. DeployOpen offers ongoing support, upgrades and continuous testing as retainers. Before launch, ask for the code in a repository you control, documentation for each plugin and integration, an automated test suite, a runbook for cron and queue jobs, and a written list of what the retainer covers, including testing against new monthly, minor and major releases and who approves each change.

How DeployOpen works on Mautic customization

DeployOpen scopes, builds, tests and documents Mautic customizations inside infrastructure you control, so custom plugins, themes, fields and integrations stay your code on your servers. Engagements are fixed-scope, with the written scope fixing what is delivered before work starts.

How we scope

  • We list each custom plugin, theme, field, object, template and API integration the written scope covers.
  • We confirm which Mautic major version and PHP version the customizations must run on before design starts.
  • We map every customization to the upgrade check it needs, so the scope names what is tested at each Mautic release.

How we build

  • We build plugins and themes against Mautic's extension structure and keep custom code separate from core files.
  • We design custom fields and objects around the contact model and document how each one is written and read.
  • We build webhook and API integrations with credentials held outside the codebase and test them against a staging install.

How we hand over

  • We deliver source code in your repository with setup notes, configuration steps and the test cases used during the build.
  • We document which customizations depend on which Mautic version, so your team knows what to recheck before an upgrade.
  • We walk your administrators and developers through the custom components and the upgrade checklist before close.

How we support

  • We can run upgrade-safe checks on custom code when your team moves to a new Mautic patch, minor or major release.
  • Ongoing support, upgrades and testing are available as a retainer, with the coverage agreed in writing.
  • Changes after handover are quoted from a written scope so the cost and deliverables stay visible to your team.

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.