Migrate HubSpot CRM and marketing to EspoCRM and Mautic

Splitting a HubSpot move between EspoCRM for sales records and Mautic for campaigns, with the sync, consent and cutover work that decides whether the migration holds.

On this page

Migrate HubSpot CRM and marketing to EspoCRM and Mautic: what moves and what does not

If your HubSpot portal holds both sales records and marketing email, forms and lead scoring, this is a two-platform move with a sync layer between them, not a single export. EspoCRM takes over accounts, contacts, leads, opportunities and pipelines, while Mautic takes over email campaigns, forms, landing pages, segments and scoring rules. The two systems must agree on contact identity, so the sync layer is where most of the risk sits. This work is usually led by the RevOps or marketing operations lead with an IT or platform engineer who owns the servers, and it is normally scoped as fixed planning and implementation work with written deliverables, not as a single export run by a sales administrator.

Plan for the consent and list data first. HubSpot's marketing contact properties, email subscription statuses and suppression records are what keep you compliant when you send again, so confirm with your legal or privacy owner which fields and opt-in evidence must be preserved and mapped into Mautic's contact and DNC records before any list is imported. Do not treat HubSpot's exports as a complete audit trail, because the export only returns the records and properties you select. Also confirm which HubSpot exports the sync needs, since HubSpot caps how many exports you can run in a rolling 24-hour window and how many can run at once, which shapes the extraction schedule for a large portal.

Decide early which system owns each identifier, usually the email address plus a stable external ID written to both platforms, and which system wins when a field changes in both places. Mautic's cron jobs for segment updates, campaign triggers and broadcasts must be staggered and running before any automation is switched on, and a messenger consumer is needed if email is queued, so the operations team needs to own that runtime. Your sending service and deliverability setup move with the campaigns, which is a separate decision from the data move. Ask the implementer to write down which reports, scores and attribution views will be rebuilt, which will move to another tool, and which will be dropped, before cutover is scheduled.

Which HubSpot capabilities map cleanly to EspoCRM and Mautic

This table compares the main HubSpot capabilities against EspoCRM for sales records and Mautic for marketing campaigns. Each row is marked clean, needs rework or gap, so you can see which parts of the move are a data transfer and which parts require rebuilding or another tool. Treat Mautic's form and scoring rows as provisional until you confirm them against the version you plan to run.

HubSpot capabilityEspoCRM or Mautic equivalentFitWhat to confirm or rebuild
Contacts and companiesEspoCRM Contact and Account entities with custom fieldsCleanMap property names and types, and confirm how HubSpot associations become EspoCRM relationships
Deals and pipelinesEspoCRM Opportunity entity with custom stages and probabilityNeeds reworkRecreate pipeline stages, required fields and stage-change logic in the Entity Manager
TicketsEspoCRM Case entity, not a full help deskNeeds reworkDecide whether Case covers your service needs or whether a separate help desk tool is required
Email marketing and campaignsMautic email, segments and campaignsNeeds reworkRebuild templates and campaigns, and confirm sending through your own mail service
Forms and landing pagesMautic forms and pages, confirmed for your versionNeeds reworkConfirm form features against your Mautic version before rebuilding embedded forms
Lead scoringMautic point actions and contact scoring, confirmed for your versionNeeds reworkRecreate scoring rules by hand and validate them with test contacts
WorkflowsEspoCRM workflows and BPM via the Advanced Pack, plus Mautic campaign builderNeeds reworkConfirm which Advanced Pack features your plan includes and split logic between the two systems
Sequences, reporting dashboards and attributionNo direct equivalent in the core productsGapPlan replacement with reports, BI tooling or custom development, and drop features you do not need

Which exports, consent records and integrations need to move

The move splits in two: EspoCRM takes the sales records, and Mautic takes the marketing contacts, consent and list memberships. Each card covers one piece of data that has to leave HubSpot, the limits on getting it out, and the link between the two platforms that has to be scoped as custom work.

Contact, company and deal exports

HubSpot lets users with export permissions export contacts, companies and deals as CSV, XLSX or XLS files, with property values and associations. Export the object types separately and keep the record IDs, because associations are what link a deal to its contacts and companies in EspoCRM. Check each file for multi-select properties and custom fields, which often need to be split before import.

Export rate limits and concurrency

HubSpot allows up to 300 exports in a rolling 24-hour window and up to three exports running at once. For a large portal, plan the export order so that a failed or partial file can be re-run without exhausting the window. Schedule the extraction in a single pass where possible, and record which file covers which object and date range.

Consent and subscription status

Marketing email consent is the record most likely to be lost in translation. Export the subscription status and consent properties for each contact, and confirm with your legal or privacy team which lawful basis and opt-in evidence apply to each group before any contact is loaded into Mautic. Do not import contacts as subscribed unless their status in HubSpot supports that.

List and segment membership

Static lists and active segments in HubSpot do not transfer as-is. Export list membership as a separate file, then recreate each list as a Mautic segment or a tagged group, and check the count against HubSpot before the first campaign runs. Confirm which lists are suppression lists, since those must be preserved exactly.

EspoCRM and Mautic import paths

EspoCRM's import tool loads CSV files into entities and supports mapping columns to fields, so sales records can go in directly after the field mapping is set. Mautic imports contacts through its own import process, with fields and tags configured in advance. Test each path with a small sample file and confirm that duplicates and contact identifiers match across both systems.

Ongoing sync is custom work

Keeping EspoCRM and Mautic aligned after cutover is not a standard feature of either product, so it has to be scoped as custom integration work. Mautic's HubSpot plugin shows how a bidirectional connector maps contacts and activity, and can serve as a reference, but it connects to HubSpot rather than to EspoCRM. Define which system owns each field, how conflicts are resolved, and how the sync is monitored before the work begins.

How the migration runs in order, from inventory to decommission

The sequence moves sales records and marketing data out of HubSpot in controlled stages, so each platform is proven on a small segment before any live campaign or form depends on it. Each step ends with a written sign-off that the next step needs.

  1. Inventory objects, lists and consent sources

    List every HubSpot object in use (contacts, companies, deals, tickets, custom objects), every static and active list, every form, sequence and workflow, and every sending domain. For each contact list, record where the consent came from, when it was captured, and which opt-in and unsubscribe status applies. Your marketing lead and legal or privacy contact own the consent record, and the DeployOpen team or your internal admin maps the inventory into a field-by-field plan. The output is a signed inventory that shows which data goes to EspoCRM, which goes to Mautic, and which contacts may receive marketing email at all.

  2. Stand up both platforms in your infrastructure

    Install EspoCRM and Mautic in your own environment, following the server requirements for each product, and confirm that Mautic runs on a VPS or dedicated server rather than shared hosting. Configure cron jobs for Mautic segment and campaign updates with staggered timing, and set up the messenger consumer if emails are queued. Set up backups for both databases before any data arrives. The output is two working environments with tested backups and a documented restore procedure.

  3. Export and map HubSpot records

    Export contacts, companies, deals and tickets from HubSpot with their properties and associations, checking export permissions and the account's export limits before you start. Map HubSpot properties and pipeline stages to EspoCRM fields and stages, and map contact properties and consent fields to Mautic contact fields and segments. Keep exported files in a controlled location with access logging. The output is a mapping document and a set of exports that someone has checked for completeness against record counts in HubSpot.

  4. Pilot with a small segment

    Import one small, consented segment into both platforms and test the full path: a contact and its deal appear in EspoCRM with correct associations, the same contact appears in Mautic with the right consent status, and a test campaign sends only to permitted recipients. Compare the results with HubSpot for the same records. Fix mapping errors and re-run the import until the results match. The output is a pilot report signed by sales and marketing owners that lists what matched, what failed and what was corrected.

  5. Run both platforms in parallel

    Keep HubSpot active while EspoCRM and Mautic receive the same changes through the sync you have built, and compare record counts, pipeline stages, list membership and unsubscribe status on a regular schedule. Treat any mismatch as a defect to trace to a mapping rule or sync job. Confirm that suppression lists are honored in both directions, so an opt-out in one system stops marketing email everywhere. The output is a dated reconciliation log showing zero unexplained differences before cutover.

  6. Cut over forms and sending domains

    Point web forms, landing pages and tracking to Mautic, and move sending domain authentication (SPF, DKIM and DMARC records) to your own sending service so deliverability is controlled by your team. Update DNS and tracking domains, then test each form submission end to end. Schedule the cutover outside peak campaign periods and keep the HubSpot forms in place as a fallback until the new path is confirmed. The output is a cutover checklist with each form, domain and DNS change marked as tested and owned.

  7. Retire HubSpot after the retention period

    Once EspoCRM and Mautic have run in production and you have confirmed that no active process still writes to HubSpot, export a final archive of HubSpot records, emails and consent history for your retention policy. Cancel or downgrade HubSpot only after your records and legal owners approve that archive. Confirm which HubSpot data types the export excludes, such as email content and some integration data, and store those separately if you need them. The output is a signed decommission record that names the archive location, its retention period and the approver.

How EspoCRM and Mautic stay in step during the parallel run

The most important decision in the parallel run is which system owns each record. Mautic owns the contact as an engagement profile: form submissions, email opens, clicks, segment membership, campaign position and the consent flags that govern sending. EspoCRM owns the commercial record: the lead, the account, the opportunity and the owner who works it. A practical rule is to create the Mautic contact first when a form is submitted, then hand the record to EspoCRM only when a qualifying action occurs, such as a form field marked as a sales request or a Mautic point threshold you define. Whatever mechanism you choose, write the ownership rule down and check that no field is editable in both systems without a stated winner. Otherwise the same phone number or job title will flip back and forth on each sync. Confirm in your own build whether the connector or custom script keys records on email address, Mautic contact ID or an EspoCRM external ID, because duplicate creation is the most common failure when keys differ.

Opt-outs and bounces must flow in one direction only: from Mautic to EspoCRM, not the other way. If a sales rep changes a lead's status in EspoCRM, that change must not re-subscribe anyone to marketing email. Set the Mautic do-not-contact flag as the authority and have EspoCRM read it, so a bounce or unsubscribe recorded in Mautic is reflected on the EspoCRM record and stops further outreach from either side. Test this deliberately with a seeded contact that unsubscribes, bounces and then reappears in an EspoCRM import. Confirm how your sync handles a contact who is re-imported with an old opt-in state.

Mautic also needs background work to run on schedule, and this is where parallel runs quietly fail. Its documentation describes cron jobs for segment updates, campaign updates and campaign triggers, which should be staggered so they do not compete for the database, plus a broadcasts command for segment emails and a messenger consumer when emails are queued. If the consumer is not running, emails sit in the queue and campaigns appear to stall without an error in the interface. Assign an owner to each job, alert on queue depth and failed runs, and check the schedule after every server reboot or Mautic upgrade. On the EspoCRM side, confirm that its own cron or scheduled task is running, because workflows and reminders depend on it. Verify these jobs in staging before cutover, not after.

What drives the cost and duration of this migration

This table lists the factors that move the cost and effort of moving HubSpot sales records to EspoCRM and marketing email to Mautic. Read each row as a lever: the driver, why it changes the bill, and how to keep it manageable. No duration figures appear because none are supplied for this migration, so ask any implementation partner for a written scope before planning dates.

DriverWhy it changes cost or effortHow to keep it down
Contact and company volumeLarger portals take longer to export, cleanse, deduplicate and import, and HubSpot caps exports at 300 in a rolling 24-hour window, so big extractions spread over more days.Archive inactive records, delete duplicates before export and split extractions by object and date range.
Custom properties and object mappingEach custom property needs a matching EspoCRM field, layout and import mapping, and unmapped fields are often found late in testing.Inventory properties with owners, retire unused ones and agree a mapping sheet before any import runs.
HubSpot workflows to rebuildEvery workflow must be re-expressed as EspoCRM workflows, BPM or formula scripts, or as Mautic campaigns, and deep branching logic takes the most design time.Document each workflow's purpose, drop dead ones and rebuild the simplest version that meets the business need first.
Consent and suppression recordsMarketing contacts need opt-in status, source and timestamps carried across, and gaps may force re-permissioning campaigns that delay sending.Export consent fields early, check the record of how each opt-in was captured and agree with legal counsel what can be imported.
Number of sending domains and mailboxesEach domain needs its own authentication records, warm-up and bounce handling through your own sending service, which adds setup and monitoring work.Consolidate sending domains where the brand allows and confirm the sending provider's domain requirements before design.
Sync between EspoCRM and MauticKeeping contacts, lists and engagement aligned between two systems adds integration design, error handling and reconciliation work for every change.Choose one system of record for each field, limit synced fields to what campaigns need and define a single owner for conflicts.
EspoCRM extensions and add-onsReports, Business Process Management and workflows are part of the Advanced Pack, which is included in EspoCRM Cloud plans, so self-hosted installs need a decision on its licensing and setup.Confirm which extensions your workflows need with the vendor before purchase, and map which features can be built with core tools.
Hosting, security and admin skillsSelf-hosting requires a server meeting PHP, database and cron requirements for both products, plus backups, upgrades and an admin who can run Mautic's scheduled jobs.Reuse existing hosting standards, agree an upgrade cadence against each product's release and support windows and cross-train at least two admins.

What usually goes wrong when marketing data leaves HubSpot

Moving marketing data is harder than moving sales records because consent, suppression, sender reputation and scoring all travel with the contacts. The cards below cover the failures that most often appear after cutover, and each one names a check to run before and during the migration.

Consent and suppression lists lost

Unsubscribes, bounces and marketing consent flags live in HubSpot's email subscription and contact properties. If only the contact list is exported, opted-out people can be imported as reachable and emailed again, which creates both legal exposure and complaints. Export subscription status and suppression history as separate files, import them into Mautic before any contact is added to a campaign, and confirm that Do Not Contact flags are set on every suppressed record.

Duplicate contacts across two platforms

EspoCRM holds sales records and Mautic holds campaign contacts, and both can create a person from the same email address. Without one agreed matching key, the same buyer appears as two leads with different scores and histories. Choose the email address as the unique identifier, deduplicate in the source export before import, and set the sync direction so that only one system owns each contact field.

Sender reputation loss on a new domain

Switching the sending domain or IP resets the sender history that mailbox providers use to judge bulk mail. Volume that HubSpot sent safely can land in spam once it comes from a new server. Warm the new sending setup gradually, keep the authentication records for SPF, DKIM and DMARC in place, and send to the most engaged segment first. Ask your sending provider what warm-up support it offers before cutover.

Mismatched lead scoring

HubSpot scores are built from its own property history and activity rules, which do not carry over. A contact that scored 80 in HubSpot can arrive in Mautic with no points and be handled as cold, or the reverse. Rebuild scoring rules in Mautic from the scoring logic you actually use, back-test them on a sample of exported contacts, and compare the top decile before switching sales routing.

Cron jobs not staggered

Mautic runs segment updates, campaign updates and campaign triggers as scheduled cron jobs, and its documentation says these should be staggered. Running them all at the same minute on a small server causes overlapping runs, slow sends and missed triggers. Assign separate schedules to each job, add the broadcasts command and messenger consumer for queued email, and check the logs for the first week after go-live.

HubSpot export truncation

HubSpot limits how many exports you can run, so a large portal can be split across files that look complete but are not. Associations between contacts, companies and deals can also be cut when a file is partial. Plan the extraction window around the export allowance, count rows in each file against the portal totals, and reconcile association counts before deleting anything in HubSpot.

How the split differs by team size and starting point

A sales-led team uses HubSpot mainly for contacts, companies, deals and activity, and sends only occasional campaigns. In this case EspoCRM carries most of the weight and Mautic is a smaller, later addition. The first sequence is the sales data: export contacts, companies, deals and their associations, rebuild pipelines and stages in EspoCRM, and confirm that owners and teams line up before anyone works in the new system. Marketing can often stay on a lighter path, such as a short list of newsletter sends or a few forms, until the sales cutover is stable.

  • Sales cutover first: Move pipelines, stages and deal ownership before touching any marketing data.
  • Small marketing surface: Decide whether a few sends can run from Mautic or from a simpler tool, rather than standing up full automation on day one.
  • Association checks: Test that every deal still points to the right company and contact after import.
  • Activity history: Confirm which notes and activities must be preserved and which can be archived in the HubSpot export.
  • Sequencing: Keep the old HubSpot seats active until pipeline reporting in EspoCRM matches.

Before you commit, check with your team which marketing sends they actually run each month, because that list determines whether Mautic is needed at all in the first phase.

Questions buyers ask before moving HubSpot marketing to Mautic

What drives the cost of moving HubSpot marketing to Mautic?

The cost is driven mostly by the work around the software, since Mautic itself has no paid edition. Mautic is free to download from mautic.org, so the spend splits into hosting on a VPS or dedicated server (the project advises against shared hosting), the people who install, configure and migrate it, a transactional or bulk sending service, and admin time for cron jobs and upgrades. Costs rise with the number of contacts, the number of segments and campaigns you rebuild, and how many sending domains you run. Ask any implementation partner for a written scope that lists each of these components separately, and ask your sending provider for its own per-volume pricing.

How long does a HubSpot to Mautic marketing migration take?

The duration depends on how much marketing logic you rebuild, not on the software install alone. Setup involves choosing a supported Mautic release, provisioning a server that meets the PHP and database requirements, and configuring cron jobs, which the docs say should be staggered across segment updates, campaign updates and campaign triggers. Then come segments, campaigns, forms, landing pages and deliverability checks. Large contact databases and complex lead scoring extend the timeline. Mautic's release cadence (monthly patches, minor releases every three months and major releases every two years) also means you should plan an upgrade window into the project. Ask for milestones in writing before work starts.

What does the work need from our internal team?

You need named owners for marketing data, IT operations and sending infrastructure. Marketing owns list definitions, segment logic, templates and the decision about which campaigns are rebuilt. IT or platform engineering owns the server, PHP and database versions, TLS, backups and cron scheduling. Whoever manages DNS owns the authentication records for your sending domain. The team also needs to decide how sales records in EspoCRM will sync with Mautic contacts, because the two products are separate systems. Confirm with your implementation partner which of these roles they cover and which stay with your staff.

Can our team migrate HubSpot marketing to Mautic without outside help?

A capable internal team can install Mautic, since the project documents a web installer, a command-line installer and a Composer project template, and it can run on a VPS. The harder parts are consent-aware data mapping, rebuilding lead scoring and campaign logic, validating deliverability and setting up reliable scheduled jobs. Mautic's docs also note that segment emails rely on a broadcasts command and a messenger consumer when emails are queued, which are easy to miss. Assess your team's experience with Symfony-based PHP applications, mail infrastructure and database administration before deciding. A fixed-scope engagement can cover only the parts you choose to hand over.

Can consent and subscription data move from HubSpot to Mautic?

Consent data can move, but only with a documented basis for each record. HubSpot lets users with export permissions export contacts with property values as CSV, XLSX or XLS files, and the export includes the properties you capture. Before importing, confirm with your legal or privacy team which opt-in evidence, timestamps, unsubscribe states and lawful basis you hold, and whether the source permits transfer to a new processor. Map those fields into Mautic contact and do-not-contact records, then test that suppressed contacts stay suppressed. Your data protection counsel should approve the mapping, since this decision depends on your jurisdiction and your original collection notices.

What can Mautic not replace from HubSpot Marketing Hub?

Mautic covers email, automation, forms and landing pages, but some HubSpot features need other tools or custom work. Reporting dashboards built on HubSpot's attribution and revenue views usually need a separate BI or analytics tool. Sending infrastructure, including the mail server or relay and deliverability monitoring, is your responsibility. Mautic's own integration plugins for HubSpot and Salesforce exist in the documentation, so confirm whether they still fit your target state before relying on them. Check each HubSpot feature against your list of campaigns and forms during scoping, and record the gaps as written decisions.

How do Mautic and EspoCRM stay in sync during the move?

Sync is a design decision that you must scope explicitly, because the two products do not share a database. EspoCRM provides a REST API with API key, HMAC and basic authentication through dedicated API users, and the docs describe HMAC as the most secure method and basic authentication as not recommended. Decide which system owns each field, how contact identifiers match across both, and how lead status changes flow back. Test sync with a copy of production data before cutover, and document the failure handling for failed or duplicate records.

How DeployOpen scopes and runs a HubSpot to EspoCRM and Mautic migration

DeployOpen plans, implements, integrates, hardens, documents and supports self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. For this migration, we split the work between EspoCRM for sales records and Mautic for campaigns, then agree the scope, consent handling and sync design in writing before any data moves.

How we scope

  • Written scope lists which HubSpot objects, pipelines, forms, lists and consent records move to EspoCRM or Mautic.
  • We document which marketing features are replaced, which are rebuilt and which are dropped before implementation starts.
  • The scope names the hosting targets, sending service, identity provider and the sync direction between the two platforms.

How we build

  • We install EspoCRM and Mautic in your environment, with the database, cron jobs and background email workers configured.
  • We map HubSpot properties and associations to EspoCRM fields and Mautic contact fields, with consent and opt-in status kept intact.
  • We build the sync between the two platforms and test it with sample records, duplicates and unsubscribed contacts.

How we hand over

  • You receive documentation of the field mappings, sync logic, cron schedule, backup steps and admin procedures.
  • We provide a cutover checklist covering DNS, sending domains, form endpoints and final HubSpot export reconciliation.
  • Handover includes walkthroughs for sales and marketing admins on where records, lists and campaigns now live.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers after handover.
  • Upgrade planning follows the release windows of EspoCRM and Mautic, which you should confirm against their current release pages.
  • Retainer scope, response expectations and upgrade responsibilities are set out in writing before work begins.

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.