A wine inventory app has to believe in vintages.
Most stock software assumes a product code means one interchangeable thing. Wine breaks that on day one: the 2019 and the 2020 are different wines at different prices, and a magnum is not two bottles. A wine inventory app that treats vintage as a note rather than as identity will always disagree with the cellar, which is the recurring theme across restaurant and hospitality apps.
This page covers the fields wine needs that ordinary stock does not, how par levels turn a count into an order, and why a cellar is the worst possible place to rely on a signal.
See why vintage is identityThe short version
Producer, wine, vintage, format, location. Five fields, not one label.
Every problem people have with wine stock traces back to squashing those five into a single product name. Separate them and ordering, costing and counting all become straightforward.
Then add par levels per line, ideally per day of the week, and the app can produce the order rather than a report somebody has to interpret.
Vintage is identity, and the law agrees
A vintage on a label is a regulated claim, not decoration. In the United States, 27 CFR 4.27 sets the rules for vintage wine, and where a wine carries a viticultural area appellation, at least 95 percent of it must come from grapes harvested in the year on the label. The regulation also bars a winery from removing more vintage-labelled wine than it produced that year.
That is worth knowing because it explains why substitution is not available to you. If the 2020 runs out, the 2021 is a different product with a different cost and, frequently, a different list price. An app that merges them will tell you that you have stock you cannot actually pour.
Where wine departs from ordinary stock
| Field | Ordinary stock app | What wine needs | Breaks the count |
|---|---|---|---|
| Producer and wine | One product name | Two fields, because producers repeat wine names | No |
| Vintage | Not modelled | Part of the identity, not a note | Yes |
| Format | Pack size | Magnum is not two bottles of stock | Yes |
| Location | One warehouse | Cellar, bar, and sometimes a bin number | No |
| Open bottles | Whole units only | By the glass depletes part of a bottle | Yes |
Try it
Count against par, and the order writes itself
Change what is on hand. This is the whole job of a wine inventory app: turning a count into an order without anyone reading two lists side by side.
- Order 8
Sancerre, Domaine example, 2024
Par 12
- No order
Rioja Reserva, 2019
Par 6
- Order 3
Champagne NV, magnum
Par 4
- Order 15
House red, by the glass
Par 24
26 bottles to order
Counting in a cellar
Cellars are underground, cold, and badly lit, which is an unkind combination for both people and cameras. Plenty of bottles scan perfectly; plenty of others are imported without a usable code, stored label inwards, or have a label that has been sitting in damp for three years. Build for both and the count finishes.
The general version of this problem, and what a phone camera can actually manage, is covered in barcode scanning for inventory, and the mechanics of camera access in scanning a bottle label.
If you make wine as well as sell it, the production side has its own requirements, which the winery app page covers.
Scanning a bottle, and what the barcode actually says
Counting is the slow part of wine inventory, so scanning is the obvious fix. It works more often than people expect and fails in ways worth knowing about before you build around it.
The barcode on a bottle usually carries a GTIN, the Global Trade Item Number defined by GS1. A GTIN identifies a trade item, and GS1 defines a trade item as a product or service that is priced, ordered or invoiced at any point in the supply chain. That is exactly the distinction a wine list needs: the bottle and the case are different GTINs, and so are the bottle and the magnum. That is good news, because it means the scan can tell you the format if your data model has somewhere to put it.
What a GTIN does not reliably tell you is the vintage. Plenty of producers reuse the same code across years, so two bottles that are different stock scan identically. The workable pattern is to let the scan identify the wine and the format, then ask for the vintage once per scanning session rather than once per bottle. It keeps the count fast without pretending the barcode knows something it does not.
By the glass, and the bottle that is half a bottle
The moment a wine is sold by the glass, whole-unit stock breaks. One bottle becomes five or six pours, and the remainder sits open behind the bar as stock that is worth something but is not a bottle any more.
There are two workable models and it is worth choosing rather than drifting. Either you deplete in fractions, tracking an open bottle as a decimal, or you deplete the whole bottle at the moment it is opened and treat pours as a sales record rather than a stock movement. The second is less accurate and far easier to run in service, which is why most bars end up there. The first is worth the effort when a single bottle is expensive enough that the remainder matters.
Whichever model you pick, the by-the-glass list needs its own par level. It is not a share of the bottle stock, it is a separate promise to the room: these wines are available by the glass tonight, and running out of one of them is a different kind of failure from running out of a listing nobody ordered. Counting them together is how a bar ends up with plenty of wine and nothing to pour.
Preservation systems push this further, because an argon-topped bottle can stay open for weeks and a Coravin pour does not open the bottle at all. If either is in use, the app needs an opened date per bottle, not per wine, or nobody can tell which open bottle should be poured next.
Building one around your own list
The tell that a packaged system does not fit is a spreadsheet kept beside it, usually because the list needs something the system cannot hold: by the glass and by the bottle drawn from the same stock, allocations, wine bought en primeur and not yet in the building, or bin locations that actually matter when service starts.
Newly is an AI app builder: describe the list and its rules and it builds and ships a real mobile app you own. Plans start at $25 a month, there is no free plan, and iOS builds ship through App Store Connect. It is not hospitality stock software and does not compete feature for feature with it. It is what you use when that software cannot describe your cellar.
Questions people ask about wine inventory
Producer, wine, vintage, format and location, as separate fields rather than one label. Vintage and format are the two that ordinary stock apps collapse, and collapsing them is what makes a cellar count disagree with the list. A 2019 and a 2020 of the same wine are different stock, and a magnum is not two bottles.
Describe your list, vintages and all
Including the formats, the allocations and the bottles that live in two places at once.
Start building