Open-source alternative to Dynamics 365 Customer Service: the short answer
Zammad fits queue-driven support, and SuiteCRM fits teams that want cases sitting beside accounts. If your service agents work from shared queues, SLAs and email-based ticket flows, Zammad is the closer match. If your sales and service staff need to see a customer's cases, opportunities and quotes on one record, SuiteCRM keeps those objects together. Both are licensed under the GNU Affero General Public License version 3 (AGPLv3), so the software itself carries no license fee when you self-host it. Your costs are the servers, the database and search services, migration, configuration, support and the staff who run the platform. Before you commit, confirm which support subscription, if any, you need from each vendor, since Zammad sells paid self-hosted support tiers and SuiteCRM Ltd sells support packages separately.
The part most teams underestimate is the link between tickets and accounts. In Dynamics 365 Customer Service, cases reference Dataverse account and contact records directly, so the relationship survives inside one platform. Once both the service module and the CRM data leave Dataverse, that relationship is no longer automatic. You will need to export accounts, contacts and case history with stable identifiers, map them to the target system's record IDs, and decide which system owns the customer master record. Test this on a staging instance with a sample of real cases before any cutover, and check that agents can open a case and reach the related account without switching tools.
Start by listing which Dynamics 365 Customer Service features your agents use every day, such as entitlements, routing rules, knowledge articles and omnichannel routing, then confirm with each vendor how the equivalent works in its current release. Ask Zammad and SuiteCRM for documentation covering the authentication options you need, including single sign-on, and for the migration path that fits your data volume. Decide early who owns the ticket-to-account mapping, because that decision drives the export format, the migration scope and the testing effort.
Which open-source option covers each Customer Service capability
This table maps each Dynamics 365 Customer Service capability to Zammad and SuiteCRM 8 case management, marking where each option is a direct fit, partial, or needs custom work. Read the cells as a starting point for a fit check, not a feature guarantee, because SLA and omnichannel details change between releases and must be confirmed against each vendor's current documentation.
| Capability | Zammad | SuiteCRM 8 case management |
|---|---|---|
| Cases and tickets | Ticket-centric model: tickets are the core object, so Dynamics-style case entities must be mapped onto tickets and custom attributes | Cases are a module linked to accounts and contacts, which keeps support and sales records in one database |
| Queues and routing | Groups and roles drive ticket assignment and views; confirm how far automatic routing rules go for your queue design | Queue-style assignment is not a native equivalent of Dynamics queues; expect workflow or custom development |
| SLAs and escalations | Service level handling exists in the product; confirm the calendar, escalation and reporting options in the current admin documentation | SLA tracking is not a standard out-of-box feature; plan custom logic and test it against your targets |
| Email channels | Strong native fit: email is a core channel, with inbound and outbound mail handled as tickets | Email-to-case capability depends on configuration and extensions; confirm inbound mailbox handling before committing |
| Knowledge articles | Knowledge base feature is available in recent releases; confirm article workflows and public visibility for your use case | Knowledge base support is limited compared with dedicated tools; a separate wiki may be the better home for articles |
| Customer portal | Customer-facing interface is supported; confirm branding, self-service options and access controls in the vendor docs | Portal capability is not a core strength; confirm available options or plan custom development |
| Reporting and dashboards | Reporting is built in and benefits from Elasticsearch for search and reporting; confirm the reports you need | Reports and dashboards are available; complex case metrics usually need custom report design |
| Single sign-on | SAML, OpenID Connect, Microsoft and Google login are supported; test your Entra ID or identity provider flow | LDAP and SAML are supported; note that IdP-initiated logout is not supported in SAML for 8.7.0 and later |
| Omnichannel (chat, phone, social) | Confirm channel coverage and integrations in current documentation; some channels may need add-ons or the API | Confirm channel coverage; most omnichannel routing would require custom integration |
When Zammad or SuiteCRM fits a Customer Service replacement
Dynamics 365 Customer Service bundles case handling, queues and knowledge with the wider Dataverse data model. Zammad and SuiteCRM each cover part of that job, so the choice depends on whether support is a dedicated helpdesk function or a sales-linked process. The cards below set out where each fits and what to verify before committing.
Zammad 7.2 for dedicated helpdesk work
Zammad 7.2 was released on 23 September 2026, and the 7.2.1 and 7.2.2 security releases followed in October 2026. It is a purpose-built ticketing system for email, chat and web channels, licensed under AGPLv3, with no license fee for self-hosting. Choose it when the support team needs queues, SLAs and agent workflows more than a shared sales record. Confirm that your ticket volumes and search needs fit the PostgreSQL 15 and Redis 7 stack, and whether you need Elasticsearch for attachment search.
SuiteCRM 8.10.2 for linked cases
SuiteCRM 8.10.2 keeps cases, accounts, contacts and opportunities in one database, so a support escalation stays visible to the account owner. The core is AGPLv3 and runs on PHP 8.2 to 8.4 with MariaDB or MySQL. Choose it when support and sales must share one customer record and the business accepts a CRM-style case process rather than a full helpdesk. Test case routing and reporting on a staging instance before you commit to it.
Migrator gaps for Dynamics data
Zammad's built-in migrators cover Freshdesk, Kayako, OTRS and Zendesk, and not Dynamics 365 or Dataverse. Moving Customer Service cases therefore means exporting from Dataverse, mapping fields to Zammad objects and loading through the Zammad API, or writing a custom importer with Zammad's help. Ask the implementation partner to scope that mapping work in writing, including attachments, closed-case history and customer identities that must match across systems.
SuiteCRM 8 is not SuiteCRM 7
SuiteCRM 8 pairs an Angular frontend with a Symfony backend and is a separate product from SuiteCRM 7. Moving from 7 to 8 is a migration into a new environment, not an in-place upgrade, and the migration may remove non-core files under the public/legacy folder. If your support process depends on customizations built for 7, budget for rebuilding them in 8 and do not assume they carry over.
Identity and sign-in for agents
Zammad supports SAML, OpenID Connect and Microsoft login, and SuiteCRM 8 supports LDAP and SAML. Entra ID can serve both, but SuiteCRM's 8.7.0+ SAML implementation does not support IdP-initiated logout, so signing out at the identity provider leaves the SuiteCRM session active. Confirm this behavior with your security team and document a compensating control for shared workstations.
Knowledge articles and backups
Dynamics knowledge articles do not move automatically into either product, so plan a separate content inventory covering article owners, review dates and attachments. Zammad's knowledge base and SuiteCRM's documents need different structures, and both need a tested restore procedure for the database and file store. Ask for the backup and restore plan in writing, including how a restore is verified before cutover.
Keeping Dynamics 365 Sales running while support moves
This is the most common starting point when the sales team is not ready to leave Dynamics 365 Sales but the support contract, queues or per-user licensing for Customer Service are the pressure point. Zammad takes over cases, email channels and knowledge content, while Dynamics 365 keeps accounts, opportunities and quotes. The integration then carries the weight, so you need a stable key that both systems store for each customer.
- Pick one authoritative account ID: Use the Dataverse account GUID or your ERP customer number as the shared key, and store it as a custom field on the Zammad organization record.
- Sync in one direction first: Push new organizations and contacts from Dynamics 365 into Zammad through its API, so support agents never create duplicate customers.
- Decide who owns contact edits: Name a system of record for email addresses and phone numbers, or the two systems will drift apart within weeks.
- Plan identity early: Connect Zammad to your identity provider through SAML or OpenID Connect, so agents do not keep a second password.
- Keep a Dataverse export path open: Retain exports of the case history you need for reporting, since the Customer Service data does not move automatically.
Before cutover, confirm with your Zammad partner and your Microsoft licensing contact exactly which Customer Service tables and channels stop, and test the identifier mapping with a sample of accounts.
Moving both functions to one self-hosted CRM removes the cross-system key problem, but it creates a larger cutover. SuiteCRM 8 includes case management alongside accounts and opportunities, so sales and service records share one database and one set of identifiers. Zammad can still run beside it if your service volume or channel needs exceed what the CRM case module does well, so confirm that split before you commit.
- Map Dataverse tables to one schema: Accounts, contacts and cases should share a single customer ID in the new database, which removes the need for a sync job.
- Choose the SAML path deliberately: SuiteCRM 8 supports LDAP with
AUTH_TYPE=ldapand SAML withAUTH_TYPE=saml. Confirm the SAML configuration against the 8.7.0+ reference before rollout. - Plan for the SAML logout gap: From SuiteCRM 8.7.0 onward, IdP-initiated logout and POST binding to the logout service are not supported, so signing out at Entra ID does not end the SuiteCRM session. Tell agents to log out of SuiteCRM directly, and set session timeouts to match your policy.
- Test the migration path: SuiteCRM 7 to 8 is a migration rather than an upgrade, so if your existing data sits there, plan that work separately.
- Stage the cutover: Run a parallel period on a staging instance with real case samples before retiring the Dynamics 365 queues.
Ask your implementation partner to document the logout behavior in your access procedures, and confirm the current SuiteCRM 8 release line before you finalize the design.
Some organizations keep Dynamics 365 Sales as the system of record for revenue and add Zammad only for case handling. This works well when the sales team depends on Dynamics workflows and Outlook integration, and the service team needs email-first ticketing, macros and a self-hosted knowledge flow. The risk sits in the link, so define what travels between the two systems and what never does.
- Define the link object: Sync only the fields agents need to identify a customer, such as account ID, name and support tier, rather than full CRM records.
- Use the Zammad API for write-back: Store the Zammad ticket reference on the Dynamics 365 account so account managers see open cases without leaving the CRM.
- Handle SSO per application: Zammad supports SAML, OpenID Connect and several named providers, so configure it against the same tenant that signs in Dynamics 365 users.
- Choose the search tier with care: Elasticsearch is optional but recommended for search and attachment indexing, and it adds infrastructure that your team must run.
- Monitor the sync: Log failed API calls and alert on them, since silent failures are how account IDs diverge.
Confirm with the Zammad documentation which PostgreSQL, Redis and reverse proxy versions match your deployment, and document who approves changes to the integration.
Whatever split you choose, two design questions decide whether the new setup holds up: how account identifiers stay consistent across systems, and how users sign in once. Identifier drift causes more support escalations than any feature gap, and SSO errors lock agents out during the busiest hours. Treat both as design decisions made before any data moves.
- Freeze the identifier format: Use one stable ID that never changes after creation, and never reuse a retired ID for a new customer.
- Keep a crosswalk table: Store old Dataverse GUIDs alongside new IDs during the migration, so historical cases still resolve.
- Compare SAML and OIDC: Both protocols can authenticate users against Entra ID, but confirm how each system maps group claims to roles before assigning permissions.
- Document session behavior: Record what happens when a user signs out at the identity provider, and tell agents about the SuiteCRM 8.7.0+ limitation.
- Test with real accounts: Use a pilot group with a mix of standard and shared mailboxes to confirm sign-in, logout and role mapping.
Ask your identity team to confirm the claim names and group mappings in writing, and review the SuiteCRM SAML configuration reference with your security architects before go-live.
How the ticket-to-account link survives once Dataverse is gone
In Dynamics 365 the link between a case, its account and its contact lives inside Dataverse as lookup relationships, so users rarely think about it. After migration that link stops being automatic. Each support ticket needs an explicit key, such as a stable external account ID carried from Dataverse into a custom field on the Zammad organization or the SuiteCRM account record, and every ticket import must write that key. Decide the key format before any data moves, because the sales side and the support side will each hold a copy of it.
Test the cases that break name-based or email-based matching first. Merged accounts are the most common: a ticket raised against a retired account ID must resolve to the surviving record, and the old ID should be kept as an alias so historic cases still point somewhere valid. Contacts who changed employers need a rule that follows the person, not the domain, so that a new organization does not silently inherit an old customer's open tickets. Cases tied to opportunities need a check that a closed-won opportunity still opens the correct support history for the renewal owner. Run each case on a staging instance with a sample of real migrated records and confirm the outcome with the support and sales leads, not only with the migration team.
Confirm the mapping in writing before cutover. Ask whoever runs the migration to show which Dataverse fields feed the external ID, how duplicates are handled during import, and who approves merges after go-live. Zammad documents migrators for Freshdesk, Kayako, OTRS and Zendesk, and other sources go through its API or custom development, so the link logic is part of that scope, not an afterthought. Also verify that users created from identity providers map to the right agent or customer roles, because a wrong role can expose one customer's tickets to another.
Migrating cases, queues and knowledge articles out of Dataverse
This sequence moves case history, queue routing, service levels and knowledge articles from Dataverse into self-hosted Zammad or SuiteCRM, with each stage tested on staging before any live customer email is redirected.
Back up the Dataverse source and inventory cases
Before any extraction, the support lead and the Dynamics administrator take a full copy of the case, queue, knowledge article, SLA and email configuration records. Use Excel exports from saved views for small sets and Azure Synapse Link for complete table copies, as described in the export guide. Record row counts per table and the attachment volume, then check that the extracted files match those counts. The step is done when the inventory is signed off and the source backup is stored outside the production tenant.
Map statuses, priorities and queues
The service team and the platform engineer build a mapping sheet that links each Dynamics case status, priority, origin and queue to a Zammad state, priority, group or SuiteCRM case field. Include closed reasons and custom picklist values, because these are often missed. Where one Dynamics value has no equivalent, the owner decides whether to merge it or add a new value in the target. The step is done when every source value has one agreed target and the owner has approved the sheet.
Build the target environment and staging import
The platform team deploys Zammad or SuiteCRM in a staging environment inside the organization's infrastructure, including the database, reverse proxy and any search or cache services the chosen platform requires. Zammad's migrators cover Freshdesk, Kayako, OTRS and Zendesk, so Dynamics data normally goes through the Zammad API or a custom script. Run the import against a copy of the mapping and record errors by table. The step is done when a staging import completes with no unexplained record loss.
Rebuild SLAs, routing and knowledge articles
Support operations recreates escalation timers, business hours, assignment rules and the knowledge base structure in the target, then moves articles with their attachments and links. Dynamics workflows and Power Automate flows are rewritten as native rules, not copied line by line, so each one needs a named owner who signs off the behavior. Test a sample of tickets through each route and confirm that breach notifications fire. The step is done when a test script of routed cases produces the expected queue, owner and due date.
Repoint email channels and identity on staging
The messaging administrator configures the support mailboxes, inbound and outbound addresses and forwarding rules in the target, and the identity team sets up single sign-on for agents using a supported method such as SAML or OpenID Connect. Confirm that replies thread correctly to existing customer conversations and that the new system does not send duplicate notifications. Check the SSO logout behavior with the identity team, since some SuiteCRM 8 SAML configurations do not end the session on identity provider logout. The step is done when a test mailbox round trip and an agent sign-in succeed on staging.
Run parallel support with a reconciliation check
Agents work new cases in both systems for a period agreed in advance, while the support lead compares case counts, open items and SLA timers between them. Differences are logged with a root cause and fixed in the import script, then the import is rerun on staging. Keep the Dataverse environment read-only to avoid split records. The step is done when reconciliation shows no unexplained differences and the support lead accepts the results in writing.
Cut over and retain the source archive
On a scheduled window, the team freezes new work in Dataverse, runs the final incremental extract and import, repoints the email routing and switches agents to the new system. Confirm that the final counts match the frozen source and that a rollback procedure is documented and tested. Keep the archived Dataverse backup under the organization's retention policy, and confirm retention and access requirements with the compliance team before decommissioning the environment. The step is done when the production checks pass and the cutover record is signed.
Questions buyers ask before replacing Customer Service
What does it cost to replace Dynamics 365 Customer Service with self-hosted Zammad?
The software itself has no license fee, so the cost sits in components: servers and storage, PostgreSQL, Redis, Elasticsearch or Memcached where your deployment needs them, migration work, configuration of queues and SLAs, integrations, staff time, and optional vendor support. Zammad lists self-hosted support subscriptions named Business at 2,999 EUR per year, Enterprise at 5,999 EUR per year and Corporation at 9,999 EUR per year, according to its pricing page. Those figures cover vendor support only, not hosting or implementation. Ask any implementation partner for a quote built from a written scope that lists each component, which parts are one-time and which recur each year.
How long does a Zammad migration from Dynamics 365 Customer Service take?
No researched duration applies to this migration, so confirm the timeline in a written scope rather than relying on a general estimate. The main drivers are how many cases, queues, knowledge articles and attachments you move, how many Dataverse tables hold the support history, how many custom fields and automations must be rebuilt, and how many channels (email, web forms, phone notes) must be connected. Parallel running, user training and the cutover window also add time. Ask for the timeline to be split into discovery, data extraction, test import, configuration, cutover and hypercare.
What must our team provide before a Customer Service replacement starts?
Before work begins, your team needs to name a data owner for each support data set, document the queue rules that route cases today, and write down SLA definitions, including response and resolution targets, business hours and escalation paths. You should also supply an export of cases, queues, knowledge articles and their attachments, a list of integrations that create or read cases, and the identity provider used for agent sign-in. Without these, the team can migrate records but cannot confirm that routing and SLA timers behave as before.
Can our own team run this replacement without outside help?
A capable team with Linux, PostgreSQL and container experience can install Zammad using the package, Docker Compose or Helm options documented by Zammad. The harder parts are usually data mapping from Dataverse, rebuilding routing rules and SLA logic, connecting email channels, and running the cutover without losing tickets in flight. Zammad includes migrators for Freshdesk, Kayako, OTRS and Zendesk, and other systems can be imported through its API or custom development, so a Dynamics export will likely need custom mapping. Decide early which of these tasks your staff will own and which need an outside specialist.
Does Zammad's Kubernetes support scope matter for our deployment?
Yes, if you plan to run Zammad on Kubernetes. Zammad documents a Helm chart, but its support covers the Zammad application only, not Kubernetes-specific issues such as cluster networking, storage classes, ingress or node failures. Your platform team must own the cluster, and you should confirm who handles incidents that originate below the application layer. Multi-instance deployments also need Memcached, and the Elasticsearch search service is optional but strongly recommended, so include both in the architecture review.
How do Zammad's Business, Enterprise and Corporation subscriptions compare with a fixed-scope DeployOpen engagement?
They solve different problems. A Zammad subscription buys vendor support for the Zammad application at a stated annual price, and it does not design your queues, migrate your data or host your infrastructure. A DeployOpen engagement is fixed-scope: scope, deliverables and timelines are agreed in writing before work starts, and DeployOpen plans, implements, integrates, hardens, backs up and documents the self-hosted platform inside your own cloud account, data center or air-gapped network. Ongoing support and upgrades are available as retainers. DeployOpen does not publish prices, so a quote follows from the written scope. Many organizations weigh both, comparing vendor support tiers with the cost of an engagement plus their own staff time.
What happens to our support tickets and sales accounts after the move?
The link between a case and its sales account must be rebuilt deliberately once both systems leave Dataverse. Export accounts, contacts and case-to-account keys from Dynamics, then map each key to an organization or customer record in Zammad or your chosen CRM, and confirm that duplicates are merged before cutover. Decide whether sales and service share one identity store or two, and document which system is the source of truth for contact details. Test a sample of cases end to end, including email threads and attachments, before retiring the old environment.
What the self-hosted cost is made of
The software licence is the one line item you do not pay for a self-hosted Zammad or SuiteCRM deployment. Zammad is licensed under AGPLv3 and has no license fee for self-hosted use, and SuiteCRM 8 core is also AGPLv3. What remains is a set of components you do pay for, each with its own one-time or recurring character. One-time costs include the migration of tickets and cases, the setup of queues, roles and SSO, and any customization to match your Customer Service workflows. Recurring costs include servers, PostgreSQL or MariaDB storage and backups, Redis, and, for Zammad at scale, Elasticsearch and Memcached. Optional vendor support is the other recurring line. Zammad lists self-hosted support subscriptions named Business at 2,999 EUR per year, Enterprise at 5,999 EUR per year and Corporation at 9,999 EUR per year, and SuiteCRM Ltd sells SuiteASSURED support, so ask each vendor which tier and which response commitments are included before comparing totals.
The largest recurring cost is usually people. Someone must patch the application and its dependencies, follow the Zammad and SuiteCRM release notes, test upgrades on staging, and restore from backup when needed. Ask whether the work sits with your team, a managed provider or a mix, and what each option costs in staff hours per month. The main cost drivers are the number of agents, ticket volume, attachment storage, the number of environments (production, staging and disaster recovery), and how many of your systems need integration. Request a quote that separates one-time work (migration, configuration, SSO, custom integrations, training) from recurring work (hosting, support subscription, patching, backup testing and on-call coverage), and ask for each figure in its own line with the assumptions stated.
Before you approve a budget, ask the implementation partner and the vendor to put in writing: the exact support tier and its scope, which environments are priced, whether Kubernetes or container platform support is included or excluded, how migration of Dynamics 365 Customer Service cases and knowledge articles is estimated, and what happens to the cost when you add agents or a second region. Compare the result with your current Dynamics 365 Customer Service licensing and any Dataverse or Power Platform add-ons you use today, so the comparison covers the whole platform and not only the per-user fee.
How DeployOpen scopes and delivers a Customer Service replacement
DeployOpen plans, implements, integrates, hardens, documents and supports self-hosted open-source platforms inside your own infrastructure. For a Dynamics 365 Customer Service replacement, that means a written scope covering cases, queues, knowledge articles and the link back to sales accounts, delivered in your cloud account, data center or air-gapped network.
How we scope
- Inventory the cases, queues, SLAs, knowledge articles and email channels that the written scope will cover
- Agree which Dataverse exports feed the account link to sales, and which ticket history stays archived
- Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts
How we build
- Install and configure Zammad with its PostgreSQL, Redis and reverse proxy components in your environment
- Set up identity sign-in, queue routing, email channels and migration of ticket history against a staging instance
- Test restores, backups and integration paths to SuiteCRM before cutover, and document each configuration decision
How we hand over
- Deliver runbooks for installation, upgrades, backups and agent administration, written for your own operations team
- Provide evidence of configuration, access controls and test results that your internal and external auditors can review
- Walk administrators through queue, role and knowledge base management before you take operational ownership
How we support
- Ongoing support, upgrades and continuous testing are available as retainers after handover
- Track upstream Zammad and SuiteCRM releases and plan upgrades in the same change process you already use
- Confirm support scope, response expectations and retainer terms in the written agreement before work begins

