Carbon Accounting Meets Plain Text: Tracking Scope 1, 2, 3 Emissions in Beancount

The regulatory landscape for environmental reporting has shifted dramatically. California’s SB 253 and SB 261 now require large companies doing business in the state to report Scope 1 and 2 emissions by 2026, with Scope 3 following in 2027. The EU’s Corporate Sustainability Reporting Directive (CSRD) kicks in with Scope 3 reporting starting in 2027, based on 2026 data. ESG metrics are no longer optional—they’re becoming a compliance requirement, and investors are demanding transparency.

The problem? Commercial carbon accounting software runs anywhere from $3,000 to $250,000 per year, depending on organizational complexity. For small firms, B Corps, and sustainability-focused businesses, that’s a significant barrier to entry.

But here’s what occurred to me: we’re already tracking financial flows in Beancount. Why not track carbon flows the same way?

The Integration Advantage

The beauty of Beancount’s design is that it’s not really an “accounting tool”—it’s a double-entry ledger system that happens to work brilliantly for money. But the same principles apply to any quantifiable resource, including carbon dioxide equivalent (CO2e) emissions.

What if we could generate sustainability reports right alongside financial reports, from a single source of truth, with the same audit trail and version control we rely on for financial compliance?

A Practical Approach

Here’s how I’m thinking about structuring this:

Custom Commodities for Emissions

Just like we track USD, EUR, and stock shares, we can define CO2e as a commodity:

2020-01-01 commodity CO2e
  name: "Carbon Dioxide Equivalent"
  precision: 2

Account Structure for Scope Separation

Following the GHG Protocol’s Scope 1/2/3 framework:

2020-01-01 open Assets:Carbon:Scope1:DirectEmissions        CO2e
2020-01-01 open Assets:Carbon:Scope1:CompanyVehicles        CO2e
2020-01-01 open Assets:Carbon:Scope1:FacilityFuel          CO2e

2020-01-01 open Assets:Carbon:Scope2:PurchasedElectricity  CO2e
2020-01-01 open Assets:Carbon:Scope2:PurchasedHeating      CO2e

2020-01-01 open Assets:Carbon:Scope3:BusinessTravel        CO2e
2020-01-01 open Assets:Carbon:Scope3:SupplierEmissions     CO2e
2020-01-01 open Assets:Carbon:Scope3:WasteDisposal         CO2e

2020-01-01 open Equity:Carbon:Opening                      CO2e

Transactions with Emission Metadata

The key is capturing emissions alongside the financial transaction that caused them:

2026-03-15 * "Office electricity bill - March 2026"
  Expenses:Utilities:Electricity           350.00 USD
  Assets:Carbon:Scope2:PurchasedElectricity  450.0 CO2e
    kwh-consumed: "1250"
    emission-factor: "0.36"
    emission-factor-source: "EPA eGRID 2025 - Region WECC"
    utility-provider: "Pacific Gas & Electric"
  Liabilities:CreditCard                  -350.00 USD

2026-03-17 * "Business flight SFO to ORD"
  Expenses:Travel:Flights                  420.00 USD
  Assets:Carbon:Scope3:BusinessTravel      330.0 CO2e
    miles-flown: "1846"
    emission-factor: "0.179"
    emission-factor-source: "DEFRA 2025 - Domestic flight"
    flight-details: "United 1234"
  Liabilities:CreditCard                  -420.00 USD

2026-03-10 * "Natural gas bill - heating"
  Expenses:Utilities:Gas                   125.00 USD
  Assets:Carbon:Scope1:FacilityFuel        280.0 CO2e
    therms-consumed: "42"
    emission-factor: "6.67"
    emission-factor-source: "EPA - Natural Gas"
  Liabilities:CreditCard                  -125.00 USD

The metadata captures:

  • Activity data (kWh, miles, therms) for activity-based methodology
  • Emission factors (kg CO2e per unit) from authoritative sources
  • Source documentation for audit verification
  • Context for category classification

Queries for Emissions Reporting

Once the data is in, we can generate reports using Beancount’s query language:

/* Total emissions by scope for 2026 */
SELECT
  account,
  SUM(position) AS total_emissions
WHERE
  account ~ '^Assets:Carbon:Scope[123]' AND
  year = 2026
GROUP BY account
ORDER BY account;

/* Monthly Scope 2 trend analysis */
SELECT
  year, month,
  SUM(position) AS scope2_emissions
WHERE
  account ~ '^Assets:Carbon:Scope2' AND
  year = 2026
GROUP BY year, month
ORDER BY year, month;

Fava’s existing reporting infrastructure would display emissions alongside financial data.

Why This Matters

Single source of truth: Financial and carbon data live in one system, reducing reconciliation errors.

Audit trail: Every emission entry has transaction-level documentation, meeting verification requirements.

Version control: Git tracks who changed what emission factors when—critical for regulatory audits.

Historical data: When regulators ask for historical emissions, you have auditable records going back years.

Cost efficiency: No $50K/year software subscription. Just plain text files and Python.

Flexibility: Emission factors change, methodologies evolve—Beancount adapts without vendor lock-in.

Open Questions

I’m still working through some practical challenges:

  1. Supplier-reported Scope 3 data: How do we structure transactions when suppliers provide their emissions data? Do we trust their numbers or verify independently?

  2. Emission factor updates: The EPA and DEFRA update their emission factors annually. How do we handle historical data when factors change? Restate prior periods or maintain consistency?

  3. Materiality thresholds: The GHG Protocol allows omitting immaterial categories. How do we document materiality decisions in Beancount?

  4. Multi-location businesses: Different grid emission factors by location. Do we create sub-accounts per facility, or handle this in metadata?

  5. Carbon offsets: How should we account for purchased carbon credits? As negative emissions in the same accounts, or separate offset accounts?

Has Anyone Tried This?

I’d love to hear from others who’ve experimented with environmental accounting in Beancount:

  • What account structures have worked well?
  • How do you handle the activity-based vs spend-based methodology split?
  • Any custom Fava plugins for emissions dashboards?
  • What emission factor databases do you use?
  • How do you explain this approach to clients or auditors who expect traditional carbon accounting software?

For businesses facing ESG reporting requirements, this could be a game-changer. For the plain text accounting philosophy, it’s a validation that these principles extend far beyond traditional finance.

Looking forward to hearing your thoughts and experiences.

This is brilliant! I’ve been tracking my net worth obsessively in Beancount for years, so why wouldn’t I track my personal carbon footprint the same way?

I’m nowhere near the scale of regulatory compliance you’re dealing with, but I’ve started experimenting with this for personal use. Here’s what I’m tracking:

Transportation emissions:

2026-03-10 * "Gas fill-up - Costco"
  Expenses:Auto:Fuel                    65.00 USD
  Assets:Carbon:Personal:Transportation  52.4 KG_CO2
    gallons: "14.2"
    miles-driven-since-last: "425"
    emission-factor: "3.69"
    emission-factor-source: "EPA 2025 - Regular Gasoline"
  Liabilities:CreditCard               -65.00 USD

I’m using KG_CO2 instead of CO2e for now since I’m only tracking CO2, not methane/N2O equivalents. (Should I switch to CO2e for consistency?)

Home energy:

2026-03-12 * "Seattle City Light - February bill"
  Expenses:Utilities:Electric           142.00 USD
  Assets:Carbon:Personal:HomeEnergy      12.8 KG_CO2
    kwh-consumed: "850"
    emission-factor: "0.015"
    emission-factor-source: "SCL 2025 - Hydro-heavy grid"
  Assets:Checking                      -142.00 USD

Seattle’s grid is hydro-heavy, so my home emissions are relatively low. That’s been eye-opening—seeing how much my driving emissions dwarf my electricity usage.

The correlation insight:

I built a quick Fava extension to chart monthly spending vs carbon emissions. The correlation isn’t 1:1, which is fascinating:

  • Spending $2,000/month on rent = minimal carbon (building already exists)
  • Spending $200/month on gas = significant carbon
  • Spending $500 on a flight = massive carbon spike

This helps me make FIRE + climate-conscious decisions. If I’m trying to hit my savings rate AND reduce my footprint, certain expenses are double-wins (biking instead of driving saves money AND carbon).

My big question: Emission factors for consumer purchases?

Your examples use EPA/DEFRA databases for energy/travel, which are well-established. But what about:

  • Food purchases (beef vs beans)?
  • Consumer goods (phone, laptop, clothing)?
  • Services (streaming, cloud storage)?

The enterprise carbon accounting platforms have supplier-specific data. For personal use, I’m stuck with rough estimates or “spend-based” factors ($ spent → kg CO2), which feel less accurate.

Anyone found good emission factor databases for consumer spending categories?

What I’m building:

A Fava dashboard showing:

  • Monthly carbon footprint trend (like net worth chart)
  • Carbon per dollar spent ratio (efficiency metric)
  • Category breakdown (transportation vs home vs flights)
  • Year-over-year comparison

The goal: Make carbon footprint as visible and actionable as my savings rate.

If anyone’s interested, I can share the Fava plugin code once it’s cleaned up. Still very much a work in progress.

Thanks for starting this thread, Alice. I’m excited to see where the community takes this idea.

Alice, this is a perfect example of Beancount’s flexibility extending beyond traditional accounting. I love it.

Your approach reminds me of when I first started tracking loyalty points and frequent flyer miles as commodities in Beancount. Same principle—quantifiable resources that follow double-entry rules, just not denominated in currency.

Start simple, expand later

One thing I’d recommend to anyone trying this: start with Scope 1 and Scope 2 emissions first. They’re easier to measure because you control the data sources (your own facility energy use, company vehicles). Scope 3 gets messy quickly—you’re dependent on supplier data, assumptions, and estimation methodologies.

I made this mistake early on with my rental property tracking. I tried to capture every possible detail from day one and ended up overwhelmed. Simplified my structure, focused on the critical accounts, and THEN expanded once I understood the patterns.

For carbon accounting, I’d suggest:

  1. Month 1-3: Track just Scope 1 (direct emissions - company vehicles, on-site fuel)
  2. Month 4-6: Add Scope 2 (purchased electricity, heating)
  3. Month 7+: Tackle Scope 3 categories one at a time (start with business travel, easiest to track)

The real power: Historical auditable records

Here’s what excites me most about this approach: When regulators or investors ask for historical emissions data, you’ll have it, with full transaction-level documentation going back years.

Traditional carbon accounting software? Companies often start using it in response to a regulatory requirement, meaning they have zero historical data. They’re building baseline inventories from scratch, making estimates, dealing with data gaps.

Beancount users? We have git history showing every transaction, every emission factor, every methodology change. That’s powerful for trend analysis and verification.

Avoid over-engineering

Don’t try to account for every gram of CO2e on day one. Focus on materiality:

  • For most businesses, Scope 3 is 70-90% of total emissions
  • Within Scope 3, usually 2-3 categories drive most of the impact
  • Capture those material sources first, refine later

The GHG Protocol explicitly allows omitting immaterial categories (under 5% of total emissions). Use that flexibility.

A learning opportunity

Try this for one category first—like business travel—before expanding to your full operations:

2026-03-15 * "Team offsite - flight to Austin"
  Expenses:Travel:Flights                 280.00 USD
  Assets:Carbon:Scope3:BusinessTravel     215.0 CO2e
    miles: "1200"
    emission-factor: "0.179"
    passenger: "Mike Chen"
  Liabilities:Amex

Track it for a quarter. See what works, what’s annoying, what queries you actually run. THEN expand the structure.

I learned this lesson the hard way with Beancount generally. Started with a super complex account hierarchy that I thought would be perfect. Six months later, I realized I never used 60% of those accounts and restructured everything. Plain text makes refactoring easy, but it’s still work.

To Fred’s question on consumer emission factors:

There are some open databases emerging:

  • ADEME (France) has a consumer product database
  • Climatiq API offers consumer goods factors
  • Carbon Footprint Ltd publishes food emission factors

But yeah, consumer-level factors are way less standardized than industrial/commercial factors. The spend-based approach ($ → CO2e) is what most people use for personal tracking, even though it’s less precise.

Encouragement

This is an exciting application of Beancount’s core principles. Whether you’re doing it for regulatory compliance, B Corp certification, or personal climate consciousness—the same strengths apply: transparency, auditability, version control, and longevity.

Try it out, experiment, share what you learn. That’s how the community develops best practices.

Alice, this is exactly the kind of forward-thinking application that accountants need to be exploring. Let me add some compliance and audit perspectives.

External verification requirements

California SB 253 requires external verification for Scope 1 and Scope 2 emissions. This is similar to financial statement audits—a third party verifies your emissions calculations, methodologies, and supporting documentation.

This is where Beancount’s audit trail becomes critical:

2026-03-15 * "Office electricity bill - March 2026" ^verification-2026-Q1
  document: "receipts/2026-03-15-pge-bill.pdf"
  Expenses:Utilities:Electricity           350.00 USD
  Assets:Carbon:Scope2:PurchasedElectricity  450.0 CO2e
    kwh-consumed: "1250"
    emission-factor: "0.36"
    emission-factor-source: "EPA eGRID 2025 - Region WECC - Published 2025-12-15"
    utility-provider: "Pacific Gas & Electric"
    meter-number: "12345678"
  Liabilities:CreditCard

Notice I added:

  • Link (^verification-2026-Q1) to group transactions by audit period
  • Document tag linking to source documentation (utility bill PDF)
  • Detailed metadata including meter numbers, emission factor publication dates

When the verifier asks “How did you calculate this?”, you can point them to the exact transaction, the source document, and the emission factor reference.

Comparison to financial audits

Financial audits require:

  1. Source documentation (invoices, receipts)
  2. Calculation methodology (GAAP standards)
  3. Evidence of review and approval
  4. Reconciliation to bank/vendor statements

Carbon audits require the same rigor:

  1. Source documentation (utility bills, fuel receipts, travel records)
  2. Calculation methodology (GHG Protocol, ISO 14064)
  3. Evidence of data quality review
  4. Reconciliation to activity data (kWh consumed, miles driven)

Beancount handles all four requirements natively. Commercial carbon accounting software tries to bolt on audit trails after the fact.

Tax implications - Inflation Reduction Act credits

There’s a tax angle here too. The IRS offers carbon capture and sequestration credits under IRC Section 45Q and Form 8933. To claim these credits, you need to demonstrate:

  • Qualified carbon oxide captured and disposed of
  • Verification of disposal or utilization
  • Calculation of credit amount

Beancount could track qualifying carbon reduction activities:

2026-03-20 * "Carbon offset purchase - verified forestry project"
  Assets:Carbon:Offsets:Forestry         -500.0 CO2e
    project: "Verified Carbon Standard VCS-1234"
    vintage: "2025"
    verification: "SCS Global verified 2025-12-01"
    tax-credit-eligible: "IRC-45Q"
  Expenses:Sustainability:CarbonOffsets   1250.00 USD
  Assets:Checking

The IRS is going to want detailed records for carbon-related tax credits. Transaction-level documentation beats summary spreadsheets.

Compliance risks: Emission factor accuracy

Here’s a risk I haven’t seen mentioned yet: Using incorrect emission factors is like making tax calculation errors.

If your emissions are materially misstated due to wrong factors, that’s a compliance problem. Verification will fail. Regulators may penalize misstatements (intentional or not).

Recommendation: Document your emission factor sources and update dates:

; Emission Factor Reference - Updated 2026-01-15
; Source: EPA eGRID 2025 (Published 2025-12-15)
; Region: WECC (Western Electricity Coordinating Council)
; Grid average: 0.36 kg CO2e per kWh
; Next update: EPA publishes annually in December
;
; Alternative sources checked:
; - DEFRA 2025: 0.35 kg CO2e/kWh (UK-focused)
; - IEA 2025: 0.37 kg CO2e/kWh (global average)
; Selected EPA eGRID for geographic specificity

Put this context in your Beancount file comments. When factors change, you have a record of WHEN and WHY you updated them.

Materiality documentation

The GHG Protocol allows omitting emissions sources below materiality thresholds (typically 5% of total emissions). But you need to DOCUMENT why you excluded something:

; MATERIALITY ASSESSMENT - 2026
; Total estimated Scope 3 emissions: 5,000 CO2e
; Category 5 (Waste): ~150 CO2e (3% of total) - EXCLUDED
; Rationale: Below 5% threshold per GHG Protocol Chapter 7
; Reassess annually as business grows

This is similar to tax: The IRS allows de minimis exceptions, but you document why you used them.

Audit readiness mindset

The mindset shift: Treat carbon accounting with the same rigor as financial accounting.

  • Would you book a financial transaction without a receipt? No. Don’t book emissions without source documentation.
  • Would you use a made-up tax rate? No. Don’t use unverified emission factors.
  • Would you skip reconciling your bank statement? No. Don’t skip reconciling your energy consumption to utility bills.

Beancount users already have this discipline. We’re just extending it to a new domain.

Resources for accountants

If you’re a CPA/EA exploring this:

  • GHG Protocol Corporate Standard (free PDF) - the GAAP of carbon accounting
  • ISO 14064-1 - verification standard (like SOC reports)
  • EPA Climate Leadership Guidelines - practical implementation
  • PCAF Standard (for financial institutions tracking financed emissions)

For Beancount-specific implementation, I’d love to see someone build:

  • Emission factor database plugin (auto-lookup EPA/DEFRA factors)
  • Verification report generator (summary by scope, supporting detail, source docs)
  • Tax credit eligibility tracker (for IRC 45Q, 48C, others)

This is exciting work. Carbon accounting is becoming mandatory, and accountants who develop this expertise early will have a significant competitive advantage.

Anyone interested in collaborating on tax/compliance workflows for carbon accounting in Beancount?

This thread is making me think seriously about offering carbon accounting as a service to my clients. I work with a lot of small businesses, and several are sustainability-focused or considering B Corp certification—this could be a real differentiator.

The client education challenge

Most of my small business clients don’t know what Scope 1/2/3 means. When I mention “carbon accounting,” they think it’s some huge enterprise thing that doesn’t apply to them.

But if I can position it as: “You’re already paying me to track your finances. For an additional $X/month, I’ll track your carbon footprint at the same time”—that’s compelling.

The teaching opportunity:

  • Scope 1: Emissions from things you own/control (your delivery van, your warehouse heating)
  • Scope 2: Emissions from electricity/cooling you buy
  • Scope 3: Emissions from your supply chain (shipping, suppliers, business travel)

Frame it in language they understand: “Just like we track your spending by category, we can track your carbon by source.”

Supplier-reported Scope 3 data - the practical problem

Alice, you asked about supplier-reported emissions. Here’s what I’m seeing in practice:

Most suppliers don’t provide emissions data yet. I have clients asking their vendors “What’s the carbon footprint of this shipment?” and getting blank stares.

The few that do provide data send it in inconsistent formats:

  • PDF sustainability reports (not structured data)
  • Email responses with rough estimates
  • Carbon labels on products (sometimes)

For Beancount implementation, I’m thinking:

2026-03-18 * "Inventory purchase - Supplier ABC"
  Expenses:Inventory:RawMaterials         5000.00 USD
  Assets:Carbon:Scope3:SupplierEmissions  1200.0 CO2e
    supplier: "ABC Manufacturing"
    supplier-report: "docs/abc-emissions-2025.pdf"
    methodology: "Supplier-reported - ISO 14067"
    confidence: "medium"
  Liabilities:AccountsPayable

The confidence metadata is my idea for tracking data quality:

  • high: Activity-based, verified data
  • medium: Supplier-reported, unverified
  • low: Spend-based estimation
  • estimated: Industry average applied

This helps clients understand: “Your Scope 3 number is rough because most suppliers don’t share data.”

Monthly carbon reconciliation workflow

I’m imagining a workflow similar to monthly financial close:

Week 1: Client sends me utility bills, fuel receipts, travel records (same docs they already send for bookkeeping)

Week 2: I enter financial transactions + emissions in Beancount

  • Utility bills → Scope 2 (electricity, heating)
  • Fuel receipts → Scope 1 (company vehicles)
  • Travel expenses → Scope 3 (flights, rental cars)

Week 3: Generate dual reports

  • Financial: P&L, balance sheet, cash flow
  • Carbon: Emissions by scope, trend analysis, reduction opportunities

Week 4: Monthly call with client

  • Review financial performance
  • Review carbon footprint
  • Discuss: “Last month you spent $X on fuel and generated Y kg of CO2. If we optimize delivery routes…”

The integration is the selling point: financial and environmental performance in one conversation.

Pricing carbon accounting services

This is where I’m stuck. How do I price this?

Option 1: Separate add-on

  • Bronze tier: Financial bookkeeping only ($500/month)
  • Silver tier: Financial + Scope 1/2 carbon ($650/month)
  • Gold tier: Financial + Scope 1/2/3 carbon ($800/month)

Option 2: Bundled value pricing

  • “Sustainability Bookkeeping Package” ($750/month)
  • Includes financial + carbon accounting as integrated service
  • Position as premium offering for eco-conscious businesses

Option 3: Per-transaction pricing

  • Base bookkeeping rate + $0.25 per transaction with emissions metadata
  • Scales with client size

What do other bookkeepers think? Has anyone priced environmental accounting services?

The business opportunity

Here’s what excites me: Most accounting firms AREN’T doing this yet. Commercial carbon accounting software is expensive and complicated.

If I can offer:

  • Integrated financial + carbon accounting
  • Plain-text audit trail (better than expensive SaaS)
  • Affordable pricing for small businesses
  • Education and advisory (not just data entry)

…I could win clients who care about sustainability but can’t afford enterprise solutions.

Target clients:

  • B Corps (required to track environmental impact)
  • Certified Green Businesses
  • Companies with sustainability goals
  • Businesses responding to customer/investor ESG questions
  • Government contractors (increasing ESG requirements)

ROI pitch to clients

“Investors and customers increasingly demand ESG transparency. When they ask about your carbon footprint, you’ll have verified data, not vague guesses. That builds trust and can unlock funding/contracts.”

Also: Energy efficiency. When clients SEE their emissions trends, they often find cost-saving opportunities (LED lighting, route optimization, energy-efficient equipment). The carbon tracking PAYS FOR ITSELF through operational savings.

Question for the group

Has anyone here implemented carbon accounting for client services (not just personal use)?

I’d love to hear:

  • How you structured your service offering
  • What challenges you hit (data collection, client education, etc.)
  • How you priced it
  • Whether clients actually valued it enough to pay

I’m genuinely considering building this into my business model for 2026. This thread has me convinced the demand is there.

Thanks Alice for starting this conversation. And Fred, if you clean up that Fava dashboard plugin, I’d love to see it—might adapt it for client reporting.