How Carbon Accounting Software Works Under the Hood

Suman SharmaSuman Sharma

Carbon accounting platforms look complex from the outside: dashboards, scopes, frameworks, audit trails. Underneath, the core calculation is almost embarrassingly simple:

emissions = activity data × emission factor

Everything else is plumbing, provenance, and edge cases. That's where the engineering lives.

The vocabulary

The GHG Protocol is the standard almost every tool builds on. It splits emissions into:

  • Scope 1: direct emissions from sources you own or control (company vehicles, boilers, on-site generators).
  • Scope 2: indirect emissions from purchased electricity, heat, steam, and cooling.
  • Scope 3: everything else in the value chain, across 15 categories (purchased goods, business travel, transport, use of sold products, and more).

Emissions are reported in CO₂-equivalent (CO₂e), converting other gases using their global warming potential (GWP).

The data model

A minimal model looks something like this:

type Activity = { id: string; orgUnitId: string; scope: 1 | 2 | 3; category: string; // e.g. "stationary_combustion", "purchased_goods" quantity: number; unit: string; // "kWh", "litre", "km", "EUR" periodStart: string; periodEnd: string; source: { type: "invoice" | "meter" | "estimate"; ref?: string }; }; type EmissionFactor = { id: string; activityType: string; unit: string; kgCO2ePerUnit: number; region?: string; year: number; source: string; // e.g. "UK DESNZ 2026", "US EPA" gwpBasis: "AR5" | "AR6"; }; type Calculation = { activityId: string; factorId: string; kgCO2e: number; calculatedAt: string; method: "location" | "market" | "spend" | "activity"; };

The important part is that every calculation links to the exact activity and factor version used. Auditors will ask.

The calculation engine

  1. Normalise units. Litres vs gallons, kWh vs MWh, currencies and years for spend data.
  2. Match a factor. By activity type, region, year, and unit. Factor matching is where most bugs hide.
  3. Calculate and store results immutably.
  4. Aggregate by scope, category, site, and period.
  5. Recalculate when factors update, keeping the old results for comparison.

Emission factor sources

Common sources include the UK government conversion factors (published annually by DESNZ), the US EPA's emission factors hub, the IPCC, and the IEA for grid electricity (licensed). Spend-based Scope 3 often uses environmentally extended input-output (EEIO) models.

The hard parts

  • Scope 3 data. Supplier data is scarce, so most companies start with spend-based estimates. See Scope 3 Emissions Data: Why It's So Hard to Collect.
  • Location vs market-based Scope 2. Report both. Model energy contracts properly.
  • Double counting across categories and entities.
  • Restatements. When methods or factors change, past years may need recalculation.
  • Audit trails. Every number must be traceable to a source document.

Where this connects to regulation

EU rules like the CSRD push companies toward audited emissions reporting, which raises the bar for data quality and traceability. I wrote about the developer side in CSRD Data Pipelines in 2027.

Frequently asked questions

What is an emission factor?

A coefficient that converts an activity into emissions, for example kilograms of CO2-equivalent per kWh of electricity or per litre of diesel. Factors come from sources such as national governments, the IPCC, and the US EPA.

What are scopes 1, 2 and 3?

Under the GHG Protocol, Scope 1 covers direct emissions from owned sources, Scope 2 covers purchased electricity, heat and steam, and Scope 3 covers all other indirect emissions across the value chain.

What's the difference between location-based and market-based Scope 2?

Location-based uses the average emission intensity of the grid where electricity is consumed. Market-based reflects the electricity a company has chosen to buy, such as renewable energy contracts. The GHG Protocol asks companies to report both.

Contact

Get in Touch

Want to call me? book a call and I'll respond in the available time slot. I will ignore all soliciting.