GrainPosition Demo Free tools Pricing

Free grain contract and inventory spreadsheet

An Excel workbook for the grain marketing book: every contract, what is in each bin, what you expect to grow, how much is sold and the weighted average price per crop. No sign-up, no email needed.

By Ruslan Glick, Winnipeg · Updated 28 September 2026

Download the workbook (.xlsx, 10 KB)

Works in Excel, Numbers, LibreOffice and Google Sheets (File, then Import).

What is in it

Three sheets. You fill in contracts and bins; on the third you type each crop and what you expect to grow, and the rest works itself out.

1. Contracts

One row per contract. The example rows below show how they fill in; the workbook starts empty.

Contract #BuyerCropTonnesPrice ($/t)Delivery startDelivery endStatusNotes
RCH-2618RichardsonCanola300655.002026-10-012026-10-31Priced
VIT-8842ViterraCanola240672.002026-11-152026-12-15Priced
PGL-5127PatersonSpring wheat1802026-12-012026-12-31Openprice later

Leave the price empty for an open or basis contract. It still counts as sold, but stays out of the average until it is priced.

2. Bin inventory

One row per bin or bag: what is in it now, and how much it holds.

BinSiteCropCapacity (t)On hand (t)Last updatedNotes
Bin 1North yardCanola5004152026-09-20
Bin 5Home quarterSpring wheat7505702026-09-25

3. Position

Type each crop and what you expect to grow. The other three columns fill in from the Contracts sheet.

CropEstimated production (t)Contracted (t)Exposed (t)Weighted avg ($/t)
Canola1,250540710662.56
Spring wheat1,5501801,370blank until one is priced

The formulas, so you can trust them

Contracted adds up the tonnes of every contract for that crop:

=SUMIF(Contracts!C:C, A2, Contracts!D:D)

Exposed is what you expect to grow minus what is contracted, and never below zero:

=MAX(0, B2 - C2)

Weighted average multiplies each priced contract's tonnes by its price, adds those up, and divides by the tonnes that have a price. Open contracts are left out until they are priced:

=SUMPRODUCT((Contracts!C$2:C$200=A2) * Contracts!D$2:D$200 * Contracts!E$2:E$200) / SUMPRODUCT((Contracts!C$2:C$200=A2) * (Contracts!E$2:E$200>0) * Contracts!D$2:D$200)

In the example, canola is 300 t at $655 and 240 t at $672, so the weighted average is (300 × 655 + 240 × 672) ÷ 540 = $662.56 a tonne. The plain average of the two prices would be $663.50. The gap grows when one contract is much bigger than the others; the weighted average calculator shows how much.

When the spreadsheet gets too much

A spreadsheet stops being enough when loads start going out: which ticket went on which contract, how much is still owed, and whether the settlement matched the contract. That is what GrainPosition does, and it imports this exact workbook, so nothing you type here is wasted. See it in two minutes.

Questions

Is the grain contract spreadsheet free?

Yes. It's a free Excel workbook with no sign-up and no email needed to download it. Use it for as long as it suits you.

Does it work in Google Sheets?

Yes. It works in Excel, Numbers, LibreOffice and Google Sheets. In Google Sheets, open it with File, then Import.

How does it work out the weighted average price?

For each crop, it multiplies each contract's tonnes by its price, adds those up, and divides by the total tonnes. That is the average the grain actually sold at, which is usually lower than the plain average of the prices.

Can I track bushels instead of tonnes?

The workbook is set up in tonnes. The bushels to tonnes page converts quantities and prices for every crop, and the GrainPosition app works in either.

Can I move from the spreadsheet to GrainPosition later?

Yes. The app imports this exact workbook: contracts, bins and expected production come across, and you check every row before it is saved.

Still tracking this in Excel?

I’ll import your spreadsheet or your contracts and set up your book in GrainPosition for you, so you can try it on your own numbers. Nothing is charged today, and nothing starts without your yes. See how it works in two minutes.

I’ll reply myself from hello@grainposition.com about setting up your book, and send nothing else unless you ask. Privacy