Skip to content

GEF-CPT

The GEF-CPT format is a legacy text-based data exchange format for Cone Penetration Test (CPT) data, primarily used in the Netherlands and Belgium. It was created in 1999 to solve interoperability problems in Dutch geotechnical practice, it replaced a proliferation of proprietary formats. The format is no longer maintained and is technically outdated, but it remains in use due to extensive legacy data and support for it in engineering software.

A GEF-CPT file consists of a Header and a Datablock.

The Header contains structured metadata using keywords that start with #, defining properties from file format version (#GEFID) to equipment specifications (#MEASUREMENTVAR) and coordinate systems (#XYID, #ZID). The header ends with #EOH (End of Header)

After it comes the Datablock, plain tabular data with penetration depth and cone resistance as mandatory columns 1 and 2, followed by optional measurements like friction, pore pressure, or inclination.

This text-based structure makes GEF files human-readable1 while ensuring machine parsing compatibility across different software platforms.

1. ‘Human-readable’ is rather generous. I’d call it human-openable-a-in-a-text-editor at most

GEF-CPT-Report File Complete GEF cone penetration test report file GEF-CPT-Report File Header Block File metadata and test parameters GEF-CPT-Report File/Header Block Data Block Tabular measurement data organized in scans GEF-CPT-Report File/Data Block GEF Identification GEF-CPT-Report File/Header Block/GEF Identification #GEFID GEF version and format identification GEF-CPT-Report File/Header Block/#GEFID #REPORTCODE Report format type and version GEF-CPT-Report File/Header Block/#REPORTCODE #DATAFORMAT Data format specification GEF-CPT-Report File/Header Block/#DATAFORMAT File Metadata GEF-CPT-Report File/Header Block/File Metadata #FILEOWNER File creator/owner name GEF-CPT-Report File/Header Block/#FILEOWNER #FILEDATE File creation date GEF-CPT-Report File/Header Block/#FILEDATE #COMPANYID Executing company information GEF-CPT-Report File/Header Block/#COMPANYID Project Information GEF-CPT-Report File/Header Block/Project Information #PROJECTID Project identification GEF-CPT-Report File/Header Block/#PROJECTID #TESTID CPT test identification number GEF-CPT-Report File/Header Block/#TESTID Coordinate & Reference Systems GEF-CPT-Report File/Header Block/Coordinate & Reference Systems #XYID Horizontal coordinates and coordinate system GEF-CPT-Report File/Header Block/#XYID #ZID Surface elevation and height reference system GEF-CPT-Report File/Header Block/#ZID Test Execution GEF-CPT-Report File/Header Block/Test Execution #STARTDATE Test execution date GEF-CPT-Report File/Header Block/#STARTDATE #STARTTIME Test execution time GEF-CPT-Report File/Header Block/#STARTTIME Data Structure Definition GEF-CPT-Report File/Header Block/Data Structure Definition #COLUMN Number of numerical data columns GEF-CPT-Report File/Header Block/#COLUMN #COLUMNINFO Column definitions, units, and quantity numbers GEF-CPT-Report File/Header Block/#COLUMNINFO #LASTSCAN Number of data records (measurement scans) GEF-CPT-Report File/Header Block/#LASTSCAN Data Formatting GEF-CPT-Report File/Header Block/Data Formatting #COLUMNSEPARATOR Character dividing columns in data block GEF-CPT-Report File/Header Block/#COLUMNSEPARATOR #RECORDSEPARATOR Symbol at end of each measurement scan GEF-CPT-Report File/Header Block/#RECORDSEPARATOR #COLUMNTEXT Text column on/off setting per column GEF-CPT-Report File/Header Block/#COLUMNTEXT #REPORTDATAFORMAT Print format per column (FORTRAN style) GEF-CPT-Report File/Header Block/#REPORTDATAFORMAT Data Validation GEF-CPT-Report File/Header Block/Data Validation #COLUMNMINMAX Min/max values per column GEF-CPT-Report File/Header Block/#COLUMNMINMAX #COLUMNVOID No-data value definition per column GEF-CPT-Report File/Header Block/#COLUMNVOID Measurement Parameters GEF-CPT-Report File/Header Block/Measurement Parameters #MEASUREMENTVAR Numerical measurement parameters with indexed IDs GEF-CPT-Report File/Header Block/#MEASUREMENTVAR #MEASUREMENTTEXT Descriptive text information with indexed IDs GEF-CPT-Report File/Header Block/#MEASUREMENTTEXT Specimen Data GEF-CPT-Report File/Header Block/Specimen Data #SPECIMENVAR Numerical specimen parameters GEF-CPT-Report File/Header Block/#SPECIMENVAR #EOH End of header marker - separates header from data GEF-CPT-Report File/Header Block/#EOH Required Columns Mandatory data columns that must be present GEF-CPT-Report File/Data Block/Required Columns Optional Columns Additional measurement data columns GEF-CPT-Report File/Data Block/Optional Columns Column 1: Penetration Length (m) Depth of cone tip below reference level GEF-CPT-Report File/Data Block/Required Columns/Column 1: Penetration Length (m) Column 2: Cone Resistance (MPa) Measured cone tip resistance GEF-CPT-Report File/Data Block/Required Columns/Column 2: Cone Resistance (MPa) Friction Measurements Sleeve friction and friction ratio data GEF-CPT-Report File/Data Block/Optional Columns/Friction Measurements Pore Pressure Measurements Pore water pressure measurements (u1, u2, u3) GEF-CPT-Report File/Data Block/Optional Columns/Pore Pressure Measurements Inclination Measurements Cone inclination from vertical GEF-CPT-Report File/Data Block/Optional Columns/Inclination Measurements Calculated Values Derived parameters and soil properties GEF-CPT-Report File/Data Block/Optional Columns/Calculated Values Additional Measurements Electric conductivity, magnetic field, etc. GEF-CPT-Report File/Data Block/Optional Columns/Additional Measurements Text Comments Optional last column for comments on measurement scans GEF-CPT-Report File/Data Block/Optional Columns/Text Comments

Measurement Variables (#MEASUREMENTVAR) are numerical parameters that define the physical characteristics and configuration of the CPT equipment and test setup. They use a standardized numbering system where each ID has a specific, predefined meaning.

Each measurement variable follows this format:

#MEASUREMENTVAR = [ID], [value], [unit], [description].

The GEF specification reserves IDs 1-128 for standardized measurement variables. Users can define custom measurement variables using IDs outside this range.

Here follow the reserved IDs:

Measurement Text Variables (#MEASUREMENTTEXT) store descriptive information using a standardized ID numbering system. Unlike measurement variables (which are numerical), these contain human-readable text describing the project, equipment, and procedures.

#MEASUREMENTTEXT = [ID], [text description]

The following are #MEASUREMENTTEXT IDs are standardized:

The #XYID keyword defines the horizontal coordinate reference system in GEF-CPT files, specifying the positioning datum and location coordinates.

The format is #XYID = code, X, Y, deltaX, deltaY

  • code identifies the coordinate system.
  • X and Y provide the CPT location coordinates.
  • deltaX, deltaY indicate positioning accuracy.

For example, #XYID = 31000, 79578.38, 424838.97, 0.02, 0.02 places the test at Dutch RD coordinates (79578.38, 424838.97) with ±2cm accuracy.

This keyword enables places the test in real-world coordinates, which enables integration with GIS systems. This in turn enables integration of geotechnical data alongside structural or building models in spatial context.

Code 00000 allows a local coordinate system with its description in #MEASUREMENTTEXT = 7: For example:

#XYID = 00000, 125000, 450000, 0.1, 0.1
#MEASUREMENTTEXT = 7, Local site grid, origin at main building corner

The #ZID keyword defines the vertical reference system and surface elevation. It takes the format #ZID = code, elevation, accuracy.

  • The code identifies the height reference system
  • Elevation gives the surface level in meters relative to that datum
  • Accuracy specifies measurement precision.

For example, #ZID = 31000, +2.45, 0.02 means the CPT surface is 2.45 meters above NAP with ±2cm accuracy.

All penetration depths are measured relative to this surface level. Proper height referencing enables integration with other geotechnical data, topographic surveys, and other construction models like BIM.

Column Quantities are the standardized physical measurements that can appear in GEF-CPT data columns (#COLUMNINFO). Each has a unique ID number (1-36) that defines what the column contains.

For example #COLUMNINFO = 3, MPa, pore pressure u2, 6 tells parsers: “Column 3 contains quantity 6 (u2 pore pressure) in MPa”.

The quantity system ensures a column labeled “6” always means “u2 pore pressure”, regardless of which software created the file.

Though GEF-CPT was an important step forward at the time of its creation, it is architecturally primitive by modern data exchange standards.

Structural limitations

  • One file can only represent a single cone penetration test.
  • Text-based, single-file structure with no data typing, schema validation, or extensibility.
  • Fragile comma-separated value format prone to parsing errors.

Metadata and reference handling

  • No timezone information for timestamps
  • Coordinate systems defined via lookup tables instead of common spatial reference definitions.
  • Column definitions tie metadata directly to fixed column positions in the data block, tightly coupling description with layout

Extensibility and modern use

  • Cannot represent hierarchical relationships or complex data structures from modern multi-sensor CPT equipment.
  • Workarounds like separate dissipation test files linked by filenames replace proper relational modeling.

The GEF-CPT spec references standards superseded by modern ISO equivalents.

This creates a significant gap between current industry capabilities and the format’s design assumptions.

Regulatory Transition and Industry Reality

Section titled “Regulatory Transition and Industry Reality”

The Dutch Basis Registratie Ondergrond (BRO) program mandates a transition to XML-based data formats to ensure interoperability and modern regulatory compliance:

Since 2018, data submission in IMBRO/XML format is required. By July 1, 2025, governmental data holders must convert historical GEF-CPT data to IMBRO/XML. A grace period extends until 2030 for full historical migration.

The new BRO laws make geotechnical data in GEF-CPT a “compliance liability”.

Different institutional needs drive different format preferences. This quote summarizes the situation

The results of soundings, drillings and samples are processed the day after the investigation, after which the customer receives the report in an XML or GEF file. ‘The XML file is suitable for national databases such as BRO,’ says Van der Burg. ‘The GEF file is compatible with the calculation programmes.’ Geotechnisch onderzoek in steden, op velden en wegen

BRO requires XML because regulatory databases need structured data adhering to current standards for archival integrity and legal compliance. GEF persists because engineering calculation software, like D-Foundations, support it. As far as I know, no engineering software can read BRO’s complex XML structure. For most engineers, the priority is cone resistance data for calculation, not metadata for compliance

IMBRO/XML serves institutional governance; GEF remains established in workflows because it enjoys wider support, thus creating ‘legacy format lock-in’.

GEF 1.1.3 (Retrofit for BRO compatibility)

Section titled “GEF 1.1.3 (Retrofit for BRO compatibility)”

Version 1.1.3 was developed specifically for BRO compatibility by extending version 1.1.2 with additional #MEASUREMENTTEXT fields (101-128) to bridge legacy data formats with modern regulatory requirements. This extension was developed independently of Deltares and represents the final evolution of the GEF-CPT format before IMBRO/XML superseded it.

Information on GEF 1.1.3 is rather hard to find and I have yet to find a full ‘official’ spec for it. The best I’ve found so far is CPTdata.nl GEF1.1.3 Release notes. This official standard refers to the VOTB website for the GEF1.1.3 reference but I can’t find it there.

De Vereniging Ondernemers Technisch Bodemonderzoek (VOTB)

Vanuit de VOTB is geïnventariseerd welke extra informatie (velden) nodig zijn voor de BRO. Tevens zijn vanuit de leden van de VOTB extra velden gedefinieerd ten opzichte van GEF 1.1.2. GEF 1.1.2 is uitgebreid met deze extra velden en heeft de naam GEF 1.1.3 gekregen. De Excel-lijst met extra velden en dataformaat van deze extra velden, wordt beschikbaar via de VOTB website aan haar leden.

VOTB - GEF 1.1.3 – BRO –converter beschikbaar!