90-day paid pilots now openWatch live product demo →

Multiple people contribute data.
One audit-ready ledger.

VantageHSG is built for teams, not for one sustainability analyst reconciling spreadsheets. This page covers the flow from operational records to defensible carbon numbers, and how to verify them.

Four steps from source record to ledger

01

Ingest from anywhere

Operations uploads mill test certificates. AP forwards fuel slips. Finance drops ERP spend exports. LIMS results and meter telemetry arrive through the API. Everything lands in one shared ledger.

02

Normalize and deduplicate

Units are converted to the base unit each emission factor is published in. Moisture is removed so tonnes are measured on a dry basis. Repeated purchase orders are removed before calculation.

03

Calculate from primary data

ECCC and IESO factors are stored with a version. Mass balance runs where process data is available. Spend-based estimates are labelled as estimates in every output.

04

Export audit-ready outputs

Scope 1, 2 and 3 reports carry a SHA-256 fingerprint, the audit trail behind each number, and exports for verifiers.

Drive the calculation yourself

Move the sliders to see how carbon in, carbon out and the emission factor set the tonnes of CO2e for a process run.

⚡ Live engine demo

Drive the pipeline

Move the sliders — every formula below recalculates instantly.

🔥 Natural gas bill
Consumption12,000 m3
⚡ Grid electricity (hydro bill)
Consumption120,000 kWh
🏭 EAF steel heat (lab assay)
Scrap charged100 t
Carbon additives (4.0% C)10 t
Graphite electrodes (99% C)6,000 kg
01

Ingestion & Verification

Bill OCR · Lab Assay Ingest → JSON schema

02

Factor Resolution

ECCC 2024 NIR · Provincial grid lookup

03

Calculation Engine

Stoichiometric mass balance · Scope 1 / 2 / 3

04

Audit Sealing

SHA-256 hash chain · provenance token

🧮 Live math — see how inputs become traceable tonnes

Formulas use the production engine factors (ECCC NIR · Ontario grid 2026 · stoichiometric 44/12).
STAGE 1 — INGESTION & VERIFICATION
OCR → JSON
bill scanned → {naturalGasVolume, kwh, assay rows} · confidence ≥ 0.85
3 docs
Unit normalize
GJ × 26.137 = m³
12,000 m³
STAGE 2 — FACTOR RESOLUTION
Natural gas
ECCC NIR · 1,930.8 g CO₂e/m³
NIR-2026
Ontario grid
ECCC NIR · 59 g CO₂e/kWh (2026)
pinned 2026
Electrodes
assayed carbon content 99% → stoichiometric
vetted
STAGE 3 — CALCULATION ENGINE
Scope 1 · gas
12,000 m³ × 1,930.8 g/m³ ÷ 1,000,000
23.17 t CO₂e
Scope 2 · grid
120,000 kWh × 59 g/kWh ÷ 1,000,000
7.08 t CO₂e
EAF · C in
100×0.15% + 10×4.0% + 6,000kg×99%
6.49 t C
EAF · C out
steel 101.2 t × 0.20% + slag 8.8 t × 0%
0.202 t C
EAF · emitted C
C in − C out
6.288 t C
EAF · process CO₂
6.288 t C × 44/12
23.05 t CO₂
EAF · energy CO₂
49,500 kWh × 0.030 kg/kWh ÷ 1,000
2.921 t CO₂e
EAF · intensity
total ÷ steel out
256.67 kg CO₂e/t
Scope 1
49.14
t CO₂e
Scope 2
7.08
t CO₂e
Certified total
56.22
t CO₂e
STAGE 4 — AUDIT SEALING
Provenance token
sha256(assay inputs) → 16 hex
0081757036574342
Report hash
sha256(canonical report JSON)
5756e60210acec0dcc…
prev: a1fc9bf4dda3d060…
hash: 5756e60210acec0dcc6c10d95941f2035b36331f4396c977f5ffd0606fa51e6c

Why you can trust the numbers

A carbon figure is only as useful as the record behind it. Each control below is enforced in the application or the database, and can be checked by a verifier.

Every report is fingerprinted

Each calculated report carries a SHA-256 hash of its contents. The hash is stored with the report and printed on the PDF, so a changed copy no longer matches.

Audit events are chained

Each audit event stores the hash of the event before it, starting from 64 zeros. The hash is computed on the server. The database rejects updates to audit rows, so an edit breaks the chain instead of passing unnoticed.

The chain can be checked

An anchored check compares the event count and head hash in constant time. A full check recomputes every hash, up to 5,000 events, and is run on demand by an administrator.

Calculations can be replayed

An administrator can recalculate any process run from its stored streams and compare the result with the original. A difference under 0.01% is marked verified. Anything larger is flagged as drifted.

How the math works, visually

Two short animations: the EAF carbon mass balance and the SHA-256 audit chain.

EAF carbon mass balance: carbon in against carbon out, stoichiometric 44/12.
SHA-256 audit chain: each event seals the hash of the event before it.

What you get in the product

Dashboard views of the same pipeline, not abstract diagrams.

VantageHSG dashboard showing Scope 1, 2, and 3 totals
Carbon ledger dashboard
VantageHSG shared upload inbox and document registry
Shared upload inbox
VantageHSG data checking and verification panel
Data checking & lineage

See the pipeline in motion

A London Hydro utility bill, extracted, calculated and sealed to the ledger.

Open the product demo →

Send data from your systems

The same ingestion path serves the product and the API. Each endpoint below accepts JSON and returns the stored result.

EndpointWhat it acceptsAuth
POST /api/v1/ingest/erpA non-empty transactions array in CAD. Produces an estimated Scope 3 result from spend.API key or session
POST /api/v1/ingest/telemetry1 to 500 readings per request. Consumption metrics with an intervalSeconds produce Scope 1 and Scope 2 emissions.API key or session
POST /api/v1/ingest/limsMeasured input and output samples with quantified carbon and moisture.API key or session
GET /api/v1/emissionsEmission rows filtered by scope and period, as JSON or CSV. Up to 1,000 rows per request.API key
GET /api/v1/reportsA page of reports (limit up to 100, offset), or one report with ?id=.API key
GET and POST /api/v1/keysList keys, or create one. The plaintext key is returned once, at creation.API key or session

Idempotent ingestion

Each ingest request carries an eventId. Resending the same payload returns the original result without writing again. Reusing an eventIdwith a different payload returns 409 EVENT_CONFLICT. If you omit it, the server generates one, so send a stable value for safe retries.

Authentication and keys

Send the key as Authorization: Bearer <key>. Keys start with vh_live_, and only their SHA-256 hash is stored. Keys can carry an expiry. A missing, unknown or expired key returns 401.

Limits and errors

Request bodies are capped at 1 MiB and return 413 above that. Emissions and report reads allow 60 requests per minute per key. Over the limit, the response is 429 with X-RateLimit-* headers and Retry-After. Validation errors return 400 with a message naming the field.

curl -X POST "$BASE_URL/api/v1/ingest/telemetry" \
  -H "Authorization: Bearer $VANTAGEHSG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "facilityId": "hamilton-plant",
    "eventId": "2026-03-31T23:00Z-eaf-1",
    "observedAt": "2026-03-31T23:00:00Z",
    "intervalSeconds": 3600,
    "readings": [{
      "machineId": "eaf-1",
      "machineName": "EAF 1",
      "metric": "electricity_consumed",
      "unit": "kWh",
      "value": 1250
    }]
  }'

Ready to prove it on your data?

Watch the demo, request a sample report from one document, or start a paid pilot.

Request sample reportStart paid pilot