Tool tracking without bloating the app: how the DirtFleet module works
Hand tools, power tools, kits, consumables — assigned to crews + trucks, scanned via QR/NFC for instant damage reports. Inside how we kept it simple.
We shipped a tool tracking module last week. The brief from the construction shops we've been running pilots with was unambiguous: do not bloat the app. They've all tried something heavier — Fleetio Parts, ToolHound, ShareMyToolbox — and bounced off the daily-use friction. The request was for the simplest possible thing that would still solve the problem.
The problem in three sentences
A 25-truck construction crew loses ~$3–8k of tools a year. The loss isn't because tools are stolen — it's because the person who borrowed the impact wrench is on a different jobsite next week, and nobody remembers. Mechanics burn 10 minutes per morning trying to find the torque wrench that “was right here yesterday.”
What we built
- Tools as mini-assets. Same shape as equipment, but lighter — name, category, serial, optional purchase cost, optional photo. Add a wrench in 10 seconds.
- Flexible assignment. A tool can belong to an employee, a vehicle, both, a yard, or the central pool. The most common assignment is “Sarah, lives in Truck 7” — two dropdowns, no extra concept.
- QR + NFC scan-to-action. Equipment scan opens log-hours. Tool scan opens damage / replacement report. Same /scan endpoint, different deep-link based on what the token resolves to.
- Failure auto-spawns a work order. Mechanic taps Broken on check-in → status flips, WO opens at HIGH priority, queue picks it up. No second app, no second login.
What shipped after launch
The module hit v1 with the four bullets above. The pilots immediately asked for inventory + accounting hooks, so the next iterations layered these on top — still in-core, still no per-tool tax:
- Low-stock alerts on consumables. Mark something
isConsumable: true, set a reorder threshold, and the dashboard surfaces “3 on hand of 10” before the foreman has to ask. Crossing the threshold fires atool.low_stockwebhook so a Zap can post to Slack or POST to your supplier endpoint. - PM tracking on power tools. Same hour-based interval engine as yellow iron. Set
pmIntervalDayson a generator or compressor, mark serviced when it's done, the dashboard chip clears. - Warranty-expiring visibility. Set
warrantyEndDateat create time. The /tools list has a “Warranty <60d” filter chip; the dashboard has a dedicated card. Catch renewals before the auto-charge. - Checkout utilization report. Per-tool 30-day % in use plus top-N users. Answers “do we need a second compressor?” without paginating the audit log.
- Fleet tool book value. Straight-line depreciation over a per-category useful-life default. Pulls into the accountant's fixed-asset register from the same CSV export.
- Public REST API. Eleven tool endpoints (list / create / detail / checkout / checkin / report / mark-serviced / adjust-stock / events / utilization / qr) + bulk-import + a print-ready QR PNG generator. Seven
tool.*webhook events covering creation, checkout/checkin, failure, low-stock crossings, assignment changes, and PM service completions.
What we deliberately left out
- Cycle counting. A torque wrench “clicks 247 times” is a beautiful metric and an impossible one to collect honestly. We don't pretend.
- Predictive lifespan models. We track failure dates. That's enough to spot “Brand X impacts last 14 months in our fleet” without a daily ritual.
- Bluetooth power-tool integrations. Roadmap, not v1. Milwaukee ONE-KEY etc. when there's a real customer who'll use it.
Try it
Module is included in the standard 30-day trial. Bring a roll of polyester thermal-transfer labels and a Zebra ZT printer; we cover the rest in the in-app help.