Koha Solutions
All articles

Koha Data Migration: How to Move From Your Old ILS

What moves cleanly, what needs mapping, what gets rebuilt — a practical Koha migration guide with a go-live checklist and the failures to plan for.

28 August 2026 · Koha Solutions

Migrating to Koha is a mapping exercise, not a file transfer. Records come out of one system in one shape and have to go into another in a different shape, and the work is deciding what each field becomes.

Realistic timeline: six to twelve weeks for a mid-size library, from first data export to go-live. If someone has told you a weekend, they are describing the final cutover and not the project.

What actually moves

DataHow it moves
Bibliographic recordsCleanly — this is what MARC is for
Holdings / itemsNeeds mapping — barcodes, locations, item types, call numbers
PatronsNeeds mapping — categories, expiry, permissions
Active loansNeeds mapping, and a freeze window
HoldsNeeds mapping; queue position often rebuilt
Fines and paymentsNeeds mapping; often carried as opening balances
Circulation historyOptional — decide deliberately, see below
AuthoritiesMoves, with cleanup
Serials subscriptionsUsually rebuilt — prediction patterns rarely translate
Acquisitions / open ordersUsually rebuilt
Circulation rulesAlways rebuilt — every ILS models these differently

Being honest that some things are rebuilt rather than moved is what makes the rest credible. Anyone claiming everything transfers perfectly has not done many migrations.

The migration process, step by step

1 — Audit and clean the source data

The cheapest hour in the project. Find duplicate barcodes, records with no items, patrons with no category, inconsistent item types. Fixing these in the old system before export is far cheaper than fixing them in Koha afterwards.

2 — Export from the current system

MARC for bibliographic data — ISO 2709 or MARCXML. Patrons, loans and fines usually come out as CSV or a database extract. Get a full export early, even a rough one: it tells you what you are actually dealing with rather than what the documentation claims.

3 — Map fields to Koha's structure

The intellectual core of the work. Every source field either has a Koha equivalent, needs transforming, or has nowhere to go and requires a decision. Item data maps into MARC field 952 — see our MARC21 guide.

4 — Test migration into a staging instance

Load everything into a throwaway Koha. Expect to do this several times; the first pass always reveals mapping decisions nobody anticipated.

5 — Validate

Record counts before and after. Spot checks on a random sample. Deliberate edge cases: the longest title, a record with fifteen copies, a patron with outstanding fines and an overdue book, a multi-volume set.

6 — Freeze, migrate, go live

Stop circulation in the old system, take the final export, run the migration, verify, switch over. Usually a weekend. Have a written rollback plan.

7 — Reconcile afterwards

For the first fortnight, check the exception list and watch for problems only real use surfaces.

Migrating MARC records

Character encoding is the failure that ruins migrations. Older systems often store records in MARC-8; Koha expects UTF-8. Convert properly and everything is fine. Convert carelessly and every accented character, every non-Latin script, becomes unrecoverable mojibake — and you usually notice weeks later.

Always validate a sample containing your most awkward records before running the full load.

Also plan for deduplication. Most catalogs contain duplicate records; migration is the natural moment to merge them, using matching rules on control numbers or ISBN.

Migrating patron data

Patron categories drive circulation rules, so map them deliberately rather than mechanically. Check barcodes for duplicates, and decide what happens to expired members.

Then a question worth pausing on: how much circulation history should you actually carry over? It is the largest and least-used dataset in the migration, and it is personal data about what people read. Many libraries take the opportunity to keep only what they need. That is a policy decision, not a technical one — make it consciously.

Migrating loans, holds and fines

The hardest part, because this is live state that changes until the moment you stop. It is the reason the freeze window exists.

Loans need item, patron, due date and renewal count. Holds are often rebuilt with fresh queue positions — patrons rarely notice, and preserving exact positions is disproportionately expensive. Fines are commonly carried as opening balances rather than itemised history.

What usually breaks

  • Non-UTF8 characters — the big one. Validate a sample first.
  • Local fields with no Koha equivalent — decide: map to a note, use a custom field, or drop it deliberately.
  • Duplicate barcodes — Koha enforces uniqueness where the old system may not have.
  • Item types that do not map — twenty source types collapsing to eight, and the loan rules that depended on the distinction.
  • Fine rules that behaved differently — different grace periods and accrual produce different balances. Reconcile, do not assume.
  • Records with no items — invisible as available in the OPAC, and they look like data loss.

Migrating from specific systems

  • Sierra / Millennium — good MARC export; item and patron data need the most mapping work.
  • Alma — clean exports; the work is in fields with no Koha equivalent.
  • Destiny — common for schools; usually straightforward.
  • Older Koha — the easiest case, same schema.
  • Spreadsheets or a card catalog — more common than vendors admit, and entirely doable. Records are matched against Z39.50 sources to build proper MARC rather than typed by hand.

How we validate — and what we promise

Nobody honest promises zero data loss. What you should expect instead, and insist on in writing:

  • Record counts reconciled before and after, per data type
  • Spot checks on a documented sample
  • Edge cases deliberately tested
  • A written exception list of anything that could not be moved cleanly, given to you at handover rather than discovered by a cataloger in March

Go-live checklist

  1. Full backup of the old system, verified readable
  2. Record counts recorded before export
  3. Staging migration validated and signed off
  4. Circulation rules configured and tested in Koha
  5. Notice templates written and test-sent
  6. Email deliverability confirmed to an external address
  7. Scheduled jobs configured and confirmed running
  8. Staff trained, with a written cheat sheet at each desk
  9. Backups configured and one restore tested
  10. Rollback plan written down
  11. Someone identified to call during the first week

How long, and what it costs

Six to twelve weeks for a mid-size library. Cost scales with source-data messiness rather than record count — see our installation cost breakdown.

One thing worth deciding at the same time: a migration answers "where does the data go" but leaves "who runs it afterwards" open. Migrating into a system that is already set up and hosted closes both questions at once, so the project ends with a working service rather than a working server you now own.


Planning a migration? Send us a sample export and tell us what system you are on. Our Koha migration service will tell you what moves cleanly, what needs decisions, and how long it will take.

Share this article

Would you rather not run the server?

We set up, host and maintain your library system — backups, upgrades and notices included. You look after your students; we look after the server.

Explore Koha Cloud