Salon inventory management that explains every change
Stock counted per branch, every movement stored with the balance it produced, and purchase orders you can actually send to the supplier.
30 days free · No card required
On this page9 sections
- The product record, and what a branch actually holds
- Selling a product moves the count, and refuses to go negative
- Back-bar stock that a service uses up
- The movements you enter by hand
- Ordering from a supplier, and actually sending them the order
- Moving stock between branches
- Low stock, and where the warning actually appears
- What the stock reports will and will not tell you
- Common questions
The short answer
What is salon inventory management software?
It keeps a running count of every product a salon holds and records why that count changed. In Salvoro stock belongs to a branch: a retail sale deducts it at the till, a billed service draws the back-bar products its recipe names, a received order or transfer raises it, and wastage, returns and recounts are entered by hand — each written to a ledger you can read back.
How it works
- Product added
- Order raised with a supplier
- Delivery received
- Sold at the till
- Low stock flagged
The product record, and what a branch actually holds
A product carries a name, SKU, category, selling price, purchase price, GST rate and HSN code, the unit it is counted in, the count on hand, and the level at which it should warn you. Two independent flags decide where it turns up: sellable puts it on the billing screen, and used-in-services makes it back-bar stock that a service's recipe can name. Stock belongs to a branch rather than the company, so the same shampoo is a separate row with its own count at each location, and a SKU only has to be unique inside one branch.
- Name, SKU, category, and the unit it is counted in — pieces, or millilitres and grams for back-bar stock bought by the bottle
- Selling price, purchase price, GST rate and HSN/SAC held on the product itself
- Sellable, used-in-services, or both — set per product
- Opening stock booked as a stock-in rather than typed over the ledger
- Import from CSV, Excel or a Google Sheet, previewed row by row before anything is written
Selling a product moves the count, and refuses to go negative
A product line on a bill decrements that branch's stock as the bill is raised, and the movement is stored against the invoice that caused it. A product with nothing left does not appear in the till catalogue at all, and if the shelf cannot cover the quantity the bill will not save — an oversell is refused rather than recorded as a negative count somebody has to explain later. Deleting a bill puts the stock back as a return, labelled with its reason, so a cancelled sale leaves a matching pair of entries rather than a hole in the middle of the history.
Back-bar stock that a service uses up
Each service can carry a recipe: the products one performance of it uses, and how much — twenty millilitres of shampoo and fifteen of conditioner for a hair wash. Billing that service draws them from the branch's shelf in the same step as the bill, recorded against the customer, the staff member, the bill and the recipe version, so the stock history says whose service the shampoo went into. A different amount is corrected on the bill, keeping the original beside the change. Editing a bill keeps what its services already used; deleting it, or cancelling the visit it prepaid, puts the stock back. A bill is never refused over a bottle the screen thinks is empty — what the shelf could not cover is recorded as a shortage to count and fix.
- A recipe per service, versioned, so changing it never rewrites past visits
- Drawn automatically when the service is billed, in the product's own unit
- Corrections on the bill, with the reason and who made them
- Optional batches and expiry dates, used soonest-to-expire first
- Usage, wastage and cost by product, service, staff, customer and branch
The movements you enter by hand
Anything that is not a sale, a delivery or a transfer is entered against the product itself, with an optional reason: stock in, stock out, a return that puts product back on the shelf, wastage, or set-count when a physical recount disagrees with the screen. Each entry stores the balance it produced, not merely the change, so the last thirty read as a history rather than a column of deltas — and an adjustment with a reason written beside it is the only kind that ever teaches you anything about where the product went.
- Stock in and stock out, for everything the till never saw
- Wastage for breakages, spills and product written off
- Return adds stock back, for a product a customer brings back; goods sent back to a supplier are a stock out
- Set count, to make the screen agree with a physical recount
- The running balance stored with every entry; the last thirty shown per product
Ordering from a supplier, and actually sending them the order
Suppliers are held with their phone, email and GST number, and a purchase order is raised against one for a named branch — lines, quantities, unit costs, an expected total and a requested delivery date. The order is then composed into a message you edit before it goes out over the salon's own WhatsApp, and it is marked as placed only if that message genuinely sent. Deliveries are received against the order, in parts if that is how they arrive, and every receipt raises stock through the same ledger each other movement uses.
- Supplier records with a phone number, email and GSTIN
- Draft, ordered, partly received, received or cancelled — a status the order earns
- The order sent to the supplier over WhatsApp, editable before it leaves
- Partial deliveries received line by line against what was ordered
- Receiving writes a stock-in movement that references the order
Moving stock between branches
A transfer records both sides and keeps apart the two moments that matter. Stock leaves the sending branch when the transfer is shipped — it is physically gone, so that branch can no longer sell it — and lands at the destination only when somebody receives it, partial deliveries included. Each side carries its own movement type, so a report can tell stock that left because it was sold apart from stock that left because it went to the other branch. The destination needs its own row for that product first, which the copy-catalogue tool creates with a zero count.
Low stock, and where the warning actually appears
Each product carries its own alert level, and crossing it raises a notification in the header bell — at most once per product per day, so one stubborn line cannot bury the rest. It fires the moment a sale, a service, an adjustment, a delivery or a transfer takes the count to the threshold, and a background scan every few minutes catches anything that arrived there without a movement being written in the app. Back-bar products also tell the branch's staff WhatsApp group, once per change of state rather than on every service: once at the low level, once at a critical level, once when the shelf is empty and once when it is restocked.
- An alert level set per product; leave it at zero and that product never warns
- Raised on sale, service, adjustment, receipt and transfer, plus a scan every few minutes
- One alert per product per day, in the in-app bell
- Back-bar low, critical, empty and restocked posted once each to the branch's staff group
- A low-stock filter on the products screen, and a figure on the dashboard
What the stock reports will and will not tell you
The inventory report is scoped to a branch, so a manager reconciles their own shelves rather than the group's. It gives the number of products, the value of what is on hand at purchase price and again at retail price, the lines sitting at or under their alert level, and the products that moved out most over the period. Beside it, a product sales report reads the bill lines instead of the ledger, so it can carry money: quantity sold, revenue, cost and a margin. That margin is indicative rather than audited, because the cost it uses is the product's current purchase price and no bill line stores what the item cost on the day it was sold.
- Stock on hand valued at purchase price and at retail price, per branch
- Low-stock lines and the products that moved out most, both exportable to CSV
- Product sales with quantity, revenue, cost and an indicative margin
- A received delivery is not an expense, so purchases stay out of the money-in-versus-out view
Common questions
- Yes, once the service has a recipe. A service can list the back-bar products it uses and how much — twenty millilitres of shampoo, fifteen of conditioner — and billing it draws them from that branch's stock in the same step, recorded against the customer, the staff member and the bill. A different amount is corrected on the bill; a service with no recipe draws nothing.
- Yes. A transfer takes stock off the sending branch when it is shipped and adds it to the destination only when somebody receives it, partial deliveries included, with each side recorded as its own movement type. The destination needs a row for that product already — the copy-catalogue tool creates one with a zero count.
- Yes, over WhatsApp. The order is composed into a message listing the items, quantities, costs and requested delivery date, and you edit it before it goes. It is marked as placed only if the message actually sent, so an order can never claim to have reached a supplier who never got it. There is no email or PDF version.
- As a notification in the header bell, at most once per product per day, raised when a sale, service, adjustment, delivery or transfer takes the count to that product's alert level. Back-bar products also post to the branch's staff WhatsApp group — once each at low, critical, out of stock and restocked. There is no email or SMS alert, and nothing is ordered for you.
- No. There is no scanner integration and no label printing, so products are picked by name at the counter. A barcode can be stored against a product and searched on, but only when it arrives through the import file or the API — the add-product form does not offer the field.
- Yes, per product. With batch tracking on, each delivery is booked with its batch number and expiry, services use the batch that expires first and by default never an expired one, and expiring batches are flagged in the bell. There is no batch recall tool, and a product without tracking keeps a single count.
- As quantity times price — per bottle for products bought by the bottle. The inventory report values what is on hand at purchase price and again at retail price; there is no weighted-average or FIFO costing. Receiving a delivery also does not create an expense, so purchases stay out of the money-in-versus-out view until you record them there yourself.
See it with your own salon’s data
30 days free, no card required, and a guided setup that takes four steps.

