Mandi bid calculator — the maximum you can pay per kg and per crate, and how many kg to buy
boliseema is for the vegetable vendor who buys at the wholesale mandi — and really for the son or daughter who does the prep the night before the trip. The vendor knows the retail rates in their bones. Nobody in the family has ever worked out what those rates permit them to bid, because the arithmetic is four steps deep and the auction lasts eleven seconds.
So the arithmetic is done at home, once, the night before, and printed on one folded A4 pocket card. There is nothing in this app to tap while you are trading.
What you enter, and what it prints
Per vegetable: the retail rate you can realistically get, your own shrink or cull percentage, and what you sell in a day. Per trip: tempo hire and mandi entry, the commission percentage, hamali per crate, your margin, and how many days until your next trip. Out comes, per vegetable, the most you may bid per kg and per crate, the most kg to bring home, and the break-even above which you are working for free.
A worked example
Tomato at a retail rate of ₹40.00/kg, your own shrink
12%, a 25 kg crate, you sell 60 kg a day, and it is
2 days until your next trip. The trip costs ₹640 in tempo
and entry, mandi commission is 6%, hamali is ₹12 a crate,
and you want a 20% margin. Onion and coriander are on the same trip and
take their share of the ₹640.
| Vegetable | MAX per kg | MAX per crate | Max kg (whole crates) | Break-even per kg |
|---|---|---|---|---|
| Tomato | ₹23.47 | ₹586.75 | 136.363 kg (5 crates) | ₹30.11 |
| Onion | ₹20.51 | ₹1,025.50 | 84.210 kg (1 crate) | ₹26.25 |
| Coriander | ₹44.66 | ₹223.30 | 14.285 kg (2 crates) | ₹60.50 |
Read the tomato row like this: at ₹40 retail you may pay up to ₹23.47 a kg, or ₹586.75 for a 25 kg crate, and the most to bring home is 136.363 kg — of which five whole crates, 125 kg, is what you can actually buy. Above ₹30.11/kg the trip pays you nothing for your own day. The ₹23.47 holds at five whole crates — that sentence prints on the row, because buying fewer spreads the same trip charges over fewer kg and puts the true ceiling below the printed one.
Why the costs are divided by crates, not by kilograms
A mandi sells crates. If your plan weight is 136.363 kg and a crate holds 25 kg,
you go home with five crates — 125 kg. So every per-kg cost here is
divided by whole crates × crate weight, and the hamali is charged on
those crates. Dividing by the plan weight instead would make the ceiling look
17 paise per kg and ₹4.25 per crate higher than it really is — an
error in the direction that costs you money, on the one number the whole card exists
for. The kilograms left over that do not make a whole crate are named on the row
rather than quietly bought.
The one number we refuse to guess
How many days until your next trip ships blank, has no default, is not copied when you start a new trip from last night's, and is not inferred from the gap between your trip dates. We have no data for how long anything keeps on a cart in an Indian summer, and we are not going to pretend we do. Leave it blank and the card shows a named blank state — no bid, no break-even, and no ₹0.00 standing in for an answer.
Rounding goes the safe way — and what that does not cover
Costs round up. The maximum bid and the maximum quantity round down. So the rounding is never optimistic: it may cost you a paisa or two, never the other way.
The ceiling itself is only true at the crate count printed on its own row. Every per-kg cost is divided by the whole crates you plan to buy, so if the bidding runs hot and you come home with three of the five crates the tomato row names, the same ₹640 of tempo hire spreads over 75 kg instead of 125 — and the true ceiling is ₹21.71, not the ₹23.47 on the card. That is about 7% too high, in the direction that costs you money. So the card prints the sentence "This ceiling holds at 5 whole crates" on the row, beside the number, every time.
The retail rate is not independent of the auction
This is the limit most likely to bite. boliseema treats the retail rate you type as fixed and solves backwards for the ceiling — but everyone in your lane bought at the same hammer. On a day when the mandi runs hot, retail moves up with it, and a ceiling worked out from last week's retail rate is then too low, not too high. The low–high band exists so you can see how far the ceiling travels when that judgement moves. The card holds your retail rate still; the market does not.
What it will not do
No live or historical mandi rates, ever — no scrape, no feed, no arrival prices, and no internet at runtime. No credit, udhaar or dues ledger of any kind. No staff attendance or wage register. Nothing to enter while you are selling. No "should you buy" verdict, no walk-away advice, no bid recommendation — boliseema prints a ceiling and you decide. No grade model, no weather, no seasonality, no forecast. No accounts, no sync, no sharing a card with another vendor. No AI: it is seven integer functions.
lagaat decodes the bill you were handed after the auction — what it actually cost. boliseema sets the ceiling before the auction — what you may pay. Nothing crosses: boliseema never ingests a bill and lagaat never emits a bid. paavbhav prices what you sell; boliseema prices what you buy. stallpack reconciles what you packed out against what came back; boliseema decides what to bring home in the first place. cropmath costs a farmer's acre; boliseema costs a trader's trip.
What this card cannot do
A mandi auction is a live competitive bid, and you have to come home with stock. This card is a reference, not a rule — if the bidding goes past your number you may still be right to take it, you will just know exactly what it is costing you. The retail rate is what you think you can get, not what you will get; the optional low–high band shows how fast the ceiling moves when that judgement is wrong. The maximum kg assumes you sell at your typical daily rate every day until your next trip; a festival, a wedding street or rain makes it wrong. Trip charges are split by crate space, which is an assumption about your tempo, not a fact about your costs — and it is printed on the card so you can argue with it.
Questions
How much should I pay per kg at the mandi to make a profit?
There is one number that answers it, and it comes from four things you already know: the retail rate you can realistically get, your own shrink or cull percentage, the mandi commission and hamali, and your share of the trip's fixed cost. boliseema solves for the highest bid at which all of that still leaves your margin. It is a ceiling, not a recommendation — the auction is live and you still have to come home with stock.
Why does the calculator divide costs by whole crates instead of by the kilograms I planned to buy?
Because a mandi sells crates, not kilograms. If your plan weight is 136.363 kg and a crate holds 25 kg, you go home with five crates — 125 kg — not 136.363. Dividing the trip's fixed cost by the larger figure would understate the cost per kg and therefore overstate the ceiling. On the worked example above that difference is 17 paise per kg and 4 rupees 25 paise per crate, in the direction that costs you money. The leftover kilograms that do not make a whole crate are named on the row rather than quietly bought.
Is the printed ceiling still right if I come home with fewer crates than the card says?
No, and this is the one place the card can be optimistic. The ceiling is worked out against the whole crates in your plan weight, so if you buy fewer, the same tempo hire and entry fee spread over fewer kilograms and the true ceiling drops. On the tomato row above, buying 3 of the 5 crates moves the real ceiling from 23 rupees 47 paise to 21 rupees 71 paise — about 7 percent. That is why every row prints the sentence "This ceiling holds at 5 whole crates" beside the number. The rounding is never optimistic; the crate count is the assumption you have to hold to.
Why does it refuse to print anything until I say how many days until my next trip?
Because the whole card depends on it. How many kilograms to bring home is what you expect to sell over the holding period; the crate space that follows from it is how the trip's fixed charges get split; and the split is what sets the ceiling. We have no data for how long anything keeps on a cart in an Indian summer, and we are not going to invent a default. Leave it blank and the card shows a named blank state — no bid, no break-even, and no zero pretending to be an answer.
Does boliseema know today's mandi rates?
No, and it never will. There is no rate feed, no scrape, no arrival-price history, and no internet at runtime at all. Every figure comes from a number you typed. The retail rate is what you think you can get — which is the one thing a vendor already knows in their bones and no dataset knows at all.
What if no bid clears at the rate I entered?
Then the row prints a dash and one sentence saying the ceiling is below zero at the retail rate, trip cost and margin you entered. It does not say do not buy, it does not say walk away, and it does not suggest cutting your own margin. boliseema prints a ceiling; the decision is yours. If the break-even itself is below zero there is no threshold to print either, so that column shows a dash too rather than a negative rupee figure.
Where did the vegetable list and the 25 kg crate weight come from?
The forty names are a starting list we wrote ourselves. The 25 kg crate weight is the same number repeated forty times, which is deliberately and visibly a placeholder rather than research — a per-vegetable table of typical crate weights would be fabrication. Shrink and daily sale ship as zero. Every row that is still untouched wears a PLACEHOLDER chip until you edit it. Weigh your own crate.
Does it keep a credit or udhaar ledger?
No, deliberately, and it never records who owes what. There is no dues book, no staff or wage register, and nothing to tap while you are trading. boliseema is done the night before, at home, and there is nothing in it to open during the auction.
Where does my data go?
Nowhere. The full app is local-first: your data is a SQLite file on your own machine and the app runs on localhost. There is no account, no sync, no encryption and nothing is uploaded. This web demo keeps everything in your browser tab and a refresh resets it. The page itself loads only its own files from this one origin — no fonts, no scripts and no CanvasKit from anyone else's server — so nothing about you reaches a third party either.
Try it below
The calculator below is loaded with a made-up trip for a cart that does not exist, and the holding days are deliberately blank — typing them is the first thing it asks of you. Nothing you type leaves this page.