carbonbench

Methodology

Download the Methodology PDF (print edition, September 29, 2026) About the PDF. The PDF is a print edition of this Methodology page as it stood on September 29, 2026; this page remains the current reference. It replaces the July 14, 2026 v1.1 PDF, which listed five Transparency Score components weighted 30/15/20/15/20. The live system uses six, weighted 27/13/18/14/18/10 — a value-chain component was added in v0.2 and the others were rescaled — so anyone holding the earlier PDF should cite the live weights, not the PDF weights. The live parameter table is the file at /config/tablo_v1.json — its _version field is authoritative and the version in force is declared in every record's API response. If this page and the PDF ever differ, cite this page (with the date you accessed it) and the version shown in the record's API response.

← Back to universe

Core principle

Blockchain does not make data true; it freezes verified data. The accuracy claim is carried by source citation and the verification pipeline; the integrity claim by cryptography (Principle I3). The protocol does not prove that a record is true — it proves that the record went through a specific verification process and has not changed since.

Data pipeline

Overall Score (0–100) — v1, since October 2026

One number at the top of every profile, a weighted mean of the four published scores: Accuracy Estimate 40 · Transparency Score 30 · Target Quality 20 · Strategy/Risk Maturity Score 10 (weights in config/scoring.json → overall). A component that cannot be measured for a record — an Accuracy Estimate that is "not assessable", an SRMS reading that does not exist yet — is left out of the denominator and the mean is taken over the remaining weights; a Target Quality of 0 (no target disclosed) is a measurement and stays in. An Overall Score is published only when the record has an Accuracy Estimate — the platform is an accuracy layer, and a headline number without its anchor component would overstate what was measured. When less than half of the weights can be measured, no Overall Score is published either. A data line that has never extracted the target field (none of its records carry a target) contributes no Target component: an unread field is excluded, a read-but-empty field is a genuine zero. Why the Overall may exclude a component while the scores themselves never rescale: a missing SRMS reading or a registry record's unread target field is our coverage gap, not the company's disclosure failure — so it leaves the mean entirely; inside a score, an unmeasured component keeps its weight so that missing evidence can never raise the number. The components and their inclusion are printed next to the number, so the reader always sees which four, three or two scores it rests on.

Transparency Score (0–100) — current version: v0.2

ComponentWeightCriterion
EF transparency27Whether EF values are numerically disclosed in the report (full/partial/none)
GWP recency13AR6 full, AR5 partial, AR4/unclear low
Methodology18Whether EF sources (DEFRA/IPCC/national) are referenced
Internal consistency14Automated check results
Scope 3 disclosure18Category count + total disclosure (cross-sourced in v2)
Value chain disclosure10Supplier/value chain program and breakdown disclosure level (added in v0.2)

Two views of the same score (since 2026-10). The six components are also published in two groups, each on its own 100-point scale: Scope 1+2 Transparency (EF transparency, GWP recency, methodology, internal consistency — 72 of the combined points) and Scope 3 Transparency (Scope 3 disclosure, value chain disclosure — 28 points). The combined score does not change; the split (scores.transparency_scope, grouping in config/scoring.json → transparency_scope_split) exists because Scope 3 factor error margins are wider by nature and publishing Scope 3 should never read as a penalty on the Scope 1+2 reading. A component that could not be measured earns nothing but keeps its weight in the group's denominator; a group with fewer than half of its points measurable publishes no group score.

The formula lives in config/scoring.json, not hardcoded in the code; every change is versioned (Methodology Board principle, spec 7.1), the live version is declared in every record's API response, and the breakdown appears component by component (scores.transparency_breakdown). Next to every score there is a "why" panel — there is no black box. The full formula of the Accuracy Estimate (σ_T spread, evidence classes, the q̂/b̂/λ_t substitution table, cap rules) is in config/tablo_v1.json — and you can check it yourself against a live record in Reproduce a score yourself below.

Reproduce a score yourself — pen and paper

Every scored record's API response (/api/record/<record_id>.json) publishes its intermediate quantities in the accuracy block records.dogruluk: .sigma_T (σ_T, combined spread), .delta2 (Δ², reducible uncertainty), .qhat (q̂, flag rate), .bhat (b̂, corrected systematic bias), .skor (the score), .bant_alt / .bant_ust (band low / high), .beyan_toplam (disclosed total) and .tablo (the frozen parameter-table version it was scored with). The constants are in config/tablo_v1.json under the key sabitler (constants): k₁=33.3, k₂=2.0 · q_kaba.gamma (gross-error weight γ)=2.0 · λ_t=1.0. Two formulas close the loop:

Accuracy Estimate  S = max(0, 100·e^(−k₁·Δ² − k₂·|b̂|) − 100·γ·q̂)   (CB-P 9.4.1)
Plausibility band   E·e^(±1.96·λ_t·σ_T)   (CB-P 9.5.1)

Worked example — Ford Otosan 2025 (record ford_otomotiv_sanayi_a_s_2025_v1). The record publishes Δ² = 0.00369, q̂ = 0.0407, b̂ = 0, σ_T = 0.0646, E = 364,378 tCO₂e:

100·e^(−33.3 × 0.00369) = 88.44
88.44 − 100 × 2.0 × 0.0407 = 88.44 − 8.14 = 80.30 → the published score.
Band: 364,378 · e^(∓1.96 × 0.0646) ≈ 321,043 – 413,562 tCO₂e → matches the published 321,050 – 413,553 to within ±0.01% (the record publishes σ_T rounded to four digits).

curl -s https://carbonbench.org/api/record/ford_otomotiv_sanayi_a_s_2025_v1.json | jq '.records.dogruluk'

What this does and does not prove: given the published intermediates, the final score reproduces to ±0.1 with a calculator — no access to our code required. Deriving Δ², q̂ and σ_T themselves from the raw report takes the evidence-ladder and σ dictionaries in the same config file — keys kanit_merdiveni_U (evidence ladder), ef_sigma_sozlugu (emission-factor uncertainty dictionary) and korelasyon (correlation) — plus the Fenton–Wilkinson combination in CB-P 9.2.1: fully specified, but a spreadsheet job rather than a two-line one. If your recomputation of a record does not match, that is a finding, not a nuisance: report it via Support and it enters the public error matrix.

Target Quality — one combined score and three per-scope scores

The combined Target Quality (v2: has target 25 · base and target year 20 · scope coverage 20 · SBTi 20 · pace 15; simplified ITR = 3.0 − (r / 4.2) · 1.5) is unchanged. Since 2026-10 each profile also publishes three separate 100-point target scores for Scope 1, Scope 2 and Scope 3 (scores.target_quality_scope, weights in config/scoring.json → target_quality_scope). A scope with no stated target shows "no target stated" — never a zero. The scope of each target is read from its wording by a published rule set (scores.target_scopes), and by the structured reading pass where it exists.

ComponentScope 1Scope 2Scope 3
Target disclosure252525
Base + target year202020
Replaces "scope coverage"Target clarity 20: absolute/intensity stated (10) · Scope 1 base-year emissions disclosed (10)Target clarity 20: absolute/intensity and the location/market method stated (10) · Scope 2 base-year emissions disclosed (10)Category coverage 20: covered categories ≥ 67 % of Scope 3 → 20; less, pro rata; categories named but share not computable → 10
SBTi20 if the validated target covers Scope 120 if it covers Scope 220 only if the Scope 3 target itself carries a science-based claim
Pace15 — 4.2 %/yr pathway15 — 4.2 %/yr15 — 2.5 %/yr (SBTi Scope 3 minimum ambition)

Why Scope 1 and Scope 2 are scored apart: a Scope 2 target is easier to deliver (procurement, certificates) than a Scope 1 target (process and fuel). A combined "Scope 1+2" target is written to both scopes, but unless the report discloses separate base-year emissions per scope the clarity component is capped — so a company that sets separate targets stays ahead. Clarity and category coverage can only be measured from the structured reading pass; until a report has been read that way the component earns nothing but keeps its weight in the denominator — the profile reports it as "scored over 80 of 100 points" — rather than being silently rescaled (the platform's no-rescaling rule: missing evidence must never raise a score). Protocol text: Change Package No. 2, section E (Panel 4).

Strategy / Risk Maturity Score (SRMS) v1.0 — the risk → metric → target chain

IFRS S2 and TSRS 2 describe one flow: identify the climate-related risk, define a metric for it, measure it, set a target on the metric, report progress. SRMS measures how completely and verifiably a report builds that chain — it measures disclosure maturity; it does not measure the size of the risk or how well the company manages it (the sentence appears under every SRMS score). It replaces the Strategy Score v0.1 pilot. Formula and constants: config/strateji_v1.json; protocol: Change Package No. 2 (seven-member AI panel, 23 recorded votes).

Per riskPoints (cumulative chain)Evidence required (verbatim quote + page)
L1 · Named10The risk and its channel (physical / transition) are stated as a climate risk
L2 · Metric defined25A measurable quantity with a unit, linked to the risk (published compatibility matrix of risk sub-type × metric family)
L3 · Measured45≥ 1 numeric value for a year ≤ the reporting year; a future-year number is a target, never a measurement ("target leakage" flag)
L4 · Target-linked60Numeric target with a target year and a base year or base value on the same metric
L5 · Progress reported70Progress against the target reported or computable
Side dimensions+30Assessment per risk — time horizon, likelihood, impact (5 each; halved when every risk carries the identical wording) · time series (10) · governance of the target (5)

SRMS = C × (0.85 · D + 0.15 · Sen)
D = Z · mean(s) + (1 − Z) · min(mean(s), 20),  Z = min(1, n / 4)
C = 1.00 when both the physical and the transition channel are covered (a risk, or a reasoned exclusion); 0.85 when one is silent
Sen = scenario level: S0 none/one scenario · S1 25 low and high warming families · S2 50 horizon year + a numeric parameter · S3 75 linked to a risk · S4 100 quantified financial outcome

Credibility (Z) pulls the mean down only: a company that names one risk and measures it perfectly scores 41.7, not 92; naming four risks and building the full chain on each can reach 100. The weakest risk is shown on the profile but does not enter the score. Independent evaluation protocol: every point-earning quote must be found word for word in the report text (otherwise the item earns nothing and is queued for a second reading); the number of risks is reconciled against the main reading; the pilot of 50 reports is read twice by two different models and an item is published only when inter-reader agreement reaches κ ≥ 0.75 (κ ≥ 0.80 on the maturity step); a company's appeal may bring a page and a quote, nothing else.

Pilot status (October 2026). The 50-report pilot was read by Claude Opus 5.5 (primary) and Claude Haiku (second reader). Quote verification is against the report text, whichever reader produced the quote (a Founder amendment of 2026-10-08); agreement is measured with Cohen's κ and, because several items are rare, with the prevalence-adjusted PABAK. Eight of ten items pass the κ-or-PABAK ≥ 0.75 gate (the per-risk time-horizon and impact items do not and are not scored); the whole-step agreement is κ 0.63 against a 0.80 target and the median risk-count difference between readers is 2 against a target of 1. SRMS is therefore published with a visible pilot label on every profile, together with these numbers, while the reading prompt and the scenario dictionary are improved; the full agreement study is in the Change Package record.

ItemκPABAKPublished
Named (A)1.001.00yes
Time horizon0.620.63no
Likelihood0.690.77yes
Impact0.630.68no
Metric defined (M)0.500.78yes
Measured (O)0.700.91yes
Time series (S)0.670.99yes
Target (H)0.210.96yes
Progress (I)0.330.97yes
Governance (Y)0.280.97yes

Comparison — three layers

  1. Global intensity percentile: tCO₂e / million $ revenue, across the whole universe. The question: "how much emission per $1 I spend?" It is sector-independent — heavy industry naturally scores low here; this is a deliberate design choice.
  2. Within-sector percentile: The same intensity metric, but only within the sector group (a fair comparison). A minimum universe of 5 companies is required — below that, no score is produced.
  3. Scope 1+2 and Scope 3 side by side (since 2026-10): both positions are published for three denominators — absolute tCO₂e, per million $ revenue and per employee — once for Scope 1+2 and once for the company's own Scope 3 total (scores.*_s3_*). Scope 3 universe: companies that disclose a Scope 3 total; category coverage differs between companies, so the profile states how many categories were disclosed. Context only, never part of a score.
  4. External benchmark context — two sources: (a) EXIOBASE 3.8.2 (ExioML) — Türkiye 2022 sector intensities, kg CO₂e / € value added, VA-weighted (country-specific: a like-for-like context only for companies in Türkiye); (b) EPA USEEIO v1.3 — cradle-to-gate supply-chain intensity, kg CO₂e / 2022 USD (secondary context). Caution: the EXIOBASE denominator is value added (not revenue) while EPA includes the supply chain — definitional differences from the company's own S1+2 intensity are disclosed explicitly; benchmarks never enter the score. The Benchmark Explorer shows two EXIOBASE denominators — per € of gross output (country comparison) and per € of value added (trend); they are not interchangeable.

Revenue is held in million USD. Financials in Turkish lira (TRY) taken from KAP are converted with annual average TCMB/ECB rates (config/fx.json). Records without revenue data fall back to the absolute S1+2 percentile and are marked with * — no fake score is produced.

Official-registry records

About two thirds of the universe are sealed extracts of regulator data (EPA GHGRP, Canada ECCC GHGRP, EU MRV, UK ETS, Australia NGER, Japan EEGS, Korea GIR), not company reports. Each program covers only part of a company: facilities above a threshold, in one jurisdiction, for the scopes the program defines (for example UK ETS: Scope 1 within the scheme boundary; NGER: Scope 1 + Scope 2; Korea GIR: one combined direct + indirect total). The registry value is therefore a lower bound of the company's total, and each profile states the program's boundary. Registry records carry no emission-factor disclosure; their evidence is the regulatory filing itself.

Threat model — what we defend against, what we do not

Deep documentation

Methodology changes — October 2026

Limitations (v0.2 honesty statement)