Technical

How EmitCI estimates energy from CI pipeline metadata

A

Anand Srinivasan

6 Jun 2026 · 8 min read

GitHub does not expose CPU utilization data. So how does EmitCI know how much energy your workflow used?

The model

EmitCI uses an adaptation of the GreenAlgorithms v2.2 methodology. The core formula is: energy_kwh = (min_watts + utilization × (TDP − min_watts)) × duration_hours × PUE / 1000. TDP is the rated maximum power draw of the CPU. min_watts is the idle power floor (30% of TDP). Utilization is estimated from workflow type and step names. PUE accounts for datacenter overhead.

Runner TDP database

We maintain TDP values for every runner label GitHub exposes. ubuntu-latest maps to Azure DS2_v2, Intel Xeon. macos-14 maps to Apple M1, 10W TDP at peak. For new runner types we update within 48 hours.

Estimating utilization

Compile steps (cargo build, go build) run at 90% utilization. Test steps (pytest, jest) at 80%. Lint/check steps at 50%. Network-heavy steps (docker pull, npm install) at 30%. Setup steps at 20%. We over-estimate rather than under-estimate , the conservative choice for ESG reporting.

Carbon intensity

We multiply energy by the carbon intensity of the grid region where the runner runs, using Electricity Maps API data averaged over the day.

Accuracy

Our estimates are within ±30% of measured values in lab testing. All methodology parameters are open and documented.

Get started free

Start measuring your CI carbon today

Connect your GitHub account in 2 minutes. Per-workflow carbon and cost estimates appear within 24 hours. No code changes required.

Install GitHub App — free for 14 days