Carbon.txt Auditor avatar

Carbon.txt Auditor

Pricing

Pay per usage

Go to Apify Store
Carbon.txt Auditor

Carbon.txt Auditor

Discover and audit a public domain's carbon.txt sustainability disclosure file (Green Web Foundation spec v0.5). Checks discovery, TOML validity, disclosures, upstream services, score, and grade.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Sanskar Jaiswal

Sanskar Jaiswal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Security

Limited permissions

Share

Discover and audit a public domain's carbon.txt sustainability disclosure file against the Green Web Foundation carbon.txt v0.5 syntax. Carbon.txt is the emerging standard for publishing machine-readable sustainability data disclosures (carbon footprint, energy mix, CSRD reports, AI model cards) at a predictable location on a domain.

Use cases

  • Sustainability and ESG teams verifying their own carbon.txt deployment before a public announcement.
  • Compliance and legal teams auditing CSRD-related disclosure publication readiness.
  • Agencies and consultants running carbon.txt audits across a client portfolio.
  • Procurement and investor-research teams checking whether a vendor or portfolio company publishes verifiable sustainability disclosures.
  • CI/CD pipelines validating a carbon.txt file after edits, before deployment.

Input

FieldTypeRequiredDescription
startUrlstringyesDomain or URL to audit, e.g. example.com or https://example.com.
checkDisclosureUrlsbooleannoIf true, performs a reachability check (HEAD, falling back to a capped GET) against each disclosure URL found in the file. Default false.
timeoutSecondsintegernoPer-request timeout, 3-30 seconds. Default 10.

Output

One JSON object per run, pushed to the default dataset.

FieldTypeDescription
inputDomainstringThe domain/URL provided as input.
discoveryMethodstringHow the file was located: dns-txt, root, well-known, header, or none.
carbonTxtUrlstring|nullURL the carbon.txt file was fetched from, if found.
httpsboolean|nullWhether it was served over HTTPS.
statusinteger|nullFinal HTTP status code.
fileFoundbooleanWhether any discovery method succeeded.
tomlValidbooleanWhether the body parses as valid TOML.
parseErrorstring|nullTOML parse error message, if any.
versionstring|nullDeclared version field.
lastUpdatedstring|nullDeclared last_updated field.
hasOrgSectionbooleanWhether a required [org] table is present.
disclosureCountintegerNumber of org.disclosures entries.
disclosuresarrayParsed disclosure entries: docType, url, validUntil, domain, title, issues.
hasUpstreamSectionbooleanWhether an optional [upstream] table is present.
upstreamServiceCountintegerNumber of upstream.services entries.
upstreamServicesarrayParsed service entries: domain, serviceType, issues.
disclosureUrlChecksarray|nullPer-URL reachability results, if checkDisclosureUrls was enabled.
checksarrayPer-check breakdown: name, status, note, weight, recommendation.
issuesarrayDeduplicated list of all issues found.
scoreintegerReadiness score, 0-100.
gradestringLetter grade, A+ to F.
checkedAtstringISO timestamp of the audit.
recommendationsarrayActionable fixes.
errorstring|nullTop-level fetch error, if any.

Example input

{
"startUrl": "https://example.com",
"checkDisclosureUrls": true,
"timeoutSeconds": 10
}

Example output (abridged)

{
"inputDomain": "https://example.com",
"discoveryMethod": "root",
"carbonTxtUrl": "https://example.com/carbon.txt",
"https": true,
"status": 200,
"fileFound": true,
"tomlValid": true,
"version": "0.5",
"hasOrgSection": true,
"disclosureCount": 1,
"disclosures": [
{ "index": 0, "docType": "sustainability-page", "url": "https://example.com/sustainability", "validUntil": null, "domain": "example.com", "title": null, "issues": [] }
],
"hasUpstreamSection": false,
"upstreamServiceCount": 0,
"upstreamServices": [],
"score": 90,
"grade": "A",
"issues": [],
"recommendations": ["carbon.txt looks spec-conformant. Re-run this audit after updating sustainability disclosures to catch regressions."]
}

Discovery method

Per the carbon.txt FAQ, discoverability is checked in this order:

  1. DNS TXT record on the domain in the form carbon-txt-location=URL.
  2. https://<domain>/carbon.txt (domain root).
  3. https://<domain>/.well-known/carbon.txt.
  4. A CarbonTxt-Location: URL HTTP response header on the domain root.

The actor stops at the first location that returns a 200 response and attempts to parse it as TOML.

Security

  • Public HTTP/HTTPS only. URL credentials are rejected.
  • Localhost and private/link-local IPv4 and IPv6 literal ranges (RFC 1918, RFC 3927, and IPv6 unique-local/link-local equivalents) are blocked.
  • Hostnames are DNS-resolved and resolved addresses are re-checked against the same private-range rules before any request is made (SSRF defense in depth).
  • Redirects are manually followed and each hop is revalidated with the same SSRF checks.
  • Response bodies are capped at 256 KB.
  • Only the exact disclosure URLs found inside the carbon.txt file are fetched when checkDisclosureUrls is enabled; no other URLs referenced by the file are followed.

Pricing

EventPrice (USD)
Actor start$0.005
Domain audited$0.01

Apify takes a 20% platform commission; the operator keeps 80%.

FAQ

What is carbon.txt? An open specification from the Green Web Foundation for publishing machine-readable sustainability disclosure links (carbon footprint reports, energy mix data, CSRD reports, AI model cards) at a predictable location on a web domain.

Does this actor validate the disclosure document contents? No. It validates the carbon.txt file's structure and, optionally, that each linked disclosure URL is reachable. It does not parse PDF annual reports or verify the sustainability claims themselves.

Does it support older carbon.txt syntax versions (pre-0.3)? The actor validates against the current v0.5 TOML structure ([org].disclosures, [upstream].services). Older array-of-tables syntax from early drafts is not retro-validated.

Why didn't it find my carbon.txt file? Check that it is reachable at the domain root, /.well-known/, via a carbon-txt-location= DNS TXT record, or via a CarbonTxt-Location HTTP header, and that it responds with HTTP 200 over HTTPS.