pyGAEB · Open source

The GAEB engine for the modern stack.

An MIT-licensed Python library that turns any GAEB DA XML file — every version, every exchange phase — into one clean, decimal-precise, typed model. Parse, validate, compare, convert, write back. It’s the record layer of DatumOS, and it’s yours to use.

2.0–3.3 DA XML versions, auto-detected
20+ exchange phases supported
900+ tests in the suite
MIT licensed, open source

Capabilities

One API for everything GAEB.

Real-world GAEB files are messy: mixed versions, broken encodings, vendor quirks. pyGAEB is built for the files you actually receive — tolerant by default, strict when you ask.

Every version, every phase

DA XML 2.0 through 3.3, auto-detected, plus legacy GAEB 90. Tendering (X81–X86), change orders (X88), invoices (X89), quantities (X31, REB), costing (X50–X52), ordering (X93–X97), framework agreements (X83Z/X84Z).

Decimal-precise by design

Every monetary and quantity value is a Python Decimal — never a float. Auditable, dispute-safe arithmetic that respects GAEB precision rules and VOB totals conventions.

Tolerant of real files

Encoding repair for mangled umlauts, recovery of malformed XML, graceful handling of spec-violating exports from common AVA tools. Warnings, not crashes.

Validation — within and across phases

Structural, numeric, and phase-specific checks — plus cross-phase validation: does the bid match the tender structurally? Does the invoice match the contract’s unit prices?

Diff with financial impact

Compare two bills of quantities: every change classified by significance, added and moved items detected, financial impact computed. Export the report to HTML or Excel.

Convert & write back

Round-trip any document: parse, modify, write to any DA XML version — or a different phase, e.g., turn a tender (X83) into a bid (X84). Conversion reports flag any data loss.

Build from scratch

A fluent builder for constructing bills of quantities programmatically — automatic numbering, phase rules, duplicate detection, automatic totals.

Export anywhere

Hierarchy-aware Excel workbooks, JSON trees, flat CSV — plus a CLI (pygaeb info / validate / convert / diff / export) for quick pipeline work.

Optional LLM enrichment

Classify items by trade and element type, map to IFC and DIN 276, extract typed specs (door widths, fire ratings) — with the LLM provider of your choice, cloud or fully local for air-gapped environments.

Why open source

The record layer shouldn’t be a black box.

Commercial construction data is contractual data. The layer that parses, validates, and totals it must be inspectable — by your developers, your auditors, and your industry. That’s why the DatumOS record layer is open source under MIT: read every line, extend it, embed it, or run it entirely offline. Our commercial products are built on the same engine we publish — and it’s built in the open, where issues from real-world GAEB files shape every release.

“Thanks for publishing this great library. It has saved me a lot of work and handles the GAEB format really well.”
pyGAEB user · GitHub issue #20 ↗

Python 3.9+ · typed API · async support · optional extras for CLI, Excel, and LLM classification.

FAQ

Common questions about pyGAEB.

What is pyGAEB?

pyGAEB is an open-source Python library that parses, validates, compares, converts, and writes GAEB DA XML files — every version and exchange phase — into one clean, decimal-precise, typed model.

Which GAEB versions and phases does it support?

DA XML 2.0 through 3.3 (auto-detected) plus legacy GAEB 90, across tendering (X81–X86), change orders (X88), invoices (X89), quantity determination (X31/REB), costing (X50–X52), and ordering (X93–X97).

Is it really free to use commercially?

Yes. pyGAEB is MIT-licensed — free to read, extend, embed, and use commercially, with no usage fees.

Can it turn a tender (X83) into a bid (X84) or convert between versions?

Yes. It round-trips documents — parse, modify, and write back to any DA XML version or a different phase — and conversion reports flag any data loss.

Does it need an internet connection or an LLM?

No. Core parsing, validation, and writing are fully deterministic and run offline. The optional LLM classification layer is separate and can run on a local model for air-gapped environments.

How do I install it?

pip install pyGAEB (Python 3.9+). Optional extras add the CLI, Excel export, and LLM classification.