Why Mautic CRM integration needs design before the first sync
Mautic CRM integration is a design task about ownership, matching and triggers before it is a plugin setup. Marketing runs campaigns in Mautic while sales works in Salesforce or HubSpot, and both teams need to see the same contact. If the integration is switched on before anyone has decided which system owns each field and how a record is matched, the first sync will create the problems the business later has to clean up by hand. The Mautic HubSpot plugin pushes contacts to HubSpot CRM based on contact actions or point triggers, so the timing of a push depends on rules that marketing configures inside Mautic. Mautic's documentation also includes a Salesforce integration page. In both cases, the plugin is the mechanism, but the outcome depends on decisions made earlier. Someone has to decide which contacts qualify for a push, which action or point threshold sends them, and whether the CRM record is created, updated or only read.
The hard parts are usually the same across both CRMs. The first is duplicate records: a contact that exists in Mautic under one email address and in the CRM under another, or a lead that is converted into a contact on the CRM side, can produce a second record that sales then has to merge. The second is conflicting field values, such as a job title, lifecycle stage or owner that changes in both systems between syncs and leaves the reader unsure which value is current. The third is pushes that fire too often, repeatedly sending the same contact because a trigger keeps matching, or never fire at all because a point threshold or action was set on the wrong campaign or field. Before the first sync, agree in writing on a matching key (for example, email address alone or email with a CRM identifier), a field-by-field list stating which system is the source of truth, and a test set of contacts that includes known duplicates and edge cases. Run the test against a non-production CRM sandbox or a limited object set, then review the results with both marketing and sales operations.
Confirm the exact plugin capabilities for your version before you commit to a design. The supported CRM objects, the field mapping options, the sync direction for each object, and whether a given trigger type is available all differ by plugin release and by CRM edition, so check them against the current Mautic plugin documentation for HubSpot and Salesforce. Also confirm the target CRM's API rate limits and daily call allowances for your account tier, because a trigger that fires for thousands of contacts can exhaust them quickly. Ask the vendor or your CRM administrator what the limits are for your plan rather than relying on a general figure. These checks shape the rest of the project. A design that depends on bulk updates may need a different schedule, batch size or sync window than one that pushes single contacts on an action. Record the confirmed capabilities and limits in the design document so that the integration can be tested against them and reviewed again at each Mautic or CRM upgrade.
Which integration path fits your CRM and sync rules
This table compares the four ways to connect Mautic to a CRM and what each costs to run after launch. Read it after you have decided which system owns lead status and owner, because that decision narrows the options. The main takeaway is that point-triggered pushes are simpler to operate, while continuous sync needs more monitoring and mapping upkeep.
| Option | When it fits | Cost to operate | Push or continuous sync |
|---|---|---|---|
| Agree source of truth first | Before choosing a path, agree which system owns lead status and owner for each contact | Business decision across marketing, sales and operations, with no separate software cost | Determines whether data flows one way or in both directions |
| Mautic HubSpot plugin | HubSpot is the CRM of record and pushes triggered by contact actions or points cover the need | Check compatibility at each Mautic major release, which comes every two years; CRM and Mautic admins share mapping ownership | Point-triggered pushes; confirm whether HubSpot changes flow back into Mautic |
| Mautic Salesforce integration | Salesforce is the CRM of record and sales needs Mautic engagement data on lead records | Recheck plugin support at each Mautic release; every Salesforce field change needs a mapping review | Confirm sync direction and frequency in the Salesforce plugin documentation during design |
| Custom integration on the Mautic API | Sync rules are complex, such as custom objects, conditional owner logic or a third system | Highest build and upkeep; your team or partner maintains code through each Mautic major and CRM API change | Either pattern is possible, but you must build retries, batching and duplicate checks yourself |
| Integration platform between systems | Several systems need the same contact data and one place to review sync runs | Platform fees plus connector upkeep; mapping lives in a tool outside both products | Usually continuous sync with run history; confirm connector support for your Mautic version |
| Duplicate contact control | Any path, especially when both systems create contacts from forms or imports | Ongoing matching rules and a review queue owned by operations staff | Match keys such as email and CRM record ID must be set before the first sync |
Which data moves in which direction and who owns each field
Decide the direction of every field before you touch a plugin setting. Each piece of data in this integration has a natural owner: contact identity and consent usually start in Mautic when someone fills in a form or opts in, while opportunity stage and account owner belong to the sales team inside Salesforce or HubSpot. Lifecycle or lead status sits in between, because both systems can change it, and engagement data such as points and email activity is generated in Mautic but is often useful to sales. Write these decisions down first, because the plugin will happily sync whatever you map.
There are three basic patterns. A one-way push sends data from Mautic to the CRM, which suits engagement scores, campaign membership and consent status that sales should read but not edit. A one-way pull brings CRM values into Mautic, which suits account owner or opportunity stage if marketing needs them for segmentation. A two-way pattern updates both systems and is the one that needs the most care. Two-way sync on the same field creates overwrite loops: Mautic writes a value, the CRM sees a change and writes it back, Mautic then sees another change, and each side can keep reverting the other. Even a field that changes rarely can flip-flop when two automations or two users edit it close together.
The practical rule is simple: one field, one owner, one direction. If a field must be edited in both systems, pick a single system of record for it and treat the other side as read-only, or split the field into two fields, one per system, so each can be written without conflicting. Pay particular attention to consent and email opt-out flags. If a CRM user can clear a suppression flag that Mautic set, the integration may re-subscribe people you are legally required to keep suppressed. Assign consent to Mautic as owner unless your compliance team has decided otherwise.
Before configuration, build a field ownership table with one row per field and columns for source system, target system, direction, owner, update trigger and whether the field can be blank. Include the Mautic contact field, the CRM object and field names, and the rule for conflicts. Then confirm, for each CRM, which objects and fields the plugin or API can read and write in your edition and configuration. Permissions, managed packages, custom fields and HubSpot property types all affect what the plugin can actually do, so treat the vendor documentation and a test sandbox as the source of truth rather than assumptions.
Expect the table to change during testing. Run a small illustrative set of test contacts through each direction, check which side wins after edits in both systems, and record the result against the table. Any field that loops or drifts goes back to the decision step. Keeping the table current after launch matters as much as building it, because new campaigns and new CRM fields tend to add mappings that nobody has assigned an owner.
How to build the Mautic to CRM connection in order
This sequence takes a Mautic installation from a stable runtime to a tested, production-enabled CRM connection that creates and updates the right records without duplicates. Each step closes with a check, so problems surface in staging rather than in the CRM.
Confirm the Mautic version and runtime
Confirm which Mautic release you are running and that it is on a supported line before adding anything that depends on it. Check that the environment matches the version's requirements, including the supported PHP range and database engine, and that the install is on a VPS or dedicated server rather than shared hosting. Confirm that the production package or Composer project template is in place, that cron jobs are scheduled and staggered, and that a messenger consumer is running if email is queued. Close the step by recording the version, PHP and database versions, and a passing cron run for segments and campaigns, because CRM triggers depend on those jobs firing on time. Ask your partner or internal owner to confirm the support window for the release you plan to run.
Create a dedicated integration user and API credentials
In the CRM, create a dedicated integration user with only the object and field permissions the sync needs, and generate the API credentials or connected app that Mautic will use. Avoid reusing a personal administrator account, because its password changes, access reviews and offboarding would then break or expose the integration. Document which objects the user can read and write, and who holds the credentials. Close the step by logging in as that user with the credentials and confirming it can read and create a test record in the sandbox or developer environment, and cannot reach objects the sync does not need.
Install and configure the connector in staging
Install the chosen connector in a staging copy of Mautic: either the HubSpot or Salesforce plugin, or a custom client built on the CRM API. Enter the credentials in the staging environment only, and confirm the plugin's authentication completes. Record the plugin version and the Mautic release it supports, and check that both are on the list your team has agreed to run. Close the step when the connector shows a successful connection in staging and a test API call returns the expected account or org details. If your CRM edition or API limits are unclear, confirm them with the CRM vendor before going further.
Map identity fields and the match key first
Map the fields that identify a person before anything else: email address as the primary match key, plus name and company where the CRM needs them to create a record. Decide in writing which system owns each identity field, and what happens when the CRM already holds a record with the same email, including whether Mautic updates it, skips it or creates a second one. Confirm the rule for case, whitespace and duplicate emails in both systems. Close the step with a mapping document signed off by the data owner and a staging check showing one contact matched to one CRM record across two test runs.
Map lifecycle and engagement fields second
Once identity is stable, map lifecycle stage, lead status, opt-in state, points and the engagement fields your sales team uses. Keep consent state in a field the CRM can read, and agree which system is authoritative for each value, since two-way writes to the same field are a common source of overwritten data. Define the allowed values for picklists or enumerations on both sides so that unknown values do not silently fail. Close the step by reviewing the mapping table with sales operations and confirming in staging that a change in Mautic appears in the CRM field and that a change made in the CRM is handled according to the agreed direction.
Define triggers and push frequency third
Decide which action pushes a contact to the CRM: a point threshold, a contact action in a campaign, or a manual or segment-based condition. Specify how often the push runs, and check that it does not compete with the cron jobs that update segments and campaign triggers, since those jobs should be staggered. Note any limits the CRM API applies to request volume and plan the batch size with them in mind. Close the step with a written trigger definition that names the point value or campaign action, the expected frequency, and the owner who can change it, and a staging run confirming the trigger fires once per qualifying contact.
Run a test batch of named test contacts
Create a small set of named test contacts in Mautic that cover the cases you mapped: a new contact, an existing CRM match, a contact missing a company, an opted-out contact, and a contact with a duplicate email. Push them through the staging connector and check each resulting CRM record field by field against the mapping document. Look for duplicate records, missing values and unexpected overwrites. Close the step only when every test contact produces the expected result, and keep the test contacts and the results as evidence for the go-live review.
Enable the trigger in production with a rollback plan
Enable the agreed trigger in production during a window your team has chosen, with the connector credentials stored in the production environment and not copied from staging. Before enabling, write the rollback steps: disable the trigger, remove or pause the connector, and decide how to handle records created during a faulty run, including who reviews them in the CRM. Monitor the first run and the cron jobs that feed it, and check a sample of CRM records against Mautic. Close the step by confirming that the trigger is active, the rollback steps have been rehearsed in staging, and the owner has signed off on the first production results.
Avoiding duplicate contacts when Mautic and the CRM both create records
Duplicates appear when two systems each create a record for the same person and the integration cannot tell that the records match. A typical path starts with a form submission, which creates a Mautic contact keyed on an email address. A sales rep then creates the same person in Salesforce or HubSpot, perhaps with a different capitalization of the email, a missing email, or an address the prospect changed later. When the plugin pushes the Mautic contact, it finds no match and creates a second CRM record. Illustrative example: one prospect with three records, each holding part of the activity history, and a campaign that emails the wrong one. Map each entry point before the first sync so you know every way a person can enter either system.
Start by choosing a stable unique identifier. Email is the default in most setups, but it changes and it is not always present. Consider storing the CRM record ID on the Mautic contact as a dedicated field once the first match is made, so later updates travel by ID rather than by address. Then decide which system is allowed to create contacts. A common model lets the CRM create people and Mautic only update them, or lets Mautic create contacts from forms while the CRM receives them only through the integration. Whichever you choose, document it. The HubSpot plugin pushes contacts based on contact actions or point triggers, so the trigger rules also decide when a record is born in the CRM.
Next, confirm the matching behavior of the specific plugin version you will run. Read the vendor documentation for the Mautic HubSpot plugin and the Mautic Salesforce plugin, and check which field the integration uses to search, whether that search is case-sensitive, what happens when the email is empty, and whether it creates a record or stops when no match is found. Also check the native duplicate rules in Salesforce or HubSpot, because they may merge or block records independently of Mautic. Ask your implementation partner or the vendor to state these behaviors in writing for your version, and do not rely on general assumptions about how such plugins usually work.
Before the first sync, plan the cleanup of existing data. Export both systems, count likely duplicates by email, normalized email and name, and decide the survivor record for each group. Agree which system wins for each field, and make sure consent records and suppression status carry over to the surviving contact. Pause the integration and the cron jobs that trigger pushes while the merge runs, and keep a backup of both sides so you can reverse a bad merge. Assign one owner to approve merge decisions, because inconsistent judgment across hundreds of records creates new duplicates later.
Test the design with deliberate duplicate inputs before go-live. Build a short matrix covering an uppercase email, an email with stray spaces, a missing email, a changed address for a known person, a name spelled two ways, and the same person entering through a form and through a rep. Run each case through the full path and record which record Mautic and the CRM hold afterward. Repeat the matrix after every plugin upgrade, CRM configuration change or Mautic version change, since matching behavior can change between releases.
What drives the effort and cost of a CRM integration
This table lists the scope drivers that change how much work a Mautic to Salesforce or HubSpot integration takes, with how to keep each one down and what to ask a partner to quote. No effort figures appear here, because the written scope drives the quote. Read each row as a question to answer before asking for a price.
| Driver | Why it changes effort or cost | How to keep it down | What to ask a partner to quote |
|---|---|---|---|
| CRM objects and custom fields to map | Each contact, company, or custom object field needs a mapping, a data type check, and a test. Salesforce and HubSpot custom fields often differ in type and allowed values from Mautic fields. | Sync only fields that a campaign, segment, or report uses. Assign one owner per field so a single system is the source of truth. | Count of objects and fields in each direction, with the mapping sheet reviewed and signed off before build starts. |
| Contact volume and push frequency | The number of contacts and how often they are pushed affects API call volume, rate limits, and the time needed for the first full load and reconciliation. | Batch pushes on a schedule where the business allows it, rather than sending one API call per event. Confirm the CRM's API limits for your edition. | Initial contact count, expected daily change volume, and the push method (point trigger, contact action, or batch) with its test plan. |
| Point triggers and campaigns that depend on the sync | Mautic's HubSpot plugin pushes contacts based on contact actions or point triggers. Each trigger that relies on CRM data adds logic to test and a failure path to design. | Limit point-triggered pushes to the few actions that matter to sales. Document which campaigns read CRM data and which only write to it. | Number of triggers and campaigns affected, and whether any campaign needs a CRM value before it can run. |
| Consent and suppression rules that travel with contacts | Opt-outs, channel preferences, and suppression lists must reach the CRM accurately. A missed suppression can email a contact who has withdrawn consent. | Decide which system holds the consent record of truth before mapping. Map consent fields explicitly and test an opt-out end to end. | How consent and suppression fields are mapped, who approves the rules, and how the test evidence is recorded. |
| Environments and test cycles | A staging copy of both Mautic and the CRM sandbox is needed to test mappings and triggers without polluting live records. Each test cycle repeats the mapping and sync checks. | Use a tested staging copy and a CRM sandbox from the start. Agree the number of test cycles and exit criteria in writing. | Number of environments, CRM sandboxes included, test cycles, and who performs user acceptance testing. |
| Existing duplicate data to clean | Duplicate contacts in Mautic or the CRM can cause the same person to be created twice or overwritten. Deduplication rules need decisions and often manual review. | Run a duplicate report in both systems before the first sync. Agree matching keys, such as email address, and the winning record rule. | Duplicate volume estimate from a sample extract, the matching rules to apply, and whether manual review is included. |
| Custom code where the plugin does not cover a case | Plugin behavior may not match a required field type, object, or direction. Custom code adds build, testing, and upgrade effort for each Mautic major release. | Confirm plugin coverage for each mapped field before design. Keep custom code small, documented, and isolated so it can be reviewed at upgrade time. | Each gap found in the mapping review, the proposed custom approach, and how the code is maintained across upgrades. |
| Recurring operation and upkeep | Plugin versions, CRM API changes, and Mautic upgrades each require re-testing the sync. These costs continue after launch. | Pin plugin versions, monitor sync errors, and schedule checks alongside Mautic upgrade planning. | Whether post-launch support, monitoring, and re-testing after upgrades are included or offered as a retainer. |
How the approach changes for Salesforce, HubSpot and other CRMs
The Mautic Salesforce integration documentation for the 7.0 line is the baseline for this path. The plugin maps Mautic contacts and related data to Salesforce objects and fields, so the design work is about agreeing which records move, in which direction and under which matching rules. The access checks happen inside your Salesforce org, and they often decide the project timeline more than the Mautic configuration does.
- Object and field access: Confirm that the integration user can read and write every object and field in the mapping, including custom fields and record types.
- Field mapping: List each Mautic field, its Salesforce target and the direction of sync before configuration starts.
- Duplicate control: Agree which Salesforce identifier or matching field decides whether a Mautic contact updates an existing lead or contact.
- Validation rules and triggers: Check whether Salesforce workflows, validation rules or triggers will reject or reshape records the plugin writes.
- Version alignment: Confirm that the plugin version and its documented Salesforce compatibility match your Mautic release, since the 7.0 documentation is the reference for this path.
Before go-live, ask your Salesforce administrator to confirm the integration user's permissions and to test the mapping in a sandbox that mirrors production rules.
The Mautic HubSpot plugin pushes contacts to HubSpot CRM when a contact action occurs or when a point trigger is reached. The trigger logic lives in Mautic, so the marketing team decides when a contact is sent, but the HubSpot side decides how the record is stored. The main risk on this path is a mismatch between Mautic's contact identity and HubSpot's matching rules, which can create duplicate contacts that are hard to unwind later.
- Trigger design: Decide whether a push happens on a specific contact action or when a point threshold is crossed, and document the expected volume.
- HubSpot properties: Confirm which HubSpot contact properties exist, which are standard and which are custom, and which Mautic fields feed them.
- Contact matching: Check which HubSpot property HubSpot uses to identify an existing contact, and how Mautic's email field is handled when it changes.
- Property permissions: Confirm that the connected HubSpot account can write to every property in the mapping, including any restricted or read-only properties.
- Plugin version: Confirm the plugin's supported versions against your Mautic release before you plan the upgrade path.
Before launch, run a test set of contacts that includes an email change and a repeated push, then confirm in HubSpot that each contact appears once with the expected properties.
When the CRM has no Mautic plugin, the integration is built on the Mautic API or on an integration platform that connects both systems. This path moves the engineering burden into your team or your integration partner. Mautic provides the data and events, but the mapping, retry behavior, error reporting and rate limit handling are things you design and operate.
- Integration method: Choose between direct calls to the Mautic API, a middleware platform, or a custom service, and document the reasons.
- Error handling: Define what happens when the CRM rejects a record, returns a timeout or is unavailable, and who receives the alert.
- Retries and idempotency: Design retries so a repeated request does not create a second CRM record, and keep a log of each attempt.
- API rate limits: Look up the current rate limits for both Mautic's API and the CRM's API, then size batch sizes and schedules to stay within them.
- Duplicate prevention: Choose the unique key that links the two systems and store it on both sides from the first sync.
Before you commit to this path, ask the CRM vendor to confirm its current API limits and the authentication method, and confirm the Mautic version and API endpoints you will call in your own environment.
Protecting CRM credentials, personal data and consent in the sync
A Mautic to Salesforce or HubSpot sync carries credentials, contact details and consent status between two systems. The controls below cover who can connect, where secrets live, which data and consent flags move, and what the logs keep.
Dedicated CRM integration user
Create a separate user in Salesforce or HubSpot for the Mautic connection, rather than tying the sync to a named employee's login. Grant only the object and field permissions the sync needs for the contacts and direction of data flow in scope. Confirm the exact permissions with the current Salesforce or HubSpot documentation and the plugin documentation, since required access depends on which objects are read and written. Review the account whenever integration owners change roles, and watch for permissions that were added for testing and never removed. A narrow account limits exposure if its credentials leak and keeps audit trails readable.
Storing and rotating API credentials
The Mautic plugin settings hold API keys, client secrets or OAuth tokens for the CRM. Keep these values out of source control, container images, deployment scripts and ticket attachments. Inject them from the server secret store or environment at deploy time, restrict read access to the configuration file, and confirm which processes need the values, since web requests and cron jobs both call the CRM. Set a rotation schedule and rotate immediately after any staff change or suspected exposure. Check how OAuth refresh tokens are stored and renewed before relying on them in production.
Limiting fields and consent flags in transit
Map only the contact fields the CRM needs for its process. Leave out free-text notes, tracking data and internal scoring unless a named use requires them. Decide which consent, channel and do-not-contact flags move in each direction, and document the owner of each decision. Opt-outs and suppression status must be pushed or respected: test that an unsubscribe in Mautic reaches the CRM, and that a suppression set in the CRM stops Mautic from emailing that contact. Repeat these tests after every mapping change, because a missing flag can send marketing to someone who has withdrawn consent.
Logging sync activity without personal data
Sync logs help diagnose failed pushes, but raw payloads contain names, email addresses and phone numbers. Log internal contact identifiers, object type, result code, timestamp and an error category instead. Keep request and response bodies out of standard application logs, mask email addresses in exception messages, and check whether any debug or verbose mode of the plugin writes payloads before enabling it in production. Set a retention period for sync logs that matches your data protection policy, and confirm where logs are stored and who can read them.
Named administrators for integration settings
Mautic authenticates its own users with basic authentication, and the docs describe SAML single sign-on as the identity integration option. Limit access to the CRM integration settings to named administrators, and give other marketers only the campaign or contact permissions they need. Confirm how password policy, lockout and multi-factor controls are provided at the identity layer in your environment. Review the administrator list each quarter, remove accounts when people leave, and record who changed a credential or mapping so changes can be traced to a person.
How to test that the sync works and fails safely
The point of this section is simple: before the integration carries live leads, you should be able to show, with written expected results, that each rule works and that a failure leaves Mautic usable and visible to someone. Build a test plan around the rules you already decided on: the data direction for each field, the ownership table for conflicting updates, the point threshold that triggers a push, and the opt-out behavior. Each of these becomes at least one test case with a named input, a named expected result in both systems, and a pass or fail mark. Treat the test plan as a deliverable of the project, not a scratch list kept by one engineer. Start with the core cases. Create a new contact in Mautic and confirm it appears exactly once in the CRM, not zero times and not twice. Edit a field that the ownership table assigns to Mautic, then a field assigned to the CRM, and confirm each change follows its owner in the direction you specified. Push a contact across the point threshold and confirm exactly one push occurs, then add more points and confirm no second push fires. Mark a contact as opted out and confirm the sync does not write marketing data for that person in a way that contradicts your consent records. Submit the same form input twice and confirm the duplicate matching rule produces one CRM record. Keep the contacts in these tests in a dedicated test set, labeled so they are never mistaken for real leads and removed from the CRM afterward. Failure testing matters as much as success testing. Force an API error by pointing the connector at an invalid endpoint or a rate-limited sandbox, and force an expired credential by revoking or rotating the token in a test instance. For each case, confirm three things: Mautic still loads and accepts new contacts, the failed record is held, retried or dropped according to the behavior you chose, and an alert reaches a named owner through a channel someone actually watches. Behavior on retry, queueing or dropping depends on the specific plugin or API client you select, so confirm it in that product's documentation and in a test run rather than assuming it. The HubSpot and Salesforce plugin documentation in the resource list is the place to start, and any custom client needs its own written answers. Run the same test set after every Mautic upgrade and after any change to CRM field definitions, picklists, required fields or API permissions, because either can break a mapping without any visible error on the Mautic side. Store the expected results in version control or a controlled document, record the actual results with the Mautic version and plugin version tested, and keep the last passing run as the reference for the next cycle. Ask your implementation partner, or confirm with your own team, how long a full run takes and who signs off on a failed case before production traffic resumes. A test that nobody repeats will not catch the regression that matters most.
Questions teams ask before building a Mautic CRM integration
How much does a Mautic CRM integration cost?
The cost depends on the written scope, and DeployOpen quotes on a fixed-scope basis from that scope. The main drivers are the number of fields to map, which triggers push data (for example a point threshold or a contact action), how many environments need the integration such as staging and production, and how much duplicate cleanup the existing Mautic and CRM data needs.
One-time work covers design, build, testing and cutover. Recurring costs follow go-live: maintaining the connector or custom code, keeping Mautic and the CRM connector current, and the CRM license seats your users need. Ask for a quote that lists each field, trigger, environment and cleanup task separately, with the assumptions behind each line.
How long does a Mautic CRM integration take to build?
The timeline depends on scope and on how quickly the team gets access to the CRM. Duration grows with the number of objects and fields, the number of sync rules, the volume of historical data to clean, and the number of review rounds on the field mapping.
Access comes first. A sandbox or developer account, API credentials and an administrator who can change field settings should be in place before build starts. No general duration is safe to assume. Ask the implementation partner for a written timeline that lists milestones, the dependencies on your team, and the testing window before go-live. Confirm whether the plan includes a sandbox test, because testing against live contact data carries more risk.
What does our team need to provide for the integration?
Four things determine whether the build moves on schedule:
- Named CRM admin access: one or more people who can create API users, read object and field settings, and approve changes in Salesforce or HubSpot.
- Field ownership decisions: for each synced field, the system that is the source of truth and the person who can change it.
- Test data: representative contacts, including known duplicates and records with consent flags.
- A business owner for the sync rules: someone who signs off on when a contact is pushed, how conflicts are resolved and what may be deleted.
Without a business owner, build work usually stalls at the mapping stage. Ask the partner to list these dependencies in the written scope so you can assign people before the build starts.
Can our own team build a Mautic CRM integration without a partner?
Yes, if the team has Mautic administration skills and CRM administration skills and enough time for testing. The Mautic side covers segments, points, campaigns and the cron jobs that trigger them. The CRM side covers object and field design, API user permissions and duplicate matching rules.
Testing is the step teams most often underestimate. Someone has to confirm that each sync rule runs once, does not create duplicate contacts, and behaves correctly when a record changes on both sides. If one administrator also runs day-to-day campaigns, testing may take longer than the build. A partner can cover the skills your team lacks or review the plan before go-live.
Does the free Mautic software mean no license cost for the integration?
No license fee applies to the Mautic software itself. Mautic has no paid edition of the software, and its GitHub repository is licensed under GPL-3.0. Other costs still apply:
- CRM license seats for the users who work with synced contacts
- Any API access tier your CRM edition may require for integration access
- API rate limits, which can slow large syncs
- Servers, email sending and the time to maintain the integration
Check your CRM vendor's terms before assuming API access is included in your current plan. Ask any partner to show these items separately in the quote.
Which data moves in which direction between Mautic and the CRM?
The direction depends on the connector and on the sync rules you set, so decide each field before the build. The HubSpot plugin pushes contacts from Mautic to HubSpot based on contact actions or point triggers, which makes Mautic the origin for those contacts. Changes that come back from the CRM, and how they overwrite Mautic values, must be designed on purpose.
For each object, record the direction (push, pull or two-way), the trigger, the matching key used to avoid duplicates, and the owner of the field. Confirm these against the plugin version you deploy, since connector behavior can change between releases.
How do we avoid duplicate contacts between Mautic and the CRM?
Pick one matching key for each object, define which system creates new records, and run a cleanup before the first full sync. Email alone often fails as a key when addresses are shared, so test the key against known duplicates. A push that cannot find a match will create a new record in the CRM.
Run a dry run against test data and confirm the result is one record per person. Check the cron schedule as well, because overlapping runs of a segment or campaign can push the same contact twice. Document the cleanup rules and who approves them, since merging CRM records is hard to reverse. Ask the partner how they will verify merge results before production data is touched.
How DeployOpen scopes, builds and hands over Mautic CRM integrations
DeployOpen approaches Mautic CRM integration with Salesforce and HubSpot as a fixed-scope piece of work inside your own infrastructure. We agree in writing which direction each data type moves, which fields map where, and how duplicate contacts are prevented before any connector is switched on. Ongoing support is available as a retainer once the integration is live.
How we scope
- Inventory which objects move between Mautic and the CRM, such as contacts, companies, and activity, and the direction of each.
- Map Mautic contact fields to Salesforce or HubSpot properties, and record which system is the owner of each value.
- Define the trigger logic for pushes, such as contact actions or point thresholds, and confirm it with your marketing and sales leads.
How we build
- Install and configure the HubSpot or Salesforce integration in your Mautic environment, using the plugin documentation for the version you run.
- Set up the duplicate-matching rules, using email or another agreed identifier, and test them against a sample of realistic records you provide.
- Test each direction of data flow in a non-production environment and document the results before production cutover.
How we hand over
- Deliver a field mapping document, trigger definitions, and a record of the duplicate-prevention rules agreed with your team.
- Walk your administrators through the integration settings, the scheduled jobs it depends on, and how to troubleshoot a failed sync.
- Provide the configuration and test evidence in your environment so your own team can review and repeat the checks later.
How we support
- Support after launch can be arranged as a retainer, covering monitoring of sync behavior and fixes for integration issues.
- Plugin compatibility is checked again when you change Mautic or CRM versions, so the integration keeps working through upgrades.
- Ask for the support scope, response expectations and change process in writing before the retainer or project starts.

