Manage spare parts, stock levels, and consumption
Register spare parts
Each part gets a reference (PART-1, etc.) and tracks stock, costs, and usage.
Use the search box on the Parts page to find a part by its name, part number, reference, or barcode — or by the name or serial number of a machine it is linked to. Typing a machine name returns every part attached to that machine.
Set min quantities for critical parts to get automatic low-stock alerts.
Load your whole spare-parts catalog and stock from one spreadsheet
If you are starting from a spreadsheet, you do not have to key parts in one at a time. The Parts page accepts a CSV or Excel file and creates or updates hundreds of records in a single pass.
Before the import runs you choose what should happen to rows that match a part you already have: create new records only, update existing ones only, or update the matches and create the rest. Because matching uses the Part Number, you can export your parts, correct them in Excel and re-import the same sheet without creating duplicates.
The Excel template arrives with the right headers already in place. Row 1 holds the column names, row 2 shows the expected type, and row 3 shows an example. Enter your data from row 4 down — rows 2 and 3 are hints and are ignored when you import.
Running an import needs the "import parts" permission, which Admin, Manager and Warehouse Manager have by default. If the Import button returns an error, ask an administrator to check your role.
Filling in both Quantity and Location (Name) records that quantity at that location, and the part's overall on-hand becomes the sum of its locations. That is what lets you load one file per site.
Warning:
In update mode, a blank cell leaves the current value unchanged rather than clearing it. To clear Description, Part Number, Manufacturer or Storage Location, type NONE in the cell; NONE in the Location (Name) column detaches the part from its location. On a new part, NONE is ignored.
Track quantities and movements
FreeMaint maintains real-time counts with a complete audit trail of every movement.
Every part page surfaces three live values: On Hand (your current stock), On Order (what is still expected on open purchase orders) and Projected Available (On Hand + On Order). On Order only counts what has not arrived yet: when an order is delivered in part, the delivered quantity moves to On Hand and only the remainder stays on order. There is no manual field to edit — the breakdown always reflects your purchase orders.
Perform regular stock audits comparing physical counts to system records.
Once a part tracks its stock per location, every change names its location: “Adjust stock” asks which location the units leave or enter, and the total follows. After creation, the quantity on the part form is read-only: change it with “Adjust stock”, so that every change appears in the stock history.
If the same part is stocked in several warehouses or storerooms with different quantities (for example cement: 5 bags in the Infra Warehouse and 10 bags in the Electrical Warehouse), create the part once and track its stock per location — do not create the part twice. Start per-location tracking by creating a Stock Transfer into each warehouse (Inventory > Stock Transfers), or by adjusting the per-location stock. The part then shows a “Stock by location” breakdown on its detail page, and its global quantity stays equal to the sum of all locations. To give each warehouse its own responsible section, set the manager on each Location. Per-warehouse stock transfers are available on the Business plan.
Automatic notifications when stock is low
When a part drops below its minimum threshold, FreeMaint sends notifications.
Filter by supplier to see only what one vendor owes you, then tick the rows you want and create a single requisition for the lot. It opens as a draft, so you can still change quantities or drop a line before turning it into a purchase order. Quantities are proposed from each part's reorder rule, and the supplier travels with each line so the draft splits cleanly per vendor.
The three cards at the top count every part below its threshold across the whole company, not just the rows on screen. The list itself is paginated — use Previous / Next to reach the rest.
Set minimums based on lead times. If a part takes 2 weeks and you use 10/week, set minimum to 20+.
For references you track for purchasing or asset BOMs but never keep on hand: open the part, go to Settings and enable "Non-stock item". It stays in the database with its full history but never triggers low-stock or out-of-stock warnings, even at zero quantity. (To only temporarily silence a normal part, select rows in the Parts list and click "Deactivate selection"; toggle "Show inactive" to restore.)
Analyze part usage patterns
Track which parts are used most, on which assets, and by which work orders.
Each movement linked to a work order also shows that work order's asset. The Export button downloads the current filtered view as PDF or Excel — newest first, up to 5,000 rows in Excel and 2,000 in PDF — and the file states the filters that were applied. Export requires the Starter plan or higher.
Inventory > Stock movements lists every movement of every part across the company, newest first: parts used on a work order, returns (with the reason given when the part was removed from the work order, and its note), receipts, adjustments and transfers. Filter by type, reason, part, work order, location and dates; each row links to its work order. This is how a warehouse keeper checks the parts used on and returned from work orders. It needs the permission to read inventory (inventory:read); opening a work order from a row also needs that work order to be within the user's data visibility.
Use history to forecast needs. 50 filters/month used = order accordingly.
Correct inventory quantities
Correct discrepancies between physical stock and system records.
When stock leaves for operational use rather than a work order, choose the reason “Issued from stock” and, in “Issued to (optional)”, the person who took it — who recorded it is kept automatically. Use “Notes (optional)” for remarks. Inventory > Stock movements then shows each receipt's supplier and document number, and “recorded by → issued to” for each withdrawal, and exports them to Excel or PDF.
In the advanced form you can record the supplier and the invoice or delivery-note number for this particular movement. Both are optional and both are stored on the stock movement itself, so the history shows who supplied these goods and under which document — which is what an audit reads. The supplier is not filled in for you from the part: a part’s default supplier is right only until you buy the same part elsewhere.
Schedule regular audits: monthly for high-value parts, quarterly for others.
Organize inventory
Categories help organize parts for browsing, filtering, and reporting.
In Inventory › Parts, tick the parts to classify, then click "Bulk edit" — in the table view it sits in the bar that appears above the selected rows. Choose a category, a location and/or a storage location: only the fields you fill in change, the others are left as they are. Stock quantities never move with this action (use Stock Transfers for that), and the supplier is still edited part by part.
Admins create/edit categories in Settings > Categories > Parts.
Define categories matching your maintenance domains for meaningful analytics.
In the tree view, “Expand all” and “Collapse all” are remembered for the Parts page only: expanding your locations no longer opens every category of the inventory.
A part holds exactly one category, and categories cannot be nested. That is rarely a problem, because the two things people usually want to record — what kind of spare it is, and how critical it is — are not both categories. Use the category for the kind of spare, and the built-in Critical Part checkbox for criticality.
In Inventory › Parts, open the Category filter and pick “Uncategorized”: the list shows only the parts filed nowhere. Tick them (scroll down to load them all) and use Bulk edit to give them a category. Only people allowed to create categories see “Create new category” in the category picker; everyone else picks from the existing list, which keeps similar spares from ending up in different categories.
Track financial value
Total inventory value = sum of (unit cost x quantity) for all parts.
Next to the Unit cost field, use 'Calculate from total' to type a total price and a quantity (already pre-filled with the pack size when you set one). The unit cost is filled in for you, so you never divide by hand.
Important:
Pricing data requires INVENTORY_VIEW_PRICES and INVENTORY_VIEW_VALUE permissions.
If you buy a part in a larger pack but keep stock in a smaller unit — like a 400-liter drum of oil counted in liters — open the part, set the Unit of measure to your stock unit (Liter), then fill in a Purchase unit (Drum) and a Pack size (400). On a purchase order, switch the line to 'Order by pack' to enter the number of drums and the price per drum: the system records the cost per liter automatically and keeps the per-drum total for your financial control. Costs are always stored per stock unit.
Purchase units and the cost calculator are available on every plan.
Visible on the Inventory dashboard and Financial Reports. Requires INVENTORY_VIEW_VALUE permission.
Find a part and book it out against a work order by scanning its barcode — with the mobile app, the web camera or a hand scanner
FreeMaint reads the barcodes already printed on your spare parts and store bins (Code 128, Code 39, EAN, UPC, QR, Data Matrix) as well as the labels FreeMaint prints. A scan finds the exact part, and from there you can book it out against a work order: the stock goes down and a stock movement records who took the part, for which work order, when and from which location. Scanning works with the mobile app camera, with the camera scanner of the web app, and with any USB or Bluetooth hand scanner.
There are four ways to take a part from the store and charge it to a work order. Each one lowers the stock and writes a stock movement with the person, the work order, the date and the location, which you can review in Inventory → Stock movements.
Nothing to configure: the format is detected automatically. The mobile app and the web camera scanner read all the formats below. A USB or Bluetooth hand scanner reads whatever it is set up to decode, because it simply types the code.
When a part is stocked in two or more locations, for example a critical spares store next to the main store, Take from lets you choose the location the part comes out of. A part kept in a single place asks nothing. By default, the part comes from the work order's location if it holds some, otherwise from the location holding the most. Removing the part from the work order returns it to the location it was taken from.
A stocked item often carries two codes — the distributor's and the manufacturer's — and recording only one means scanning stops working the day you change supplier. Under the barcode field you can add as many extra codes as you need. Scanning any of them finds the part, and so does typing any of them into the search box.
In the web app, any USB or Bluetooth scanner that works as a keyboard (HID) is supported: click in the scan field and the scanner types the decoded code followed by Enter. The scan icon in the web app header also opens your device's camera. On mobile, the phone or tablet camera is the scanner, so no extra hardware is needed.
To print Code 128 labels for your store bins: go to Inventory → Parts, select the parts, click Generate QR codes, choose A4 PDF grid (24 labels/page), set Barcode type to Code 128 barcode (or Both), then click Download. A single label prints the same way from a part's page, with the selector next to Print Label. The bars encode the part's short code — the same code as its QR — printed in clear under the bars, so if a label gets scratched, technicians can still type it. Stick the labels on the store bins.
Issue: The scanner reads the code but the part is not found
Solution: Search for the scanned value in Inventory → Parts. If the code is not on the part yet, edit the part and enter it in the Barcode field or as an additional barcode. A scan also finds a part by its part number or its reference.
Issue: A barcode saved with spaces does not scan
Solution: Spaces before or after a barcode are now removed when a part is saved or imported, and a code saved earlier with a trailing space is still found. A space or a dash in the middle of a code is part of it: it must match the label.
Issue: A 12-digit UPC is read as a 13-digit number
Solution: Some phones read a UPC-A as an EAN-13 starting with 0. FreeMaint tries both forms, so the part is found whichever form was saved.
Issue: A barcode starting with 0 lost its zero after an import
Solution: A spreadsheet import reads a column of digits as numbers, which drops leading zeros. Check the Barcode field of the imported parts and retype the codes that lost their zero.
Issue: Low light kills the camera scanner
Solution: Enable torch (flash) in the scanner overlay; for production environments, prefer a Bluetooth ring scanner
Issue: The scanner reads the code but the part is not found
Solution: Search for the scanned value in Inventory → Parts. If the code is not on the part yet, edit the part and enter it in the Barcode field or as an additional barcode. A scan also finds a part by its part number or its reference.
Issue: A barcode saved with spaces does not scan
Solution: Spaces before or after a barcode are now removed when a part is saved or imported, and a code saved earlier with a trailing space is still found. A space or a dash in the middle of a code is part of it: it must match the label.
Issue: A 12-digit UPC is read as a 13-digit number
Solution: Some phones read a UPC-A as an EAN-13 starting with 0. FreeMaint tries both forms, so the part is found whichever form was saved.
Issue: A barcode starting with 0 lost its zero after an import
Solution: A spreadsheet import reads a column of digits as numbers, which drops leading zeros. Check the Barcode field of the imported parts and retype the codes that lost their zero.
Issue: Low light kills the camera scanner
Solution: Enable torch (flash) in the scanner overlay; for production environments, prefer a Bluetooth ring scanner
Let each crew see only the parts in the storerooms they work from
By default every user who can read inventory sees every part in the company. If you run several crews out of one site — HVAC, fleet, plant — you can limit each one to the stock held in the locations their team works from.
A part is visible if its location is granted, or if it has a stock record in a granted location — even one currently at zero, so you can still see what needs reordering. Moving stock between storerooms with a transfer therefore changes who can see it.
Access to a location covers all of its sub-locations. A sub-location's own access list only adds people: it never removes those who reach it through a parent, and the location page lists them under “Access inherited from a parent location”. To keep a storeroom for one team only, place it outside the location another team is granted, by changing its parent: its stock, its history and its own access are kept.
The same setting applies to tools: a user sees the tools whose location is granted to their team, plus the tools with no location. It covers the tools list, a tool's page, its loan history and label, the tools tree and exports. Giving out or returning a tool still depends only on the user's permissions.
Parts with no location remain visible to everyone. That is deliberate — it stops a half-finished setup from emptying the inventory for your whole team. It also means the separation only takes effect once your parts are actually classified.
Administrators and managers, and anyone whose role data visibility is 'All company data', always see the full inventory. The restriction applies to the parts list, the part detail page, the parts tree, barcode lookups, search, exports and the low-stock alerts on the dashboard — all at once, so they never disagree. Low-stock and out-of-stock notifications follow the same rule: a user only hears about the parts they can open.
Reusable bundles of parts
A parts kit is a reusable bundle of parts you use together for a job — for example a pump rebuild kit. Build it once, then add all of its parts to a work order or an asset in a single step.
Kits save time on recurring jobs — add one line instead of ten.
Kits save time on recurring jobs — add one line instead of ten.
Register durable tools, separate from consumable parts
Tools are the durable, returnable equipment you maintain WITH — a welding machine, a torque wrench, a drill — as opposed to consumable parts (screws, welding wire) which you track under Inventory > Parts. Each tool gets its own reference (TOOL-1, etc.).
For measuring instruments (torque wrench, micrometer, multimeter), enable "Requires calibration" on the tool and set an interval. FreeMaint then tracks the next due date and reminds the assignee before it expires. Leave it off for tools that do not need calibration — nothing changes for them.
On the web, the Tools list can be filtered by category, and its tree view groups tools by category or by location. In the mobile app, tap “Filters” next to the search field to show a single category and/or a single location; the choice is remembered on the phone.
A new tool gets its QR code when it is created. For an existing tool, open it and click "Generate QR Code" in the QR Code card (this needs permission to edit tools and the Business plan). The same card offers "Copy Link", "Download" (PNG) and "Print Label" (a PDF label with the name, reference and location). Stick the label on the tool or its case: scanning it with the mobile app shows "Open tool", and a scan without an account shows only its name, reference, status and location. The tool's own barcode is recognized too, and a code never changes once generated.
Viewing tools is available on every plan. Creating and editing tools (and logging calibration) requires the Business plan.
On the mobile app, scan the tool's QR code and use the same “Check out” and “Return” buttons. Lending needs the “Check out and return tools” permission and the Business plan. A tool is out with one person at a time, and a tool in repair or retired cannot be lent.
The tools list can be filtered by location; tools stored in its sub-locations are included.
Register an item as a Tool when it is reused rather than consumed: it does not have a stock quantity and is not deducted when used on a job. Register screws, lubricants and other consumables as Parts instead.
Open a work order, go to the Parts tab, and use the "Tools used" section to attach the tools applied on the job. This records which tools were used without affecting any stock.
FreeMaint CMMS
© 2026 FreeMaint. All rights reserved.