FreeMaint
FeaturesPricing
DocsGuides & API referenceBlogPlaybooks & product updatesComparisonFreeMaint vs the alternativesChangelogWhat's new
AffiliatesEarn recurring commissionServicesSetup, migration & training
Contact
ENSign inSign up

Product

FeaturesPricing

Resources

DocsBlogComparisonChangelog

Partnership

AffiliatesServices

Account

ContactSign in
FreeMaint

Free your maintenance

Product

FeaturesPricingComparisonChangelogSign up

Resources

BlogDocumentationResearchSolutionsIndustriesFree templates

Company

AboutServicesAffiliatesContact

Legal

PrivacyTermsRefund PolicyExport Compliance
FreeMaint © 2026 · All rights reserved.GDPR & LGPD CompliantMobile app
Back to Documentation

FreeMaint CMMS

Import & Export

Import & Export

Bulk import data, export reports, and create backups

CSV Import

Bulk data import

Import assets, parts, locations, users, vendors, customers, WOs, PM plans, and requests via CSV.

Vendor contacts

Vendors support individual contacts directly in import and export. Add numbered columns — Contact 1 Name, Contact 1 Email, Contact 1 Phone, Contact 1 Role, Contact 1 Primary — and repeat with Contact 2, Contact 3, and so on for as many contacts as you need. Only the name is required; the email can be left blank. Exporting your vendors already includes these columns, so you can export, edit, and re-upload. When updating, including any Contact column replaces that vendor's contacts; leave the Contact columns out to keep the existing ones.

Custom fields in an import

Your custom fields appear as cf_ columns in the export and can be filled in and re-imported. Leave a cf_ column out of your file to keep the stored value untouched; include it and leave the cell empty to clear it.

Importing a location hierarchy

Locations can be nested as deeply as you need. In the Parent Location column, type the parent's name — or, when sub-locations share the same name in different branches, the full path with each level separated by ' > ' (for example: Site A > Building 1 > Floor 2). This lets you reuse a name like 'Office' or 'Corridor' under different parents without any conflict. Exports already fill this column with the full path, so an exported file re-imports exactly as it was.

How big a file can be

Up to 8,000 rows per file. This limits ONE FILE, not your account: there is no cap on how many assets, parts, locations or any other records you can hold — on any plan, including the free Core plan. A larger dataset is simply split into several files that you import one after another, and each import adds to what is already there. Very large files also take longer and produce a longer error report, so 2,000 to 5,000 rows per file is usually more comfortable to work with than one file at the maximum.

People are matched, never duplicated

A person is matched on ID, then email, then username — so re-importing a roster export never creates a second account for someone you already have. In Create new only, those rows are skipped and listed by name. In the two update modes, only the first and last name are changed from a file: role, email, username and password are never modified by an import. Two different people with the same name stay two people — a name is not an identity.

A column you DELETE from the file, or a cell you leave EMPTY, keeps its stored value. That is how you update one thing without disturbing another: to fill in unit costs across hundreds of parts without touching stock levels, delete the Quantity column before uploading. Total value is recalculated from the new unit cost automatically.

To clear a stored value instead, type NONE in the cell (upper or lower case). This works for assets in Model, Manufacturer, Description, Area / Zone and Barcode, and for parts in Description, Part Number, Manufacturer and Storage Location; NONE in Location (Name) detaches the part from its location. NONE only clears on a row that updates an existing record — on a row that creates a new one it is ignored and the field stays empty. A dash (-) is not read as NONE: it is saved as typed.

Export, edit in Excel, re-import

The exported file and the import template now use the same columns, so you can export your data, edit it in Excel and upload it straight back — no need to add or rename columns. Keep the ID column untouched: it is what matches each row to the existing record, so rows are updated instead of duplicated. Columns that cannot be imported (On Hand, On Order, Total Cost, dates) are listed as ignored during the mapping step.

Process

  1. Download template
  2. Fill with data
  3. Save as CSV UTF-8
  4. Upload
  5. Review validation
  6. Confirm import

Supported Types

  • Assets
  • Parts
  • Locations
  • Users
  • Vendors
  • Customers
  • Work Orders
  • PM Plans
  • Requests
  • Asset Incidents

To remove a parent during an Excel import, type NONE in the Parent Asset (or Parent Location) column. A blank cell means "leave unchanged", so clearing it will not detach the parent.

Always start with the template.

Create new only
Always add new records. Existing ones are not touched (may create duplicates).
Update existing only
Only update records matched by ID/reference. Rows with no match are skipped and reported.
Update existing & create the rest
Matched records are updated, unmatched rows are created.

Updating existing records

Export your data, make your edits, then re-upload the file. FreeMaint matches each row back to its existing record by the ID (or Reference) column, so records are updated in place instead of duplicated. On the preview step you choose how the import is applied:

Create new only
Always add new records. Existing ones are not touched (may create duplicates).
Update existing only
Only update records matched by ID/reference. Rows with no match are skipped and reported.
Update existing & create the rest
Matched records are updated, unmatched rows are created.

Import Templates

Download and use templates

Templates contain exact headers and format expected.

Requirements

  • UTF-8 encoding
  • Comma-delimited
  • Headers match template
  • Dates: YYYY-MM-DD
  • Empty for optional (not N/A)

Pointing at the right record

Columns that reference another record — Asset, Location, Parent asset, Vendor, Team, Category — normally match by name. When two records share a name, type the reference instead (for example ASS-12 or LOC-4) or #id (for example #123): both are in every export, so an export you edit and re-upload always lands on the right record. If a name does match several records the import still runs and warns you which cell to make explicit.

Excel: Save As > CSV UTF-8 format.


Data Export

Export your data

Export from any module for analysis or backup.

Regular exports as additional backup.

Exportable

  • Assets, Parts, Locations, Users
  • Vendors, Customers
  • Work Orders, PM Plans, Requests
  • Reports (CSV/PDF)
  • Asset Incidents

Full Backup

Company data backup

Export a copy of your whole company. Two purposes, two formats: the Excel workbook moves your data into another FreeMaint account, while JSON, ZIP and SQL are archives for record-keeping and compliance outside the app.

Important:

Want only your own personal data instead of the whole company? Settings → Download My Data.

Included

  • All entity data
  • User info and roles
  • Settings
  • File references

Take Your Data With You (No Lock-In)

Export 100% of your data on every plan — formats, GDPR compliance and migration tips

Your data belongs to you. FreeMaint commits to full data portability: every entity you create can be exported in machine-readable formats, on every tier, with no rate limit, no per-record fee, and no special API key. The point is that your CMMS choice should be reversible — if FreeMaint stops working for you, you can leave with everything intact.

Moving to another FreeMaint account

To carry your data from one FreeMaint account into another, export the Excel workbook from Company Settings → Data → Export Archive, then import each of its sheets from its own list page. The workbook has one sheet per record type and its columns already match the import templates, so nothing needs editing. Its README sheet lists the order to follow. The JSON, ZIP and SQL exports cannot do this — they are archives, and nothing in FreeMaint reads them back.

  1. {"title":"Export the workbook","description":"Company Settings → Data → Export Archive → Excel. Free on every plan, including Core"}
  2. {"title":"Sign in to the destination account","description":"The sheets are matched by name, so categories and locations are recreated as they are read"}
  3. {"title":"Import sheet by sheet, in order","description":"Locations, then assets, then parts, users, vendors and customers, then PM plans, work orders, requests and tools"}
  4. {"title":"Check the preview before applying","description":"Every import validates first and shows you the rows it cannot take — nothing is written until you confirm"}
Daily
Run an automated export of work orders and PM plans daily — store offsite (Drive, S3, OneDrive)
Weekly
Full company export including assets, locations, parts and users
Before big changes
Take an Excel workbook before a large bulk import or a role redesign — it is the copy you could actually put back

Backup strategy

Daily
Run an automated export of work orders and PM plans daily — store offsite (Drive, S3, OneDrive)
Weekly
Full company export including assets, locations, parts and users
Before big changes
Take an Excel workbook before a large bulk import or a role redesign — it is the copy you could actually put back

Exporting your data

Every list view (work orders, assets, parts, locations, users, vendors, customers, PM plans, requests, purchase orders, fuel logs) carries an Export button in its toolbar. The export honours the filters and date range currently applied — so you can scope an export to a single location, a single team, or a date window.

  1. {"title":"Apply filters","description":"Set up the list view exactly as you want the export — filters, sort, columns"}
  2. {"title":"Open Export","description":"Top-right of the list page; opens a format picker dialog"}
  3. {"title":"Pick CSV or Excel","description":"CSV (UTF-8 with BOM) opens cleanly in Excel/Google Sheets. XLSX preserves cell types (numbers, dates, booleans)"}
  4. {"title":"Download","description":"The file downloads immediately for small sets, or arrives by email link for large exports"}
CSV
Universal format. UTF-8 with BOM, CRLF line endings. Opens correctly in Excel, Google Sheets, LibreOffice.
Excel (XLSX)
Preserves number / date / boolean cell types. The company archive can also be taken as an import-ready workbook — one sheet per list, which imports straight back into FreeMaint.
PDF reports
For inspection executions, compliance reports, and asset reports. Audit-grade with embedded checksum (Enterprise).
JSON
JSON — the full company archive, from Company Settings → Data. Free on every plan and needs no API key. For programmatic access, the GraphQL API covers work orders, assets, parts, locations, vendors, customers and floor plans on Business and above.

Available formats

CSV
Universal format. UTF-8 with BOM, CRLF line endings. Opens correctly in Excel, Google Sheets, LibreOffice.
Excel (XLSX)
Preserves number / date / boolean cell types. The company archive can also be taken as an import-ready workbook — one sheet per list, which imports straight back into FreeMaint.
PDF reports
For inspection executions, compliance reports, and asset reports. Audit-grade with embedded checksum (Enterprise).
JSON
JSON — the full company archive, from Company Settings → Data. Free on every plan and needs no API key. For programmatic access, the GraphQL API covers work orders, assets, parts, locations, vendors, customers and floor plans on Business and above.

GDPR and the right to portability

Article 20 of GDPR grants every data subject the right to receive their personal data in a structured, machine-readable format. FreeMaint serves this two ways: the company-level export described above, and an individual one — any user can download their own data from Settings → Download My Data, which returns a JSON bundle of their profile, the work orders and requests they created, their comments, their consents and their activity history. It needs no permission and no paid plan. Erasure (Article 17) is handled by Settings → Delete account.

Important:

Each tenant is fully isolated at the database row level via companyId scoping. There is no shared dataset across customers; an admin from company A cannot see company B's data through any API surface.

Migrating from another CMMS

If you are coming from UpKeep, MaintainX, Fiix, or any other CMMS, the typical path is: export each entity type from the source as CSV, map the columns to the FreeMaint bulk-import template, then upload. The match-by-reference feature lets you preserve external identifiers, so your existing asset tags and PM plan codes survive the migration.

  1. {"title":"Export from the source CMMS","description":"Locations first, then assets, then parts, then users, then PM plans and work orders"}
  2. {"title":"Open the FreeMaint template","description":"Open the list page for that record type (Assets, Locations, Parts…) and click Import, top right — then \"Need a template?\" for a blank Excel or CSV"}
  3. {"title":"Map columns","description":"Copy your data into the template, mapping the source fields to FreeMaint's columns"}
  4. {"title":"Upload and review","description":"Bulk import runs in dry-run mode first — review the diff, then apply"}

Data ownership

You own your data. FreeMaint is a processor; you are the controller. The terms of service spell out that we never sell, repackage, or use your tenant data to train models. Aggregate anonymous metrics (count of work orders shipped, asset count) are computed for product analytics but never tied back to a specific tenant.

Re-importing exported data

Exports use the same column layout as the bulk-import templates. That means you can export a list, edit it in Excel, and re-import — for example to mass-update categories, assignees, or locations. Match-by-reference resolves rows back to their internal IDs without dangling.

Set a calendar reminder for monthly exports. Which format matters: the Excel workbook is the one you can import back, so take that if you want a copy you could restore from. JSON and ZIP are for keeping the full record — including the entity types the importer does not cover.


Import Issues

Fix common problems

Solutions to common import issues.

Issue: Invalid format

Solution: Use template, save as CSV UTF-8

Issue: Rows skipped

Solution: Check error report: duplicates, missing required fields, invalid references

Issue: Corrupted characters

Solution: UTF-8 encoding. Excel: Save As > CSV UTF-8

Issue: Timeout

Solution: Split the file into smaller batches — 2,000 to 5,000 rows imports comfortably. The maximum is 8,000 rows per file.

Issue: A column I filled in is missing from the imported records

Solution: Only columns mapped to a field are imported — the rest are listed in the warning shown at the mapping step and again on the result screen. Assignment needs the 'Assigned To (Email)' column (also accepted: Assignee, Assigned To, Technician); a custom field cannot assign anyone.

Issues

Issue: Invalid format

Solution: Use template, save as CSV UTF-8

Issue: Rows skipped

Solution: Check error report: duplicates, missing required fields, invalid references

Issue: Corrupted characters

Solution: UTF-8 encoding. Excel: Save As > CSV UTF-8

Issue: Timeout

Solution: Split the file into smaller batches — 2,000 to 5,000 rows imports comfortably. The maximum is 8,000 rows per file.

Issue: A column I filled in is missing from the imported records

Solution: Only columns mapped to a field are imported — the rest are listed in the warning shown at the mapping step and again on the result screen. Assignment needs the 'Assigned To (Email)' column (also accepted: Assignee, Assigned To, Technician); a custom field cannot assign anyone.

Preview before confirming — FreeMaint validates all rows first.


FreeMaint CMMS

© 2026 FreeMaint. All rights reserved.