Filament inventory that does not drift
Every shop starts with an accurate filament list. Nobody has one six months later.
It is not carelessness. Inventory drifts because the events that change it are not the events anybody records. A print fails and the plastic is gone. Somebody uses half a spool for a test. A colour gets opened, printed once, and put back on the shelf where it reads as full. The count does not go wrong in one big step; it goes wrong ten grams at a time, and then one day a job stops at 3 a.m. because the spool everybody thought had four hundred grams on it had eighty.
Here is what actually keeps it honest.
Count spools, not kilograms
"2.4 kg of black PLA" is not a fact you can act on. Two spools with 1.2 kg between them cannot print a 900 g part; one spool with 1.3 kg can.
Track individual spools, each with a remaining weight. It is more rows, and it is the only version that answers the question you actually ask, which is can I start this job tonight.
Give each spool an identity the moment it comes out of the box. A number on a sticker is enough. Without it there is no way to tell two half-used black PLA spools apart, and no way to know which one has been sitting open since March.
Record the empty weight once, per brand
Remaining filament is the spool on the scale minus the empty spool.
The empty weight varies by brand and by material, and sometimes between production runs: cardboard spools are lighter than plastic, and a reusable core is lighter again. Weigh one empty spool per brand, write it down, and reuse it. Guessing 200 g for everything introduces an error of fifty grams or more per spool, which is exactly the size of the error that strands a print.
Decrement when the job runs, not when somebody remembers
This is the whole thing.
Any system where stock is updated by a person, later, on purpose, will drift - not because people are lazy but because the moment stock changes is the moment they are doing something else. The print finished, the customer is waiting, the plate needs clearing.
So make the deduction a consequence of something that was going to happen anyway. When a job is marked printed, the filament it used comes off the spool it used. Nobody types a second thing.
That is one of the reasons LayerFlow3D ties orders to spools rather than keeping a separate stock list: finishing a job is the event, and the stock follows from it.
If you are doing this with a spreadsheet, get as close to that as you can: one row per job, with the spool and the grams on the same row as the job, rather than a stock sheet somebody reconciles on a Sunday.
Count the failures, on purpose
A failed print used real filament. If failures do not come off stock, your inventory is optimistic by exactly your failure rate, which is the number nobody knows.
The habit worth building: when a print fails, weigh what came off the plate and deduct it, and note the reason in one word. Within a month you will have something more useful than an accurate spool count - you will have a failure rate per machine and per material, and that number belongs in every price you quote.
Weigh a spool at the natural moments
You do not need to weigh everything regularly. You need to weigh at the two moments where the number is about to matter:
When a spool comes off the machine. It is already in your hand.
Before committing a spool to a long job. The estimate says 780 g and the system says 840 g remaining; that is close enough to be worth thirty seconds on the scale rather than a failure at hour nine.
Everything else can run on arithmetic. The scale is a correction, not a routine.
Know what a gram costs, not just what a spool cost
A spool's cost is what you paid plus what it took to get it to you: shipping, customs, and the electricity of drying it if you dry it. Divide that by the usable filament, not by the nominal kilogram - a 1 kg spool does not have 1 kg of printable filament on it once you account for the tail you cannot use.
The filament cost calculator turns a spool price into a cost per gram and a cost for a given job, which is the form you need for a quote.
Then keep the cost with the spool, not with the material. The black PLA you bought on sale in January and the black PLA you bought at full price in August are not the same cost, and a job that drew from one did not cost what a job that drew from the other did. Averaging them hides exactly the thing you are trying to see.
Storage is inventory too
A spool that has absorbed moisture is not the spool you counted.
Wet PETG or nylon prints badly, and the failure is indirect enough that people blame the profile, the nozzle, the machine - anything but the plastic. That is a stock problem wearing a technical costume.
Two rules cover most of it. Anything that is not PLA goes back in a sealed box with desiccant when it comes off the machine, and the desiccant gets replaced on a schedule rather than when somebody notices it has gone pink. And a spool that has been open in a humid room for months gets dried before a job that matters, not after it fails.
Multi-material eats more than the part weighs
If you run an AMS or any multi-material setup, the purge is not a rounding error. Every filament change flushes the hotend, and on a print with many changes the flushed material can outweigh the part.
That plastic came off real spools, in a ratio the model weight tells you nothing about. If your stock only ever moves by the part weight, a farm doing multi-colour work will drift faster than one doing single-colour work, in the same direction, every time. Deduct what the slicer says was consumed in total, per filament, not what the model weighs.
Reorder before you run out, using a number
"We're getting low on black" is not a reorder trigger. A minimum level is.
Set one per material and colour, based on how fast you get through it and how long resupply takes. If you use 1.5 kg of black PLA a week and delivery takes ten days, your minimum is around 3 kg, not one spool. Then the reorder is a decision the number makes, not one somebody has to notice.
The audit that is worth doing
Once a quarter, weigh everything. It takes an afternoon and it tells you two things: how far the count has drifted, and where it drifted.
If the gap is spread evenly, your per-job estimates are a little low - adjust the waste allowance. If it is concentrated in one material or one machine, you have found a failure rate or a leak nobody had noticed.
An audit that finds nothing is not a wasted afternoon. It is the only evidence that the rest of this is working.