The Material Library: How Custom Emission Factors and EPDs Sit Alongside the NGA 2025 Global Library

Your concrete, steel and aluminium factors come from supplier EPDs and custom formulas, not the NGA workbook, and the auditor will ask which edition and source produced each number. Here is how those factors sit beside the read-only NGA 2025 seed with provenance on every row.

Carbonly.ai Team October 8, 2026 12 min read
Material LibraryCustom Emission FactorsEPDNGA 20255-Tier MatchingFactor Version
The Material Library: How Custom Emission Factors and EPDs Sit Alongside the NGA 2025 Global Library

Here is the awkward truth about the NGA 2025 factors workbook: it is comprehensive for fuels and grid electricity, and it is thin everywhere else. If you are a construction reporter, three of your biggest emission categories (concrete, structural steel, aluminium) are not sitting in the NGA at all. They live in Environmental Product Declarations published by the suppliers themselves, in industry-average factors from sector bodies, and in custom formulas your engineering team wrote for materials that do not exist in any published library.

The uncomfortable part is that the auditor does not care NGA is thin. Under AASB S2 they will ask which factor you used, which edition, and which methodology. "An EPD from the concrete supplier" gets a follow-up asking for the PDF and the paragraph you read the number from. "An industry-average factor" gets a follow-up asking which association published it and when it was reviewed. A custom formula gets a follow-up asking for the formula text, the bindings, and the version that was live when the emission was posted.

The Material Library in Carbonly is designed around that reality. A read-only NGA 2025 seed nobody can touch. A tenant custom library that holds everything else, with provenance stamped on every record. And a matching engine that walks a document text through both layers in a specific order, then tells the auditor which layer produced the answer.

Where each of your factors lives, and who can change it

The library is structurally three layers. The reporter sees them as one search box, but every match knows which layer it came from.

Layer 1. Global read-only NGA 2025. 193 government-verified factors from the DCCEEW NGA 2025 workbook. Per-litre fuel factors (21 of them), per-state grid electricity factors (NSW 0.64, VIC 0.78, QLD 0.67, SA 0.22, WA SWIS 0.50, TAS 0.20, NT DKIS 0.56 kg CO2-e per kWh), gas per-GJ factors, fugitive gas factors, and the 16 NGA tables that sit behind them. This layer is read-only. Tenants cannot edit it. Tenants cannot add to it. When DCCEEW publishes the 2026 edition next year, the 2025 seed does not get overwritten. It gets pinned in place so historical emissions calculated against it stay traceable, and the 2026 seed lands as a new version alongside.

The read-only constraint exists for a reason. If one tenant could edit "diesel Scope 1" to their preferred number, and another tenant read the same row from the shared library, you would have cross-tenant contamination. Non-NGA data (EPiC, EEIO, IEA, PCAF) was cleaned out of the shared NGA library in March 2026 for this reason. Government-verified only.

Layer 2. Tenant custom library. This is where the reporter's own world lives. Supplier-specific EPDs (Boral's N40 concrete, InfraBuild's structural steel, Kingspan's insulation). Industry-average factors from sector associations. Custom formulas for engineered materials that do not have a published EPD. Reporting-only rows for water consumption, recycled waste tonnage, and renewable energy certificates (these carry an emission factor of zero and are excluded from Total Emissions aggregation, but the quantity is preserved for NGER reporting).

The custom layer is org-scoped and org-owned. A tenant's edits, aliases, and negative keywords never affect another tenant. Two tenants can carry the same material name with different emission factors and different learning histories, and neither ever sees the other's data.

Layer 3. Aliases and synonyms. A learning layer that sits inside each material record. When a reviewer corrects a wrong match, or assigns a material to a line that did not match, the line text is added to that material's alias list for that organisation (up to 500 aliases per material). Next time the same wording shows up, the alias tier catches it before the fuzzy tier or the AI tier gets a chance to guess.

The aliases are per-tenant. A reviewer at one firm correcting "TripleBlend 40MPa" to N40 Concrete does not push that alias to any other tenant. A separate curated seed of tenant-agnostic aliases ships with the NGA layer (things like "NSW GreenPower" mapping to grid electricity, "R-410a refill" mapping to R-410A refrigerant top-up), but those graduate through a review process. They never auto-promote from tenant feedback.

Getting a supplier EPD into the library with its source attached

EPDs are the workhorse for construction materials. Concrete grades N20 through N50, structural steel, insulation, timber, paints, waterproofing. None of these live in the NGA workbook. All of them live in EPDs published by the suppliers themselves or by industry associations.

There are two import paths.

The batch path pulls from the EPD Australasia programme registry and the consolidated AU EPD database, which aggregates roughly 6,240 records across eleven verified sources including EPD Australasia, Environdec, AusLCI, NABERS, and WoodSolutions. The reporter searches by product family, picks the EPDs relevant to their supply chain, and imports them in one action. Each imported record carries its source reference (which registry, which programme, which EPD number), the declared unit, the lifecycle module coverage (A1-A3, A4, A5, C1-C4, D), and the AI Context needed for document matching. If an EPD covers A1-A3 only, that gets tagged on the record so the auditor sees which lifecycle stages are in scope.

The per-document path handles a fresh EPD PDF that is not yet in any registry. The AI extractor reads the PDF and pulls the GWP-total, declared unit, validity dates, programme operator, and registration number. The reporter reviews the extracted factor before activation. Once activated, the EPD gets its own material record with a link back to the source PDF in the audit trail.

Supplier product learning runs on top of both. When a supplier publishes a new EPD (say Boral's N40 grade in 2027), the system flags the existing record as stale and prompts the reporter to review the new version. The old version is not overwritten. It gets an effective-to date so historical emissions calculated against it stay intact.

Custom formulas for engineered materials

Some materials do not have EPDs and never will. Site-mixed concrete blends. Custom-engineered timber products. In-house waste streams. For these, the reporter defines a formula.

The formula sits inside a sandboxed evaluator with an explicit binding list. Bindings are variables the formula can reference: extracted quantities from the document (litres, kilograms, cubic metres), configured constants (density, calorific value), and per-period lookups (opening odometer, closing odometer). The evaluator is pure and deterministic. No random numbers, no time-dependent functions, no global variables. When the auditor asks how a row was calculated, the system shows the formula text, the resolved bindings for that row, and the numeric result.

Five calculation types are available: direct (use the extracted quantity as-is), delta_from_previous (subtract the prior reading for the same asset), ratio (apply a configured ratio), spend_to_activity (convert a currency amount into a physical quantity), and custom_formula (arbitrary tenant-defined expression). Four fallback strategies handle a missing prior reading (new vehicle, missing month): skip_row, use_previous, use_zero, flag_for_review. All configurable per material.

See our post on Configurable AI, org instructions, supplier templates, and calculation rules for how this sits inside the broader Carbon Lead configuration surface.

How "N40 Concrete - TripleBlend" finds the right factor

When a document extraction produces a text like "Diesel Fuel - BP" or "N40 Concrete - TripleBlend", the matcher walks a specific sequence. Each tier hits both the NGA layer and the tenant custom layer. Whichever tier fires first wins.

Tier 1 is exact name or code match. Confidence 1.0. The extracted text is normalised, common suffixes are stripped, and the result is compared against material names and codes across the whole library. If it matches, done. No review needed.

Tier 2 is alias match. Confidence between 0.70 and 1.0 depending on match quality. The extracted text is checked against the alias arrays on every material, both the manual aliases and the aliases learned from prior corrections. An exact alias match scores 1.0. A "text contains alias" scores 0.85. A "material name contains text" scores 0.75.

Tier 3 is AI Context match. This tier reads the extraction rules stored on each material: key phrases, related terms, industry terms, common misspellings, plain-English "what to look for" hints. A key-phrase hit scores 0.85. A related-term hit scores 0.82. Then the negative-keyword pass runs: if the extracted text contains any negative keyword for a candidate material (say the text mentions "stationary generator" and the candidate is a Diesel Transport factor), that candidate's confidence is dropped by 0.40. This is how you stop "Engine Oil 15W-40" from matching against diesel.

Tier 4 is fuzzy match. Standard edit-distance similarity, with a containment bonus for substrings that are at least three characters long. Fires only above a 0.50 threshold. Always flags for review.

Tier 5 is the AI fallback. Only reached when the four algorithmic tiers all fail. The extracted text plus a candidate list (up to 20 materials with their AI Context summaries) goes to a language model, which returns a JSON response with the matched material name, a confidence score, and a reasoning line. Always flags for review. If the LLM tier fails as well, the row is marked Unknown and the reviewer is asked to either pick a material manually or add a new one.

The five-tier design is deliberate. Cheap tiers first, expensive tiers last, human review whenever confidence drops below 0.85. See our deep dive on the 5-tier material matching engine for the scoring tables and the entrenchment problem the alias-learning system still has to solve.

What the auditor sees first: where each factor came from

Every emission row carries a Match Provenance badge with one of eight states. The states matter because they answer the auditor's first question: "Where did this factor come from?"

The eight states are: Confirmed by reviewer (green, a human clicked Confirm), Reviewer corrected (green with pencil, a human overrode the AI), Tenant alias (blue, the tenant's own aliases matched), Supplier template (purple, a per-supplier column-mapping rule fired), Org instruction (indigo, a tenant-authored classification rule fired), Global NGA library (grey, a government-verified factor matched directly), Calculation rule (amber, a custom formula produced the quantity), and AI direct (yellow, the LLM matched with no tenant memory to fall back on).

The state matters for two reasons. First, it lets the reporter filter for the rows that carry the most uncertainty. The yellow AI-direct rows are the ones a reviewer should look at first. Second, it lets the auditor separate factors that came from the tenant's own configured library (blue, purple, indigo, amber) from factors that came from a government seed (grey) from factors that came from a language model (yellow). Those are three different classes of evidence, and they read differently under limited assurance.

Why an April 2025 bill still uses the NGA 2025 factor next year

Emission factors move. The Victoria grid factor was 0.77 in NGA 2024 and 0.78 in NGA 2025. The system holds one active factor per material at any given moment, with an effective-from date, an effective-to date, and a source reference. Adding a new factor version automatically closes the previous version at yesterday's date.

When an emission row is calculated, the system picks the factor whose effective window contains the activity date, not the factor that is active today. A bill dated 15 April 2025 calculated in October 2026 still resolves against the NGA 2025 factor, not the NGA 2026 factor. Historical calculations stay stable. See our emission factor versioning and audit trail post for how this defends a five-year NGER records-retention obligation.

Activating a new factor version does not silently overwrite the previous emissions. It triggers an inline recalculation, org-scoped, filtered to the material and the date window the new version covers. Every row that gets recalculated writes an audit event with the old value, the new value, the new factor's source reference, and the reason the recalculation ran. The auditor can walk backwards through the trail and see when the factor changed and why.

How the auditor walks a custom factor back to source

Consider a concrete emission line on an ASRS report. The auditor asks which factor you used. The answer is a chain of clicks: emission row → material record → active emission factor version → source reference. If the source reference is "NGA 2025 Table 3.1 row 4", the auditor sees the exact table citation. If it is "EPD Australasia registration EPD-AU-XXXX", the auditor sees the PDF uploaded at import time and the paragraph the GWP-total came from. If it is a custom formula, the auditor sees the formula text, the resolved bindings, and the numeric evaluation.

Every step is timestamped and user-attributed. Who created the material. Who activated the factor version. Who confirmed the match on that document. The trail is retained on a seven-year policy, longer than the five-year NGER minimum, because assurance engagements sometimes reopen prior periods.

What the Material Library does not do

Two honest limitations.

The library does not auto-source EPDs from vendor websites. It does not crawl supplier product pages, sniff for PDFs, and import them without human review. The reporter uploads the PDF or references it from the EPD Australasia registry. That is a design choice, not a gap. An EPD imported without human confirmation of the declared unit, lifecycle module coverage, and validity dates is an unauditable emission factor.

The library also does not silently produce a spend-based fallback when the physical quantity is missing. If an invoice has a dollar figure but no litres, the system routes to a spend_to_activity calculation rule if one is configured for that supplier, or flags the row for review if not. See our post on per-supplier extraction templates for why the physical-quantity path is the one to configure first.

FAQ

Can I edit an NGA factor if I disagree with the DCCEEW number? No. The NGA layer is read-only. If your view is that the government-published factor is inappropriate for your reporting boundary, you author a custom factor in your tenant library with a source reference explaining the deviation, and the Match Provenance badge on any row calculated against it makes clear it is a custom factor, not the NGA seed. The auditor sees the divergence explicitly.

What happens when NGA 2026 is published? The 2026 seed lands as a new version alongside the 2025 seed. Historical emissions calculated against 2025 factors stay pinned. New emissions calculated after the activation date resolve against 2026 factors. There is no silent overwrite.

Can I import an EPD that has expired? Yes, but the record carries an "expired" flag and the AI Context flags any calculations against it for review. The auditor sees the validity dates on every EPD-sourced factor.

How is a supplier EPD different from an industry-average factor? The EPD is supplier-specific and product-specific. The industry-average is a sector-wide mean. Both live in the tenant custom layer, but they carry different source references and different uncertainty percentages. The Match Provenance badge distinguishes them, and the auditor reads them differently.

Does my tenant learning affect other Carbonly organisations? No. All aliases, negative keywords, custom formulas, and material corrections are scoped to your organisation ID. The curated global AI Context that ships with the NGA seed is separate and only graduates through a review process. Nothing you correct in your library ever surfaces in another tenant's library.

Carbonly runs on per-project pricing with a $100/month platform floor and no per-seat surcharge. If you want to see how your existing EPDs, industry-average factors, and custom formulas would sit alongside the NGA 2025 seed in a working library, email hello@carbonly.ai with a sample and we will walk you through the import.

Related reading:

Supplier invoices turned into Scope 3 line items you can show an auditor

Bring one subcontractor invoice, concrete docket or freight bill. In 30 minutes we show the quantities Carbonly reads from it, the factor or EPD each line matches, and the source document behind every tonne.

Book a 30-minute call Prefer email? hello@carbonly.ai

Per-project pricing, no per-seat fees. We reply within business hours.