Migrate to Koha from Other ILS Systems — Sierra, Evergreen, Millennium & More
Step-by-step guide for librarians migrating from commercial ILS to open-source Koha. Includes pre-planning, data export, MARC import, and cost analysis for Sierra, Evergreen, Millennium, Alma, Voyager, and Polaris migrations.
Migrate to Koha from Other ILS Systems
Thousands of libraries have successfully migrated from commercial ILS platforms like Sierra, Evergreen, Millennium, and Alma to Koha. This guide walks you through the entire migration process, from pre-planning through go-live, with specific guidance for each major system.
Why Libraries Migrate to Koha
Libraries usually migrate to Koha because they want more control, a more flexible long-term cost model, and a system that can adapt to their library’s workflows.
- No proprietary ILS license fee: Koha itself is free and open-source software. Libraries still need to budget for hosting, migration, support, training, and any custom work, but there is no traditional per-year Koha software license.
- More control over the system: Koha can run in your own AWS account or on infrastructure you control, with KohaSupport available to help with setup, migration, configuration, and ongoing support.
- Reduced vendor lock-in: Koha stores catalogue data using library standards such as MARC21 and UNIMARC, and bibliographic, item, and authority records can be exported in standard formats. Other data, such as patrons, loans, holds, fines, and local configuration, may require separate exports and mapping.
- Full-featured library operations: Koha includes the core modules most libraries need, including cataloging, circulation, patron management, acquisitions, serials, authorities, notices, reports, and OPAC discovery.
- Flexible configuration and customization: Libraries can adapt Koha through system preferences, reports, plugins, APIs, theme customizations, and custom development, without being limited to a single proprietary vendor roadmap.
- Large global community: Koha is used by thousands of libraries worldwide, with community documentation, active development, and multiple professional support providers.
Migration Timeline & Scope
The technical migration is often faster than the decision-making process. For many libraries, the longest part is choosing a new ILS, getting approval, agreeing on the migration scope, and scheduling staff time.
Once export files are available, a straightforward Koha migration can often be completed in days or weeks rather than months. The exact timeline depends on the source system, data quality, and how much the library wants to migrate.
| Factor | Typical impact |
|---|---|
| Catalogue records | Clean MARC bibliographic and item records can often be imported quickly once the export is available. Larger files mainly require more validation time, not necessarily months of technical work. |
| Patron data | Usually imported from CSV or similar exports. The main work is mapping patron categories, branches, expiry dates, and required fields. |
| Current loans, holds, and fines | Adds complexity because this data must be mapped carefully and validated before go-live. |
| Data cleanup | Clean records may need only light normalization. Messier legacy data may need several rounds of cleanup, especially for duplicate barcodes, inconsistent locations, broken item types, or character encoding issues. |
| Customization | Basic Koha setup can be completed quickly. More advanced workflows, reports, notices, OPAC design, authentication, or integrations may add days or weeks depending on scope. |
| Staff training | Most libraries should plan focused training before go-live, usually over several sessions across 1-2 weeks. |
| Validation and go-live planning | Staff review, test circulation, sample record checks, patron communication, and final cutover scheduling are often more important than the import itself. |
Practical expectation
A simple catalogue-only migration can be completed very quickly after receiving clean export files. A typical live-library migration often fits within a 2-8 week implementation window. More complex institutional migrations can take longer, especially where procurement, approvals, integrations, serials, acquisitions, or extensive data cleanup are involved.
Phase 1: Pre-Migration Planning (Weeks 1–4)
1.1 Perform a Data Audit
Before you migrate anything, audit your current ILS:
Questions to answer:
├─ How many bibliographic records? (total count)
├─ How many item records? (holdings)
├─ How many patron records? (active + inactive)
├─ How many authority records? (if cataloging at that level)
├─ What custom fields exist? (local fields, subfields)
├─ How many outstanding patron fines/holds? (will they migrate?)
├─ What integrations exist? (self-checkout, RFID, payment processors)
└─ What reports do you rely on monthly/annually?
Action: Export a sample of 100 MARC records from your current ILS to examine:
- MARC encoding (USMARC? UNIMARC?)
- Special characters / diacritics
- Custom fields and local practice
- Item-level holdings structure
1.2 Assemble Your Migration Team
Minimum team for a library with 50K–500K records:
| Role | FTE | Responsibilities |
|---|---|---|
| Project Lead | 0.5–1.0 | Timeline, vendor coordination, testing |
| Systems Librarian | 0.5–1.0 | Technical setup, data mapping, server management |
| Cataloging Lead | 0.3–0.5 | MARC validation, record cleanup, quality assurance |
| Circulation Lead | 0.2–0.3 | Patron/item rules, policy verification, testing |
1.3 Choose Your Hosting Model
| Model | Best For | Notes |
|---|---|---|
| Cloud-hosted (managed) | Hands-off approach, no server expertise | Provider handles most of the infrastructure and routine maintenance. |
| Self-hosted VPS | Full control, cost-conscious | Gives you more control, but also more responsibility for server administration. |
| On-premises | Sensitive data, existing servers | Best suited to libraries that already maintain local infrastructure or have policy requirements around hosting. |
| Community instance | Testing/small pilots | Availability, governance, and feature flexibility depend on the consortium or provider offering it. |
For most migrations, cloud-hosted reduces operational burden and speeds up go-live by 2–4 weeks.
KohaSupport runs Koha on AWS — self-service deployment with no IT overhead. Start free to evaluate, move to Standard for a live library, or explore Enterprise for high-availability and point-in-time backup. Compare plans →
Phase 2: Prepare for Export (Weeks 2–5)
2.1 Export Your Data from Current ILS
From Sierra:
# Koha provides a Sierra MARC export profile
# Use Sierra's "Export" function with these settings:
# - Format: MARC21 (or USMARC)
# - Encoding: UTF-8
# - Include: All bibliographic records, holdings
# - File type: .mrc or .bnc
# If you need item-level holdings in MARC:
# Ensure items export as MARC 852 (holdings) + 949 (local item fields)
Key fields to preserve from Sierra:
- Item barcodes (MARC 949 $p or local field)
- Location/branch (MARC 852 $b)
- Call number (MARC 852 $h / $i)
- Status/loan type (custom mapping needed)
From Evergreen:
# Evergreen exports via its standard tools
# - Use "Export" → export to MARCXML or MARC binary
# - Include holdings data if available
# - Strip out Evergreen-specific fields (e.g., internal IDs)
Considerations: Evergreen’s item data is often separate; plan to import items in a second pass if needed.
From Millennium / Polaris:
# Millennium exports via Marc Batch Loader
# - Export as ISO 2709 MARC format
# - Ensure 245$a (title) and 050/090 (call numbers) are present
#
# Polaris: Export via "Export Records" tool
# - MARC output preferred
# - Include item records with holdings
2.2 Validate Your Export
After exporting, validate your MARC file:
# Check file size is reasonable (typically 30–100 MB per 100K records)
$ ls -lh export_file.mrc
# Sample record count
$ marctools count export_file.mrc
Total records: 250,450
# Look for encoding or structural errors
$ marctools validate export_file.mrc | head -20
Common export issues to fix:
- Missing leader data (first 24 bytes of MARC)
- Truncated records (partial field data)
- Non-UTF-8 encoding (convert to UTF-8 first)
- Invalid subfield codes (must be $a–$z, not $0–$9)
Phase 3: Data Mapping & Cleanup (Weeks 3–8)
3.1 Map Your Data to Koha
Koha expects specific MARC fields. Create a mapping document:
| Your ILS Field | MARC Location | Koha Behavior | Notes |
|---|---|---|---|
| Title | 245 | Auto-indexed for search | Must have $a |
| Author | 100/110 | Added entry search | Standard authority linking |
| ISBN | 020 | Auto-indexed, linked to vendor records | Use Z39.50 import tools |
| Item barcode | MARC 949 $p (Koha default) | Unique ID per item | Cannot have duplicates |
| Item location | MARC 852 $b | Branch/shelving location | Must match Koha branches |
| Call number | MARC 852 $h–$i | Sort key for spine labels | Dewey or LC class supported |
| Due date | Not in MARC | Calculated on checkout | Not needed; Koha uses rules |
| Patron ID | Not in MARC | Patron record field | Separate file; not MARC |
3.2 Clean Your MARC Records
Before importing, run cleanup:
Remove Koha-incompatible data:
- Strip vendor-specific MARC fields (e.g., Sierra’s 949 $s, $t)
- Remove internal control numbers that won’t translate
- Flatten duplicate title/author data
Fix encoding:
# Convert to UTF-8 if needed
iconv -f ISO-8859-1 -t UTF-8 old_export.mrc > export_utf8.mrc
Verify required fields:
- Leader bytes 0–5: Must be
000+ 5-digit record length - Leader bytes 6–7: Must specify record type (
a= language material,g= projected medium, etc.) - 245 field: Required for all bibliographic records
3.3 Export Patron Data
Patron data is typically not in MARC format. Most ILS export patrons as CSV/TSV:
Minimum patron fields needed in Koha:
- Surname, firstname, email, phone
- Patron type (student, faculty, staff, community)
- Library branch
- Patron category (maps to Koha category codes like
PT,ST,ADU, etc.)
Export from your ILS (e.g., Sierra patron list as .txt or .csv):
surname,firstname,email,phone,patron_type,branch
Smith,Alice,[email protected],555-1234,faculty,Main
Johnson,Bob,[email protected],555-5678,student,Branch1
Phase 4: Set Up Koha (Weeks 4–6)
4.1 Launch Your Koha Instance
Choose your hosting method:
- Cloud-hosted: Sign up at a Koha hosting provider (ByWater, Equinox, Thirtybees, etc.)
- Self-hosted: Install Koha on a VPS or server (Ubuntu 20.04+ recommended)
Most cloud providers pre-configure everything; you just add staff logins and customize settings.
4.2 Configure Koha Branches, Locations, Item Types
Before data import, set up these foundational elements:
Branches (locations in your library system):
Example: Main Library, Downtown Branch, East Campus
Shelving locations (where items sit physically):
Example: General Stacks, Reference, Audiovisual, Special Collections, ILL
Item types (material classification):
Example: Book, E-Book, DVD, Journal, Map, Kit
Patron categories (groups with different circulation rules):
Example: Faculty, Student, Staff, Community Borrower
4.3 Define Circulation Rules
Map your ILS circulation rules to Koha:
| Patron Type | Item Type | Loan Duration | Renewals | Holds | Fines/Day |
|---|---|---|---|---|---|
| Faculty | Book | 28 days | 2 | Unlimited | $0.25 |
| Student | Book | 21 days | 1 | Unlimited | $0.10 |
| Community | DVD | 7 days | 0 | 1 | $1.00 |
Koha’s circulation rules engine supports all these configurations and more.
Phase 5: Data Import (Weeks 5–7)
5.1 Import MARC Bibliographic Records
Using Koha’s Import tool (Cataloging → Import MARC records):
1. Upload your cleaned MARC file (.mrc format)
2. Koha performs character encoding validation
3. Preview first 5 records for accuracy
4. Click "Import" to insert all records into the catalog
5. Monitor progress (typically 1–10 records/second depending on file size)
After import, verify:
- Record count matches your export (count should be exact)
- Titles, authors, ISBNs display correctly
- No encoding errors (garbled diacritics = encoding problem)
5.2 Import Item Records
If your item data is separate or needs special handling:
1. Prepare item CSV file with barcodes, locations, call numbers
2. Use Koha's Inventory → "Batch item modification" tool
3. Or use API/REST endpoints for programmatic import (advanced)
4. Verify item counts and barcode uniqueness
Example item import row:
biblio_id,barcode,location,itemtype,callnumber,homebranch,holdingbranch
12345,B001001,GeneralStacks,Book,813 SMITH,Main,Main
12346,B001002,Reference,Reference,REF 030.5,Main,Main
5.3 Import Patron Records
Using Koha’s Patron Import (Tools → Import patrons):
1. Upload CSV file with patron data
2. Map your CSV columns to Koha patron fields
3. Set default category if migrating all patrons to one type initially
4. Review sample records
5. Import (takes seconds to minutes depending on volume)
Critical: Patron IDs in your old ILS won’t carry over. Koha generates new IDs. Any system that references old patron IDs (fines, holds) will need updating.
Phase 6: Validation & Testing (Weeks 6–8)
6.1 Data Quality Checks
Run these validation tests:
Catalog verification:
✓ Can you search by title? Title → Results display?
✓ Can you search by author? Author → Results display?
✓ Do ISBNs work? Search ISBN → Correct record appears?
✓ Are call numbers displaying correctly? Item view shows call number?
✓ Do branch locations match? Location field correct for each item?
Patron verification:
✓ Patron login works? Try staff password → login successful?
✓ Patron checkout works? Scan barcode → item displays for checkout?
✓ Fines display correctly? Patron view shows any migrated fines?
✓ Holds system works? Can you place a hold on an available item?
6.2 Spot-Check Sample Records
Manually compare 20–50 records from your migration against your original ILS:
| Check | Original ILS | Koha | Match? |
|---|---|---|---|
| Record #1 (ISBN 978-0-12-345-678-9) | Title: “PostgreSQL for Beginners” | Title: “PostgreSQL for Beginners” | ✓ |
| Record #2 (barcode B001234) | Location: Downtown Branch | Location: Downtown Branch | ✓ |
| Record #3 (Author: Jane Doe) | Author link works? | Authority linked? | ? |
Document any discrepancies; most are fixable with data cleanup.
6.3 Test All Integrations
Before go-live, verify integrations with:
- Self-checkout machine: Can it read barcodes?
- RFID system: Does RFID tag data integrate with Koha?
- Payment processor: Do fines/fees payments sync correctly?
- Email notifications: Do holds notifications send?
- Mobile app: Can patrons see their account and renew?
Phase 7: Staff Training (Week 8)
7.1 Prepare Training Materials
Create documentation for:
- Catalog searching (same as old ILS, but search syntax may differ)
- Item checkout/check-in (likely simpler than Sierra/Millennium)
- Patron management (add new patron, reset password, verify borrowing privileges)
- Report generation (where to find reports, how to run custom reports)
- Copy cataloging with Z39.50 (optional advanced module)
7.2 Conduct Training Sessions
Hold 2–3 training sessions (1–2 hours each):
- Managers/supervisors: Focus on reports, statistics, patron management
- Circulation staff: Focus on checkout, check-in, holds, fines
- Cataloging staff: Focus on searching, creating records, copy cataloging (if applicable)
Keep staff engaged with hands-on labs: “You try searching the catalog. Find these 5 titles.”
Phase 8: Go-Live Checklist (Week 9)
8.1 Final Pre-Go-Live Tasks
- All staff trained and comfortable with basic workflows
- Patron and MARC data verified (spot checks complete)
- Circulation rules tested with real scenarios
- Mobile app tested by patrons
- Self-checkout machine tested
- Backup of Koha database created
- IT team confirmed server uptime and monitoring
- Staff knows how to report issues (support ticket/email)
- Signage updated: “We’re now using Koha! Please report issues to [email]”
8.2 Go-Live Day
Morning (before opening):
✓ Verify database backup completed successfully
✓ Test patron login once more
✓ Verify catalog is searchable
✓ Run test checkout on a real item
Day of:
✓ Brief daily huddle with all staff at opening
✓ Have IT/systems person on standby for 4 hours
✓ Announce to patrons: "New catalog system today — we're here to help!"
✓ Monitor for circulation issues (holds, checkouts, returns)
End of day:
✓ Congratulations! You've gone live
✓ Document any issues that came up
✓ Plan follow-up training for anything that went wrong
Phase 9: Post-Migration (Weeks 9–12+)
9.1 Collect Feedback
First 2 weeks after go-live:
- Circulation staff: Any checkout issues?
- Patrons: Any problems searching or renewing?
- Catalogers: Any issues with copy cataloging?
Create a shared spreadsheet or form for staff to log issues.
9.2 Fine-Tuning
Based on feedback:
- Adjust circulation rules if loan periods don’t feel right
- Fix any display issues (e.g., call numbers formatted strangely)
- Add custom reports if staff miss reports from old ILS
- Extend patron training if needed (follow-ups)
9.3 Optimize with Z39.50 Copy Cataloging
Now that you’re stable, set up copy cataloging to speed up acquisitions:
- Configure Z39.50 servers (Library of Congress, OCLC, etc.)
- Train catalogers on importing MARC records from Z39.50
- Measure time savings: before (manual cataloging) vs after (Z39.50 import)
See our detailed guide: Copy Cataloging Workflow — Advanced Guide.
Migration Cost Considerations
Every library’s migration cost is different. Rather than publishing figures that may not apply to your situation, here are the key cost drivers a librarian needs to understand before budgeting for a migration.
For a full framework, see our dedicated guide: Calculating Total Cost of Ownership for Your Library ILS
One-Time Migration Costs to Account For
Staff time is typically the largest cost, and it’s often underestimated. Think through:
- Who will lead the project, and what percentage of their time is realistic to allocate over the migration period?
- Will your systems librarian be able to take on the technical setup alongside their existing responsibilities?
- How many staff will need training, and how long will their productivity dip during the transition?
Data work varies enormously depending on the quality of your existing records:
- Libraries with clean, consistent MARC records may need minimal cleanup
- Libraries that have been through multiple migrations or used inconsistent local practices may face significant data remediation work
- Don’t forget patron data—exporting, cleaning, and re-importing patron records is a separate effort from bibliographic records
External help is optional but worth pricing out:
- Some libraries handle migration entirely in-house; others hire a migration specialist
- Your Koha hosting provider may offer migration assistance as part of onboarding
- Consortium members may be able to share expertise
Infrastructure, if you are self-hosting:
- New server hardware or VPS costs
- Ongoing maintenance and backup responsibilities fall to your IT team
Ongoing Costs to Compare Against Your Current ILS
When comparing Koha to your current system, look at these recurring cost categories:
Licensing and subscription structure: Commercial ILS products (Sierra, Alma, Millennium, Polaris) usually package costs around annual licensing or subscription agreements. Koha deployments should be evaluated as a mix of hosting, support, implementation, and migration costs. However, Evergreen is also open-source—if you are migrating from Evergreen, the primary driver is usually workflow differences or hosting considerations rather than a simple licensing comparison.
Support and maintenance: Factor in what level of professional support your library needs. Koha support ranges from self-directed community support to fully managed hosted services with SLAs. Your current vendor’s support costs are a direct line item to compare.
Hosting: If moving from on-premises to cloud-hosted Koha, your cost mix may shift away from internal infrastructure work and toward external hosting and service charges. If staying self-hosted, infrastructure and internal IT responsibilities remain a direct part of the equation.
Training and change management: Often overlooked in initial budgets. Staff will need time to learn a new system. This is a real cost whether you run formal training sessions or learn on the job.
What to Watch Out For
- Hidden fees in commercial ILS contracts: Some vendors charge separately for add-on modules (acquisitions, serials, ILL) that are included in Koha at no cost
- Data portability clauses: Confirm your current vendor’s terms for exporting your data—some charge extraction fees
- Consortium obligations: If your library is part of a consortium, check whether migrating your ILS affects shared catalog or resource-sharing agreements
- Going live is not the end: Budget for 3–6 months of post-migration support, data cleanup, and staff adjustment time
System-Specific Migration Notes
Migrating from Sierra:
- Advantages: Koha handles MARC export cleanly from Sierra
- Watch out for: Custom 9xx fields (local data). Create mapping document before export.
- Timeline: 4–5 months typical
- Support: ByWater, Equinox have Sierra-specialist librarians
Migrating from Evergreen:
- Advantages: Both are open-source; easier staff transition if staff know Linux
- Watch out for: Evergreen’s item model differs; may need data transformation
- Timeline: 5–6 months (more data mapping needed)
- Support: Community forums active, professional support available
Migrating from Millennium:
- Advantages: Millennium’s MARC export is clean
- Watch out for: Item data sometimes in separate system; plan dual import
- Timeline: 4–5 months typical
- Support: Many Koha implementers experienced with Millennium migrations
Migrating from Alma:
- Advantages: Cloud-to-cloud (if moving to Koha cloud); both modern systems
- Watch out for: Alma stores some data outside MARC; may lose customizations
- Timeline: 4–6 months
- Support: Established migration path; support available
Common Migration Pitfalls & Solutions
| Pitfall | Symptom | Solution |
|---|---|---|
| Incomplete data audit | Discovering 100K records nobody knew about | Schedule audit 2 months pre-migration |
| Character encoding errors | Titles show as “Mañana” → “Ma?ana” | Convert all to UTF-8 before import |
| Duplicate barcodes | Import fails on item #5,432 | Run barcode uniqueness check before import |
| Wrong item locations | All items show as “Unknown Branch” | Verify location mapping in data cleanup phase |
| Staff don’t know new system | Support tickets pile up post-go-live | Conduct hands-on training 1–2 weeks before |
| Patrons can’t find records | Search results empty even though records imported | Rebuild search indexes after large import |
| Forgotten customizations | Old reports don’t work in Koha | Document custom fields/workflows in advance |
Next Steps
- Schedule a consultation: Talk to a Koha hosting provider about your library’s specific migration
- Start data audit: Export a sample of 100 MARC records to understand your data quality
- Assemble your team: Identify project lead, systems librarian, cataloging lead
- Set timeline: Use this guide to draft a realistic migration schedule for your library
Once live, explore advanced features:
- Z39.50 copy cataloging: How to Add Z39.50 Servers
- Advanced workflows: Copy Cataloging Advanced Guide
- Authority records: What Are Authority Records?
Resources
- Koha Community Wiki: https://wiki.koha-community.org/
- Migration Guides by Host: ByWater, Equinox, and others publish migration playbooks
- MARC Record Standards: https://www.loc.gov/marc/ (Library of Congress MARC documentation)
- Koha Support Forums: Community support + professional options
Next Steps
More in Koha System
Was this article helpful?