Website Carbon

App · Analytics · 6 actions

Estimate the carbon emissions of web pages with Website Carbon's keyless API, from Wholegrain Digital (the service behind websitecarbon.com). Turn a page's weight and its hosting into the CO2e a visit costs, its Digital Carbon Rating from A+ to F, and the yearly footprint at real traffic; compare pages against each other, weigh up green hosting, size up a file download or a month of CDN traffic, and fail a build when a page goes over its carbon budget. No account or API key required.

Actions

ActionWhat it does
Check carbon budgetTest a page against a carbon budget, a minimum Digital Carbon Rating, or both, and get a plain pass or fail to branch on, for a build step, a release check, or a scheduled audit that should raise an alert when a page gets heavier.
Compare hosting optionsPrice the same page on green hosting and on ordinary grid-powered hosting, and get both sides in full (emissions, rating and percentile for each) plus what switching would save per visit and, if you give the traffic, per year.
Compare pagesRank several pages by emissions, heaviest first, with each page's share of the total, to find which templates on a site are worth optimising, or to weigh a page against a competitor's. Give each page as the number of bytes it transfers; a URL will not do, because this API estimates from a page's weight rather than visiting it.
Estimate annual emissionsProject a page's emissions across real traffic: give the page weight and how many times it is viewed in a month, and get the monthly and yearly totals in grams, kilograms and tonnes of CO2e, plus the volume of CO2 that represents and what green hosting would have saved over the year.
Estimate data transfer emissionsEstimate the emissions of moving data that is not a page: a file people download, a video stream, an email attachment, or a month of CDN traffic.
Estimate page emissionsEstimate the carbon emissions of a single page load from the page's weight in bytes and whether it is on green hosting.

Check carbon budget

Test a page against a carbon budget, a minimum Digital Carbon Rating, or both, and get a plain pass or fail to branch on, for a build step, a release check, or a scheduled audit that should raise an alert when a page gets heavier. Set at least one of the two: with neither filled in there is nothing to check. When a gram budget is set, the result also says what page weight would meet it and how many bytes the page is over.

Inputs

Page weight (bytes)bytesnumberRequired
How many bytes the page transfers when it loads. Take this from a browser's network panel, a Lighthouse or PageSpeed report, or a CDN log; 1 MB is 1,000,000 bytes.From 1 to 1000000000000000.
Green hostinggreentrue/falseRequired
Whether the page is served from a host running on renewable energy. Green hosting cuts the emissions of the same page by roughly a fifth, so set it deliberately; the Green Web Foundation's checker at thegreenwebfoundation.org/green-web-check will tell you which a domain is. Leave it off if you don't know.Default: false.
Budget (grams of CO2e per visit)max_grams_per_viewnumber
The most CO2e a single visit may cost, in grams. Around 0.5 g is a typical page; 0.1 g is a demanding target. Leave empty to check the rating only.At least 0.
Minimum ratingmin_ratingtext
The worst Digital Carbon Rating the page may have and still pass, where A+ is the cleanest and F the heaviest. Leave empty to check the gram budget only.One of: A+, A, B, C, D, E, F.

Outputs

bytesnumber
checksobject
cleaner_thannumber
cleaner_than_percentnumber
grams_co2enumber
green_hostingtrue/false
kilobytesnumber
kilograms_co2e_per_1000_viewsnumber
megabytesnumber
ratingtext
rating_descriptiontext
statisticsobject
statistics_modeltext
within_budgettrue/false
Example output
{
  "bytes": 1800000,
  "checks": {
    "carbon_budget": {
      "actual_grams_co2e": 0.18757190555334088,
      "bytes_over_budget": 840369,
      "estimated_byte_budget": 959631,
      "estimated_kilobyte_budget": 959.631,
      "headroom_grams_co2e": 0.0,
      "limit_grams_co2e": 0.1,
      "over_by_grams_co2e": 0.0875719,
      "reduction_needed_percent": 46.69,
      "within_budget": false
    },
    "rating": {
      "actual": "B",
      "bands_below_requirement": 0,
      "comparable": true,
      "meets_requirement": true,
      "required": "B"
    }
  },
  "cleaner_than": 0.8,
  "cleaner_than_percent": 80.0,
  "grams_co2e": 0.18757190555334088,
  "green_hosting": false,
  "kilobytes": 1800.0,
  "kilograms_co2e_per_1000_views": 0.187572,
  "megabytes": 1.8,
  "rating": "B",
  "rating_description": "Digital Carbon Rating B: band 3 of 7 on a scale where A+ is the cleanest and F the heaviest.",
  "statistics": {
    "adjusted_bytes": 1359000.0,
    "energy_kwh": 0.00037970021367073054,
    "grid_grams_co2e": 0.18757190555334088,
    "grid_litres_co2": 0.10432749386876819,
    "renewable_grams_co2e": 0.15318372286856177,
    "renewable_litres_co2": 0.08520078665949404
  },
  "statistics_model": "Current model",
  "within_budget": false
}

Compare hosting options

Price the same page on green hosting and on ordinary grid-powered hosting, and get both sides in full (emissions, rating and percentile for each) plus what switching would save per visit and, if you give the traffic, per year. This is the case for moving a site to a renewable host, in the numbers a decision is made on.

Inputs

Page weight (bytes)bytesnumberRequired
How many bytes the page transfers when it loads. Take this from a browser's network panel, a Lighthouse or PageSpeed report, or a CDN log; 1 MB is 1,000,000 bytes.From 1 to 1000000000000000.
Monthly page viewsmonthly_page_viewsnumber
Optional. How many times the page is loaded in a typical month; supply it to get the yearly saving as well as the per-visit one.From 0 to 1000000000000.

Outputs

bytesnumber
green_hostingobject
kilobytesnumber
megabytesnumber
savingsobject
standard_hostingobject
Example output
{
  "bytes": 1800000,
  "green_hosting": {
    "bytes": 1800000,
    "cleaner_than": 0.9,
    "cleaner_than_percent": 90.0,
    "grams_co2e": 0.15318372286856177,
    "green_hosting": true,
    "kilobytes": 1800.0,
    "kilograms_co2e_per_1000_views": 0.153184,
    "megabytes": 1.8,
    "rating": "A",
    "rating_description": "Digital Carbon Rating A: band 2 of 7 on a scale where A+ is the cleanest and F the heaviest.",
    "statistics": {
      "adjusted_bytes": 1359000.0,
      "energy_kwh": 0.00037970021367073054,
      "grid_grams_co2e": 0.18757190555334088,
      "grid_litres_co2": 0.10432749386876819,
      "renewable_grams_co2e": 0.15318372286856177,
      "renewable_litres_co2": 0.08520078665949404
    },
    "statistics_model": "Current model"
  },
  "kilobytes": 1800.0,
  "megabytes": 1.8,
  "savings": {
    "annual_kilograms_co2e_saved": 20.6329,
    "annual_tonnes_co2e_saved": 0.0206329,
    "grams_co2e_per_view": 0.0343882,
    "monthly_page_views": 50000,
    "percent_reduction": 18.33,
    "rating_change": "B \u2192 A",
    "rating_improves": true
  },
  "standard_hosting": {
    "bytes": 1800000,
    "cleaner_than": 0.8,
    "cleaner_than_percent": 80.0,
    "grams_co2e": 0.18757190555334088,
    "green_hosting": false,
    "kilobytes": 1800.0,
    "kilograms_co2e_per_1000_views": 0.187572,
    "megabytes": 1.8,
    "rating": "B",
    "rating_description": "Digital Carbon Rating B: band 3 of 7 on a scale where A+ is the cleanest and F the heaviest.",
    "statistics": {
      "adjusted_bytes": 1359000.0,
      "energy_kwh": 0.00037970021367073054,
      "grid_grams_co2e": 0.18757190555334088,
      "grid_litres_co2": 0.10432749386876819,
      "renewable_grams_co2e": 0.15318372286856177,
      "renewable_litres_co2": 0.08520078665949404
    },
    "statistics_model": "Current model"
  }
}

Compare pages

Rank several pages by emissions, heaviest first, with each page's share of the total, to find which templates on a site are worth optimising, or to weigh a page against a competitor's. Give each page as the number of bytes it transfers; a URL will not do, because this API estimates from a page's weight rather than visiting it.

Inputs

Pages (with the bytes each one transfers)pageslistRequired
One row per page. Each row needs the number of bytes that page transfers; a URL will not do, because this API estimates from a page's weight and cannot fetch the page to measure it. Naming a row and marking it as green-hosted are both optional. Up to 20 pages in one step.

Outputs

average_grams_co2enumber
highest_emissionsobject
lowest_emissionsobject
page_countnumber
pageslist
total_bytesnumber
total_grams_co2enumber
total_megabytesnumber
Example output
{
  "average_grams_co2e": 0.166325,
  "highest_emissions": {
    "bytes": 2900000,
    "grams_co2e": 0.2467959979549051,
    "green_hosting": true,
    "megabytes": 2.9,
    "name": "Pricing",
    "rating": "B"
  },
  "lowest_emissions": {
    "bytes": 620000,
    "grams_co2e": 0.06460810080170631,
    "green_hosting": false,
    "megabytes": 0.62,
    "name": "Blog post",
    "rating": "A+"
  },
  "page_count": 3,
  "pages": [
    {
      "bytes": 2900000,
      "cleaner_than": 0.8,
      "cleaner_than_percent": 80.0,
      "grams_co2e": 0.2467959979549051,
      "green_hosting": true,
      "kilobytes": 2900.0,
      "kilograms_co2e_per_1000_views": 0.246796,
      "megabytes": 2.9,
      "name": "Pricing",
      "rank": 1,
      "rating": "B",
      "rating_description": "Digital Carbon Rating B: band 3 of 7 on a scale where A+ is the cleanest and F the heaviest.",
      "share_of_total_percent": 49.46,
      "statistics": {
        "adjusted_bytes": 2189500.0,
        "energy_kwh": 0.000611739233136177,
        "grid_grams_co2e": 0.30219918116927147,
        "grid_litres_co2": 0.16808318456634874,
        "renewable_grams_co2e": 0.2467959979549051,
        "renewable_litres_co2": 0.1372679340625182
      },
      "statistics_model": "Current model"
    },
    {
      "bytes": 1800000,
      "cleaner_than": 0.8,
      "cleaner_than_percent": 80.0,
      "grams_co2e": 0.18757190555334088,
      "green_hosting": false,
      "kilobytes": 1800.0,
      "kilograms_co2e_per_1000_views": 0.187572,
      "megabytes": 1.8,
      "name": "Home",
      "rank": 2,
      "rating": "B",
      "rating_description": "Digital Carbon Rating B: band 3 of 7 on a scale where A+ is the cleanest and F the heaviest.",
      "share_of_total_percent": 37.59,
      "statistics": {
        "adjusted_bytes": 1359000.0,
        "energy_kwh": 0.00037970021367073054,
        "grid_grams_co2e": 0.18757190555334088,
        "grid_litres_co2": 0.10432749386876819,
        "renewable_grams_co2e": 0.15318372286856177,
        "renewable_litres_co2": 0.08520078665949404
      },
      "statistics_model": "Current model"
    },
    {
      "bytes": 620000,
      "cleaner_than": 0.95,
      "cleaner_than_percent": 95.0,
      "grams_co2e": 0.06460810080170631,
      "green_hosting": false,
      "kilobytes": 620.0,
      "kilograms_co2e_per_1000_views": 0.0646081,
      "megabytes": 0.62,
      "name": "Blog post",
      "rank": 3,
      "rating": "A+",
      "rating_description": "Digital Carbon Rating A+: band 1 of 7 on a scale where A+ is the cleanest and F the heaviest.",
      "share_of_total_percent": 12.95,
      "statistics": {
        "adjusted_bytes": 468100.0,
        "energy_kwh": 0.00013078562915325165,
        "grid_grams_co2e": 0.06460810080170631,
        "grid_litres_co2": 0.035935025665909046,
        "renewable_grams_co2e": 0.0527632823213935,
        "renewable_litres_co2": 0.02934693762715906
      },
      "statistics_model": "Current model"
    }
  ],
  "total_bytes": 5320000,
  "total_grams_co2e": 0.498976,
  "total_megabytes": 5.32
}

Estimate annual emissions

Project a page's emissions across real traffic: give the page weight and how many times it is viewed in a month, and get the monthly and yearly totals in grams, kilograms and tonnes of CO2e, plus the volume of CO2 that represents and what green hosting would have saved over the year. A per-visit figure is too small to act on; this is the number a sustainability report or a reduction target is written against.

Inputs

Page weight (bytes)bytesnumberRequired
How many bytes the page transfers when it loads. Take this from a browser's network panel, a Lighthouse or PageSpeed report, or a CDN log; 1 MB is 1,000,000 bytes.From 1 to 1000000000000000.
Green hostinggreentrue/falseRequired
Whether the page is served from a host running on renewable energy. Green hosting cuts the emissions of the same page by roughly a fifth, so set it deliberately; the Green Web Foundation's checker at thegreenwebfoundation.org/green-web-check will tell you which a domain is. Leave it off if you don't know.Default: false.
Monthly page viewsmonthly_page_viewsnumberRequired
How many times the page is loaded in a typical month. The API answers per single visit, and this turns that into the monthly and yearly figures a report or a target is written against.From 0 to 1000000000000.

Outputs

annualobject
annual_page_viewsnumber
bytesnumber
cleaner_thannumber
cleaner_than_percentnumber
grams_co2enumber
green_hostingtrue/false
hosting_comparisonobject
kilobytesnumber
kilograms_co2e_per_1000_viewsnumber
megabytesnumber
monthlyobject
monthly_page_viewsnumber
per_1000_viewsobject
ratingtext
rating_descriptiontext
statisticsobject
statistics_modeltext
Example output
{
  "annual": {
    "grams_co2e": 112543.0,
    "kilograms_co2e": 112.543,
    "litres_co2": 62596.5,
    "page_views": 600000,
    "tonnes_co2e": 0.112543
  },
  "annual_page_views": 600000,
  "bytes": 1800000,
  "cleaner_than": 0.8,
  "cleaner_than_percent": 80.0,
  "grams_co2e": 0.18757190555334088,
  "green_hosting": false,
  "hosting_comparison": {
    "annual_kilograms_co2e_on_green_hosting": 91.9102,
    "annual_kilograms_co2e_on_grid_hosting": 112.543,
    "annual_kilograms_co2e_saved_by_green_hosting": 20.6329
  },
  "kilobytes": 1800.0,
  "kilograms_co2e_per_1000_views": 0.187572,
  "megabytes": 1.8,
  "monthly": {
    "grams_co2e": 9378.6,
    "kilograms_co2e": 9.3786,
    "litres_co2": 5216.37,
    "page_views": 50000,
    "tonnes_co2e": 0.0093786
  },
  "monthly_page_views": 50000,
  "per_1000_views": {
    "grams_co2e": 187.572,
    "kilograms_co2e": 0.187572,
    "page_views": 1000,
    "tonnes_co2e": 0.000187572
  },
  "rating": "B",
  "rating_description": "Digital Carbon Rating B: band 3 of 7 on a scale where A+ is the cleanest and F the heaviest.",
  "statistics": {
    "adjusted_bytes": 1359000.0,
    "energy_kwh": 0.00037970021367073054,
    "grid_grams_co2e": 0.18757190555334088,
    "grid_litres_co2": 0.10432749386876819,
    "renewable_grams_co2e": 0.15318372286856177,
    "renewable_litres_co2": 0.08520078665949404
  },
  "statistics_model": "Current model"
}

Estimate data transfer emissions

Estimate the emissions of moving data that is not a page: a file people download, a video stream, an email attachment, or a month of CDN traffic. Give the size in megabytes and how many times it is transferred. The page model assumes returning visitors have some of the bytes cached and discounts them; a download has no such discount, so that adjustment is taken back out here and the page-equivalent figure is returned alongside for comparison.

Inputs

Size (MB)megabytesnumberRequired
How large each transfer is, in megabytes (1 MB = 1,000,000 bytes).From 0 to 1000000000.
Green hostinggreentrue/falseRequired
Whether the page is served from a host running on renewable energy. Green hosting cuts the emissions of the same page by roughly a fifth, so set it deliberately; the Green Web Foundation's checker at thegreenwebfoundation.org/green-web-check will tell you which a domain is. Leave it off if you don't know.Default: false.
Number of transferstransfersnumber
How many times the file is transferred (downloads, plays, or sends). Defaults to 1.From 1 to 1000000000000. Default: 1.

Outputs

as_page_viewobject
bytesnumber
caching_adjustment_removedtrue/false
gigabytesnumber
grams_co2e_per_transfernumber
green_hostingtrue/false
megabytesnumber
returning_visitor_factornumber
statisticsobject
totalobject
transfersnumber
Example output
{
  "as_page_view": {
    "cleaner_than_percent": 7.0,
    "grams_co2e_per_view": 2.6051653549075127,
    "rating": "F"
  },
  "bytes": 25000000,
  "caching_adjustment_removed": true,
  "gigabytes": 0.025,
  "grams_co2e_per_transfer": 3.45055,
  "green_hosting": false,
  "megabytes": 25.0,
  "returning_visitor_factor": 1.3245,
  "statistics": {
    "adjusted_bytes": 18875000.0,
    "energy_kwh": 0.005273614078760146,
    "grid_grams_co2e": 2.6051653549075127,
    "grid_litres_co2": 1.448992970399558,
    "renewable_grams_co2e": 2.1275517065078025,
    "renewable_litres_co2": 1.1833442591596395
  },
  "total": {
    "grams_co2e": 34505.5,
    "kilograms_co2e": 34.5055,
    "tonnes_co2e": 0.0345055
  },
  "transfers": 10000
}

Estimate page emissions

Estimate the carbon emissions of a single page load from the page's weight in bytes and whether it is on green hosting. Returns the grams of CO2e a visit costs, the page's Digital Carbon Rating from A+ to F, the percentage of measured pages it is cleaner than, and the energy and emissions behind those figures.

Inputs

Page weight (bytes)bytesnumberRequired
How many bytes the page transfers when it loads. Take this from a browser's network panel, a Lighthouse or PageSpeed report, or a CDN log; 1 MB is 1,000,000 bytes.From 1 to 1000000000000000.
Green hostinggreentrue/falseRequired
Whether the page is served from a host running on renewable energy. Green hosting cuts the emissions of the same page by roughly a fifth, so set it deliberately; the Green Web Foundation's checker at thegreenwebfoundation.org/green-web-check will tell you which a domain is. Leave it off if you don't know.Default: false.
Calculation modellegacytext
Leave empty. Set this only to reproduce a figure published under an older methodology; it changes the detailed statistics alone, and the headline emissions always use the current model.One of: 2 (Methodology used up to 19 April 2022), 3 (Methodology used up to July 2024).

Outputs

bytesnumber
cleaner_thannumber
cleaner_than_percentnumber
grams_co2enumber
green_hostingtrue/false
kilobytesnumber
kilograms_co2e_per_1000_viewsnumber
megabytesnumber
ratingtext
rating_descriptiontext
statisticsobject
statistics_modeltext
Example output
{
  "bytes": 12345678,
  "cleaner_than": 0.07,
  "cleaner_than_percent": 7.0,
  "grams_co2e": 1.0506427318758333,
  "green_hosting": true,
  "kilobytes": 12345.7,
  "kilograms_co2e_per_1000_views": 1.05064,
  "megabytes": 12.3457,
  "rating": "F",
  "rating_description": "Digital Carbon Rating F: band 7 of 7 on a scale where A+ is the cleanest and F the heaviest.",
  "statistics": {
    "adjusted_bytes": 9320986.89,
    "energy_kwh": 0.0026042536525055764,
    "grid_grams_co2e": 1.2865013043377547,
    "grid_litres_co2": 0.7155520254726591,
    "renewable_grams_co2e": 1.0506427318758333,
    "renewable_litres_co2": 0.5843674874693384
  },
  "statistics_model": "Current model"
}

On this page