Migrating from Excel to GLPI inventory: a practical guide

Migrating from Excel to GLPI inventory: a practical guide

Excel as an inventory works fine until the first holiday. Then somebody makes a personal copy, somebody else adds a column, and a year later you have three versions of the truth, no validation, and a "notes" column with 14 different date formats. Migrating to GLPI isn't just about moving data — it's a chance to put the data into a shape that lasts. This is about that preparation.

Why not import the raw spreadsheet

Bulk-importing raw Excel into GLPI almost always creates chaos:

  • Manufacturer variants ("Dell", "DELL", "dell", "Dell Inc.") create four independent entries in the Manufacturers dropdown.
  • Free text in a "location" column won't filter — "BA HQ", "Bratislava", "Bratislava HQ" are three different strings.
  • Rows without a serial number duplicate on a second import; without a key, deduplication doesn't work.
  • The "User" column holds an email here, a name there, both elsewhere — GLPI doesn't know what to put into users_id.

Half a day spent in Excel before the import saves a week of cleanup in GLPI afterwards.

Pre-migration audit of the spreadsheet

Open the current asset list and do six things in order:

  1. Identify which columns you'll actually migrate. Usually fewer than you think: hostname/asset tag, serial, manufacturer, model, location, user, purchase date, status. Columns like "note 2017" or "old lease" stay in Excel as historical records.
  2. Normalize manufacturers. Filter the column in Excel and list unique values. Merge variants into one canonical form ("Dell Inc." → "Dell"). Same for OS, Model, Department.
  3. Fill in missing serial numbers. Rows without an SN: complete via floor walk, or label them with a "no-serial-prefix" + the original hostname (e.g. NS-PC-042). Without a key GLPI cannot deduplicate.
  4. Map users. Create a second sheet "users_lookup" with email, name, GLPI login. In the main sheet replace the user via VLOOKUP/XLOOKUP with the login that matches GLPI users_id after LDAP sync.
  5. Unify date formats. GLPI expects ISO 8601 (YYYY-MM-DD). In Excel format the column as Custom → yyyy-mm-dd and verify values aren't shown as raw numbers.
  6. Mark each asset's status. For deployment via the state machine you need to know the current state: In production, In stock, Retired, etc. Without an explicit status, every asset defaults to In production even if half is sitting in the storeroom.

Column mapping

A typical Excel inventory vs. GLPI fields:

Excel column        →  GLPI field (Computer)
─────────────────────────────────────────────
Asset Tag           →  name
Serial Number       →  serial
Inventory Number    →  otherserial
Manufacturer        →  manufacturers_id
Model               →  computermodels_id
OS                  →  operatingsystems_id
Location            →  locations_id
Assigned User       →  users_id
Purchase Date       →  date_purchase
Warranty End        →  warranty_expiration_date
Cost                →  value
Status              →  states_id
Department/Entity   →  entities_id

Columns that have no place in stock GLPI (e.g. "Cost center", "Lease ID"), add via the Additional Fields plugin before the import — otherwise the values are lost.

Bulk import via Data Injection

The Data Injection plugin from the Marketplace is the preferred path. Procedure:

  1. Save Excel as CSV with UTF-8 encoding and ; as separator (not comma — Slovak/Czech Excels often have commas in the data).
  2. In GLPI go to Plugins → Data Injection → Models and create a new model for "Computer". Define the CSV-header → GLPI-field mapping.
  3. Tick Add dropdown values if not exist — the plugin will create missing manufacturers, models, etc. automatically.
  4. Start with a small sample (10–20 rows) into a new asset type or test entity. Verify the result before the full batch.
  5. Full import. The plugin produces a log file with the count of successful/failed rows and the failure reason for each.

For more than 10,000 records, split the CSV into 2,000-row blocks — Data Injection doesn't manage memory well on very large batches.

Post-migration QA

After the import, run six checks before announcing the new GLPI to the team:

  • Record count — rows in CSV vs records in GLPI. The difference equals failed rows; check the log.
  • DropdownsSetup → Dropdowns → Manufacturers and similar. Look for variants that slipped through despite the pre-migration normalization.
  • Assets without a user — saved search. Why didn't they get assigned? LDAP not synced? Wrong login in Excel?
  • Assets in the root entity — typically means the entity column had a typo or empty value. Move them manually or via a business rule.
  • Serial numbers — saved search for empty SNs. These will never deduplicate; fix them now.
  • Future-dated fields — a date_purchase in the future means an Excel typo or a misformatted date.

After migration: keeping it clean

Excel fell apart because no one owned it. In GLPI you solve the same problem organisationally:

  • Define an inventory owner (typically the IT lead or asset manager). Without one specific person making the rules, quality regresses to where it was.
  • After migration, deploy the GLPI Agent on every managed device — from then on hardware data is updated by the agent, not by humans.
  • Lock dropdowns down to admin profiles after a settling-in period: Setup → Dropdowns → [Manufacturer] → Permissions. Without that gate "Dell.." and "Dell-Inc" reappear within a year.
  • Monthly check: three saved searches (assets without user, without serial, in the root entity) as a recurring one-person task.

Excel stays as a historical file for things that didn't make it into GLPI, but stops being the source of truth. For the first two months after the move, periodically verify that no one is still adding new records to the spreadsheet — that's the most common regression.

Need help with this topic?

Get in touch