Most allocation fights inside a winery aren't really about how much wine exists. They're about timing and who gets to claim what, when. A distributor has a contract window that entitles them to a certain volume of your reserve Cab by a certain date. Meanwhile your tasting room and wine club are quietly eating into that same lot because nobody flagged it as spoken-for. By the time someone notices, you've either shorted the distributor — contract problem — or shorted your club members — margin and loyalty problem.
This post is narrowly about that collision. The rules that let contract windows and DTC allocations coexist without constant manual firefighting, and how to wire your recall response so it actually respects those allocation states instead of ignoring them.
The specific way this goes wrong
There's a pattern that shows up over and over in mid-sized wineries running both distribution and a healthy DTC program. You bottle a lot — say 1,100 cases of a single-vineyard Pinot. On paper, the plan is:
-
600 cases committed to two distributors under contract windows
-
350 cases held for wine club and tasting room
-
150 cases flexible / library / trade samples
The problem is that "committed" and "held" live in different heads and different spreadsheets. The distributor commitment sits with your sales manager and their signed agreement. The DTC hold sits with whoever runs the club. The physical inventory count sits with the cellar. None of those numbers are individually wrong — they just aren't reconciled against a shared allocation state.
So what happens? A distributor's contract window opens on the 15th. But three days earlier, a club release pulled 90 cases that were supposed to be within the 350 DTC bucket — except 40 of those cases were physically the same lot the distributor was expecting, because the cellar pulled from the nearest pallet. Now you're 40 cases short on a contractual commitment, and the distributor's window is legally live.
This isn't a forecasting failure. It's an allocation-state failure. The wine existed. The buckets just weren't enforced.
Why contract windows make this harder than normal inventory
Regular inventory allocation is a snapshot problem — how much do I have right now, and where should it go. Contract windows add a time dimension that breaks that simple logic.
Streamline your winery operations effortlessly.
Corkyly helps you track, manage, and optimize every step from vine to bottle.
- Vineyard & production tracking
- Customer relationship management
- Inventory & sales analytics
No credit card required
A distributor contract window typically means: between date X and date Y, this partner has the right to purchase up to N cases at agreed terms. Allocate too early and you freeze inventory you might need for DTC before the window even opens. Allocate too late — or let DTC nibble at it — and you can't fulfill when they exercise. The mistake usually happens because teams treat the contract commitment as either "already gone" or "not gone yet," with nothing in between. There's no concept of reserved-but-not-yet-claimed. And that middle state is exactly where DTC leakage happens.
A useful way to think about it: every case of a lot should live in exactly one of these states at any moment.
| Allocation state | Meaning | Can DTC pull from it? | Can distributor claim it? |
|---|---|---|---|
| Free | No commitment attached | Yes | Only after re-tagging |
| DTC-reserved | Held for club/tasting room | Yes | No |
| Contract-window-open | Distributor may claim now | No | Yes |
| Contract-window-pending | Reserved for a future window | No (locked) | Not yet |
| Fulfilled | Shipped/committed and gone | No | No |
The single biggest source of allocation chaos is when a lot has no state — it's just "1,100 cases of Pinot" — and everyone assumes their claim is the priority claim.
The allocation rules that actually hold up
The rules below are the ones that survive contact with a real cellar and a real sales team. They're boring on purpose. Boring is what prevents the 40-case surprise.
-
Every bottled lot gets an allocation plan at bottling, not at release. The moment a lot is bottled and lotted, split it into named buckets with target case counts. Unallocated cases are fine — but label them "Free," not left ambiguous.
-
Contract-window volume gets locked X days before the window opens. A common, workable buffer is 10–14 days. Once locked, those cases move to
contract-window-pendingand DTC systems can no longer draw them down. -
DTC reservations are capped per lot, not per SKU. This is the rule people skip. If your club draws against a SKU generally, it'll happily pull from the physical lot the distributor is expecting. Cap the DTC pull to specific lot codes.
-
Cellar pulls follow lot code, not proximity. The nearest-pallet habit is what turns a clean allocation plan into a mess. Pickers pull the lot the order specifies, even if it's further back.
-
Any override needs a named approver. If a distributor wants 60 extra cases and the only supply is DTC-reserved, that's a decision, not a warehouse improvisation. Someone owns it in writing.
-
Reconcile buckets weekly during active windows. Not monthly. During an open contract window, the gap between physical and planned can open fast.
Rules 3 and 4 are really about the same thing — keeping physical lots aligned with logical allocation. Most software will happily tell you the SKU has 350 cases available. It won't stop your picker from grabbing the wrong 40.
Cap DTC pulls to specific lot codes to prevent cross-lot leakage during contract windows.
Most software will happily tell you the SKU has 350 cases available. It won't stop your picker from grabbing the wrong 40.
When strict allocation locking makes sense — and when it doesn't
Locking inventory 14 days ahead of a window isn't free. It ties up wine you can't move through your highest-margin channel during the lock period. So this is a judgment call, not a universal rule.
When strict locking is worth it:
-
Lots that are genuinely scarce (single-vineyard, small library lots, allocated reds)
-
Distributors with hard contractual minimums and penalties
-
Any lot where a shortfall damages a relationship you can't easily rebuild
When strict locking is overkill:
-
High-volume everyday SKUs where you can always cover a distributor from another pallet
-
Wines with long shelf life and steady replenishment
-
Situations where DTC demand is unpredictable and locking wine risks it aging in the buffer
Who should probably not run tight locks at all: very small producers whose entire distribution is one or two partners on flexible terms, and whose DTC is the clear priority. For them, the simpler rule is "distributor gets what's left after DTC," and the whole window-locking apparatus just adds friction. The trap is applying scarce-lot discipline to everything. You end up locking $70k of everyday Rosé and choking your own tasting room in July.
Wiring the recall map into the same allocation states
Here's the part most allocation planning ignores completely: when a recall hits, you need to trace the lot and immediately understand where it went across both channels. If your recall process only knows "lot 24-PN-07 shipped somewhere," you'll spend a day reconstructing what your allocation system already knew.
The integrated move is to build a distributor-recall quick-map off the same allocation records. Because you've already tagged every case with a lot code and an allocation state, the recall map becomes a lookup instead of an investigation. A workable quick-map contains, per lot:
-
Which distributors received cases, with quantities and ship dates
-
Which DTC channels drew from the lot (club shipment, tasting room, web orders)
-
The physical bin/pallet locations for any un-shipped cases still on
contract-window-pendingorDTC-reserved -
The linked SOP for holding vs. destroying vs. returning
-
Contact and notification path for each distributor
This only works if your lot traceability is solid underneath it. If you haven't nailed down block-to-bottle records, the recall map is built on sand — this is where the groundwork in a real block-to-bottle traceability playbook pays off directly. The allocation states sit on top of that traceability layer.
The diagram below shows how a quick-map ties allocation states to recall actions.
In plain terms: a lab result or complaint flags lot 24-PN-07. You open the quick-map for that lot. It immediately shows 260 cases across two distributors (with ship dates), 90 cases through the club, 18 through the tasting room, and 40 still sitting contract-window-pending in Bin 14. Your recall SOP fires per bucket — distributor notifications go out with exact quantities, the pending 40 get frozen in place, and the DTC-side customer notifications pull from club and web order records. No spreadsheet archaeology.
A short recall-coordination checklist tied to allocation
When a recall event starts, run this against the affected lots:
-
[ ] Pull the allocation record for every affected lot code
-
[ ] Freeze all
pendingandreservedcases in place — no picks -
[ ] Generate distributor-by-distributor quantities and ship dates from the quick-map
-
[ ] Notify distributors with exact case counts, not "check your stock"
-
[ ] Pull DTC recipient lists from club + web order history for the lot
-
[ ] Confirm which SOP branch applies (hold / return / destroy) per channel
-
[ ] Log every notification and response against the lot record
-
[ ] Reconcile returned/held cases back into a
recalledstate so they can't be re-allocated
The last item is the one people forget. Recalled wine that never gets a distinct state has a nasty habit of reappearing in an available count three weeks later.
A real scenario
A roughly 14,000-case Willamette Valley producer ran distribution through three partners plus a solid club program. Allocation lived in a mix of the sales manager's contracts and a shared inventory sheet.
Over one release cycle they shorted a distributor by about 55 cases of an allocated Pinot because a club release had pulled from the same physical lot. Covering the shortfall meant substituting from a different vintage and eating the goodwill cost — not catastrophic, but the kind of thing that makes a distributor quietly reduce next year's order.
They reworked allocation around explicit per-lot states: contract volumes locked roughly 12 days ahead of each window, DTC caps set per lot code, and cellar pulls tied to lot codes instead of pallet proximity. A simple recall quick-map got built off the same records.
Over the next two release cycles, cross-channel shortfalls dropped to zero. The unexpected benefit showed up during a minor voluntary hold on one lot — what would have been a half-day scramble to figure out where the wine went took closer to 30–40 minutes, because the quick-map already knew. None of this required new software heroics. It required the allocation states to be real and shared instead of implied.
Where tooling fits (and where it doesn't)
You can run all of this on disciplined spreadsheets if your team is small and communicative. The failure point isn't the tool — it's that spreadsheets don't enforce the states. Nothing stops the club from drawing against a locked lot, and nothing physically ties a recall map to live inventory.
Where an operational platform helps is in making the allocation states enforced rather than aspirational: the DTC side literally can't pull contract-window-pending cases, pickers get lot-specific pick instructions, and the recall quick-map is generated from the same records that drive fulfillment. When those records already flow into your broader release and cashflow planning — the kind of coordination covered in a seasonal operations playbook — allocation stops being a monthly reconciliation panic and becomes a background rule that just holds.
The goal isn't automation for its own sake. It's that the wine you promised to a distributor and the wine you promised to your club members should never be the same physical cases by accident — and when something goes wrong, you should already know exactly where every case went.
Bringing it together
Distributor allocation and DTC protection aren't competing priorities that require constant negotiation. They're the same problem viewed from two sides, and both are solvable with explicit, shared allocation states applied per lot.
Lock scarce contract volumes ahead of the window, cap DTC pulls to specific lot codes, make the cellar respect lot codes over convenience, and build your recall response directly on top of those same states. Do that, and the 40-case surprise stops happening. The distributor gets what the contract promised, the club gets what the release promised, and if a lot ever has to come back, you already have the map.
Distributor allocation and DTC protection aren't competing priorities that require constant negotiation. They're the same problem viewed from two sides, and both are solvable with explicit, shared allocation states applied per lot.
Lock scarce contract volumes ahead of the window, cap DTC pulls to specific lot codes, make the cellar respect lot codes over convenience, and build your recall response directly on top of those same states. Do that, and the 40-case surprise stops happening. The distributor gets what the contract promised, the club gets what the release promised, and if a lot ever has to come back, you already have the map.
Ready to elevate your winery management?
Join 500+ wineries using Corkyly to increase operational efficiency, boost customer loyalty, and grow sales.