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 is the engine under DatumOS, and it is yours to use.
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 DA XML version, every phase
DA XML 2.0 through 3.3, auto-detected. Tendering (X81–X86), change orders (X88), invoices (X89), quantities (X31, REB), costing (X50–X52), ordering (X93–X97), framework agreements (X83Z/X84Z). Legacy fixed-width GAEB 90 is on the roadmap.
Schema-valid output
Written DA XML 3.3 files carry the IDs, element order and per-phase profiles the official 2021-05 schemas require. Verified against the BVBS certification test files for X81, X82, X83, X84 and X86.
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 and 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.
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.
In your AI assistant
Ask a GAEB file a question.
pyGAEB ships a Model Context Protocol (MCP) server. Point Claude Desktop, Claude Code, Cursor, Codex CLI, Gemini CLI or VS Code Copilot at a folder of tenders and ask in plain language: what is the total, which ten positions drive the cost, what changed since last week, how do three bids compare. The server runs locally, never calls a model itself, and returns small, paginated answers so a 5,000-position tender fits the context window.
ChatGPT and the Gemini app only connect to remote MCP servers over HTTPS, so they need the streamable-HTTP transport behind a tunnel rather than a local process.
MCP server guide →How it compares
Open source, offline, Python-native.
The established alternative for developers is a commercial GAEB web service with generated clients in many languages. pyGAEB takes the other road: the engine is a library you install, read and run offline, with no per-call fees and no data leaving your machine. Its DA XML 3.3 output validates against the official schemas, and bugs reported from real tender files are typically fixed within days. What the commercial service still does better today: fixed-width GAEB 90 input and client libraries beyond Python.
Why open source
The layer that totals your bid should not 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 is why the DatumOS engine is open source under MIT: read every line, extend it, embed it, or run it entirely offline. Our commercial product is built on the same engine we publish — and it is 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.”
“In Python ist pyGAEB die übliche Library; sie frisst sowohl d- als auch x-Formate.”
Python 3.10+ · typed API · async support · optional extras for CLI, Excel, MCP, 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), across tendering (X81–X86), change orders (X88), invoices (X89), quantity determination (X31/REB), costing (X50–X52), and ordering (X93–X97). Fixed-width GAEB 90 is planned.
Do files written by pyGAEB pass the official GAEB checks?
DA XML 3.3 output for X81, X82, X83, X84 and X86 validates against the official 2021-05 GAEB schemas and passes the BVBS certification test files. Formal BVBS certification applies to software products, not libraries; DatumOS is pursuing it for the platform.
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.10+). Optional extras add the CLI, Excel export, the MCP server, and LLM classification.