Unit Conversion in Carbon Accounting: The 1,000x Error Hiding in Your Gas Bills

A gas bill shows 45,000 MJ. The emission factor is 51.53 kg CO2-e per GJ. Apply the factor without converting MJ to GJ first, and you've just overstated that facility's emissions by 1,000x. Systematic two-step unit conversion through a canonical intermediate prevents the most common catastrophic error in Australian carbon accounting.

Denis Kargl February 27, 2026 11 min read
Carbon AccountingUnit ConversionData QualityNGA FactorsNGEREmission FactorsAI Pipeline
Unit Conversion in Carbon Accounting: The 1,000x Error Hiding in Your Gas Bills

Forty-five thousand. That's the number on a Victorian gas bill sitting in front of you. The unit next to it says MJ. The NGA Factors 2025 workbook says natural gas produces 51.53 kg CO2-e per GJ. You multiply 45,000 by 51.53 and get 2,318,850 kg CO2-e. About 2,319 tonnes from a single quarter at one facility.

That's wrong. It's wrong by exactly three orders of magnitude.

The bill was in megajoules. The emission factor was per gigajoule. One GJ equals 1,000 MJ. The actual emissions from that gas bill are 2.32 tonnes — not 2,319. A sustainability analyst who makes this mistake at 9 PM on a Wednesday, two days before the NGER reporting deadline, has just turned a small commercial kitchen's quarterly gas consumption into the equivalent of a steel mill.

This isn't hypothetical. We've seen this exact error — the MJ/GJ confusion on gas bills — more times than we can count. And it sits at the heart of a broader problem that should worry every Australian entity preparing emissions disclosures: the formula for carbon accounting is deceptively simple, but getting the units right before you apply it is where most catastrophic errors happen.

Why unit confusion is uniquely dangerous

Most errors in carbon reporting are proportional. Miss an electricity bill, and you understate by roughly the amount that bill represents. Use the wrong state grid factor, and you're off by maybe 20-30%. Apply a 2024 emission factor instead of 2025, and you might be off by a few percent.

Unit errors are different. They produce order-of-magnitude mistakes. MJ to GJ: 1,000x. Litres to kilolitres: 1,000x. kWh to MWh: 1,000x. These aren't rounding errors or estimation uncertainties. They're catastrophic miscalculations that can push a facility above or below NGER reporting thresholds entirely, trigger phantom Safeguard Mechanism exceedances, or render ASRS climate disclosures materially misleading.

The ANAO found that 72% of 545 NGER reports contained errors, with 17% classified as significant. The Clean Energy Regulator's 2024-25 compliance priorities specifically called out inaccurate data as an enforcement focus. And when Beach Energy entered an enforceable undertaking in July 2025, citing "inadvertent misstatements" in prior NGER reports, the regulator explicitly pointed to weaknesses in internal control systems for data collection and reporting.

We can't prove what share of those errors are unit-related. But we've spent 18 years building data systems for BHP, Rio Tinto, and Senex Energy, and our experience says unit confusion is either the cause or a contributing factor in the majority of order-of-magnitude reporting errors.

The three places units go wrong

The emissions calculation formula is:

Activity Data × Conversion Factor × Emission Factor = Emissions (CO2-e)

That conversion factor in the middle is the dangerous part. It's where units get transformed — or don't get transformed when they should. Errors cluster around three specific points.

Point 1: The source document uses a different unit than you expect. Australian gas retailers bill in MJ, GJ, or cubic metres depending on the retailer, the state, and whether the customer is commercial or residential. Victorian residential bills typically show MJ. Large commercial accounts might see GJ. Western Australian retailers like Kleenheat often use "units" where one unit equals 3.6 MJ. Same fuel. Same country. At least three billing conventions. If your data entry process assumes every gas bill is in GJ — because that's what the NGA Factors workbook expects — then every residential-format bill gets overstated by 1,000x.

Point 2: The conversion step gets skipped entirely. Diesel is a good example. The NGA Factors 2025 provide an emission factor of 69.9 kg CO2-e per GJ for transport diesel. But most organisations track diesel consumption in litres, from fuel cards and dockets. To apply the per-GJ factor, you first need diesel's energy content: 38.6 GJ per kilolitre, which is 0.0386 GJ per litre. Skip that intermediate step and apply 69.9 directly to litres, and you've overstated by roughly 26x. We see this in spreadsheets where someone grabs the emission factor from Table 4 of the NGA workbook, copies the litres from their fuel data, multiplies, and doesn't notice the units don't match. The answer looks like a number. It just isn't the right one.

Point 3: The conversion goes the wrong direction. This is subtler. Converting from MJ to GJ means dividing by 1,000. Converting from GJ to MJ means multiplying by 1,000. Get the direction backwards and you're off by 1,000,000x — a million-fold error. We haven't seen that exact scenario in the wild (it would be too obviously absurd to survive any review). But we have seen kWh-to-MWh conversions go the wrong way: someone multiplies by 1,000 instead of dividing, turning a 500,000 kWh site into a 500,000,000 kWh site. That's a 500 GWh facility — roughly the electricity consumption of all commercial buildings in Hobart combined. It made it into a draft report.

A worked example: one gas bill, four ways to get it wrong

Consider a medium commercial premises in Melbourne. Quarterly gas bill: 45,000 MJ. The NGA Factors 2025 emission factor for natural gas (distributed in pipelines) is 51.53 kg CO2-e per GJ (Scope 1, combined CO2 + CH4 + N2O, Table 3).

Correct calculation: 45,000 MJ ÷ 1,000 = 45 GJ 45 GJ × 51.53 kg CO2-e/GJ = 2,318.85 kg CO2-e = 2.32 tonnes CO2-e

That's a reasonable quarterly gas figure for a restaurant or small commercial building.

Error 1 — Skip MJ-to-GJ conversion: 45,000 × 51.53 = 2,318,850 kg CO2-e = 2,319 tonnes Overstatement: 1,000x

Error 2 — Convert the wrong direction (multiply instead of divide): 45,000 × 1,000 = 45,000,000 GJ 45,000,000 × 51.53 = 2,318,850,000 kg = 2,318,850 tonnes Overstatement: 1,000,000x (this would get caught, but the intermediate file might not)

Error 3 — Use the wrong energy content for cubic metres: If the bill showed 1,150 m³ instead and someone used a US natural gas conversion factor of 0.0353 GJ/m³ instead of the Australian figure of roughly 0.0387 GJ/m³ (which varies by network): 1,150 × 0.0353 = 40.6 GJ → 40.6 × 51.53 = 2,092 kg vs correct: 1,150 × 0.0387 = 44.5 GJ → 44.5 × 51.53 = 2,293 kg Understatement: ~9%

Error 4 — Report in kg instead of converting to tonnes for NGER: 2,318.85 kg entered as 2,318.85 tonnes in the NGER submission Overstatement: 1,000x (again)

Errors 1, 2, and 4 are all order-of-magnitude mistakes. Error 3 is a quiet ~9% systematic bias that repeats every quarter, every year, across every gas bill for that facility. Over five years of NGER record retention, it compounds into a material discrepancy that an auditor will eventually trace back to a conversion factor someone pulled from the wrong country's reference data.

Why spreadsheets can't fix this

A spreadsheet will do whatever arithmetic you tell it to. That's the problem. Type =A1*B1 where A1 contains megajoules and B1 contains a per-gigajoule factor, and Excel will happily return a number. It won't warn you the units don't match. It won't suggest a conversion. It won't log what happened.

You could build unit checks into the spreadsheet. IF statements comparing unit labels in adjacent columns. VLOOKUP tables mapping source units to required units. Conditional formatting to highlight mismatches. People do this. We've seen some impressively engineered carbon accounting spreadsheets with dozens of conversion logic sheets.

But they break. They break when someone copies a row from last year and the unit column doesn't come with it. They break when a new gas retailer bills in cubic metres and the dropdown only has MJ and GJ. They break when the person who built the spreadsheet leaves and nobody else understands the conversion macros. And they break silently — the number in the output cell changes, but nothing flags it as wrong.

The Beach Energy enforceable undertaking is instructive here. The Clean Energy Regulator didn't just ask Beach Energy to fix their numbers. They required Beach to engage an external consultant to develop a "comprehensive and documented system of controls" and to submit to three years of reasonable assurance audits. The message was clear: ad hoc data handling isn't good enough for NGER compliance. You need a system.

Two-step conversion through a canonical unit

When we built Carbonly's unit conversion engine, we had a design choice. We could build direct conversion between every possible unit pair — MJ to GJ, MJ to kWh, MJ to BTU, GJ to kWh, GJ to BTU, kWh to BTU, and so on. That's a matrix of n² conversion paths, and every path is a place for a bug to hide.

Instead, we route every conversion through a canonical intermediate unit within each unit family. For energy, the canonical unit is the joule (expressed as MJ). For volume, it's litres. For mass, kilograms. For distance, metres.

So converting from kWh to GJ doesn't happen in one step. It goes kWh → MJ → GJ. Two multiplications, each with a known, tested conversion factor. The intermediate is always the same canonical unit within that family, which means we only need to verify n conversion factors per family (one per supported unit), not n² conversion paths.

Here's what that looks like in practice for the unit families we support:

Energy: Wh, kWh, MWh, MJ, GJ, BTU — all convert through MJ as canonical Volume: mL, L, kL, gal (US) — through litres Mass: g, kg, tonne, lb, oz — through kilograms Distance: m, km, mi — through metres Transport: passenger-km, tonne-km, vehicle-km — these don't interconvert (deliberately) Area: sqm, sqft — through square metres Currency: USD, EUR, GBP, NZD, CAD, SGD — through AUD as base

The transport units are an important exception. Passenger-km and tonne-km are fundamentally different measurements. Converting between them requires knowing the number of passengers or the cargo weight — context that doesn't live in the unit itself. So the system treats them as separate types and won't auto-convert between them. If you try to apply a per-passenger-km emission factor to tonne-km data, it won't silently produce a wrong number. It'll flag the mismatch.

What gets preserved in the audit trail

The conversion itself is the easy part. What matters for ASRS assurance and NGER compliance is being able to prove what happened after the fact.

When our AI extraction pipeline reads a gas bill, it captures two things: the numeric value and the unit as stated on the source document. Both are preserved. If the bill says "45,000 MJ", the system stores 45,000 as the source value and MJ as the source unit. When the emission factor requires GJ, the system converts 45,000 MJ to 45 GJ, stores 45 GJ as the converted value, and logs the conversion path: source 45,000 MJ → canonical 45,000 MJ (already in canonical form) → target 45 GJ (÷ 1,000).

An auditor can trace from the final tonnes CO2-e figure back through the emission factor application, back through the unit conversion, and back to the source document. Every step is visible. No hidden spreadsheet formulas. No "someone did the conversion in their head and typed the result."

This matters because ASSA 5010 — the assurance standard that applies to ASRS climate disclosures from 2025 — requires practitioners to evaluate whether the entity's process for preparing sustainability information includes adequate controls. An audit trail that shows unit conversion logic is exactly the kind of control evidence assurance providers look for.

Where this still isn't solved

We'd be dishonest if we claimed systematic unit conversion fixes everything. It doesn't. Here are the gaps we're still working through.

Wrong unit on the source document. If a gas bill is printed with "GJ" when the actual quantity is in MJ — a labelling error from the retailer — no conversion system will catch that. The system trusts what the document says. We mitigate this with anomaly detection that flags values outside historical patterns for a given site, but the root cause is upstream of our pipeline.

Currency conversion rates are snapshots. Our AUD-based currency conversions (USD at 1.538, EUR at 1.695, GBP at 1.961, NZD at 1.075, CAD at 1.136, SGD at 1.149) are static rates. Exchange rates move daily. For spend-based Scope 3 calculations that rely on foreign-currency emission factors, the rate chosen can shift results by 5-15% depending on volatility. We use factor-vintage-year rates as the most defensible approach, but it's an approximation.

FTE is a rough proxy. We convert FTE at 2,080 hours per year (40 hours × 52 weeks). The Fair Work Act defines full-time as 38 ordinary hours per week — that's 1,976 hours. Different industries define FTE differently. This conversion exists because Scope 3 Category 7 (employee commuting) often needs it, but it introduces ~5% uncertainty before you've even started estimating commuting patterns.

Some unit combinations don't have clean conversion paths. Natural gas volume to energy depends on the specific gas composition and network pressure. The NGA Factors suggest approximately 38.7 GJ per kilolitre for distributed pipeline gas, but the actual heating value varies. We use the value from the invoice where available. When it's not on the invoice, we fall back to the NGA default — but that default might be 3-5% off for a specific network. We're honest about that gap because pretending natural gas has a universal, fixed energy content would be more misleading than acknowledging the uncertainty.

What this means under ASRS and NGER

Under NGER, emission factors and calculation methods are prescribed by the NGER Measurement Determination. The Determination specifies units — per GJ for fuel combustion, per kWh for electricity. Using the wrong unit doesn't just produce a wrong number; it produces a number calculated via a non-compliant method.

Under AASB S2, which applies to Group 1 entities from January 2025 and expanding to Group 2 and 3 by 2027, the stakes are different but equally serious. Paragraph 29(a) requires disclosure of gross greenhouse gas emissions in metric tonnes of CO2-e. The modified liability provisions that protect good-faith forward-looking statements don't apply to historical Scope 1 and 2 emissions. If your gas bill unit error inflates reported Scope 1 by 1,000x, that's a material misstatement in a financial filing, not a forecasting uncertainty.

And the ACCC's active enforcement against misleading environmental claims adds another dimension. If you've publicly claimed "we reduced emissions by 30%" based on a year-over-year comparison where one year had a unit error, that claim is false. Not misleadingly presented. Not ambiguously worded. Factually wrong, because the baseline number was wrong.

The real cost of getting this right vs. wrong

Consider a property portfolio with 50 sites across Victoria, NSW, and Queensland. Each site has electricity (billed in kWh or MWh depending on the retailer), some have gas (billed in MJ or GJ depending on state and retailer), and a few have diesel backup generators (tracked in litres).

Processing 200 utility bills per quarter manually, a sustainability analyst needs to check the unit on every single bill, compare it against what the emission factor expects, convert where necessary, and record the conversion. At roughly 3 minutes per bill for careful unit verification and conversion, that's 10 hours per quarter — 40 hours per year — spent purely on unit handling.

And that's the optimistic scenario where every conversion is done correctly. The realistic scenario is that by bill 150, the analyst has stopped checking units carefully because the last 50 were all the same. Then bill 151 comes from a different retailer in a different format, and the MJ/GJ confusion slips through.

Automating this step — having the unit identified at extraction, converted systematically, and logged — doesn't just save time. It removes the variability. Bill 1 gets the same conversion rigour as bill 200. The 11 PM bill gets the same treatment as the 9 AM bill. The analyst's attention is freed up for the things that actually need human judgment: checking whether a site's consumption pattern makes sense, following up on missing bills, and interpreting anomalous results.

Start with your gas bills

If you want to find unit errors in your current data, start with natural gas. It's the fuel type most likely to have unit confusion because Australian retailers are genuinely inconsistent about whether they bill in MJ, GJ, or cubic metres.

Pull every gas bill from your last reporting period. Write down the unit from the actual bill — not from your spreadsheet, from the PDF. Then check whether your emissions calculation assumed that same unit. If there's a mismatch anywhere, you've found the error that our experience says is probably already in your NGER submission or ASRS disclosure.

And if you find three different units across three different retailers for the same fuel type — welcome to the problem we built Carbonly's extraction engine to solve.


Related reading: