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 capability | EspoCRM or Mautic equivalent | Fit | What to confirm or rebuild |
|---|---|---|---|
| Contacts and companies | EspoCRM Contact and Account entities with custom fields | Clean | Map property names and types, and confirm how HubSpot associations become EspoCRM relationships |
| Deals and pipelines | EspoCRM Opportunity entity with custom stages and probability | Needs rework | Recreate pipeline stages, required fields and stage-change logic in the Entity Manager |
| Tickets | EspoCRM Case entity, not a full help desk | Needs rework | Decide whether Case covers your service needs or whether a separate help desk tool is required |
| Email marketing and campaigns | Mautic email, segments and campaigns | Needs rework | Rebuild templates and campaigns, and confirm sending through your own mail service |
| Forms and landing pages | Mautic forms and pages, confirmed for your version | Needs rework | Confirm form features against your Mautic version before rebuilding embedded forms |
| Lead scoring | Mautic point actions and contact scoring, confirmed for your version | Needs rework | Recreate scoring rules by hand and validate them with test contacts |
| Workflows | EspoCRM workflows and BPM via the Advanced Pack, plus Mautic campaign builder | Needs rework | Confirm which Advanced Pack features your plan includes and split logic between the two systems |
| Sequences, reporting dashboards and attribution | No direct equivalent in the core products | Gap | Plan 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.
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.
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.
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.
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.
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.
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.
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.
| Driver | Why it changes cost or effort | How to keep it down |
|---|---|---|
| Contact and company volume | Larger 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 mapping | Each 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 rebuild | Every 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 records | Marketing 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 mailboxes | Each 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 Mautic | Keeping 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-ons | Reports, 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 skills | Self-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.
A marketing-heavy team treats contact lists, segments, forms and automated campaigns as the core asset. Here Mautic is the primary system for marketing data, and EspoCRM receives only the records that sales needs to act on. The sequence starts with consent and list data, because the most sensitive work is deciding which contacts may be imported, under which basis, and with which opt-in history. Export volume also matters: HubSpot limits how many exports can run in a rolling 24-hour window and how many can run at once, so large portals need a planned extraction schedule.
- Consent before import: Map each marketing status and its source before any contact reaches Mautic.
- Export scheduling: Plan extraction batches around HubSpot's rolling 24-hour export cap and its limit on concurrent exports.
- Segment rebuild: Recreate lists and segments in Mautic and check counts against the HubSpot source before sending.
- Sending infrastructure: Confirm the sending service, bounce handling and suppression lists before the first campaign runs.
- Sync boundaries: Decide which fields flow to EspoCRM, so that marketing engagement does not overwrite sales ownership.
Ask your engagement or implementation partner to show, in writing, how each list and its consent status will be traced from the HubSpot export to the Mautic contact record.
A team with heavy HubSpot workflows has automation that runs across sales, marketing and service: lead routing, lifecycle stage changes, enrichment, and internal notifications triggered by property updates. This is the tab where the migration takes the longest, because workflows usually encode business rules nobody has written down. The sequence begins with an inventory of every active workflow, its triggers, its actions and its owner. Each one is then assigned to EspoCRM (workflows, Business Process Management or scripts), to Mautic (campaigns and segment logic), or to retirement. Mautic's cron jobs handle segment updates, campaign updates and triggers, so schedules must be planned and staggered from the start.
- Workflow inventory: List every HubSpot workflow with its trigger, action, enrolled population and owner.
- Assignment decisions: Route each rule to EspoCRM, Mautic or retirement, and record the reason.
- Scripting capacity: Check which rules fit EspoCRM's Formula Script or workflows, and which need custom development.
- Scheduled jobs: Configure cron for EspoCRM background jobs and Mautic segment and campaign jobs, staggered as the Mautic docs describe.
- Parallel running: Run old and new automations side by side on test records until outputs match.
Check whether each workflow is still needed, since a migration is a good moment to remove rules that no one can explain.
A team that already sends email from its own domain, with SPF, DKIM and DMARC managed by its own staff, has the least sending risk. The main task is to point an existing sending service at Mautic and check that reputation carries over without a gap. HubSpot may still hold tracking domains, landing pages and forms that must be redirected, so the cutover requires a DNS and link plan, not just a data move. Because the sending identity is already the team's own, the sequence can focus on data quality and the cutover date for campaigns.
- Sending identity: Confirm which domain and sub-domain Mautic will send from, and that its authentication records are already in place.
- Tracking and links: Plan how HubSpot tracking links and landing page URLs will redirect or retire.
- Warm-up path: Decide whether volumes should step up gradually on the new sender to protect reputation.
- Suppression carry-over: Import bounce and unsubscribe records so that previously suppressed contacts stay suppressed.
- Cutover window: Pick a campaign calendar that avoids a major send during the switch.
Confirm with your email provider how sender reputation and bounce history will be handled, since those rules differ by provider and are not covered by the migration tools themselves.
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.

