Lesson 6 of 10 · 9 min
Cleaning and importing your data
Written by Melek Mehrez, founder of FreeMaint · Last reviewed October 11, 2026
Lesson objective
By the end of this lesson, you can prepare a clean import file and import your data in controlled waves (locations and assets, then preventive plans, then spare parts), checking each wave before the next.
Data migration is where many CMMS projects lose the trust of their users. If the first thing technicians see is the same machine listed twice, missing serial numbers and dates in the year 1900, they conclude that the system cannot be relied on, and they go back to their notebooks.
This lesson turns the verdicts of lesson 3 into clean import files and a sequence of small, checked imports. The rule is simple: never import more than you can check.
Prepare the file before you import
Work on a copy of each source, never on the original. Then clean it in the same order every time:
- 1
Remove duplicates
Sort by name and by serial number, merge the rows that describe the same item, and keep the most complete version.
- 2
Fill in the required fields
Every row needs what the import requires, usually a name and a location. A row that cannot be completed is not ready to import.
- 3
Standardize formats
One date format (such as year-month-day), one decimal separator, one unit per column, and the same spelling for the same value: “Line 1” and “line one” become one.
- 4
Apply the coding rule
Give every asset its code from lesson 5, and use the same codes whenever another file refers to it.
The CMMS's own import template is the safest starting point: its columns, formats and required fields are exactly what the import expects. Copy your cleaned data into it rather than adapting the import to your file.
Import in waves, in the right order
Records refer to each other: an asset sits in a location, a preventive plan points to an asset, a spare part may be linked to the machines that use it. Import in the order of these references, so that whatever a row points to already exists. If your preventive plans list the spare parts they use, import the parts before the plans.
| Wave | What | Check before moving on |
|---|---|---|
| 1 | Locations: sites and areas | The tree matches the hierarchy decided in lesson 5 |
| 2 | Assets, with their location and parent | Counts per area, and a sample of records opened one by one |
| 3 | Preventive plans | Each plan points to the right asset, with the right frequency |
| 4 | Spare parts and stock | Quantities match the storeroom count, and links to assets are correct |
| 5 | Open work orders, if any | Each one is assigned, and none duplicates a planned task |
Start each wave with a test on ten rows. If the ten rows come out right, import the rest; if not, fix the file, not the records. A large file can be split into several smaller ones, imported one after the other.
Check after each wave
A success message only says that the rows were accepted. It does not say that they are right. Check each wave in three ways:
- Counts: the number of records created matches the number of rows in the file, area by area.
- Samples: open ten records at random and compare them with the source, field by field.
- Shop-floor check: ask a technician to find three machines they know well, on a phone, and to say whether the information is right.
History follows the decision taken in lesson 3. If you migrate a summary of past breakdowns, enter it as closed work orders dated on the day the work was done, so that breakdown indicators such as MTTR start from a real history rather than from zero.
Example
The packaging plant's migration
The plant imports its site and eight areas, then its 40 assets in a single file. The ten-row test reveals that the purchasing list stored install dates as text: the column is fixed in the file and the import runs again, cleanly.
The 150 preventive tasks that survived the audit are grouped into 60 plans and imported in the third wave. A technician checks the plans of the two fillers on a phone and spots a frequency entered in days instead of weeks: the plan is deleted, corrected in the file and imported again before the parts wave starts.
Spare parts follow in the fourth wave: 420 part numbers from the storekeeper's spreadsheet, after removing 35 duplicates. The open work orders come last, each checked against the preventive plans so that none duplicates a planned task. The whole migration takes eight working days spread over three weeks, with a log entry for each import.
Four common mistakes
- Importing everything in one file, the day before go-live.
- Fixing records one by one in the CMMS instead of fixing the file.
- Importing preventive plans before the assets they point to.
- Treating a success message as proof that the data is right.
In FreeMaint
Included in Core (free)Import from a spreadsheet, wave by wave
Each importable list in FreeMaint has an Import button with a downloadable template, a validation step that shows errors before anything is created, and a limit of 8,000 rows per file. The limit applies per file, not per account: on every plan, including the free one, the number of records is not capped. To record past work, the “Log past work” button on the work order list creates closed, dated work orders.
Read the documentationTemplate for this lesson
Data migration checklist, field mapping and import log
Excel (.xlsx), blank, with progress formulas
Key takeaways
- Fix the file, never the records: duplicates, required fields, formats and codes.
- Import in the order of references: locations, assets, plans, spare parts, open work orders — parts before plans if the plans list them.
- Test each wave on ten rows before importing the rest.
- Check every wave with counts, samples and a technician in the field.
Check your understanding
A few quick questions. Nothing is recorded.