Migrate from HubSpot to SuiteCRM

A planning guide for moving HubSpot Sales and Service Hub records to self-hosted SuiteCRM 8, covering what maps cleanly, what needs rework, and how to cut over safely.

On this page

Migrate from HubSpot to SuiteCRM without losing sales or service history

A renewal, seat growth or a data residency requirement has put HubSpot under review, and the answer is that moving to self-hosted SuiteCRM is a data mapping, rebuild and cutover project with moderate effort and clear risks. The work is not a lift and shift. Contacts, companies, deals and tickets must be mapped to SuiteCRM modules, custom properties must be matched to fields or dropped, and every HubSpot association must be re-created as a relationship that users can actually navigate. Most teams run this with internal CRM administrators who own the business rules, supported by an implementation partner who handles the technical extraction, import scripts and environment setup. The effort depends less on record volume than on how heavily the portal relies on custom properties, custom objects, associations and workflows. A portal with a small set of standard properties and a few pipelines is a far simpler job than one with years of layered automation.

Start with an inventory before choosing a timeline. Export the property definitions and list every workflow, sequence and report that writes to or reads from a CRM field, then decide for each one whether it becomes a SuiteCRM field, a workflow, a dropdown value or nothing at all. Ask your partner to document how the SuiteCRM 8 environment will be set up and how HubSpot data will be moved into it, and confirm that the target version is the current 8.x release line and that its compatibility matrix matches your hosting stack. Plan for a staging instance from day one. SuiteCRM's own migration guidance recommends testing on staging, backing up files and database, and reviewing customizations, because the process may remove non-core files under the public/legacy folder. Log the results of each test import so the production cutover is a repeat of a known process rather than a first attempt.

Plan for the risks that are specific to this move. Service history is the most fragile part: ticket threads, attachments and the link between a ticket and the contact or account it belongs to must survive the export, so verify a sample of tickets end to end before cutover. Login also needs a decision early, because SuiteCRM 8 can authenticate through LDAP with AUTH_TYPE=ldap or SAML with AUTH_TYPE=saml, and the SAML implementation in 8.7.0 and later does not support IdP-initiated logout, so signing out at the identity provider does not end the SuiteCRM session. Keep HubSpot read-only for a defined period after cutover, and confirm with your team how historical email and marketing data will be handled, since those belong to a separate decision. The cutover plan should name an owner for each sign-off, a rollback point and a date after which HubSpot is no longer the system of record.

Which HubSpot capabilities map to SuiteCRM and which need rework

This table compares HubSpot objects, pipelines, associations, Sales Hub sequences and Service Hub help desk features with their closest SuiteCRM 8 modules or functions. Each row is marked clean, needs rework or gap, so you can size the migration before the first export. Confirm every module behavior against the SuiteCRM 8.10 documentation and in a staging instance, because field and workflow details vary with your configuration.

HubSpot capabilitySuiteCRM 8 equivalentStatus
Contacts and companiesContacts and Accounts modules with standard fields and relationshipsClean
Deals and pipeline stagesOpportunities module with sales stages; confirm stage lists and probability settingsNeeds rework
Tickets and help desk queuesCases module for ticket records; queue routing and SLA timers need configuration or add-onsNeeds rework
Custom object propertiesCustom fields added through Studio or module builder; map each HubSpot property type to a field typeNeeds rework
Custom objectsCustom modules built with Module Builder; confirm the structure and relationships before loading dataNeeds rework
Associations between recordsRelationships between modules; HubSpot association labels usually need to be recreated as relationship definitionsNeeds rework
Sales Hub sequences and email cadencesNo direct equivalent confirmed for this migration; plan a separate sequencing tool or manual processGap
Service Hub knowledge base and feedback surveysKnowledge base and survey features are not covered by core Cases; confirm with SuiteCRM documentation or another toolGap

What data moves out of HubSpot and which integrations must be rebuilt

HubSpot data leaves through a documented export path with hard limits, while integrations, mailboxes and login do not move on their own. Plan the export window first, then rebuild the connections that the new SuiteCRM 8 instance needs to run the business from day one.

Record exports with properties and associations

Users with export permissions can export contacts, companies, deals, tickets and custom objects as CSV, XLSX or XLS files, with property values and associations included. Confirm which of your custom objects and association types appear in each export file, since a flat file does not preserve the relationships in the same form SuiteCRM expects. Build a mapping sheet that ties each HubSpot object to a SuiteCRM module before you start pulling files, so the import order follows the relationships (accounts before contacts, contacts before opportunities and cases).

Export concurrency and rolling limits

HubSpot allows up to 300 exports in a rolling 24-hour window and up to three exports running at once. A large portal with many custom objects can exhaust the daily allowance quickly if each object is exported in separate small batches. Plan the extraction in one scheduled run, keep a log of every file name and export time, and reserve spare exports for re-pulls after a failed import.

Attachments and files outside the export

Record exports carry property values and associations, but attachments on notes, emails and tickets need separate handling. Ask your HubSpot admin which file types and volumes are attached to records, then decide whether they are downloaded through the HubSpot interface or left in place with links. Store the retrieved files on your own object storage or file server, and record the link between each file and its SuiteCRM record so the context survives the move.

Email sync and mailbox connections

HubSpot email logging and inbox connections do not transfer to SuiteCRM. Decide which mailboxes must be linked to SuiteCRM, which historical emails are worth importing, and which stay in the mail system only. Confirm with the mail platform and the SuiteCRM email configuration that inbound and outbound mail reach the new instance, and test with a sample account before cutover.

Third-party integrations and API connections

Every HubSpot connection to forms, calendars, telephony, ERP or data warehouse tools must be inventoried and either rebuilt against SuiteCRM's own interfaces or retired. Start from the HubSpot integrations list and the API token owners, because a token that feeds a tool may be the only record of that dependency. Document each integration with its data direction, owner and test case, and confirm with the vendor of each tool that it supports SuiteCRM before committing.

LDAP or SAML login for SuiteCRM 8

SuiteCRM 8 can authenticate users through LDAP, enabled with AUTH_TYPE=ldap, or through SAML, enabled with AUTH_TYPE=saml. Confirm which directory or identity provider your users already use, then test group mapping and account provisioning before go-live. Note that the SuiteCRM 8.7.0+ SAML implementation does not support IdP-initiated logout, so signing out at the identity provider does not end the SuiteCRM session. Plan a session timeout and user offboarding procedure to cover that gap.

The migration sequence from inventory to decommission

This sequence moves HubSpot contacts, companies, deals and tickets into a SuiteCRM 8 instance you host yourself, proving the mapping on test data before any live user depends on it. Each step ends with a written artifact so the cutover and the HubSpot seat cancellation rest on evidence rather than memory.

  1. Inventory HubSpot objects and properties

    List every object in use: contacts, companies, deals, tickets, custom objects, pipelines, owners, teams and associations between them. For each custom property, record its internal name, field type, allowed values, owner and whether reports, workflows or integrations read it. Pull the portal's workflow and sequence list at the same time, since these rules are the logic you will rebuild. The output is a field mapping sheet that pairs each HubSpot property with a planned SuiteCRM module and field, and flags anything with no target yet. Sign-off comes when the business owners of each pipeline have reviewed the sheet.

  2. Build the SuiteCRM 8.10 staging environment

    Deploy SuiteCRM 8.10 on a staging host in your own infrastructure, using the PHP, Apache and MariaDB or MySQL versions listed in the SuiteCRM compatibility matrix for that release. Configure the login method you plan to use in production, whether LDAP or SAML, so that access is tested with the same identity flow users will see. Keep staging isolated from production email and any integration endpoints. The output is a documented build record with versions, configuration keys and the backup routine, confirmed by the platform owner.

  3. Run a pilot with a test data set

    Export a representative slice of HubSpot records as CSV or XLSX, including contacts with company associations, deals in each pipeline stage and a sample of tickets with their notes. Import the slice into staging through the mapping sheet, then check field types, date formats, currency values, owner assignments and association links against the source. Rebuild one pipeline and one case queue end to end, and have a sales lead and a support lead work through real scenarios. The output is a signed-off pilot report listing every mapping change made during testing and every open defect, with the decision to proceed recorded by the business owners.

  4. Run the parallel period

    Migrate the full data set into a production SuiteCRM instance while HubSpot remains the system of record for daily work. Repeat the export and import in a controlled order so that record counts, association counts and pipeline totals can be compared between the two systems. Keep a log of any records created or changed in HubSpot during this window, because they will need a delta load. The output is a reconciliation report that compares counts and sampled field values per object, with each difference explained or fixed. Confirm the report with the data owner before moving to cutover.

  5. Cut over users and final data

    Freeze edits in HubSpot for a short, announced window, run the final export, load the delta, and rerun the reconciliation for the records that changed. Switch users to SuiteCRM login, confirm that each role sees only the records its permissions allow, and point any remaining integrations at the new endpoints. Confirm that attachments and notes were carried over, since attachments and files in HubSpot may need a separate export. The output is a cutover record showing the freeze time, the final reconciliation result and the list of users who completed a first login.

  6. Archive HubSpot exports before decommissioning

    Before cancelling any seats, produce a complete archive of HubSpot data in the formats the export tools provide, covering all objects, properties and associations you need to retain for records, disputes or audits. Store the archive in your own controlled storage with access logs and a documented retention period set by your compliance owner. Check export limits and link expiry in advance so the archive is not rushed. The output is an archive inventory listing each export file, its date, its checksum and its custodian.

  7. Decommission HubSpot seats and confirm closure

    Remove users from HubSpot in stages, starting with integrations and service accounts, then human seats, and confirm that no workflow, form or sync still writes to the portal. Review the contract terms with your commercial team to understand notice requirements and what happens to data after cancellation. Revoke API keys and private apps once nothing depends on them. The output is a closure checklist signed by the CRM owner and finance, recording the date of the last active seat, the revoked credentials and the location of the archive.

How SuiteCRM 8 is set up and why a fresh environment matters

SuiteCRM 8 is installed as a new environment, not upgraded in place from SuiteCRM 7. The 8.x line pairs an Angular frontend with a Symfony backend, so the application, its configuration and its customizations are not a drop-in replacement for the 7.x codebase. Before the HubSpot data arrives, the platform team should provision a clean host or container set, confirm the PHP runtime (SuiteCRM 8.10 supports PHP 8.2, 8.3 and 8.4) and choose a database from the supported MariaDB or MySQL versions listed in the SuiteCRM 8 compatibility matrix. Check the matrix again on the day you build, because version support changes between releases. Plan a staging instance first so that the configuration and the data import can be rehearsed before cutover.

Login is the decision that most affects day-two operations. SuiteCRM 8 can authenticate users against LDAP, enabled with AUTH_TYPE=ldap, or against SAML, enabled with AUTH_TYPE=saml. Confirm with your identity team which option matches your directory and whether role mapping can be handled at login. Note also that the SAML implementation in 8.7.0 and later does not support IdP-initiated logout or POST binding to the logout service. Signing out at your identity provider therefore does not end the SuiteCRM session, so you should document that behavior for users and decide whether session lifetimes or a separate logout step will compensate for it. Verify both settings in the SuiteCRM 8.7.0+ SAML configuration reference before you sign off the staging build.

What drives migration cost and duration

This table lists the main drivers of effort in a HubSpot to SuiteCRM move and how each one can be kept down. No price or duration is given because both depend on the written scope, which DeployOpen agrees with you before work starts. Use the table to see which items your own portal makes large.

DriverWhy it moves cost or effortHow to keep it down
Record volumeEvery contact, company, deal and ticket must be exported, cleaned, deduplicated and loaded, and HubSpot caps exports at 300 in a rolling 24-hour window with three running at once, so large portals need a longer extraction plan.Archive inactive records, remove duplicates in HubSpot before export, and agree which history is migrated and which stays in an archive file.
Custom properties and object mappingEach custom property must be mapped to a SuiteCRM field or module, and HubSpot custom objects may need new modules or relationship definitions, which adds design and testing time.Audit the property list early, retire unused fields, and reuse standard SuiteCRM modules where they fit before building custom ones.
Associations between recordsContacts, companies, deals and tickets are linked in HubSpot, and those links must be rebuilt as SuiteCRM relationships, so a dense association graph is harder to verify.Export associations with the records they belong to, define the relationship rules in writing, and sample-check linked records on staging.
HubSpot workflows to rebuildEach workflow that assigns owners, sends notifications, updates properties or moves deals must be re-created as a SuiteCRM workflow or custom logic, and each one needs testing.List every active workflow, mark which ones are still used, and rebuild only the live ones in priority order.
Service desk and SLA designTicket pipelines, priorities, queues and SLA targets from HubSpot Service Hub must be defined as SuiteCRM case management settings, and the SLA rules need sign-off from the support team.Document current ticket stages and SLA targets before design starts, and limit the first release to the queues that carry most volume.
IntegrationsEach connected tool, such as email, telephony, the website forms or a data warehouse, needs its own connector, credentials and test cycle, and integrations often break when the CRM changes.Inventory every integration with its owner, drop those no longer used, and confirm which ones have a supported path into SuiteCRM 8.
Identity and login set-upSingle sign-on through LDAP or SAML requires configuration with your identity provider, group mapping and testing, and SAML logout behavior in SuiteCRM 8.7.0+ does not end the CRM session when the user signs out at the identity provider.Confirm the identity source and group model early, and agree the logout behavior with your security team before go-live.
Staff training and change managementSales, service and admin staff must learn new screens, list views and reports, and a poor handover adds support load in the first weeks after cut-over.Train on a staging copy with real workflows, keep a short reference guide per role, and plan a parallel run period.
Validation and cut-over testingRecord counts, field values, attachments and associations must be checked against HubSpot exports before the old system is switched off, and SuiteCRM migration guidance advises testing on a staging instance first.Write acceptance checks per object, keep HubSpot exports as the reference, and agree a rollback plan in the scope.

What usually goes wrong when moving from HubSpot to SuiteCRM

Most HubSpot-to-SuiteCRM problems come from data that does not survive the trip intact: associations, tickets, properties and logic that nobody wrote down. The cards below cover the failure points we see most often, with a prevention step for each that fits into a staged migration plan.

Broken associations after CSV import

HubSpot exports contacts, companies, deals and tickets as separate files, and the links between them live in association columns. A flat CSV import into SuiteCRM can create the records but attach them to the wrong account, or to none at all. Before loading anything, build a key map that carries HubSpot record IDs into a legacy ID field, then check parent links on a sample of accounts and deals in staging. Reconcile counts per relationship, not just per object.

Lost ticket history and attachments

Ticket threads, internal notes and attachments are often the first things teams assume will move and the last things they verify. A CSV export of ticket records typically carries summary fields, not the full conversation or the files attached to it. Decide early which closed tickets must be kept, export their conversation and attachments as a separate set, and load them into a read-only archive or linked notes in SuiteCRM. Sample a closed ticket end to end before cutover.

Unmapped custom properties

Custom HubSpot properties, including dropdown values, date fields and calculated scores, rarely have a one-to-one field in SuiteCRM. Properties that are silently dropped or imported as plain text break reports, list views and any logic that depended on them. Build a mapping sheet listing every property, its type, its allowed values and its target module and field, and mark each one as mapped, merged, archived or retired. Sign-off on that sheet should come from the people who run reports today.

Undocumented workflow logic

HubSpot workflows often hold business rules that no one has written down: lead assignment by region, deal stage notifications, SLA timers on tickets or reminders tied to a property change. These rules do not travel with the data, so they stop working on day one without anyone noticing. Export the workflow list, record each trigger, condition and action, and rebuild them in SuiteCRM workflows or scheduled jobs. Test each rule with a dummy record in staging before turning it on.

Duplicate contacts from multiple sources

Contacts in a long-lived HubSpot portal are often duplicated across forms, imports and integrations, and an import into SuiteCRM can multiply those duplicates when matching is weak. Match on email and company domain, then merge or flag the rest before load. Agree a rule for which record wins on conflicting fields, and keep the original HubSpot ID so merges can be audited later. A reconciliation step should compare record counts before and after the merge.

Customizations under public/legacy

SuiteCRM's migration documentation warns that the migration may remove non-core files under the public/legacy folder. Any custom code, theme changes or extension files placed there can disappear without a visible error. Inventory every file you changed on the current SuiteCRM 7 instance, move custom code into a supported extension location, and keep full file and database backups before any run. Confirm the list against the migration guide on a staging copy, not production.

How the move differs by team size and HubSpot footprint

Teams that use HubSpot mainly for contacts, companies, deals and pipelines have the most direct path. SuiteCRM's sales modules cover accounts, contacts, leads, opportunities and pipeline stages, so most of the work is mapping properties and rebuilding stage logic rather than changing how the team works. Sales-only teams should still decide early whether sequences, quotes and meeting links are needed, because those features sit in different parts of the SuiteCRM stack or in separate open-source tools.

  • Object mapping: Map HubSpot deals, contacts and companies to SuiteCRM opportunities, contacts and accounts, and confirm how associations are carried over.
  • Pipeline stages: Recreate each deal stage and its probability values in SuiteCRM before importing historical deals.
  • Email and calendar: Confirm which mailbox and calendar integrations the sales team relies on, since these are configured separately from the CRM data.
  • Marketing forms: Forms that create leads in HubSpot need a new destination, such as a self-hosted form tool or a marketing platform connected through the API.
  • Sales-only features: Quotes, sequences and forecasting need a checklist, because each one either maps to a SuiteCRM feature or needs another tool.

Before committing, confirm with your team which Sales Hub features are used every day and which are rarely used, and test those flows on a staging instance.

Questions buyers ask before moving from HubSpot to SuiteCRM

How much effort and cost does a HubSpot to SuiteCRM migration involve?

The cost is driven mostly by the work, not the software, because SuiteCRM 8 is free to download and self-host under AGPLv3. The main cost components are infrastructure to host SuiteCRM, the implementation work to map objects, properties and associations, data extraction and cleansing, workflow rebuilds, login setup, testing and staff training. Infrastructure and support are recurring, while mapping, migration and rebuild work is largely one-time. Costs rise with the number of custom properties, custom objects, active workflows and integrations you need to replace. Ask any quote to itemize these components, state who performs each one, and say whether SuiteCRM support from SuiteCRM Ltd, such as SuiteASSURED, is included or optional.

How long does the migration take, and what sets the timeline?

No duration is fixed in advance, so treat any timeline as something to agree in writing against your own scope. The biggest factors are the size of your HubSpot portal, how many custom objects and properties must be mapped, how many workflows and integrations need rebuilding, and whether you run a staging instance for testing before cutover. Export limits also shape the schedule, since HubSpot allows up to 300 exports in a rolling 24-hour window. Your team's availability for sign-off and your decision on how much history to carry over matter as well. Ask the quote to show the phases, the testing window and the cutover plan.

What does our internal team need to provide during the migration?

Your team needs to own the business decisions, even if an outside partner does the technical work. Typically this means a named owner who can approve the data model, a list of which HubSpot properties and pipelines matter, and people who can validate migrated records against what sales and service staff actually use. You will also need administrators who can provision the hosting environment, set up email and DNS, and decide on the login method, such as LDAP or SAML. Plan time for reviewing customizations, since the SuiteCRM migration documentation advises checking them before moving. Confirm the staffing expected from your side in any written scope.

Can we run the HubSpot to SuiteCRM migration without an outside partner?

Yes, a capable internal team can do it, provided it has the skills and time. The SuiteCRM migration documentation covers the process, and the work requires testing on a staging instance, backing up files and the database, reviewing customizations, and configuring login and integrations. The questions to weigh are whether your team has experience with PHP, MariaDB or MySQL, Linux hosting, data mapping and access control, and whether it can maintain the system after go-live. An implementation partner can take on the scoped work in writing, which lets your staff keep working on the business. Either way, decide ownership of the work before you start.

How do we handle HubSpot export limits during a full extraction?

Plan the extraction around HubSpot's limits rather than assuming one pass will work. HubSpot lets users with export permissions export contacts, companies, deals, tickets and custom objects with property values and associations as CSV, XLSX or XLS files. Exports are capped at 300 in a rolling 24-hour window and three running at once, so large portals need a schedule across several days. Export in logical batches, keep a log of each file, and check that associations survive the export. Run a test export first, reconcile record counts against HubSpot, and keep a final export close to cutover to capture recent changes. Confirm the export approach and the reconciliation method in the quote.

Do we need a SuiteCRM support contract after go-live?

A support contract is optional, because SuiteCRM is free to self-host. SuiteCRM Ltd sells paid services around the software, including the SuiteASSURED support package, SuiteCRM Hosted, implementation, training and migration services. Without a contract, you must provide your own patching, backups and expertise. Patch releases contain only security and bug fixes, and minor 8.x releases arrive roughly every eight weeks, so someone must apply them. If you are on SuiteCRM 7, note that its 7.15 extended support release receives security fixes until January 2028, while no SuiteCRM 8 extended support release had been nominated yet. Ask any support proposal which versions and response terms it covers.

Which SuiteCRM version and login method should we plan for?

Plan for SuiteCRM 8, since SuiteCRM 8.10.2 is the latest stable version in the SuiteCRM-Core repository. SuiteCRM 8.10 supports PHP 8.2, 8.3 and 8.4, Apache 2.4, MariaDB 10.6, 10.11, 11.4 and 11.8, and MySQL 8.0 and 8.4 on Linux, Unix or macOS, so confirm your server stack against that matrix. For login, SuiteCRM 8 can use LDAP through AUTH_TYPE=ldap or SAML through AUTH_TYPE=saml. Note that the SuiteCRM 8.7.0+ SAML implementation does not support IdP-initiated logout, so ending a session at the identity provider does not end the SuiteCRM session. Ask your engineers to test this behavior against your identity provider before go-live.

How DeployOpen scopes and runs a HubSpot to SuiteCRM migration

DeployOpen plans and implements SuiteCRM inside your own cloud account, data center or air-gapped network, and treats the HubSpot move as a scoped migration with named data sets, tested imports and written handover. Engagements are fixed-scope, so the mapping, build, testing and documentation work is agreed in writing before any data moves.

How we scope

  • Inventory HubSpot objects, custom properties, associations, pipelines and workflows to decide what maps to SuiteCRM modules
  • Agree in writing which record types, attachments, email history and integrations are in and out of the migration
  • Confirm the hosting target, PHP and MariaDB or MySQL versions, and the login method, such as LDAP or SAML

How we build

  • Stand up a SuiteCRM 8 environment and build modules, fields, case management and workflows to match the agreed mapping
  • Run test imports from HubSpot CSV or XLSX exports on a staging instance before any production load
  • Review customizations and file changes against the SuiteCRM migration guidance, and back up files and database before each run

How we hand over

  • Deliver a field-level mapping document, import runbook and reconciliation report comparing record counts and associations
  • Document admin procedures for users, roles, workflows, backups and SuiteCRM patch and minor release updates
  • Walk your administrators through the configured system and record open items, owners and decisions

How we support

  • Provide hypercare after cutover as part of the agreed scope, with the length confirmed in the written proposal
  • Offer ongoing support, upgrades and continuous testing as a retainer after handover
  • Ask for a quote built from the written scope, since DeployOpen does not publish a price list

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.