Export your latest DHI test-day file and bulk tank results as a spreadsheet, remove anything that identifies the farm, upload it to ChatGPT and ask it to rank cows and flag trends against thresholds you supply. Then take every flagged cow or pattern to your vet or adviser before acting, because ChatGPT reads numbers, not animals.
The useful part is the sorting. A test-day report for 120 cows has thousands of figures, and most herds look at the top and bottom of a few columns. ChatGPT can cross-check somatic cell count, fat, protein, urea and days in milk in one pass, and tell you which cows deserve ten minutes of your attention. What it cannot do is diagnose mastitis, ketosis or a ration problem.
What goes into the conversation and what stays out
Three records are worth bringing together. The first is the test-day file from your milk recording organisation, one row per cow per test. The second is bulk tank results from your milk buyer: usually bulk somatic cell count, bacteria counts, fat and protein, sometimes a urea figure. The third is anything your parlour or herd software can export: daily yields per cow, conductivity readings, activity or rumination alerts, treatment dates.
Start with the first file only. Adding all three at once is how analyses go wrong, because the cow numbers in different systems may not match and ChatGPT will happily join the wrong rows. Prove the method on one export, then add the second.
Before uploading, prepare the file in four steps.
- Remove identifiers. Delete farm name, owner, herd code and address. Keep the cow number and, if you want, a private lookup sheet on your own computer that links cow numbers to ear tags or names.
- One header row, plain column names. Use names such as
cow_id,test_date,days_in_milk,lactation,milk_kg,fat_pct,protein_pct,scc_000,mun. Say in the first message what units each column uses. - Delete totals and herd averages rows. A summary line at the bottom of the sheet is read as a cow.
- Keep dates as dates. Use one format all the way down the column.
On privacy, check three things before you upload: the data controls in your ChatGPT plan, any clause in your milk supply or recording agreement about sharing data with third parties, and whether you are comfortable with the cow-level data leaving your computer at all. ChatGPT's business plans do not train on business content by default; on Free, Plus and Pro, sharing is on by default and you switch off "Improve the model for everyone" under Settings, then Data controls. If in doubt, ask your recording organisation what it permits. Opening a new chat inside a ChatGPT Project keeps the instructions and files for one herd together, and a Project is a reasonable home for a monthly routine.

The Complete Excel Course with AI Integration
From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.
By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner
Buy nowA first analysis on a 120-cow test day
This is an illustrative example with invented figures. Picture a 120-cow herd tested monthly. The file has 118 rows (two cows were dry). The farmer wants to know which cows to look at first and whether anything has moved since last month. The first message sets the ground rules:
I am uploading a milk test-day file for one dairy herd (118 cows).
Columns: cow_id, lactation, days_in_milk, milk_kg (per day),
fat_pct, protein_pct, scc_000 (somatic cell count in thousands
per mL), mun (milk urea nitrogen, mg/dL).
Rules:
1. Do not guess. If a column is missing or a value looks like
a data error, list it and ask me.
2. First, tell me how many rows you read, the herd average of
each column and the ten highest and ten lowest values for
scc_000, so I can check you read the file correctly.
3. Do not give treatment advice. Describe patterns only and
say what a vet should confirm.
The first reply is a reading test, not an analysis. Check the row count against your file, compare the herd averages with the printed report, and look at the highest cell counts. If they match, carry on. If ChatGPT read 117 rows, or the average protein is a point out, stop and find why before asking anything else. Usually a stray header row, a comma used as a decimal mark or a blank row is the cause.
Second message, once the reading test passes:
Now list cows I should look at first, in three groups:
A. scc_000 above 200 and rising versus the previous test
(previous test file attached as second sheet).
B. Fat to protein ratio above 1.4 or below 1.1 in the first
40 days in milk.
C. MUN more than 4 mg/dL outside the herd average.
For each cow show cow_id, lactation, days_in_milk and the values.
End with a one-paragraph summary and three questions I should
ask my vet.
The thresholds in that prompt are yours to set. University extension guidance on test-day records says cows above 200,000 cells per mL often warrant a closer look, such as a cow-side test of each quarter, and that culture samples from those cows (or at least the top 10 to 20 by cell count) help guide prevention, treatment and culling decisions. The same guidance puts a healthy fat to protein ratio for Holsteins at about 1.2 to 1.4, reads a ratio below 1.1 as a possible sign of milk fat inversion or rumen acidosis, and treats the ratio as a herd-level signal: the concern is more than 40% of early-lactation cows sitting above 1.4, not one cow on its own. Ask your vet which figures they use for your herd and breed and put those in the prompt, rather than trusting any number in this tutorial or one ChatGPT supplies from memory.
An illustrative sample reply would list, say, nine cows in group A, four in group B and six in group C, with two cows appearing in both A and B. The overlap is the interesting part: a high-cell-count cow in early lactation with a fat to protein ratio of 1.8 is worth a conversation sooner than either alone. Treat that as a lead, not a finding. Count group B against the number of cows under 40 days in milk as well: if more than four in ten fresh cows land in it, the conversation is about the herd's transition period and ration, not about four individual cows. The vet will want the cow in front of them, a quarter-level check and history on previous treatments, none of which is in a spreadsheet.
Reading a bulk tank trend without overreading it
Bulk tank results arrive as a series: one figure per collection, sometimes every other day. Paste twelve months into a sheet with columns for date, bulk cell count, total bacteria count, fat and protein, and ask ChatGPT for a plain description of the series and any step changes. For example:
Here are 52 weekly bulk tank results. Describe the trend in
bulk SCC and fat% in plain words. Identify any week where the
SCC jumped by more than 25% versus the four-week average and
list what else changed in that week (bacteria count, fat%,
protein%). Do not explain causes; list possible things I
should check on the farm and tell me which are for the vet.
A usable sample answer says something like: bulk cell count held between 180,000 and 220,000 until week 31, jumped to 310,000 in weeks 32 and 33, and returned to 230,000 by week 36; total bacteria count rose in week 32 only. Notice what that tells you and what it does not. It tells you when to look at your records for those weeks: heat, a new batch of heifers calved in, a change in bedding, a parlour service gap, a cow that came in from outside. It does not say which one was the cause. ChatGPT may offer a confident explanation. Ask it to label every explanation as a possibility and to say what evidence would confirm or rule it out.
A second mistake to watch for is smoothing. If you ask for a "trend", the reply may describe a gradual rise when the file shows one bad fortnight. Ask for the five highest values with dates, so you can see the spike for yourself, and ask the same question twice in separate chats to see whether the answer is stable.
Joining test-day data to parlour records without crossing cows
Once the single-file method is working, the useful second step is joining two sources: the monthly test-day file and a parlour export with daily yields and, if you have them, conductivity or flow readings. The risk is the join. If the parlour system numbers cows by transponder and the recording organisation numbers them by ear tag, a join on "cow number" can pair up different animals and still produce a believable table.
Protect against that with a key check before any analysis:
- Add a sheet with the lookup between the two numbering systems and ask ChatGPT to use only that sheet for matching.
- Ask it to report how many cows matched, how many appeared only in the test-day file and how many only in the parlour file. In a 120-cow herd the unmatched figure should be a handful (dry cows, recent sales, a calved heifer not yet in the system), not 30.
- Pick three matched cows and check them by hand against both systems. If any of the three is wrong, discard the join.
Here is an illustrative before and after. The raw ask, "which cows are giving less milk than last month", produces a long list that includes every cow past 250 days in milk, because yield falls naturally late in lactation. The better ask is "compare each cow's yield with the average for cows in the same lactation number and a 30-day days-in-milk band, and list cows more than 20% below that group". The first list is 41 names and mostly noise; the second is 7 names and worth walking through. Giving ChatGPT the comparison group is the single biggest improvement you can make to a prompt.
Checks to run on every answer before you act
A herd-record analysis that is wrong in a plausible way is worse than none. Run these checks each time.
- Reproduce one number. Pick one figure ChatGPT reports (the herd average protein, say) and calculate it in the spreadsheet. If you cannot match it, nothing else in the reply is safe.
- Count the cows in each list. If the reply says "eleven cows" and lists nine, the list is the truth and the sentence is wrong.
- Ask for the rule it used. "State the exact filter you applied for group B." Compare it to what you asked.
- Check the units. Cell counts in thousands per mL versus per mL, milk in kilograms versus pounds, urea as MUN versus urea. A 1,000-fold slip appears as an impossible herd.
- Look at what it ignored. Cows with missing values are often silently dropped. Ask how many rows had any blank in the columns it used.
- Ask for the analysis as a formula. Better still, ask for the spreadsheet formula or filter so you can run it yourself next month. The ChatGPT and Excel guide shows how to move a method like this into a sheet you control.
What must go to the vet, and what you can act on yourself
Draw a line before you start, in writing, and keep it with the Project instructions. A workable split looks like this.
| Finding | Who decides what happens next |
|---|---|
| Cow with high cell count two tests running | Vet or mastitis adviser: sampling, culture, treatment or culling decision |
| Early-lactation cow with a high fat to protein ratio | Vet or nutrition adviser: metabolic check, ketosis test |
| Herd-wide urea shift | Nutritionist: ration review |
| Bulk tank bacteria spike | Milk buyer's field rep and the person who services your parlour |
| Cow missing from the test-day file | You: check the record, the ID and the dry-off date |
| A column of numbers that looks wrong | You: check the export and the units before anything else |
Drug withdrawal periods, treatment protocols, dosing and anything touching animal welfare or milk safety are never decided from a ChatGPT reply. Ask it to prepare the message to the vet, which it does well:
Write a short email to my vet listing the cows from group A
and B with their values from the last two tests, the date of
the bulk tank SCC jump, and three specific questions. Keep it
under 200 words. Use "[vet name]" and "[your name]" as
placeholders.
A sample result is a tidy list of cow numbers, the two most recent cell counts for each, and questions such as "should the six cows that were high on both tests be cultured before the next milking?" The vet can answer that in a line, because they were given what they need without a phone call to go over the spreadsheet.
A monthly routine that takes under an hour
Once the prompts work, fix them. In a ChatGPT Project, store the column definitions, your thresholds and the rules ("describe patterns only; no treatment advice") as the project instructions, so each month starts from the same ground. Then follow this order.
- Download the test-day export on the day it arrives. Remove identifiers, check the headers, add last month's file as a second sheet. About ten minutes.
- Run the reading test: row count, averages, top and bottom cell counts. Five minutes.
- Run the three-group review and the bulk tank trend. Ten minutes.
- Reproduce one number and check one cow by hand. Five minutes.
- Send the vet email for anything in the A group, and put group B and C items on the agenda for your next nutritionist visit. Ten minutes.
- Save the filled-in summary in a folder named by month, so next month's analysis can compare against it.
After three months you have a small history in your own files, and you can ask better questions: which cows keep appearing, whether cows that calved in a particular month behave differently, and whether the herd's cell count really moves with the seasons or only seems to.
If you later want to connect herd findings to money, the milk price scenarios tutorial takes the same careful approach to a budget, and costing herd manager jobs per cow shows where AI saves time and where it does not. For a deeper look at robots versus software, read which jobs are software and which are robots.
Two smaller jobs worth the same upload
Once the file is in the conversation, two further questions cost almost nothing and often turn up something the printed report buries.
Which cows are carrying the herd average? Ask for the share of total daily milk that comes from the top 20% of cows and the bottom 20%. In an illustrative 118-cow file, the top 24 cows might give 29% of the milk and the bottom 24 only 11%. That is not a culling list, since the bottom group will include fresh heifers and late-lactation cows, but it tells you how uneven the herd is. Ask for the same split inside each lactation number to see whether the unevenness is real.
Did last month's fresh cows start as expected? Give ChatGPT the days-in-milk column and ask it to list cows under 60 days with milk below the average for cows in that band, and say how many such cows there are. A cluster of low early-lactation yields in one month is a conversation for the vet and nutritionist about the transition ration and calving-time health, not something a chatbot can explain.
A filled-in summary to save each month might read like this (illustrative): "Rows read 118, matched to last month 114. Group A: 9 cows, 6 high on both tests, emailed vet on the 14th. Group B: 4 cows, all under 40 days in milk, raised with nutritionist. Group C: herd urea average 11.8, up from 10.9, raised with nutritionist. Cows with blank cell count: 2, sample tubes checked. Bulk tank SCC: 205 average, no step change." Five lines of that, kept in order, are worth more than any dashboard because you can read them in a minute a year from now.
Mistakes that look like insight
Four failure patterns show up repeatedly with herd data, and each can be caught in a minute if you know the shape.
The comparison that ignores lactation stage. A reply says that cows in the herd average 31 kg a day and that 22 cows are "underperforming". Look at their days in milk: if most are past 220 days, the finding is mostly the lactation curve. The fix is to ask for like-for-like groups.
The percentage from a tiny group. "Heifers have a 50% higher cell count than older cows" can be three heifers. Ask ChatGPT for the count behind every percentage and ignore any group under about ten cows unless you are only using it to pick cows to inspect.
The invented cause. You ask why cell counts rose in week 32 and get a fluent answer about a wet summer. Nothing in your file mentioned weather. Add to your instructions: "Only use information in the files I provide. If you suggest a cause, label it a hypothesis and say what record would test it."
The silent drop. A cow with a blank cell count is excluded from the ranking, and she is the cow whose sample was lost. Ask "which cows were excluded from each list and why", and add a line to your routine to check them manually.
A final practical note on tools. ChatGPT is one choice; Claude and Gemini both read spreadsheets too, and the method here does not depend on which you pick. What matters is the discipline: clean export, reading test, thresholds you set, a check on one number, and a vet who makes the decisions. If you want help setting that up for your own herd software and recording reports, that is the kind of job an AI implementation consultation covers.
Questions dairy farmers ask before uploading herd records
Can ChatGPT replace my herd software or milk recording report?
No. Your DHI report and herd software remain the record of truth. ChatGPT is a second pair of eyes that reads exported tables, ranks cows, spots trends you have not had time to plot and drafts a question list for your vet. Treat every output as a lead to check against the original report.
Is it safe to upload herd records to ChatGPT?
Strip anything you would not post on a noticeboard first: farm name, owner, addresses and anything linking a record to a person. Cow numbers are usually fine. Check your plan's data controls and your milk buyer or recording organisation's rules, and prefer a business plan, which does not train on business content by default.
Which file format works best?
A plain CSV or an Excel sheet with one row per cow per test day and clear column headings. PDFs of a printed report often come through with merged columns, so copy the table into a spreadsheet and check the first ten rows before you upload. Claude takes CSV files directly but needs its code execution and file creation setting switched on before it accepts an XLSX file.
How many cows do I need for useful patterns?
Even a 40-cow herd gives enough rows to rank cows and compare lactation groups, but a single test day is a snapshot. Six to twelve months of test days give the trends. With very small groups, treat percentages with caution because one cow moves them a lot.
Further reads
- How to Use ChatGPT for Data Analysis in a Clinic: No-Show Rates — Same upload-and-rank method on a different spreadsheet problem.
- HR Analytics and AI: Analyse Staff Turnover From a Spreadsheet Export — Another worked example of anonymising an export before analysis.
- Retail KPI Dashboard in Excel: A Weekly Sheet From Till Data With AI — Build a weekly sheet you can paste into ChatGPT.
- Farm Accounting Software: QuickBooks, Xero or a Farm App With AI? — QuickBooks, Xero or a farm app for a small farm: enterprise-level costing, indirect tax, what AI categorisation gets wrong and what it costs.
- Free AI for Agriculture: What a Small Farm Gets Without Paying — What a small farm can do with free AI tools for records, crop monitoring and planning, and the exact points where each free plan stops.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: OpenAI's data controls help page and ChatGPT plan page (Projects, file uploads); Anthropic's file upload help page; Google's Gemini file upload help page; university extension guides on subclinical mastitis detection and subclinical ketosis monitoring; all checked 5 November 2026. No herd data was used; all figures are illustrative.