← All posts

GAEB file formats explained: GAEB 90, 2000, and DA XML (X81–X89)

A practical guide to GAEB file formats — the difference between GAEB 90, GAEB 2000 and GAEB DA XML, what the exchange phases X81–X89 mean, and how to tell which file you have.

If you work with German construction tenders, you have met GAEB files — and probably cursed at least one of them. They arrive with extensions like .d83, .x83, .p83, or .gaeb, and whether your software opens them cleanly is mostly luck. This post explains what those formats are, how they differ, what the number in the extension means, and how to tell in ten seconds which file you are holding.

What GAEB is

GAEB (Gemeinsamer Ausschuss Elektronik im Bauwesen — the joint committee for electronics in construction) is the German standard for exchanging commercial construction data — bills of quantities (Leistungsverzeichnisse), tenders, bids, awards and invoices — between the parties in a project. Instead of emailing a PDF that has to be retyped, the client's software exports a structured file, and the contractor's software reads it back. That is the promise. The reality is three generations of the standard living side by side, each with its own file extension.

The three format generations

GAEB 90 is the oldest format still in circulation. It is a fixed-width, line-based text format — every record sits at defined character positions. It is compact and unambiguous once you know the layout, but it has no real support for formatting, long texts, or Unicode, and it is unforgiving of the smallest deviation. Files carry extensions .d81 through .d89.

GAEB 2000 modernised the structure and added richer text and formatting, but it is a transitional format you still occasionally receive from older estimating systems. Extensions .p81 through .p89.

GAEB DA XML is the current standard (DA stands for Datenaustausch, data exchange). It expresses the same information as XML, which makes it far more expressive — long texts, markup, execution descriptions, and metadata all have a proper home. Extensions .x81 through .x89, plus .x31 for quantities. DA XML itself has versions — 2.0, 2.1, 3.0, 3.1, 3.2 and, since 2021, 3.3 — and a 3.3 file is not the same as a 3.1 file, although every current tool reads all of them. When people say "the modern GAEB format," this is what they mean, and it is what most new tools target first.

The trap: all three can describe the same tender. A single manufacturer might receive GAEB 90 from one architect and DA XML from the next, for functionally identical work.

The exchange phases: what the number means

The number after the letter is not a version — it is the phase of the tendering process the file belongs to, and it tells you who sent it, what is in it, and what you are expected to send back. This is the part that trips people up most.

PhaseGerman nameWhat it containsWho sends itWhat you do with it
80LV-StammdatenA blank bill of quantities: positions and texts, no quantities or pricesPlanner ↔ plannerRarely reaches a bidder
81LeistungsverzeichnisThe bill of quantities with quantities, no pricesPlanner → clientRead it; the 83 that follows is derived from it
82KostenanschlagThe client's own cost estimate; also used for a Preisspiegel comparing several bidsInternal to the clientNever sent to bidders
83AngebotsaufforderungThe request for bids: positions, quantities, texts — no pricesClient → biddersPrice it and return an 84
84AngebotsabgabeYour bid: the same structure with unit prices and totalsBidder → clientThe file you deliver
85NebenangebotA side offer deviating from the requestBidder → clientOptional, alongside the 84
86AuftragserteilungThe award: the accepted bid, now the contractClient → contractorYour contract bill of quantities
88NachtragA change order / claim: new or changed positions after awardContractor → clientPriced like a bid, referenced to the 86
89RechnungInvoice data: executed quantities against the contractContractor → clientQuantities may differ from the 86; prices may not

Two phases live outside this sequence: 31 (Mengenermittlung, quantity take-off with the measurement rows behind each quantity) and the 93–97 trade phases for ordering material. You will meet an X31 when a client wants your quantities proven, not just stated.

In practice, a manufacturer most often receives an 83 and has to return an 84. The positions, order and identifiers must match exactly — the client's software reconciles your 84 against its original 83 line by line, and a bid whose position numbers no longer line up is, at best, retyped by hand on the client's side and, at worst, excluded.

Which file do I have?

Read the extension right to left:

  1. The number is the phase from the table above. 83 = you are being asked to bid; 84 = this is a bid; 86 = this is a contract.
  2. The letter is the generation: d = GAEB 90, p = GAEB 2000, x = DA XML. A .gaeb extension is almost always DA XML.
  3. Inside a DA XML file, the first lines name the version (GAEB_DA_XML/DA83/3.3) and the exchange phase (<DP>83</DP>). If the extension and the DP disagree, the DP is right — extensions get renamed, phase markers don't.

So a .x83 is a DA XML request for bids; a .d84 is a GAEB 90 bid; a .p86 is a GAEB 2000 contract. If you want the check done for you, the free GAEB-Check reports generation, version and phase in the first line of its result, along with the positions, totals and whatever is wrong with the file.

Why this matters for estimating

Every one of these variations is a place where a workflow breaks:

  • An estimating tool that reads DA XML but not GAEB 90 forces someone to retype the older files by hand.
  • A subtle encoding or position mismatch in an 84 can make the whole bid unreadable to the client — after hours of pricing work.
  • Long execution texts survive in XML but get truncated when a tool downgrades to an older format.
  • A file saved as .x83 that is really an 84 (it happens — someone "saved as") will be imported as a request with prices in it, and the prices are silently dropped.

Once you can name a file by its generation and phase, the remaining problem is software that only speaks one of them. That is the whole reason our open-source parser pyGAEB exists — it reads every DA XML version from 2.0 to 3.3 and every exchange phase from 80 to 89 into one clean, typed model, converts between versions, and writes 3.3 files that validate against the official schemas. (GAEB 90 reading is on the roadmap, not shipped — we would rather say so than have you find out.) If you just want to see what is inside a file you received, the free GAEB-Check opens any DA XML tender in the browser without storing it; the guide to opening a GAEB file without special software compares that with the other options, and the Python guide shows the same parser from code.

If you only remember one thing: the letter tells you the generation (90, 2000 or XML), the number tells you the phase (request, bid, award, invoice). Get those two straight and most GAEB confusion disappears.

Comments

Comments are reviewed before they appear.

Loading comments…

    Only used if we need to reply to you directly.

    Your name and comment will be published after review. Privacy policy.