The EU value-chain cap has been in force since 3 July 2026. It limits what large customers can ask suppliers for.See what applies to you →

Methodology

How a number is produced here, in enough detail that you could reproduce it by hand. Factor sourcing and what we are licensed to redistribute, version pinning, the resolver’s recorded deliberation, the data-quality tiers, and what an audit entry contains field by field.

Version 1.0 · last updated 2026-09-04

What we are licensed to redistribute, and what we are not.

Almost nobody publishes this. We do, because a factor you cannot legally cite is a factor your auditor cannot accept. Every source below, with the licence recorded against it in the seed registry.

SourceDatasetLicenceStatus
UK DEFRA / DESNZGHG Conversion FactorsOpen Government Licence v3.0redistributed
US EPAEmission Factors HubPublic domain (US Government work)redistributed
US EPAeGRIDPublic domain (US Government work)redistributed
ADEMEBase EmpreinteLicence Ouverte / Open Licence v2.0redistributed
UBAEmissionsfaktoren, THG-BilanzierungCC0 1.0 Universal (public domain dedication)redistributed
India CEACO₂ Baseline DatabaseGovernment Open Data Licence, India (NDSAP)redistributed
EmberYearly Electricity DataCC BY 4.0redistributed
Australia DCCEEWNational Greenhouse Accounts FactorsCC BY 4.0redistributed
NZ MfEMeasuring emissions: a guide for organisationsCC BY 4.0redistributed
IPCCEmission Factor Database, AR GWP valuesValues used as facts, cited per factorredistributed
USEEIOv2.0 spend-based supply-chain factorsPublic domain (US Government work)redistributed
GHG ProtocolCalculation ToolsFree for public use, silent on redistributionreference only
AIBEuropean Residual MixAll rights reserved, express written permission requirednot used
EXIOBASEMulti-regional spend factorsCC BY-SA 4.0pending review

Three entries above are not served, and the reasons matter more than the fact. The AIB European residual mix is not licensed to us, so market-based Scope 2 falls to a disclosed grid fallback rather than quietly using a figure we have no right to serve. EXIOBASE is under CC BY-SA, and until counsel has ruled on whether the ShareAlike terms permit serving derived factors, Category 1 for a European organisation stays on the disclosed United States proxy. The GHG Protocol calculation tools say “free for public use” and nothing about redistribution, which is exactly what serving a factor into your report is. The Protocol remains the method we follow; its default factors are already covered by DEFRA and EPA under licences that do say so.

The library also holds downloaded files from further publishers that have no parser and no registry entry. A dataset appears in this table only once a parser, a registry entry and a licence review all exist for it, because unloaded data on disk is not coverage.

What a factor carries here.

In most tools a factor is a number. Here it is a record with nine fields, and every figure calculated with it keeps a frozen copy, so a re-rendered report can never disagree with the filing it re-renders.

value · unitThe number and the dimension it converts, checked against the activity’s unit before use.
publisherThe organisation that published it, linked to its own page.
dataset · versionThe named dataset and its version string, with the publication date.
valid windowThe period the factor applies to. An out-of-period factor is recorded as a runner-up, never used silently.
licenceThe redistribution licence, printed on the report and in every export.
region pathA World.Europe.GB style path, so a subdivision code cannot resolve to the wrong country.
GWP basisAR4, AR5 or AR6, with per-gas masses stored natively wherever the publisher provides them.
data-quality tierMeasured, calculated or estimated, carried through to the board and the report.
resolver recordWhy this factor and not another: the decision, the region level used, the candidates considered, the runners-up, and the geographical penalty.

Version pinning

A filed figure reads the snapshot it was filed with. Updating the factor library does not change a filed report, and re-rendering a prior period returns that period’s number. A correction is an explicit, dated restatement that cites the version it replaces and leaves the previous version readable.

Which countries can be calculated today

Six with a national publisher: Australia, France, Germany, New Zealand, United Kingdom, United States. Ember grid factors resolve for 193 countries. Where a country’s own factors are not yet loaded, the completeness register marks the requirement unavailable and names the gap as ours rather than yours, and it stays in the denominator so the percentage does not flatter us.

What an audit entry contains.

Field by field, because “we have an audit trail” is a claim and this is a specification. The chain is per tenant, and you can verify it yourself from inside the product.

sequenceA per-tenant monotonic counter. A gap is detectable.
previous hashThe hash of the entry before it, which is what makes the chain tamper-evident.
actorWho caused the change: a user, a scheduled job, or a consented support session.
actionWhat happened, in the product’s own vocabulary rather than a database verb.
subjectThe record, report or grant the entry covers.
timestampUTC, written by the database rather than the application.

Filed reports are immutable at the database: update permission on the report table is revoked, and that revocation survived a full restore drill along with 59 row-level security policies and 394 grants. The chain survives a deploy: with fifty mutations in flight and the process killed mid-burst, exactly fifty audit rows were written and the chain remained valid across sixty-three records with no gap and no break.

How we checked our own numbers.

Against the publisher, not against ourselves. Each of these has actually run, and each reading is the one it produced.

8,683 / 8,683
DEFRA factors reconciled against DEFRA’s own published totals
Worst deviation 0.302%. Not five worked examples restating our own factor: the publisher’s own arithmetic, applied to the whole set.
41 · 1
GWP values re-transcribed by hand; one live error found and corrected
AR6 SF₆ had been carried as 25,200 where IPCC publishes 24,300. The check was worth running because it found something.
0 of 27,768
Requests failed with two tenants under simultaneous load
Tenant A p95 237.32 ms against tenant B 236.59 ms: 0.3% apart. Isolation is measured, not asserted.
50 / 50
Audit entries intact after the process was killed mid-write
Fifty mutations in flight, SIGTERM mid-burst, exactly fifty audit rows, chain valid across 63 records with no gap and no break.

Also checked

  • A full restore drill that brought back 43 forced tables, 59 policies, 394 grants and the deliberate REVOKE UPDATE on filed reports.
  • One million rows and 100 MB imported in 19 minutes 15 seconds, with every cap holding and announcing itself.
  • Zero open dependency advisories and zero suppressions: the allowlist is empty.
  • A route guard that found 34 unreachable API paths on its first run.

The external methodology review by an independent practitioner is scheduled and budgeted but has not yet happened. Until it has, we describe the output as ready rather than audited, and we would rather lose a deal on that sentence than win one without it.