Anatomy of a Traceable Carbon Number
This page takes one emission factor apart. Not a made-up one: the UK grid electricity factor, 0.13096 kg CO2e per kWh, the number behind every UK Scope 2 line this year. It follows that figure through six links — a cell in a government spreadsheet, a data row, an API response, a version, a receipt, and the line in your report — and at every link shows the artefact a stranger could use to check it. Nothing here is a claim about being trustworthy. It is the chain itself, laid out.
A carbon number is traceable when each link between the publisher’s cell and your report can be checked without asking anyone. For the UK grid factor that means: the DESNZ workbook, sheet UK electricity, cell E25; a data row that keeps the cell reference, the boundary, the GWP set and the three gas components that sum to the total; an API response that returns all of that with a licence flag and a citation string; a data version you can pin; a SHA-256 receipt you can recompute; and a permalink that shows the value as it stood at the version you cited. Every one of those six is shown below, live.
The chain in one view
Six links, each with one artefact and one question a reader can ask of it. If any link is missing, the number is still a number. It is just no longer traceable past that point.
1. The cell
Sheet UK electricity, cell E25 of the DESNZ 2026 workbook. Retrieved 18 June 2026. Ask: can I open the publisher’s file and see this value at this address?
2. The row
One canonical key carrying the value, its unit, its boundary, its GWP set and three gas components that add up to it. Ask: does the data layer keep everything the cell knew, and does the arithmetic hold?
3. The response
The same row, served with publisher, licence, cell reference, a verification block and a ready-made citation. Ask: does the API hand me the evidence, or only the number?
4. The version
A data version stamped on every response, and an archive you can pin to. Ask: if I re-run this in eighteen months, do I get the figure I cited?
5. The receipt
A SHA-256 over the response, recomputable by anyone from the response alone. Ask: has this been altered since it was served?
6. The report line
A citation string and a permalink that resolves to the value at the version. Ask: could a stranger, with only this line, arrive at the same number?
Link 1 · The cell
The number starts in a spreadsheet. The Department for Energy Security and Net Zero publishes the UK Government GHG Conversion Factors every June as an Excel workbook, and the location-based grid factor sits on the sheet named UK electricity, in row 25. Column E holds the total; columns F, G and H hold the CO₂, CH₂ and N₂O contributions that make it up.
| Cell | What it holds | Value (kg CO₂e per kWh) |
|---|---|---|
E25 |
Total, all gases, AR5 100-year GWPs | 0.13096 |
F25 |
CO₂ component | 0.12943 |
G25 |
CH₂ component, expressed as CO₂e | 0.00067 |
H25 |
N₂O component, expressed as CO₂e | 0.00086 |
Three things about this link are easy to skip and expensive to skip. The file is licensed under the Open Government Licence v3.0, which is why the value can be republished here with attribution and why the API can hand it to you without a licence review. The date of retrieval matters, because DESNZ revised the 2026 workbook after first publication and a citation without a date cannot say which file it saw. And the cell address is the fragile part: it is the one field a publisher can silently move.
When the 2026 workbook was ingested on 18 June 2026, the cell reference for this row was carried over as E26 from an earlier layout and had to be corrected to E25. The value was already right; the address was off by one. That correction is recorded in the data layer’s own change log for that release, which is the point: a cell reference is only evidence if somebody re-finds the cell each year rather than trusting last year’s address.
Link 2 · The row
The cell becomes a row in the GreenCalculus data layer under one canonical key, grid.gbr.electricity.location_based. A good row keeps everything the cell knew and adds what the cell could not say about itself.
| Field | Value | Why a reader needs it |
|---|---|---|
| Value and unit | 0.13096 kg CO2e per kWh | The number itself, read live from the data layer — not typed into this page. |
| Boundary | direct combustion at the generator; generation basis — transmission and distribution losses EXCLUDED; upstream fuel supply carried by grid.gbr.electricity.wtt_generation | The most common reason two “UK grid factors” disagree is that one includes losses or upstream fuel and the other does not. |
| GWP set | AR5_100 | The CH₂ and N₂O contributions depend on which IPCC assessment weighted them. AR5 here, per DESNZ. |
| GHG Protocol scope | Scope 2, purchased electricity | Says which line of an inventory this belongs on, and that it is a reporting instrument rather than a lifecycle metric. |
| Source and cell | DEFRA_2026 · 'UK electricity'!E25 · retrieved 2026-06-18 |
Link 1, kept. |
| Components | CO₂ 0.12943 · CH₂ 0.00067 · N₂O 0.00086, each with its own cell | They sum to 0.13096. A row whose parts do not add to its total has a transcription error somewhere, and the API checks this on every read. |
| Publisher note | UK publishes a single location-based factor. No separate market-based residual mix in DESNZ. | What the publisher did not provide is as citable as what it did. |
The row also carries one derived field: the same factor restated on AR6 100-year GWPs, computed from the three components with methane scaled by 29.8/28 and nitrous oxide by 273/265. That arithmetic gives 0.13103, and the row now says 0.13103.
Until data version 2026.188, that AR6 field read 0.177 — the 2025 headline value, left in place when the June refresh rewrote the factor and its components but not the derived alternate. It was found by scanning every AR6 alternate in the corpus against its AR5 headline while this page was being drafted, and fixed in the release that shipped alongside it. A traceable number is not one that has never been wrong. It is one where a wrong field is findable, and the fix is on the record.
Link 3 · The response
The row is what the API serves. The open browse route needs no account, so this command runs as pasted:
curl "https://api.greencalculus.com/v1/factors?key_prefix=grid.gbr.electricity.location_based&limit=1"
The single-factor route returns the full audit envelope and needs a free key:
curl https://api.greencalculus.com/v1/factors/grid.gbr.electricity.location_based \
-H "Authorization: Bearer YOUR_KEY"
Trimmed to the blocks that matter for traceability, the response looks like this. Every field below is real output at data version 2026.187; only the rest of the envelope has been cut for length.
{
"factor": {
"key": "grid.gbr.electricity.location_based",
"factor": { "value": 0.13096, "unit": "kg CO2e per kWh", "gas": "CO2e", "gwp_set": "AR5_100" },
"source": { "id": "DEFRA_2026", "cell_ref": "'UK electricity'!E25", "retrieved": "2026-06-18" },
"components": {
"co2": { "value": 0.12943, "cell_ref": "'UK electricity'!F25" },
"ch4": { "value": 0.00067, "cell_ref": "'UK electricity'!G25" },
"n2o": { "value": 0.00086, "cell_ref": "'UK electricity'!H25" }
},
"citation": {
"text": "UK grid electricity — location-based (generation). UK Government GHG Conversion Factors 2026 — Department for Energy Security and Net Zero (DESNZ), cell 'UK electricity'!E25, retrieved 2026-06-18. via GreenCalculus data version 2026.187, factor grid.gbr.electricity.location_based. https://verify.greencalculus.com/grid.gbr.electricity.location_based@2026.187",
"version": "2026.187",
"proof_url": "https://verify.greencalculus.com/grid.gbr.electricity.location_based@2026.187"
}
},
"provenance": {
"publisher": "Department for Energy Security and Net Zero (DESNZ)",
"licence": "Open Government Licence v3.0",
"redistributable": true,
"update_cadence": "annual (June)"
},
"verification": {
"components_sum_to_value": true,
"gwp_set": "AR5_100",
"source_note": "UK publishes a single location-based factor. No separate market-based residual mix in DESNZ."
},
"meta": { "gc_version": "2026.187", "gc_updated": "2026-09-09", "count": 16673 }
}
| Block | What you can do with it |
|---|---|
source and components |
Open the DESNZ workbook and check four cells. Link 1, in the payload. |
provenance.licence and redistributable |
Decide whether the value may appear in your own product or dataset without a separate licence read. |
verification.components_sum_to_value |
Know the row was checked against itself on this read, not once at ingestion. |
citation.text |
Paste the citation. It already carries the five fields a citation needs — see how to cite an emission factor. |
citation.proof_url |
Hand a reviewer a link that shows this value at this version. Link 6. |
meta.gc_version |
Pin. Link 4. |
The same envelope comes back through every surface, not only curl: the Python and JavaScript SDKs, the Google Sheets add-on, which prints citation.text beside the value, and the MCP server, where an AI agent that looks up this factor receives the source cell and the licence with it.
Link 4 · The version
Every response names the data version that answered it. At the time of writing that was 2026.187, a corpus of 16,673 factors. A version is what turns “the UK grid factor” into a specific, recoverable number, because the factor moves: the 2025 edition said 0.177, the 2026 edition says 0.13096, a fall of 26% that reprices every UK Scope 2 line. The full DEFRA diff lists that change beside 584 others.
Pinning is one query parameter. Ask for a version and the response says whether it matched:
curl "https://api.greencalculus.com/v1/factors/grid.bel.electricity.location_based?as_of=2026.150" \
-H "Authorization: Bearer YOUR_KEY"
That example is chosen deliberately. Today, grid.bel.electricity.location_based does not exist: the key was withdrawn at version 2026.176 because the value under it was a lifecycle intensity from Ember serving under a GHG Protocol Scope 2 name, which is the wrong instrument for a Scope 2 line. Pinned to 2026.150 it still answers — 0.14982, source Ember, version_pin.matched: true — and pinned to 2026.175 it answers 0.12728, the corrected value that shipped one release before the withdrawal. A report that cited either figure at its version can still be reproduced, and the reproduction tells you exactly why the number is no longer the right one to use.
The reproducibility archive begins at version 2026.111, published 10 August 2026. The UK grid factor’s move from 0.177 to 0.13096 happened on 18 June, before the floor, so it cannot be pinned through ?as_of=. Ask for a version below the floor and the API returns the current figure with version_pin.matched: false and the list of versions it does hold, rather than a silent substitute. The June change is documented instead in the data layer’s git history and on the DEFRA diff page. Every release from 10 August onward is pinnable, and the archive deepens with each one.
For the versions a key has passed through, there is a history route, /v1/factors/{key}/history, resolved by the same read that answers ?as_of= so the two cannot disagree. The practice of pinning in production, and what to do when a pinned factor is superseded, is the subject of emission factor version control.
Link 5 · The receipt
Calculation responses, and several lookup routes, carry a receipt block: a SHA-256 over the response, with the recipe stated inside it. Remove the receipt and attribution keys, sort every object’s keys recursively, serialise to compact JSON, hash. The result equals receipt.id with its gcr_ prefix stripped.
"receipt": {
"id": "gcr_ed76499940e3eb1a1fc8301171b72e6bbee403a7301af0cc8b803cdc9a6ab543",
"algorithm": "sha256",
"mb_version": "2026.187",
"verify": "Recompute sha256 over this response with the \"receipt\" and \"attribution\" keys removed and all object keys sorted recursively; it must equal this id (minus the gcr_ prefix)."
}
A receipt proves one narrow thing, and it is worth being precise about it. It proves that the response you hold is byte-for-byte what was served at that data version. It does not prove DESNZ was right, or that you chose the correct factor. It closes the gap between “the API said” and “here is what the API said”, which is the gap an assurer asks about.
You do not have to take the recipe on trust. The panel below fetches a keyless, receipted response from the API, recomputes the hash in your browser, and compares. The recipe was also reproduced in Python and Node.js before this page was published.
Fetches /v1/absence?country=nld&family=market (no key needed), then recomputes its receipt from the response alone.
Waiting.
If you would rather do it by hand, the same three lines in Python:
import json, hashlib, urllib.request
r = json.load(urllib.request.urlopen(urllib.request.Request(
"https://api.greencalculus.com/v1/absence?country=nld&family=market",
headers={"User-Agent": "receipt-check"})))
rid = r.pop("receipt")["id"]; r.pop("attribution", None)
print(hashlib.sha256(json.dumps(r, sort_keys=True, separators=(",", ":"),
ensure_ascii=False).encode()).hexdigest() == rid.replace("gcr_", ""))
Link 6 · The report line
The last link is the one that leaves your system. The response already wrote it:
UK grid electricity — location-based (generation). UK Government GHG Conversion
Factors 2026 — Department for Energy Security and Net Zero (DESNZ), cell
'UK electricity'!E25, retrieved 2026-06-18. via GreenCalculus data version
2026.187, factor grid.gbr.electricity.location_based.
https://verify.greencalculus.com/grid.gbr.electricity.location_based@2026.187
Read it against the five fields of a reproducible citation: the value and unit are on the verify page it links to, the publisher and dataset are named, the location inside the dataset is a cell, the edition is a data version, and the retrieval date is stated. The permalink is the sixth field, the one that turns the other five from claims into something checkable in one click. It is generated from the same data the API returns, it needs no account, and it says whether the version you cited is still current.
| The question | The link | The artefact |
|---|---|---|
| Where did this factor come from? | 1 and 3 | Publisher, dataset, sheet and cell, in the response |
| What does it include and exclude? | 2 | The boundary text and the GWP set on the row |
| Is it the number you used at the time? | 4 | The data version, pinnable from 10 August 2026 |
| Has the evidence been altered? | 5 | The receipt, recomputable from the response |
| Can I check it without you? | 6 | The verify permalink, no account required |
What the chain does not do
It does not make the publisher right. Every link above is about fidelity to DESNZ, not about whether DESNZ’s 0.13096 is the best estimate of the UK grid in 2026. That is a question for DESNZ’s methodology paper.
It does not pick your instrument for you. The UK has more than one traceable grid number, and each is right for a different line. The location-based generation factor above is the Scope 2 figure. A well-to-tank companion, 0.03682 kg CO2e per kWh, covers the upstream fuel supply for the same generation and belongs in Scope 3. The full-lifecycle intensity from Ember, 0.21741 kg CO2e per kWh, counts plant construction and the fuel chain and asserts no GHG Protocol scope at all. And although DESNZ publishes no market-based figure, the Association of Issuing Bodies does: a residual mix for Great Britain of 0.28064 kg CO2 per kWh, which is the market-based fallback when you hold no contractual instrument. Each of these four has its own cell, source and version; why emission factors disagree is the guide to choosing between them.
It does not reach back before the archive. Versions before 2026.111 are in the data layer’s git history, which is public, but they are not served through ?as_of=. That is stated on the API rather than papered over, and the boundary moves forward with every release.
And it does not need our name on it. Every link here is a property a data source can have: a kept cell reference, components that sum, a licence flag, a version, a hash, a permalink. If you are evaluating sources, how to evaluate a carbon data API turns these six into tests you can run against any vendor in ten minutes, including this one.
And if you are reading this before an assurance engagement rather than before a purchase, the chain above is the answer to what a verifier asks; the assurance readiness checker is the question. It scores whether you can name your factors, retain their evidence and rebuild a prior year, against the assurance level your obligation actually carries.
Frequently asked questions
That a stranger can follow it from your report back to the publisher’s own document without asking you anything. In practice that needs six things kept together: the publisher and dataset, the exact location inside it, the boundary and GWP set, the edition or data version, the date retrieved, and a way to confirm the value has not changed in transit. This page shows each of those for one real factor.
Because they let the total check itself. CO₂ 0.12943 plus CH₂ 0.00067 plus N₂O 0.00086 equals 0.13096, and the API confirms that sum on every read. A transcription error in any one cell would break it. The components also make it possible to restate the factor on a different GWP set, which is how the AR6 alternate is derived.
Not through ?as_of=. The reproducibility archive starts at version 2026.111, published on 10 August 2026, and the June 2026 refresh that replaced 0.177 with 0.13096 predates it. Asking for an earlier version returns the current figure with version_pin.matched: false and the list of versions held, so nothing is substituted silently. The change itself is documented on the DEFRA diff page and in the data layer’s public git history.
That the response you hold is exactly what was served at the stated data version. Anyone can recompute it from the response alone, with no key and no call to us. It does not prove the publisher’s value is correct or that you chose the right factor for your line; it proves the evidence has not been edited between the API and your file.
Both, because they come from different publishers. DESNZ publishes a single location-based factor and no market-based figure, and the row’s note records that. The Association of Issuing Bodies publishes European residual mixes, including one for Great Britain, and that value is held under its own key with its own source and cell. A traceable corpus keeps the two apart rather than blending them.
Every canonical row carries a source id and a cell or table reference, a boundary, a GWP set where one applies, and a version; every response carries the citation and the verify permalink; every release from 10 August 2026 is pinnable. Components are present where the publisher publishes them, which DESNZ does for the UK grid and many publishers do not. Where a publisher supplies less, the response says so rather than filling the gap.