Online sales and in-store stock: the numbers must match
If one item sells in two places the stock figure must be one, otherwise you will sell what is already gone.
These days one product is often sold in several places at once: in the shop itself, on a Telegram channel, on an Instagram page and on a marketplace (Uzum, for example). Every place has its own "stock" figure, and they are not linked to one another. The result is the most unpleasant case: the goods are already sold, you sell them again, then apologise to the customer and refund the money. For example, on Saturday 3 electric kettles are left in stock. In the shop a customer takes one; at the same time two orders arrive from Telegram and one more from Uzum. Three orders in total, two kettles. One customer is left waiting and the rating drops.
The root of the problem: each channel has its own figure
The Telegram post says "3 in stock", the marketplace dashboard also says 3, and so does the shop table. When a sale happens in one place, the figure in the other two goes stale. Not because people make mistakes, but because the system is built that way. So the answer is not "being more careful" but keeping stock in one place.
One table and four columns
Make the shop table the "master stock". Channels do not keep their own stock separately; they take it from the table and pass sales back into it. Each product row should have four columns:
- total: the quantity physically in the warehouse;
- reserved: ordered but not yet shipped or collected;
- buffer: quantity deliberately held back for delays;
- available to sell: total − reserved − buffer.
In the kettle example: total 3, reserved 1 (the Telegram order ships tomorrow), buffer 0, so available is 2. Online channels show exactly that "2", not 3.
A one-day example. In the morning total 8, reserved 2, buffer 1: available 5. Two pieces sell in the shop: total 6, available 3. A new Telegram order arrives: reserved 3, available 2. In the evening one order ships: total 5, reserved 2, available still 2. After every action the "available" column recalculates itself, and that number is what goes into the channels.
The buffer and the last-unit rule
An update is never instant: the seller opens the dashboard an hour later, channel settings lag. In that gap an item can sell twice. To avoid this, keep a buffer of one or two units for fast-moving goods: 5 in the table, show 3 on the online channel. Cheap, slow items need no buffer.
Give the last unit a rule of its own: when stock falls to 1, mark the item "sold out" on online channels and sell the last unit in the shop or on a single channel, say the one that brings in more orders. Then two people do not lay claim to one piece.
Update and reconciliation routine
Agree in advance who updates and when. There are two ways:
- Every sale at once: the cashier or the person in charge enters the sale in the table and updates the channel dashboards. If orders are many, this is the reliable way.
- At set hours: for example three times a day (10:00, 14:00 and 19:00). With few sales that is enough, but watch the last units.
If an online order is cancelled or goods are returned, that is also a receipt: once the item is back on the shelf, add it to the balance and take it off the reserve. If part of your stock has been handed to a marketplace warehouse, put it in a separate column in the table ("at marketplace warehouse"): it has left your warehouse but not your records.
Once a month pick a day and compare all three places: the dashboard balance, the figure in the Telegram post and the table. If they differ, the table is taken as the master and the rest are adjusted to it, but first count the goods on the shelf to be sure.
Conclusion
Joining online and offline sales does not need a complex system: one master table, "reserved" and "buffer" columns and an agreed update time are enough. What matters most is a reliable opening balance: if that is wrong, everything else will be wrong too. The AniqHisob team can run a stock count, confirm the master balance and help give goods addresses so that online orders are picked faster.