Parts Inventory Software for Vans, Trucks, Warehouses and Jobs
The money leaks in one place: a part that was supposed to be on the van. This is parts inventory software built around that fact. Stock is counted separately at every warehouse, truck and van you name, it moves between them on the record, and the part a technician fits on Tuesday leaves that vehicle’s count and lands on the job at cost.
Written for HVAC, plumbing, electrical and repair businesses running two to thirty people. Not for a distribution centre, and not for a plant maintenance department.
Where one part goes
Main Warehouse
Received into stock — 40 on hand
Van 2 (Danny)
Transferred at load-out — 3 on hand
Job #4188 — no cooling
Added from van stock during the visit
Job cost and margin
Deducted at completion, priced at cost
A transfer moves stock between a warehouse and a van in one action — both locations update, and the total never changes.
Quick answer and who it is for
Opsler is parts tracking software for service contractors whose stock spends most of its life on wheels. It counts a part separately at each named Warehouse, Truck and Van, records every move between them, deducts what a job consumes from the vehicle it came off, and flags anything under its minimum. That is the whole scope, deliberately.
It is a poor fit for three neighbouring categories that rank for the same phrase, and it is worth being blunt about which one you are. Manufacturing and ERP inventory needs bills of materials, work-in-progress and valuation methods — none of that is here. Enterprise MRO and CMMS software is organised around your own assets and preventive schedules inside your own facility. Auto shops want VIN-linked parts catalogs and core returns. If you came looking for one of those, close the tab; you will not be happy in month two.
A good fit if you
- Run vans or trucks that carry stock and cannot say what is on each one today
- Restock vehicles from a shop or warehouse on some kind of rhythm
- Want the parts cost on a job to be a fact rather than an estimate
- Lose count because parts get handed between technicians in a car park
- Only discover a shortage when somebody is already standing in a crawl space
Not in the product
- Barcode scanning — the barcode is a typed, searchable field only
- Purchase orders, vendor records and supplier catalogs
- Serial-number and lot-number tracking per unit
- Automatic reordering to a supplier when stock drops
- FIFO, LIFO or weighted-average valuation methods
Every line above is also a setup step you never do and a screen nobody has to be trained on.
Working out whether the rest of the system suits your trade? See how Opsler is set up for HVAC contractors.
Why spreadsheets fail across moving stock
A spreadsheet answers how many you own. Field service inventory is a different question, asked at a worse moment: it is 9:20am, a technician is on a roof, and what matters is whether the part is on his van, on somebody else’s van, or forty minutes away in the shop. A single company-wide total cannot answer that, and the column that could is only as good as the last person who remembered to edit it.
The count is always one hand-off behind
Two technicians meet on a job, one lends the other a capacitor, nobody opens a laptop. From then on the sheet describes a business that no longer exists.
Vans quietly become warehouses
With no per-vehicle accountability, technicians carry a spare of everything because it is cheaper than a wasted trip. That is your cash, riding around, unrecorded.
The supply house trip nobody needed
A part is bought at counter price because nobody could confirm the shop already had four. It happens quietly and it never shows up as a line on a report.
Margins are a guess by month-end
If parts usage is not attached to the job that consumed it, gross margin per job is arithmetic performed on a feeling.
Manage stock by location
Multi-location inventory in Opsler means three location types — Warehouse, Truck and Van — and as many named locations of each as you actually run. Every part holds an independent quantity at every location, so “we have nine” becomes “four at Main Warehouse, three on Van 2, two on Service Truck 1, none anywhere else”.
Warehouse
Where deliveries land and bulk stock sits. Create one or several — the shop, the yard container, the second branch.
Truck
A work truck. Assign it to a technician and its stock becomes the default source for that technician's jobs.
Van
The rolling stockroom that causes most of the loss. One per technician, named however your crew already refers to it.
What a location record holds
- A name you choose, plus its type
- A street address, city, state and ZIP
- A contact person and phone for the site
- For a truck or van: the technician it belongs to
- Free-text notes, and an active or inactive flag
Assigning a vehicle to a technician is the step people skip and later regret. It is what makes their van the default stock source on a job, and it is why the deduction comes off the right vehicle without anyone choosing from a dropdown under pressure.

Create and organize parts
The parts catalog is one list shared by every location. A part exists once; its quantity exists per location. These are the fields on the record — no more, and nothing hidden behind a configuration screen.
| Field | What it is for |
|---|---|
| SKU | Required, unique across your account |
| Name and description | What the part is called on the invoice |
| Category | HVAC, plumbing, electrical, pest, appliance or general sets |
| Unit | Each, box, pack, gallon, liter, foot, meter, kg, lb, roll, bag, bottle, case |
| Cost price | What you pay — the number job costing uses |
| Retail price | What the customer pays, with a markup percentage |
| Min and max threshold | The floor that fires the alert, and the ceiling |
| Manufacturer, brand, barcode | Reference fields, all searchable |
Import from a template, not a blank screen
Opsler generates two Excel templates and you fill them in. The locations template asks for a name, a type, an address, a site contact and notes, with the type and state columns locked to dropdowns. The parts template asks for SKU, name, description, category, unit, cost price, retail price, manufacturer, brand, min and max threshold, barcode and reorder point — and two columns that do the useful part: Initial Stock Location and Initial Stock Quantity, so the upload creates the stock record as well as the part.
The Initial Stock Location dropdown is built from the locations already in your account, which is why the order matters. If you open the items import while “Main Warehouse” is still the only location you have, Opsler stops you and offers to set the locations up first rather than letting 400 parts land in one bucket. Importing a batch of locations at once is a Pro action; adding them one at a time is not.
Transfer parts between locations
An inventory transfer moves a quantity from one of your locations to another and writes both sides at once. There is no request-and-approve chain to configure: an admin or office staff member picks the part, the origin, the destination and the quantity, adds a reason if it is worth explaining, and confirms. Both counts change immediately.
One part at a time
The everyday case — three motors from the shop onto Van 2 before the first call. Four fields and a confirm.
Bulk transfer
A full van load-out, or moving a leaver’s stock onto the replacement vehicle, without repeating the same form fifteen times.
Two things stop transfers rewriting history. Opsler will not let a transfer take a location below zero — you get a named error identifying the part and the location rather than a negative count. And stock rows carry a version number, so if the warehouse manager and the dispatcher both move the same part in the same second, one of them is told to retry instead of both writes landing and the total drifting.
Attach parts to work orders and jobs
Job-linked parts is the reason the rest of this exists. On the job, the parts panel is filtered to a single inventory location, and that location defaults to the assigned technician’s van or truck — falling back to a warehouse if they have no vehicle assigned. Searching shows what is actually available there, so a part that is not on the van is not silently added to the invoice.
- Each line stores the part's cost price and its retail price, separately
- Quantity, unit price and tax are editable before the invoice goes out
- On completion the quantities leave that location as a JOB_USAGE movement
- The movement carries the job reference, so stock history and job history agree
- Adding the part to the invoice and consuming it from stock is one action, not two
Parts recorded on a job for internal reasons — a warranty swap you are not billing — are marked non-billable and still come off stock at completion. The count is right either way; only the invoice differs.
See how work orders carry parts, labor and proof

Low-stock alerts and replenishment
Low stock alerts run off a minimum threshold, and the threshold is per location. A common filter might sit at a minimum of 20 in the warehouse and 3 on each van, because those are different questions. If a location has no threshold of its own, Opsler falls back to the minimum set on the part itself.
Warning
Quantity has fallen below the minimum for that location. Still usable, already a problem.
Critical
Quantity is zero at that location. The alert is flagged to require interaction so it is not swiped away on a phone.
Alerts reach people three ways: a list in the inventory dashboard naming the part, the SKU, the location and the shortfall; an email to admins and office staff; and a browser push notification. A technician whose van holds the short part can be pushed the alert directly.
What happens next is yours. There is no purchase order and no auto-reorder — the alert tells you what is short and where it is short, and you buy it on the trade account and terms you already negotiated. Contractors running two or three supply houses generally prefer that boundary.
Counts, adjustments and history
Inventory counts are where most systems quietly lose their audit trail. In Opsler a correction is a movement like any other. An adjustment names the part and the location, adds or subtracts a quantity, and requires a reason — the reason field is not optional, which is the only thing that makes the log worth reading six months later.
| Movement | When it happens | What is recorded |
|---|---|---|
| STOCK_IN | Stock arriving at a location | Quantity, destination location, reason, who and when |
| TRANSFER | Moving stock between two of your locations | Part, quantity, origin, destination, optional reason |
| ADJUSTMENT | Correcting a count after a physical check | Add or subtract, quantity, and a reason you cannot skip |
| JOB_USAGE | Parts consumed on a completed job | Quantity, source location and the job reference |
| STOCK_OUT | Stock leaving outside a job — scrap, warranty return | Quantity, origin location, reason |
Counting a van without typing
For a physical count, download the stock update template, put a positive or negative adjustment against each SKU and location, add a reason, and upload it. Opsler applies the batch and writes one update log showing every item it touched with the previous and new quantity side by side.
Reading the history back
Movement history can be filtered by part, by location, by job, by movement type and by date range, and every entry names the user who performed it and when. The batched update logs are a Pro view; the movement history itself is not gated.
Mobile and offline field use
Offline inventory is worth exactly as much as the part of it that survives a basement. Before a technician leaves, Sync for Offline pulls down up to 200 active parts, their assigned vehicle location and that vehicle’s stock levels, and stores them on the device. Here is what that buys, and what it does not.

Search the catalog with no signal
Part search falls back to the cached catalog automatically. Names and SKUs, same search box, no error state.
See what is on their own vehicle
The technician's inventory screen is their van: quantity per part, with in-stock, low-stock and out-of-stock status against the threshold.
Add parts to the job offline
Parts go onto the job and the draft invoice while offline. The queued actions replay when the connection returns and the stock deduction lands then.
Fleet-wide stock is an office view
The technician app shows their own van, not every van. Checking whether another vehicle or the warehouse holds a part is a call to the office, who can see all of it.
The app installs from a supported browser on Android, iPhone or desktop — there is no App Store download. See the offline technician app.
HVAC service-call example
HVAC inventory software gets judged on one week in cooling season, on a four-van shop, with a condenser fan motor as the part everyone is short of. Figures below are an illustration of the workflow, not a customer case.
Monday, 7:40am
Delivery at the shop
Forty condenser fan motors and six cases of 16x25x1 filters are received into Main Warehouse. The office enters them once; the movement log stamps who did it.
Monday, 8:15am
Loading four vans
Four transfers move three motors and a case of filters onto each van. Warehouse drops from 40 motors to 28. Van 2 (Danny) shows 3.
Tuesday, 11:20am
A motor goes in
Danny replaces a condenser fan motor on a no-cooling call. He adds it from Van 2 stock on the job screen; the line carries the $88 cost and the $189 price.
Tuesday, 11:55am
The job closes
On completion Opsler removes one motor from Van 2 as a JOB_USAGE movement against that job. Van 2 shows 2. Nobody typed a stock number.
Wednesday, 4:05pm
Below the floor
Van 2 hits 1 motor against a minimum of 2. It appears in the low stock list as a warning, and the alert email reaches the admin and office staff.
Thursday, 6:50am
Restocked before the first call
The office transfers two motors from Main Warehouse to Van 2 before Danny leaves the shop. The margin on Tuesday's job is already on the profitability report.
Six events, one number that nobody typed twice. The same shape works for plumbing and electrical crews — the part categories differ, the movements do not. More on Opsler for HVAC businesses.
Job costing, accounting and reporting
Inventory job costing works because the cost price travels with the part. When a part is added to a job, the line keeps both numbers — what you paid and what you charged — and the profitability calculation uses the cost side against the invoice revenue. Parts cost and labor cost are reported separately, so you can see which of the two ate the job.
Stock valuation
Total value on hand, broken down by location and by category, with the highest-value parts listed. This is the report that tells you how much cash is sitting in four vans.
Parts usage
Per part: quantity consumed, total cost, total revenue, how many jobs used it, and the split by technician.
Stock movement
Every movement over a period, filterable by type — useful when a count is wrong and you need to find where it went wrong.
Low stock
Everything currently under threshold, by location, as a working restock list rather than a dashboard tile.
Getting the numbers to your bookkeeper is a CSV export, not a live connection. Opsler produces QuickBooks-formatted and Xero-formatted CSV files of invoices and payments for manual import; parts appear on those files as invoice line items with description, quantity, rate and amount. Your purchase cost stays inside Opsler, where the margin reporting uses it. There is no direct, automatic or two-way accounting sync, and calling it one would be a lie you would discover in week one.
Fit, limitations and FAQs
This replaces the spreadsheet and the phone call — the two things that actually decide whether a technician arrives with the part. Your accounting software, your supplier’s ordering system and a full warehouse management system all keep doing their own jobs alongside it. The line is worth drawing plainly: stock in bins across a distribution centre, or per-unit serial history for compliance, is warehouse territory rather than field territory. Everything between the warehouse door and the customer’s house is what this was built for.
Free — Budding
100 items, 1 location, 2 seats
Pro
$25 per seat per month, no seat minimum
Trial
14 days, no credit card
Parts inventory FAQs
Three: Warehouse, Truck and Van. You name each one yourself and you can create as many of each as you run — Main Warehouse, Shop Overflow, Van 2 (Danny), Service Truck 4. Truck and Van locations can be assigned to a named technician, which is what makes them default correctly when that technician is on a job.
Parts are added to the job from stock held at a chosen location — it defaults to the assigned technician's van or truck, and falls back to a warehouse if they have neither. Each line stores the part's cost price and its retail price. When the job is completed, Opsler removes those quantities from that location as a JOB_USAGE movement carrying the job reference, so the stock change and the job history are the same record.
No — stock is counted by quantity per location rather than by individual unit, so the question Opsler answers is how many compressors are on which van, not which compressor went into which house. For most service and repair work that is the question that actually costs you money on a Tuesday. Per-unit serial history for warranty or compliance is a different discipline, and it is worth naming as a requirement early if your business runs on it.
Yes — the location model, transfers, thresholds and job-linked usage are trade-neutral, and the part categories include plumbing pipes, fittings, fixtures, valves and drains alongside the HVAC and electrical sets. The one thing to know is that it stays deliberately trade-neutral: a run of 3/4-inch copper is counted in feet like any other unit, with no pipe-length cutting or fixture configuration layered on top. Most plumbing shops find that is exactly enough to know what is on the van and what it cost.
No to all three. A part record holds a barcode field you can type, paste or search, but nothing in the app reads a barcode with a camera or a scanner. There are no purchase orders, no vendor records and no automatic reorder to a supplier. The low stock alert tells you what is short and where; you place the order through the trade accounts you already have.
Transfers, adjustments and bulk updates are limited to the admin and office staff roles. Technicians have read access: they can search the parts catalog and see their own van's stock, and they add parts to the job they are working. They cannot transfer stock or correct a count.
Budding covers 100 inventory items in one location — enough for a single-van operation to load its real parts list and start deducting against jobs. Multi-location tracking across a fleet is the Pro plan at $25 per seat per month, with a 14-day trial and no card. Do not plan a three-van rollout on the free tier; the second location is the paid line.
Ready to Run Your Business Without the Chaos?
Scheduling, dispatch, estimates, invoicing, customer portal, and a free branded website — start completely free, upgrade to Pro when you scale.
Free forever on the Budding plan. No credit card required.