Privacy policy

What GrainPosition collects, where it goes, how long it is kept, and how to see, fix or delete it. In plain words, because you should not need a lawyer to read it.

Last updated 13 November 2026: the crop planner, and saving its plan to your farm on sign-in. 12 November 2026: the app counts when a book is opened and reports its own errors, without your data. 8 November 2026: public settlement links now open the photo checker instead of the email-request form. 7 November 2026: retained dated inventory history and explicit opening balances. 6 November 2026: locally generated bin labels, pending scan links and saved yard checks. 5 November 2026: device-only offline capture and review drafts, retention, deletion and manual upload after reconnection. 4 November 2026: Monday farm summaries are optional for new accounts; existing preferences are kept. Signup explains the welcome and conditional week-one follow-up emails. 31 October 2026: optional AI assistant questions and relevant permitted farm record details go to Anthropic only when submitted; content-free usage metadata stay with the farm. 30 October 2026: recurring field patches also read small Sentinel-2 greenness grids from Microsoft’s Planetary Computer, keeping the observations privately with the farm; only the square of land goes to Microsoft, with no name, crop records or farm financials; earlier that day, for the fields you add in the app, Microsoft's Planetary Computer also gets the field's outline, to read its Sentinel-1 radar passes (standing water, and when it was cut); 27 October 2026: the lay of the land under a field comes from Natural Resources Canada’s lidar, which gets only the picture’s square; natural-colour field pictures come from Microsoft's Planetary Computer, which gets only the square of land the picture covers; the field from space page keeps a daily count of new quarters for each visitor without an account, as a hash of the day, the address and a secret, never the address, for three days; 25 October 2026: Fields in the app keep each field's legal land description, name and outline with your farm, and send the outline to Copernicus; the field from space page sends a quarter section's legal land description to Alberta's or Manitoba's survey service and its outline to Copernicus, and keeps the spot's season for a week; morning alerts can also tell you when a settlement’s payment protection is running out and when the Grain Commission posts a notice about one of your buyers, from what is already in your book; 24 October 2026: the net price calculator keeps your comparison in your browser, and can put its bids into your book after you sign in; one follow-up email about a week after you sign up, only if your book is still empty, with a link to stop it, through Resend; the bin tally for the production report, which sends what you enter to GrainPosition’s server to add up and stores none of it; the dashboard’s Today shows the next 24 hours’ forecast for your farm’s town, from Environment and Climate Change Canada, which gets only the town’s position; morning alerts, which you turn on in Settings, are emailed through Resend; "Check my settlement" requests now go to GrainPosition’s own server and to me through Resend, no longer through Web3Forms, which no longer sees any of your data; and the site’s search, which sends what you type to GrainPosition’s server and stores none of it, and counts a search that finds nothing by its words. Before that, 22 October 2026: the free Monday town email, for which you give an email, a town and crops without an account; sent through Resend. Before that, 16 October 2026: your farm's nearest town, if you add it, for its weather; the town's name and position go to Government of Canada services, nothing else. Before that, 15 October 2026: Saskatchewan's and Manitoba's weekly prices, shown to farms in each province; nothing about your farm is sent to either government. Before that, 13 October 2026: grain marketing advisors, who see a farm only after its owner says yes, and their requests, sent to you through Resend; and the grade check request, which sends your delivery details to GrainPosition's server to write the request and stores nothing, and keeps your name, farm and phone only on your device. Before that, 10 October 2026: questions you ask on the homepage, which are stored and emailed to me through Resend; the Monday email, which sends your farm's figures to you through Resend; reading Harvest Sample results, inviting people onto a farm, and Continue with Google as a way to sign in. Before that, 9 October 2026: the free settlement check on the homepage, and the rights at the elevator card, which sends the buyer and crop you pick to GrainPosition's server and stores nothing. Before that, 5 October 2026: settlements you email me to check, and the payment protection checker, which sends what you enter to GrainPosition's server to work out the answer and stores nothing. Before that, 1 October 2026: anyone can now sign up, and Cloudflare Turnstile checks that sign-in requests come from a person.

The short version. The website and calculators set no tracking cookies and show no ads. Your contract prices and farm records are not sold, pooled into market data, or shared with anyone. You can export everything as CSV at any time, and ask for it to be deleted.

Who is responsible

GrainPosition is run by Ruslan Glick in Winnipeg, Manitoba, Canada. I am the person accountable for how personal information is handled here, and you can reach me at hello@grainposition.com.

GrainPosition follows Canada's federal privacy law for businesses, the Personal Information Protection and Electronic Documents Act (PIPEDA).

Visiting the website

No tracking cookies, no ads
The public pages set no cookies. There is no advertising, no Facebook or Google tracking pixel, and no profile of you is built.
Visit counts
Cloudflare, which hosts the site, counts page views and where visits came from (for example "from facebook.com") with its cookieless Web Analytics. The pages also send small anonymous signals such as "the shrink calculator was used" or "this visit came from a link posted in a Facebook group", which appear only as counts. In the app the same kind of signal says that a book was opened, and, if the app hits an error, which screen it was on and what kind of error it was, with no numbers, names or anything you typed or saved. None of this identifies you to me.
Your IP address
Like any website, the servers see your IP address when your browser asks for a page. Cloudflare handles that to serve the page and protect the site from attacks; I do not keep a log of it. When you ask for a sign-in link, Cloudflare Turnstile checks that the request comes from a person and not a bot, using signals from your browser, and the number of requests from your connection is counted for one minute to stop floods. If the address has no account yet, a one-way, keyed hash of your connection's IP address is kept with the link, so that one connection can't send sign-up emails to many addresses; it can't be turned back into the address, and it is deleted with the link within two days. Neither is stored by GrainPosition.
Fonts
The pages load their fonts from Google Fonts, so your browser also contacts Google, which sees your IP address.
The sample farm and the calculators
The sample farm uses a temporary signed cookie. Signed-in users can explore it in a separate read-only tab view while keeping their own account session; other tabs keep their own farm. The sample view never changes the active farm on the account. The sample farm is the app on a made-up farm: anything you type into its forms is sent to the server, which refuses to save it and keeps nothing about you. Most calculator arithmetic runs in your browser. Some tools, including the bin tally, send entries to our server to calculate results without storing them, as explained below. Local drafts stay on your device. Local drafts keep what you typed on your device, so it is there when you come back: the net price calculator (your buyers, bids, distances and the day each bid was typed), the bin tally and inventory tools (your bins) and the bin yard map (your bins, placement, notes and recent local movements). Clear a tool or its browser data to remove its draft. The example yard stays in memory and is not saved. A page may also save a setting that stops your own visits being counted, if you have turned that on. If you press Keep these bids or Keep these bins, they go into your book only after you sign in and say yes.
The payment protection checker, the rights card and the grade check request
Three exceptions: the payment protection checker sends the buyer's name, crop and dates you enter to GrainPosition's server, which applies the rules and sends the answer back, and the rights at the elevator card sends the buyer's name and crop you pick the same way. The grade check request sends the buyer's name, the kind of buyer, the crop, the delivery date, the ticket and receipt numbers, the elevator's town and the grade, dockage, moisture or protein you enter, and the server writes the request and sends it back. None of it is stored. Your name, farm and phone for the request's signature are never sent: they are added on your device, and saved there so you don't have to type them again (clear them by emptying the boxes). GrainPosition sends nothing to the elevator; you do.
The bin tally
The bin tally for the production report and the grain bin inventory send the bins’ measurements, crops, field names, delivered amounts and tonnes still owed you enter to GrainPosition’s server, which adds them up and sends the totals back; none of it is stored there. The rows are saved in your browser so they’re there when you come back, until you press Start again. Where you drag each bin on the yard picture is saved in your browser too. “Keep these bins in GrainPosition” keeps the bins’ names, crops, tonnes and places in your browser for a day, for the app to offer after you sign in; they’re added to your farm only if you say yes.
The crop planner
The crop planner works everything out in your browser; it asks GrainPosition’s server only for the province’s weekly prices, if you choose them, and sends nothing you type. The numbers you change are kept in the page’s address, so a link you copy carries them. “Save” keeps the crops you put in your plan, with their acres, yields and budget per acre, in your browser for a day, and sends them with your sign-in request so the app can offer them on whichever device opens the link; they’re added to your farm’s plan only if you say yes.

Forms you fill in

The former "Check my settlement" email form has been replaced by links to the photo checker. Older versions of that form sent your email address, the page you were on and which link brought you there, if any, to GrainPosition's server, which keeps it and emails it to me through Resend so I can reply. I use it only for what the form says: to write to you about checking your settlement. To limit how many requests one connection can send a day, the server keeps a keyed one-way hash of your connection (not the address itself). The free spreadsheet needs no email at all; it downloads straight away. You can unsubscribe or ask me to forget the address at any time.

Questions you ask on the homepage

The question box under the homepage questions ("Didn’t find your answer?") sends your question, your email address, the page you were on and the link tag you arrived with (like ?ref=…) to GrainPosition's server. It is stored there, and emailed to me through Resend, so I can answer you by email and add common questions to the page. A one-way hash of your connection's address is kept with it, only to limit how many questions one connection can send a day. Your address is used only to answer you. Ask me to delete your question at any time.

Settlements you send me to check

When you email me a settlement (and a contract, if you send one) to check, I read it myself, and I may run it through GrainPosition's photo reader, which sends the file to Anthropic's Claude to be read, as described under reading photos, PDFs and spreadsheets. I use it only to check your settlement and write back to you. After I reply, I delete your email and its attachments, unless you ask me to set up your book with them, in which case they go into your book and you can delete them there.

Until then, the email and attachments are in my email inbox, which is run by Google (Gmail). The same applies to contracts or spreadsheets you send so I can set up your book.

The free settlement check on the homepage

When you use the settlement photo checker without an account, the photo or PDF goes to GrainPosition's server and on to Anthropic's Claude to be read, as described under reading photos, PDFs and spreadsheets, and the answer comes back to your browser. The file is not stored. To limit how many free checks one connection can use a day, the server keeps a keyed one-way hash of your connection (not the address itself) with the time of each check, and deletes it after two days. Cloudflare Turnstile checks that the request comes from a person. What was read stays in your browser for up to a week, so the app can offer to add it to your book if you sign up; it is never sent anywhere else, and "No thanks" in the app removes it.

What you type in the search at the top of each page goes to GrainPosition’s server to find the results, and a town’s name is looked up in the Government of Canada’s place names the same way the rainfall page does. None of it is stored or tied to you. When a search finds nothing, it is counted by its words (letters and digits only, the way visits to a page are counted), with nothing about who typed it, so the missing thing can be added. Your last five searches are kept only in your own browser, to offer them again; clearing the site’s data in your browser removes them.

The Monday town email

On the rainfall, bin weather and grain town pages you can ask for a town's week by email every Monday, without an account. You give your email, the town and the crops you follow; GrainPosition stores them on its server with when you asked and confirmed, and the link tag of the post you came from, if any. Nothing is sent until you confirm with the link in the first email. Each Monday's email is built from figures GrainPosition already keeps (the province's published prices, crop insurance dates, and the weather at the town's nearest Environment Canada station) and sent through Resend, so Resend handles your address and that email's contents. Every email has a link to change the town or crops and one to stop it, which takes effect at once; a stopped address is kept only so the stop sticks. Your address is used for this email and nothing else, and isn't joined to a farm's records. Ask me to delete it at any time.

Grain buyers

A grain buyer that bids on a load, or asks for emails about loads near it, gives its company's name and email, and if it wants, a contact name, phone, its Grain Commission licence name, its town and the crops and distance it buys. GrainPosition may also add a buyer from the address it publishes for buying grain, with its town and the crops it says it buys. This is stored on GrainPosition's server and used only to send that buyer loads that fit and to show its bids to the farm it bid to: the farm sees the company's name and licence, and gets the contact name, email and phone only if it picks that buyer's bid. Emails to buyers are sent through Resend, and each has a link to stop them; stopping takes effect at once. Ask me to delete a buyer's details at any time.

Using the app

Your account
Your email address, to send sign-in links. There are no passwords. The sign-in emails are sent through Resend. If you choose Continue with Google instead, Google's own page confirms who you are and GrainPosition asks Google for your email address only, nothing else from your Google account; Google then knows you signed in to GrainPosition. No Google script runs on GrainPosition's pages unless you click that button.
Your farm association
If you sign up through a farm association's member link, or pick your association in Farm settings, your farm records which association it is, so its member price applies. The association, and HUB International for the associations whose member benefits it runs, are told only how many members joined and how many subscribe, by association: never your name, email or anything in your book.
Your grain marketing advisor
An advisor can ask to work with your farm. Their request (your email address and any note they wrote) is stored and sent to you through Resend, with a link that works for your address for 14 days; only a one-way hash of the link is kept. Nothing on your farm is shared unless you, as the farm's owner, say yes. An advisor you let in sees your whole book and can change contracts, the crop plan and bids, not your loads, settlements, bins, costs or the people on your farm. Their Clients screen adds up only the farms that let them in; your records are never shown to anyone else or pooled. Remove them any time in Settings, People on this farm, and they can leave.
People you invite onto your farm
When you invite someone, their email address and the role you chose are stored with your farm, and an invitation is sent to them through Resend. The link in it works once, only for that address, for 7 days; only a one-way hash of it is kept. Someone you invite as an employee is never sent your prices, settlements or costs. You can change their role or remove them at any time, and they can leave.
The Monday email
New accounts choose whether to receive the Monday farm summary at signup or in Settings. Existing email preferences are kept. We store the preference and the most recent opt-in date. Owners and family members who opt in get a short email on Monday mornings when there is something in it: deadlines, money still to come, settlement lines to check, each crop's sales and prices, and licence notices for the farm's buyers. It is built from your farm's records and sent through Resend, so Resend handles that email's contents on its way to you. A note of each week's email (the week, and the value of unsold grain and your bids, to compare against the next week) is kept with your account. Turn it off in Settings, or with the link in any of them, which works without signing in.
Morning alerts
Off until you turn them on in Settings. Then, on a morning something comes due (a delivery window, a bill or the end of a settlement’s payment protection within the days you picked, a Grain Commission notice about a buyer you have grain or money with, or a crop reaching your target price), you get one email about it, built from your farm's records and sent through Resend. Which alerts you turned on, and a note of each alert sent (so it isn't sent twice), are kept with your account. Turn them off in Settings, or with the link in any of them, which works without signing in.
Something you're keeping when you sign in
If you ask to sign in while keeping a field, the bins you measured or the bids you compared, what you were keeping is stored with the sign-in link and handed back when you use it, so it reaches your book on whichever device you sign in on. Nothing goes into your book until you say yes.
A field you look up from space
On the field from space page, the legal land description you type goes to Alberta's or Manitoba's survey service to find the quarter, and the quarter's outline to Copernicus for its season. The season's greenness for that spot is kept for a week, so the next look at it is quick; it holds where the field is and nothing about who looked. Nothing is tied to you or your farm.
Your fields from space
Fields you add in the app are kept with your farm: each one's legal land description, the name you give it, and its outline on the map. The outline goes to Copernicus to read the field's season, with nothing else. In June and July, if you have morning alerts on, the season is read again every couple of days to tell you when a field greened less. Remove a field and it's gone; delete the farm and they all go.
Grain you offer for sale
When you offer a load in For sale, what you typed about the load (crop, tonnes, grade, test results, when it can move, your note to buyers) and the town you chose to show it near go on the public board at grainposition.com/grain-for-sale and, once I have looked it over, in emails sent through Resend to grain buyers on GrainPosition's list whose area and crops it fits. Your farm's name, your email, your phone and your farm's exact place are not shown. Bids come back to you in the app. Only when you pick a bid does that buyer get your farm's name, the email you're signed in with and the phone you gave, by email through Resend, and you get theirs. Your trucking cost is used only to work out what each bid comes to at your farm, and is never shown to buyers. Take a load down any time; it comes off the board, and buyers who bid are told it's no longer for sale.
Staying signed in
One cookie, gp_session, keeps you signed in for up to a year. It is only used to know it is you. The only other cookie is gp_guest, set only if you choose to look around the sample farm without an account: it holds when the look ends (four hours later) and a signature, nothing about you, and it isn’t stored anywhere on our side.
Your farm records
Contracts, bins, loads, settlements, your crop plan, costs and target prices, and your farm's name, place, province and nearest town: whatever you put in. The province is used to show the average price farmers there received, from Statistics Canada, and in Saskatchewan, Manitoba and Alberta the province's own weekly price, from the Government of Saskatchewan, Manitoba or Alberta; nothing about your farm is sent to any of them. They are stored in a database run by Cloudflare.
What happens to them
They are used to show you your own position, and for nothing else. They are not sold, not pooled with other farms, not used as market data, and not shown to anyone else, except a load you offer for sale yourself, as described above. You can export all of it as CSV at any time.
Who can see them
You, and anyone you give your email login to. As the person running GrainPosition I can technically reach the database. I only look at a farm's records when you ask me to, for example to set up your book or to fix a problem you reported.

Dated inventory history

Inventory history keeps dated opening balances and quantity changes with your farm, including the bin name, yard and crop. Removing a bin retains this history so earlier storage balances remain available. Deleting the farm removes these retained records. Account deletion follows the existing shared-farm rules: a farm still used by other members keeps its records. This adds no external service and sends no inventory details to another provider.

Bin-to-bin transfers keep the source, destination, crop, quantity, date, note and recording user with the farm. Their records survive bin removal and are removed when the farm is deleted. New checks can be linked to a recorded grain period so charts keep earlier grain and unknown older readings separate. Transfer retries use a request key kept in the open page; no new browser storage or external service is added.

Bin checks and QR labels

Bin QR labels are generated on your device, without a QR service. A code contains a link with the farm and bin identifiers, not a sign-in token. A person who scans it must sign in with permission to access that farm. Print labels only where you want the farm and bin names on the label to be visible.

A pending bin link can remain in this browser tab for up to a day and can be carried with a sign-in request so the correct bin opens after sign-in. Walk the yard keeps unsaved round progress in the open page only. Each check you choose to save becomes a normal farm record in Cloudflare's database. Bin weather uses the existing Environment Canada forecast connection; your bin records are not sent to a QR service or to Environment Canada.

Ask GrainPosition

If the optional AI assistant is enabled for your farm, submitting a question sends the question, recent conversation context and the relevant saved record details to Anthropic. You confirm this in the assistant before sending. The assistant can read permitted records and explain calculations; it does not save transactions or send messages. Opening the panel alone does not send records to Anthropic.

The conversation stays in the current browser tab's memory, not in GrainPosition's database or browser local storage. Clear it in the panel; refreshing, signing out or changing farms clears it. GrainPosition keeps usage metadata with the farm: the requesting user's ID, time, model, token counts and success or failure. It does not keep the question or answer in that usage record. Those metadata are deleted with the farm or requesting account. Anthropic processes requests under its API terms. Its standard API policy deletes inputs and outputs within 30 days, with exceptions such as legal requirements or enforcing its usage policy. Anthropic explains its retention policy here.

Reading photos, PDFs and spreadsheets

When you use "Read a contract", "Read a ticket", "Read a settlement" or "Read a result" (a Grain Commission Harvest Sample report), the file is sent to Anthropic's Claude to be read, and the fields it finds come back to fill in the form. GrainPosition does not archive the file on its server. The device capture queue described below can keep a local copy until it is read. Anthropic does not use it to train its AI models; it may keep it for a limited time under its own terms, for example to detect abuse.

When you import a spreadsheet, it is read in your browser. If its columns can't be matched from their names, only the column headings and the first 20 or so rows of each sheet are sent to Anthropic's Claude, to say which column is which. Every value is then converted in your browser, and nothing is saved until you press Import. The file itself is not uploaded or kept.

I keep a record of each read without its content: when it happened, the file type, the model and how much it cost to process. That is used to cap how many reads a farm can make in a day and to keep an eye on cost.

Offline capture queue

In the signed-in app, you can keep contract, scale-ticket and settlement photos or PDFs on this device to read later. Captures made without a connection, and uploads that fail because the connection drops, wait in the same queue. The queue uses your browser's IndexedDB storage, with a limit of 20 documents and 50 MB. It is tied to the account and farm that captured each document; employees can queue tickets and advisors can queue contracts. The offline screen remembers the last permitted farm opened online for up to 24 hours. That lets you capture drafts, not access private farm records offline.

Nothing uploads automatically on reconnection. When you choose Read while online, the server checks your current account, farm and role, then sends that document to Anthropic through the existing document reader. The local file is removed after a successful read; the proposed fields stay on this device for review until you save the record or delete the capture. Captures and proposed fields expire after 7 days and are removed when the queue is next opened. You can download an unread capture or delete it. Signing out or deleting your account from this browser clears the device queue; other devices must be cleared separately. Clearing browser data, private browsing or browser storage eviction can also remove it, so keep your originals.

A service worker caches only the public offline capture screen and its scripts and styles. It does not cache private farm records or API responses. No background upload or automatic booking takes place.

Who processes it

GrainPosition is run with a few outside services. Each only gets what it needs to do its job:

ServiceWhat it doesWhat it sees
CloudflareHosts the site, runs the app and its database, counts visits, and checks that sign-in requests come from a person (Turnstile)Everything stored in the app; IP addresses of visitors
ResendSends sign-in, invitation, welcome and week-one follow-up, Monday and alert emails (the farm's, and the town email), the emails of Grain for sale (loads to buyers, bids to farms, and both sides' details when a farm picks a bid), and passes your homepage questions and "Check my settlement" requests to meYour email address, and what each email says: the sign-in link, the invitation, your farm's figures in the Monday email, the town, prices and weather in the town email, a load and its bids, your question, or that you'd like a settlement checked
AnthropicReads photos and PDFs you choose to upload, matches spreadsheet columns when their names are not enough and answers optional assistant questionsThat photo or PDF; for a spreadsheet, only its headings and first rows; for the assistant, the question, recent conversation context and relevant permitted farm record details
Government of Canada: Natural Resources Canada, Environment and Climate Change Canada, Agriculture and Agri-Food CanadaFinds the town you type, and gives the weather at the nearest station and the Drought Monitor's category there, if you add your farm's nearest town, look up a town on the rainfall page, or search for one; and the next 24 hours’ forecast for your farm’s town on the dashboard’s Today; and the lay of the land under a field (Natural Resources Canada’s lidar elevation), on the field from space page and for the fields in the appThe town name as you type it, then that town's position, sent from GrainPosition's server; for the lay of the land, only the square of land the picture covers; nothing else about your farm or you
Copernicus Data Space Ecosystem (European Space Agency and the European Commission)Works out a field's greenness and makes its greenness map, and its natural-colour pictures when Microsoft's doesn't answer, on the field from space page and for the fields you add in the appThe quarter section's outline (where it is), and nothing else: no name, no farm, nothing about you
Microsoft Planetary ComputerMakes a field's satellite pictures and the map you drag and zoom around it, from the same Sentinel-2 images, on the field from space page and for the fields you add in the app; and reads the radar passes (Sentinel-1) over the fields you add in the app, for standing water and when a field was cut; also reads small, dated Sentinel-2 greenness grids to compare recurring patches across seasons, kept privately with your farmThe square of land the picture covers, the map tiles being looked at, or a field's outline (where they are), sent from GrainPosition's server, and nothing else: no name, no farm, nothing about you
Government of Alberta; Government of Manitoba (its open data hosted by Esri)Find a quarter section from its legal land description, on the field from space pageThe legal land description typed, and visitors' IP addresses
GoogleWebsite fonts; my email inboxVisitors' IP addresses (fonts); emails you send me

These services are based in the United States or run servers in other countries, so your information may be stored or processed outside Canada, where the law may let governments or courts there ask for it.

How long it is kept

Farm records and your account
Until you delete them or ask me to. The database keeps a rolling history for restoring from mistakes, so deleted records can remain in that history for up to 30 days before they are gone for good.
Sign-in links and sessions
A sign-in link works once and expires after an hour. The welcome email’s “Open your book” button is a sign-in link too: it works once, for 3 days, and stops working as soon as you sign in any other way. A session lasts up to a year, or until you sign out.
Form and email contacts
Until you unsubscribe or ask me to delete them.

Seeing, fixing and deleting it

Email hello@grainposition.com from the address on your account and I will:

I will answer within 30 days, and usually much sooner. You can also do two of these yourself in the app, at any time: Settings, then Export everything as CSV, or Settings, then Delete my account, which deletes the account and all of the farm's records straight away. This works the same whether you use GrainPosition in a browser or in the Android app. Deleted records can stay in the database's rolling backup for up to 30 days, then they are gone for good.

If you are not happy with how I have handled it, you can complain to the Office of the Privacy Commissioner of Canada.

Changes and contact

If this policy changes in a way that matters, for example a new service that sees your data, I will update the date at the top. If you have an account, I will email you before the change applies to you.

Questions: hello@grainposition.com.