Migrate from OTRS to Zammad

Moving OTRS into Zammad uses a documented migrator with known limits on passwords, customer data and timestamps. This page explains what maps, what needs a decision and how to sequence the cutover.

On this page

Migrate from OTRS to Zammad: what the move involves

The move from OTRS to Zammad is a documented import followed by a planned cutover, and the effort depends on three things: how much ticket history you carry, which integrations feed or read from OTRS, and how far the installation has been customized. Your agents likely depend on years of tickets, so the first decision is which history must be available in Zammad on day one and which can stay in an archived OTRS instance for reference. That decision shapes every later step, from test import scope to the cutover window. The Zammad OTRS migrator supports OTRS 3.1 up to 6.x. Before any import runs, two packages must be installed in the source OTRS system: the Znuny4OTRS-Repo and the OTRS Migration Plugin. Both are version-specific, so the package build must match your exact OTRS release. Confirm the matching versions against the Zammad OTRS migration documentation and check the compatibility of each package with your installed OTRS version and any custom packages you already run. If your installation runs Znuny rather than OTRS, confirm with the vendor documentation that the same packages apply to your version. The migrator imports only customers of tickets, so customers who exist only as agents or system accounts will not arrive in Zammad as customers. Password migration works only for OTRS 3.3 and later, so on older versions every user will need a password reset in Zammad. Zammad also expects OTRS timestamps in UTC. Check how your OTRS server stores and displays times before the test import, because a timezone mismatch shifts every ticket history entry and can make SLA and reporting data look wrong afterward. If you plan a differential import, meaning a first bulk load followed by one or more catch-up runs before cutover, you must not change data in Zammad between those runs. Agents should keep working in OTRS during that period, and the team should agree in writing which system is the system of record at each stage. Without that rule, a later differential run can overwrite or conflict with changes made in Zammad, and the cutover becomes harder to verify. The migration runs in infrastructure you control, which means the source OTRS, the target Zammad and the import host all sit in environments your team or your partner manages. Large ticket histories can exceed default timeouts, so plan to tune the ZAMMAD_OTRS_IMPORT_READ_TIMEOUT and ZAMMAD_OTRS_IMPORT_TOTAL_TIMEOUT environment variables and test those values on a copy of production data. Confirm network paths, database capacity and backup points for both systems before the first run.

Which OTRS data and features carry over to Zammad

This table compares the main OTRS objects with their Zammad counterparts. For each one, it shows whether the documented migrator is expected to carry it, which items need a mapping decision, and what must be rebuilt by hand. Confirm every row against the current Zammad OTRS migration documentation and your own OTRS schema, because the migrator's scope depends on your OTRS version.

OTRS objectZammad counterpartMigrator scopeManual decision or rebuild
TicketsTickets with group, owner and stateImported by the migrator; confirm the fields it maps for your versionCheck ticket numbers, owners and history in a test import before cutover
CustomersCustomer users linked to ticketsOnly customers of tickets are importedCustomers without tickets need a separate import through the API or custom work
AgentsAgent users with roles and group accessConfirm which agent attributes and roles the migrator mapsReview every agent account, reassign roles and set group access by hand
QueuesGroupsExpected to map to groups; confirm naming and hierarchyDecide how each queue maps to a group and which agents see it
States and prioritiesTicket states and prioritiesConfirm which values map automatically and which do notMap any custom OTRS states and priorities to Zammad values by hand
Articles and attachmentsTicket articles and attached filesExpected to import with tickets; confirm attachment handlingVerify attachment completeness and storage in a test import
PasswordsAgent and customer login credentialsMigrated only from OTRS 3.3 onwardEarlier versions need password resets; plan the login message for all users
Custom fieldsZammad object attributesNot assumed to carry over; confirm each fieldRecreate each field in Zammad, map its values and rebuild dependent logic
TimestampsCreated and updated dates on tickets and articlesZammad expects OTRS timestamps in UTCConfirm the time zone handling in OTRS before export and check dates after import

How password migration and customer-only import change the plan

The OTRS importer only carries over password hashes when the source system runs OTRS 3.3 or later. Before you commit to a cutover date, confirm the exact OTRS version in your environment, because this single fact decides how agents and customers sign in on day one. If your installation predates 3.3, the imported accounts will exist in Zammad but will not carry working passwords, so every user will need a reset path. Plan that path as a deliberate step rather than something support discovers on the first morning after cutover.

The importer also limits which people come across. Only customers who appear on tickets are imported. A customer who has never opened or been named on a ticket will not exist in Zammad after the run, even if they hold an active account in OTRS. If your business expects those customers to log in to a portal, submit requests or receive notifications, they need a separate route. Options include creating them through the Zammad API from an export you produce, or inviting them after go-live. Ask your team to export the list of OTRS customer accounts without tickets now, so the gap is sized before the test import rather than after.

Three decisions should be settled before the test import runs. First, name the agents and customers who must log in on day one, and decide whether any group waits. Second, decide how password resets are communicated: who sends the message, which channel is used, what the user is told to do, and how you will verify that a reset request reached the right mailbox. Third, assign an owner for customer data cleanup. Imported records often include duplicates, stale addresses and inconsistent names, and Zammad will not resolve them for you. The cleanup owner should review the test import output and sign off on what moves into production.

These decisions also determine how you use the test import. Because a differential import is only possible if nobody changes data in Zammad after the first run, any cleanup performed in Zammad during testing will complicate the cutover. Agree with the cleanup owner that corrections happen in the source data or in a documented export, not in the target. Record the login approach, the customer scope and the cleanup sign-off in the migration plan so that the production run, which must follow the same rules, has no open questions left.

Documented import paths for an OTRS to Zammad migration

Zammad documents three routes for moving OTRS data: its built-in OTRS migrator, version-specific packages installed in the source system, and the Zammad API for anything the migrator does not cover. Each route depends on the exact OTRS version and on what is installed in the source, so the team should settle the path before planning the cutover.

Zammad OTRS migrator

The built-in migrator covers OTRS 3.1 up to 6.x and is the starting point for most migrations. It needs the matching Znuny4OTRS-Repo and OTRS Migration Plugin packages installed in the OTRS system, so the team must confirm the exact OTRS version before choosing it. Verify that the migrator run covers the ticket history, customers, agents and attachments that the business needs, using a test import on a copy of the data.

Znuny4OTRS-Repo package

This package is installed in the source OTRS system and must match its version. It prepares the system for export, so installing the wrong build is a common failure point. Zammad's documentation is the reference for which package version pairs with each OTRS version. Record the installed package version and the OTRS version in the migration runbook before the first test import.

OTRS Migration Plugin

The migration plugin is the second package installed in the source system for the migrator to read the data. Like the Znuny4OTRS-Repo package, it is version-specific and must be checked against the documentation for the exact OTRS release. Confirm the plugin is installed and active on the source before the test run, and remove or disable it according to your change process after cutover.

Znuny source systems

If the source is Znuny rather than OTRS, do not assume the OTRS packages and migrator path apply unchanged. Znuny is a continuation of OTRS Community Edition 6.0.30 with its own release line, so check Zammad's documentation for a supported path before planning. Confirm the Znuny version, its database and any custom changes, then decide whether the migrator, the API or a custom route fits.

Zammad API for remaining data

Where the migrator does not cover a data type the business needs, the Zammad API can import it, but this work is custom and must be scoped and tested separately. Identify these items early, such as custom fields, specific history or related records. Confirm each item with a test import and check that its timestamps follow the UTC expectation for OTRS data.

Why UTC timestamps and differential runs decide the cutover

Decide the cutover approach only after you have confirmed how your OTRS database stores and presents times. Zammad expects OTRS timestamps in UTC. If your OTRS instance keeps ticket times in a local zone, or the display time zone setting in OTRS differs from what the database holds, every imported article, state change and escalation time can shift by the offset. Agents then see history that appears to have happened at the wrong hour, and SLA and reporting figures built on those times become unreliable. Ask your OTRS administrator to confirm the storage format and the configured time zone, then compare the created and updated values of several known tickets in the database with what the agent interface shows. Record the result before you plan any import run.

A differential import depends on one rule: no data may change in Zammad after the first import. Any agent reply, state or priority change, merge, tag edit or customer update made in Zammad after that run becomes a difference the next run may not reconcile correctly. If a delta run is part of the plan, agents must keep working in OTRS until cutover, and the team must agree on which objects are covered by that freeze, including users, groups and roles that are imported alongside tickets. Make the freeze a written rule, assign someone to enforce it on the Zammad side, and test it with a trial import before anyone relies on it. Confirm in the current Zammad OTRS migration documentation exactly which objects the differential logic covers for your version.

The choice is between one full import at cutover and a staged approach with differential runs. A single full import keeps the runbook short: OTRS is frozen once, the complete history loads in one window, and one verification pass decides go or no-go. The cost is that the whole load, including large ticket histories, must finish inside that window, which is why the read and total timeout variables, ZAMMAD_OTRS_IMPORT_READ_TIMEOUT and ZAMMAD_OTRS_IMPORT_TOTAL_TIMEOUT, need testing with a representative copy of your data. A staged approach moves most history early, lets agents review it in Zammad and shortens the final freeze, but it extends the period in which two systems hold data, adds verification work for each run and requires that OTRS stays the working system until cutover. Staff time on both sides, and any extra environment you run for trials, are the main recurring costs.

Confirm which approach the current documentation supports before you commit. The Zammad OTRS migrator covers OTRS 3.1 up to 6.x, and it needs the version-specific Znuny4OTRS-Repo and OTRS Migration Plugin packages installed in OTRS. Check the migration documentation for the exact version pair you plan to use, and check that the Znuny and plugin packages match your OTRS version. If the documentation supports differential runs for your combination, ask for that in writing from your Zammad partner or vendor contact, along with the steps for the delta. If it does not, the cutover is a single import and your trial runs become the only rehearsal. Either way, write the chosen approach, the freeze window owner and the go or no-go criteria into the migration plan before any production import starts.

How to sequence the OTRS to Zammad parallel run and cutover

This sequence moves OTRS data into Zammad through seven gates, each with a named sign-off and written evidence, so cutover happens only after counts, customers and attachments match. The source system stays intact until the final import is verified. Roles shown are typical, and you should confirm them in your project plan.

  1. Inventory the OTRS estate

    Record the exact OTRS version, every installed plugin, custom code, queues, states, priorities, and each integration that reads or writes tickets, such as mail, directory or monitoring hooks. The migration lead builds the list with the OTRS administrator and the business owner of each queue. The platform owner signs off that the inventory matches the production system. Evidence is a dated inventory with version strings and exported lists of queues and states. The gate closes only when every custom item has a named target in Zammad or a recorded retirement decision.

  2. Install matching migration packages on a copy

    Restore a copy of the production OTRS database and file system to a separate host. Install the Znuny4OTRS-Repo and OTRS Migration Plugin packages that match that exact OTRS version, because the Zammad migrator needs both installed in OTRS. Make all changes on the copy so production stays untouched. The OTRS administrator and the migration lead sign off. Evidence is the list of installed package versions, the restore log, and a ticket count from the copy compared with production at the copy time.

  3. Run a test import into non-production Zammad

    Deploy a non-production Zammad instance backed by PostgreSQL 15 or newer and Redis 7 or newer, the minimum versions Zammad requires. Run the OTRS migrator against the copy. Check that timestamps arrive in UTC, since Zammad expects OTRS timestamps in UTC, and confirm the source time settings before accepting results. Password migration works only for OTRS 3.3 and later, and only customers of tickets are imported, so agent and other accounts need a login plan. If large histories cause timeouts, tune the ZAMMAD_OTRS_IMPORT_READ_TIMEOUT and ZAMMAD_OTRS_IMPORT_TOTAL_TIMEOUT variables and rerun. The Zammad administrator signs off. Evidence is the import log, the timeout values used, and the list of errors with their resolution.

  4. Reconcile counts, customers and attachments

    Compare ticket counts per queue and state, customer records, and attachment counts and sizes between the OTRS copy and the test Zammad instance. Sample tickets across the full history, including closed and merged tickets, and compare article content and states. Investigate each gap before accepting any difference. Because only customers of tickets are imported, reconcile customers by that rule and document it. The business process owner for support operations signs off with the migration lead. Evidence is a reconciliation report with counts per queue and state, a list of accepted exceptions with reasons, and the sampled ticket comparisons. Repeat this reconciliation after any mapping change.

  5. Run the parallel run under agreed rules

    Keep OTRS in production for agents while Zammad runs alongside it on a separate environment, and enforce the agreed rules for changing data. If you plan a differential import, do not change data in Zammad during the parallel period, because edits made there would conflict with later differential loads. Decide before the run which system is the record for each queue. The service owner signs off the rules, and the security lead signs off any access changes. Evidence is the log of each differential import cycle, access review records, and a register of rule breaches with the action taken.

  6. Cut over with a final import

    Freeze changes in OTRS, run the final import, and reconcile again against the frozen source using the same method as the test import. Confirm that agent logins, email routing and integrations point to Zammad before service reopens. The business owner signs off the results, and the change board approves the cutover record. The infrastructure owner signs off routing. Evidence is the final import log, the post-cutover reconciliation report, routing and login test records, and the signed change record. Define the rollback decision point and the person who can reverse routing before the freeze begins.

  7. Decommission OTRS with read-only retention

    After cutover is accepted, remove write access and scheduled jobs from OTRS. Keep the database and attachments available to a named read-only group for the retention period your records owner sets, and document where archived content lives. Verify that backups of the frozen source are retained under your backup policy. The CISO or delegate signs off access removal, and the records owner signs off retention. Evidence is the access removal record, the read-only account list, the archive location, the backup verification result, and the closure record for the project.

How to tune timeouts for large OTRS ticket histories

Large OTRS ticket histories can run into timeouts during import into Zammad, and the Zammad OTRS migration documentation names two environment variables for this case: ZAMMAD_OTRS_IMPORT_READ_TIMEOUT and ZAMMAD_OTRS_IMPORT_TOTAL_TIMEOUT. The read timeout governs how long a single request waits for data, while the total timeout caps the whole import run. Before changing either value, confirm in the current Zammad documentation what each one controls, its default and its unit, because the unit determines whether a number like 600 means seconds or minutes in your environment.

Start by measuring how large the history actually is on the copy you will import from, not on the live OTRS system. Count tickets, articles and attachments per year or per queue, and note the largest individual ticket threads, since a few very long threads can slow a request even when the overall count looks modest. Check the size of the OTRS database and the attachment storage as well. These figures give you a baseline to compare against the import log and show whether the import is slow because of data volume, network latency or the Zammad host itself.

Set the values in the environment configuration for the deployment method you chose. For a Docker Compose installation, this usually means the environment file read by the Zammad containers that run the import, and for a Kubernetes Helm deployment it means the values passed to the chart. Restart the services that consume the variables so the new values take effect, then confirm inside the running container that they are set. Keep the change in version-controlled configuration where possible so the same values can be reapplied to the final import run.

Test the timeout values on the test import, not for the first time at cutover. A test run shows whether the chosen values are long enough for your largest tickets and whether the total timeout leaves room for the full dataset at its current size. It also gives you the import duration to plan the cutover window. Because OTRS data cannot be changed in Zammad if a differential import is planned, a timeout failure during the final run leaves little room to adjust and retry under pressure. Treat the test as the place where you find the right values.

Record every value used during testing: the variable names, the numbers and units confirmed from the documentation, the Zammad and OTRS versions, the deployment method, the dataset size and the import duration. Store this record with your migration runbook. The final import then repeats the same configuration, and any difference in results can be traced to data growth or infrastructure rather than to an untested setting. Ask whoever runs the import to confirm that the record matches the environment before the cutover begins.

What drives the cost and duration of an OTRS to Zammad migration

This table lists the drivers that change the cost and effort of moving from OTRS to Zammad, with whether each one is one-time or recurring and what to request in a quote. Read each row against your own OTRS version, ticket history and integrations. The main takeaway is that the OTRS version, data volume and number of differential runs tend to shape the plan more than the Zammad software, which has no license fee when self-hosted.

DriverOne-time or recurringWhy it changes cost or effortWhat to ask for in a quote
OTRS version and plugin fitOne-timeVersions from 3.1 to 6.x need matching Znuny4OTRS-Repo and OTRS Migration Plugin packages. Password migration works only from OTRS 3.3 onward.Confirm the exact OTRS version, plugin installation steps and whether passwords migrate or reset.
Ticket, customer and attachment volumeOne-timeMore tickets, customers and attachments mean longer imports, more timeout tuning and heavier reconciliation. Only ticket customers are imported.Ask for the sizing basis, the timeout settings planned and who adjusts them during import.
Customizations and custom fieldsOne-timeEach custom field, state, priority or dynamic field needs a mapping decision in Zammad and a matching test case.Ask for a field-by-field mapping list showing what carries over, what is rebuilt and what is dropped.
Integrations to rebuildOne-time setup, recurring upkeepEmail channels, directory logins and telephony must be rebuilt in Zammad. Each connection adds configuration and acceptance testing.Ask which connections are in scope, who configures them and which acceptance tests apply.
Zammad hosting choice and prerequisitesSetup is one-time, support and infrastructure recurSelf-hosted Zammad has no license fee but needs PostgreSQL 15 or newer, Redis 7 or newer and infrastructure you operate.Ask which hosting model is quoted, then compare with Zammad's published support plans and hosted per-agent prices.
Password approachOne-timePassword handling depends on the OTRS version. Where passwords do not carry over, users need a clear reset path at cutover.Ask how agents and customers sign in after cutover, who sends reset instructions and when.
Number of differential runsOne-time, repeated per runEach differential import repeats import work and requires Zammad data to stay unchanged while the plan runs.Ask how many runs are included, how extra runs are priced and who keeps Zammad data frozen.
Testing and reconciliation depthOne-timeTicket counts, attachments, customer records and timestamps must be checked against OTRS, since Zammad expects OTRS times in UTC.Ask what is reconciled, which samples are checked and who signs off the results.
Cutover windowOne-timeThe window sets how much change must be replayed, whether a final differential run fits and how long OTRS users lose access.Ask for the planned window, rollback steps and the agreed freeze period for OTRS and Zammad.

What usually goes wrong when moving from OTRS to Zammad

Most failed OTRS to Zammad migrations trace back to a few preparation gaps: mismatched OTRS packages, data that changes after the export, and imports that stop before they finish. Each card below names the prevention step and the check that shows it worked, so you can confirm readiness before the production run.

Plugin packages that do not match OTRS

The Zammad OTRS migrator needs the version-specific Znuny4OTRS-Repo and OTRS Migration Plugin packages installed in your source OTRS, which supports versions 3.1 up to 6.x. Prevention: confirm the exact OTRS version in your environment, then install the matching packages in a staging copy before anything else. Check: run a test export from the staging copy and confirm it completes without errors before you schedule the production import.

Timestamps shifted by time zone

Zammad expects OTRS timestamps in UTC, so a source server set to a local time zone can move every ticket history entry by the offset. This shifts SLA calculations, escalation times and reporting ranges. Prevention: verify the source database and application time settings, and align the export to UTC before the test import. Check: compare the created and closed times of a sample of tickets in OTRS with the same tickets in Zammad, using a known event such as a ticket you created at a recorded moment.

Passwords that do not migrate from older installations

OTRS password migration works only for OTRS 3.3 and later. On an older installation, agents and customers will not carry their passwords into Zammad, so they will need a reset path before go-live. Prevention: identify your OTRS version early and plan password reset communication and login support for affected users. Check: log in to Zammad with a migrated test account and confirm the expected behavior, whether that is a working login or a required reset.

Customers without tickets missing from the import

Zammad imports only customers who are linked to tickets. Contacts who exist in OTRS but have never opened or been assigned a ticket will not appear in Zammad, which can break later notifications, user lookups and integrations that expect those records. Prevention: list the customer groups you need beyond ticket holders and decide whether to create them manually or through the Zammad API. Check: compare a count of expected contacts from OTRS against Zammad and review the names of any that are absent.

Edits in Zammad during the differential window

A differential import assumes OTRS remains the system of record, and Zammad documentation says data must not be changed in Zammad if a differential import is planned. Agent edits made in Zammad during that window can be overwritten or leave gaps in articles and attachments after reconciliation. Prevention: freeze agent changes in Zammad for the window and agree on the cutover sequence in writing. Check: after the final differential run, compare article and attachment counts per ticket against OTRS and investigate every mismatch.

Timeouts on large ticket histories

Large OTRS histories can exceed the default import timeouts and stop partway through. Zammad documents the ZAMMAD_OTRS_IMPORT_READ_TIMEOUT and ZAMMAD_OTRS_IMPORT_TOTAL_TIMEOUT environment variables for this case. Prevention: measure your largest ticket ranges in the staging copy, then set both timeouts before the run and keep the import logs. Check: confirm the import reports completion for every batch, and compare ticket and article totals with the source to confirm nothing was cut off.

Common questions before hiring help for an OTRS to Zammad move

Can our team migrate from OTRS to Zammad without outside help?

Yes, many teams can, provided they have an engineer who administers OTRS and Zammad and enough time to test. The Zammad OTRS migrator supports OTRS 3.1 up to 6.x, but it needs version-specific Znuny4OTRS-Repo and OTRS Migration Plugin packages installed in OTRS first, so the source system must be changed before any data moves. The harder parts are usually not the import itself. They are mapping customers, agents, groups and states, verifying ticket history, and agreeing sign-off with data owners. Ask yourself whether someone can own a test import, repeat it, and answer for the results. If not, a fixed-scope engagement can take that work on.

What does an OTRS to Zammad migration need from our team?

The work needs five things from your side: administrator access to the OTRS system, a test environment that resembles production, named data owners for customers, agents and ticket queues, a decision on which history must be kept, and a written sign-off step before cutover. Without OTRS admin access, the migration plugin packages cannot be installed. Without a test environment, you learn about problems during the live move. Data owners are needed because decisions about closed tickets, attachments and inactive accounts affect what agents see afterward.

What drives the cost and effort of an OTRS to Zammad move?

Cost follows the scope written before work starts. The main drivers are the OTRS version you run (the importer covers 3.1 up to 6.x), the size of the ticket history, the number of queues, custom fields and customer records to map, how many test imports you need, whether attachments and article history move, and how much access and sign-off coordination your organization requires. Ongoing Zammad costs are separate. Self-hosted Zammad has no license fee, and Zammad sells self-hosted support subscriptions. Ask any partner to itemize one-time migration work from recurring operations work, and to state which assumptions the quote depends on.

How long does an OTRS to Zammad migration take?

Duration depends on drivers, not a fixed figure. It is shaped by ticket volume, attachment size, the number of OTRS versions and customizations involved, timeout tuning needed for large histories, how many rehearsal imports the team runs, and how quickly data owners sign off. Large imports can hit timeouts, which the ZAMMAD_OTRS_IMPORT_READ_TIMEOUT and ZAMMAD_OTRS_IMPORT_TOTAL_TIMEOUT environment variables address. Ask for a schedule that shows test imports, review windows and the cutover date separately, and confirm the assumptions behind it with your own environment.

Does password migration work for our OTRS version?

Password migration applies only to OTRS 3.3 and later. If you run OTRS 3.1 or 3.2, plan for users to reset passwords in Zammad after cutover. Also note that only customers of tickets are imported by the migrator, so agent accounts need a separate setup in Zammad. Confirm your exact OTRS version from your own system before assuming any login behavior, and test a sample login during rehearsal so users are not surprised on the day of the move.

Can we run differential imports before the final cutover?

Differential imports are possible only under strict conditions. Zammad's documentation says data must not be changed in Zammad if a differential import is planned, so agents should not edit imported tickets or create new records in Zammad during the parallel period. Timestamps also matter, because Zammad expects OTRS timestamps in UTC. Decide early whether your team can freeze Zammad changes during the overlap. If it cannot, plan a single cutover after a full test import, and confirm the differential approach against the current Zammad migration documentation before committing to it.

What does a fixed-scope OTRS to Zammad engagement cover?

A fixed-scope engagement covers what is written in the agreed scope before work starts. DeployOpen plans, implements, integrates and documents self-hosted platforms in infrastructure you control, so typical scope items include migration planning, preparing the OTRS packages, configuring the Zammad target, running test imports, tuning timeouts for large histories, supporting sign-off, and documenting the result. Deliverables and timelines are agreed in writing. Ongoing support, upgrades and testing are offered as separate retainers. Ask for the list of excluded items, such as custom development for data outside the built-in migrator, and for the acceptance criteria used to close the work.

How DeployOpen works on this

DeployOpen plans, implements, tests, documents and supports self-hosted open-source platforms inside your own infrastructure, so the OTRS to Zammad move runs in the cloud accounts, data centers or air-gapped networks you control. Engagements are fixed-scope, with scope and deliverables agreed in writing before work starts.

How we scope

  • Confirm the exact OTRS version, which must sit between 3.1 and 6.x, and the matching Znuny4OTRS-Repo and OTRS Migration Plugin packages.
  • Record whether the OTRS password migration applies, since it works only for OTRS 3.3 and later.
  • Agree in writing whether a differential import is planned, which requires no data changes in Zammad before cutover.
  • Document the ticket history volume, attachments and customer records in scope, and the Zammad target environment.

How we build

  • Install the version-specific OTRS packages in a staging copy of your OTRS system and verify the export works end to end.
  • Run a test import into a non-production Zammad instance and check ticket states, customers, timestamps and attachments.
  • Confirm OTRS timestamps are read as UTC and adjust the read and total import timeout variables for large ticket histories.
  • Test the cutover sequence, including how agents and customers log in afterwards and what happens to passwords.

How we hand over

  • Deliver the written migration runbook with the exact steps, packages, settings and timeouts used in your environment.
  • Provide a reconciliation report comparing record counts and sample tickets between OTRS and Zammad after the import.
  • Document the rollback plan, the decision point for differential runs and the owner of each cutover step.
  • Walk your operations and support teams through the Zammad configuration and the handover checklist before go-live.

How we support

  • Agree post-cutover support windows in the written scope, including who responds to import or login issues.
  • Offer ongoing support, upgrades and continuous testing as a retainer after go-live, if your team wants it.
  • Confirm with Zammad which self-hosted support plan covers your team, since self-hosted customers handle their own updates, backups and availability.
  • Keep Znuny or OTRS documentation and the migration runbook current as your Zammad version changes.

Sources and further reading

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.