The same AI model can pick the wrong emission factor one minute and the right one the next, on the exact same line of spend. That looks like an unreliable model, but the real cause is narrower and fixable. It's also the same reason ChatGPT hands you a confident but wrong factor when you ask it to help with your spend data.
The problem is rarely the model's ability. It's being asked to make an expert's decision with the expert's evidence taken away.
We build carbon software on these models: CO2 Lab runs Claude and GPT inside our emissions pipeline, matching real ledger lines to real factors, so this comes from production experience, not a vendor pitch. The single most important thing we've found is that the same model which gives you a wrong answer one minute gives you the right one the next, and the only thing that changed is how much context it could see.
A worked example, from our own pipeline
We ran the same general ledger through our pipeline twice, and the total came out 37% apart. One freight category worth about $400,000 was the whole gap. One pass called it air freight (0.803 kg CO2e per dollar) and returned 324,360 kg CO2e; the next called it road freight (0.468) and returned 148,242. Same vendors, same dollars, half the footprint.
The retrieval wasn't the problem: both air and road factors were right there in the candidate set. The problem was what the model saw when it chose. It wrote its own search from the category label alone, "freight transport" one run and "freight and cartage" the next, and that label flipped the answer.
The vendor names (National Postal Service, a courier, a removals firm) never reached the decision, the very evidence any analyst would glance at and instantly read as road and last-mile, not air freight.
The fix wasn't a smarter model or a majority vote. We fed the vendor names and activity detail into the decision, the way an analyst reads them off the invoice. The flip-flopping stopped: ten out of ten runs picked the right mode.
“An emission factor decision is only as good as the context the model gets to make it with. Strip a line down to "Freight, $400k" and even a brilliant model is guessing.”
The whole ideaWhat "context" means here
When people talk about grounding an AI decision, this is the concrete version for carbon accounting. Before the model picks a factor, it should have in front of it:
What the model needs to see before it chooses
- The vendor, not just the category. "National Postal Service" means road and parcel; "Qantas Freight" means air. The category label often hides this.
- The activity detail from the source document, in the words on the actual invoice.
- The region. An Australian grid factor and a UK grid factor are genuinely different numbers, and a model with no location will give you a generic or wrong-country one. A 2025 peer-reviewed study of a ChatGPT carbon calculator flagged exactly this: its UK-specific factors 'may not accurately reflect conditions in regions with different electricity generation mixes.'
- The reporting year, so it applies the factor valid for the period, not last year's.
- A real list of factors to choose from, so it selects an existing one rather than inventing a plausible-looking value. The same study warned these tools can fabricate sources that don't exist.
Notice that all of this is context you already have in your spreadsheet. It's just usually sitting in a different tab from the number you're trying to classify. The vendor list is one sheet, the spend is another, the source documents are somewhere else. The reason the model decides badly is that you hand it one cell at a time, with the surrounding evidence left behind. Most of the real work in doing this well is joining those columns back together so the model sees what you see. That's also why a general chat window struggles: it can only reason over what you paste into it.
The honest limit: context isn't magic
I'd be selling you something if I said grounding fixes everything. It doesn't, and knowing where it stops is what separates a defensible number from a lucky one.
Grounding fixes judgement, not arithmetic. Deciding "this is road freight" is judgement, and context nails it. Converting 153 megajoules of gas with a factor quoted per gigajoule is arithmetic, and there the model is a liability: ask whether MJ and GJ are compatible and it'll say yes and hand you an answer a thousand times too big. That conversion belongs in plain code with one correct answer, not in the model's head.
Some ambiguity no context can resolve. Sometimes the source genuinely doesn't say. A line reading only "Freight & Cartage" could defensibly be a road truck or a courier, with no vendor evidence to break the tie. The honest move is to flag that line for a human, not make the model guess confidently. Context grounds the model in evidence that exists; when the evidence isn't there, a good system says so instead of papering over it.
So the real recipe is three parts, not one: ground the judgement in context, do the arithmetic in code, and flag what the data can't settle for a person to review. A raw chatbot gives you the first part on a good day and none of the other two. This is the same reason an AI you can check beats one you have to believe.
What this means for you
If you're using ChatGPT next to your spreadsheet, you can get noticeably better answers today by feeding it context instead of bare line items. Give it the vendor, the activity, the region, and the year in the prompt, and ask it to choose from a list of real factors rather than name one from memory. You'll still have to check the maths yourself, and you'll still hit lines it can't honestly resolve. But you'll spend far less time undoing confident wrong answers.
That grounding is also the entire premise of what we build into our Claude and ChatGPT integration. The difference is that we do the joining for you. We pull the vendor, the source document, the region, and the valid-year factor into every decision automatically, run the arithmetic in code, and flag the genuinely ambiguous lines for you to rule on. Every number then traces back to the source document, the factor, and the reasoning that connected them, so you stay the reviewer instead of the data-entry clerk.
This is a more hopeful takeaway than "AI can't do this." AI can do a lot of it well, but it can't do it blind. Give the model what an expert would have in front of them, keep the arithmetic in code, and know which calls to hand back to a human, and the same tool that frustrated you starts doing the tedious 90% you never wanted to do by hand.
See it choose a factor, with the working shown
Bring a real invoice. The analyst will read it, pick the emission factor, and show you the vendor, the source line, and the reasoning behind the match.
Book a Sustainability Check-up