Import field reference
The column contract for every import format: the sheet each one expects, its columns, which are required, and the defaults Erde fills in. Use it to prepare a file before you open the app, or to understand a validation message.
The multi-sheet laboratory deliverable has its own page — Lab Report (EDD) format. For the end-to-end workflow (validate, review, commit, roll back) see Import data.
The fastest way to get a correctly shaped file is still Download Template on the import create form — it produces the exact columns below for the type you pick.
How to read these tables
| In the Required column | Meaning |
|---|---|
| Yes | You must provide a value in every data row. |
Default: x | Optional. A blank cell is filled with x. |
| Cond. | Required only under the condition in the notes. |
| No | Optional. |
A few conventions hold across all formats:
- A required column (its header must be present on the sheet) is a separate, stricter check than a required value. A missing required header fails the import before any row is read. Most of the time the two coincide; where they differ it is noted.
- Enum columns take a value's code or name — see Codes and names. The value lists live in Enumerations and codes.
- Lookup columns resolve against your project's reference data (matrices, units, organizations, and so on) by name or code. Equipment resolves by code or asset tag.
- Column order does not matter; column names do. Unrecognized columns are ignored with a warning.
- Dates and times use your locale's parseable formats; date-time columns accept a combined value.
Sample
Sheet: one sheet named Samples (required). One sample per row.
| Column | Required | Type | Notes |
|---|---|---|---|
Code | Yes | text | Sample code, unique within the Project. |
Name | No | text | Display name. |
LocationCode | No | lookup | The Location. Optional, but a value you supply must resolve. |
SampleType | Default: Normal | enum | Sample type. |
Matrix | Yes | lookup | The sample Matrix. |
Status | No | enum | Sample status. |
ArchiveStatus | No | enum | Sample archive status — Archived or Disposed. Leave blank for a normal sample. Separate from Status. |
IsComposite | Default: false | bool | Whether the sample is a composite. |
SampleDate | No | date | Collection date. |
SampleTime | No | time | Collection time. |
SampleEndDate | No | date | End date for a composite/duration sample. |
SampleEndTime | No | time | End time. |
SampleMethod | No | lookup | Sampling method. |
ProjectTask | No | lookup | The project task the sample belongs to. |
ParentSampleCode | No | text | Parent sample code (stored as text; field samples link by value, not FK). |
ParentSampleDate | No | date | Parent sample date. |
SampledBy | No | text | Who collected it. |
CoordinateX / CoordinateY | No | number | Sample location coordinates (paired). |
CoordinateSystem | No | lookup | Coordinate system for X/Y. |
Elevation | No | number | Sample elevation. |
ElevationUnit | No | enum | Elevation unit. |
VerticalDatum | No | lookup | Vertical datum for the elevation. |
DepthStart / DepthEnd | No | number | Sample depth interval. |
DepthUnit | No | enum | Unit for the depth interval. |
WeatherConditions | No | text | Free text. |
Notes | No | text | Free text. |
Location
Sheet: one sheet named Locations (required). Creates new locations, with an optional primary coordinate on the same row. To add coordinates to existing locations in bulk, use Coordinate.
Core columns
| Column | Required | Type | Notes |
|---|---|---|---|
Code | Yes | text | Location code, unique within the Site. A code that already exists is skipped (not re-created). |
Name | No | text | Display name. |
LocationType | Yes | lookup | The location type. |
Status | Default: Active | enum | Location status. |
SiteArea | No | lookup | Site area assignment. |
SiteAreaNotes | No | text | Notes on the site-area assignment. |
EstablishedDate | No | date | Date established. |
DecommissionedDate | No | date | Date decommissioned. |
IsAccessible | Default: true | bool | Whether the location is accessible. |
AccessNotes | No | text | Access notes. |
OwnerOrganization | No | lookup | Owning organization (must be active). |
Description | No | text | Free text. |
Inline primary-coordinate columns (optional)
Fill these to create the location's primary coordinate in the same row. They are
all-or-nothing: the block runs only when CoordinateX, CoordinateY, or
Elevation is present.
| Column | Required | Type | Notes |
|---|---|---|---|
CoordinateX / CoordinateY | Cond. | number | A complete X/Y pair (easting/northing or lon/lat per the coordinate system). One axis without the other is incomplete. |
CoordinateSystem | Cond. | lookup | Required when X/Y are present, unless the Site has a default coordinate system. |
HorizontalAccuracy | No | number | Horizontal accuracy value. |
HorizontalAccuracyUnit | No | enum | Unit for horizontal accuracy. |
Elevation | No | number | Elevation value. |
ElevationUnit | No | enum | Elevation unit. |
VerticalAccuracy | No | number | Vertical accuracy value. |
VerticalAccuracyUnit | No | enum | Unit for vertical accuracy. |
VerticalDatum | Cond. | lookup | Required when Elevation is present, unless the Site has a default vertical datum. |
MeasurementStatus | Default: Measured | enum | Measurement status of the coordinate. Used only when coordinate/elevation data is present. |
CollectionMethod | No | enum | Collection method. |
MeasurementDate | No | date | Date measured. |
MeasuredBy | No | text | Who measured. |
SurveyOrganization | No | lookup | Surveying organization (must be active). |
CoordinateNotes | No | text | Notes on the coordinate. |
Coordinate
Sheet: one sheet named Coordinates (required). Attaches coordinates to existing locations — one coordinate per row.
| Column | Required | Type | Notes |
|---|---|---|---|
LocationCode | Yes | lookup | The existing Location to attach to — must already exist. |
CoordinateX / CoordinateY | Cond. | number | A complete X/Y pair. At least one of a coordinate pair or an elevation is required per row. |
CoordinateSystem | Cond. | lookup | Required with an X/Y pair, unless the Site has a default. |
HorizontalAccuracy | No | number | Horizontal accuracy value. |
HorizontalAccuracyUnit | No | enum | Unit for horizontal accuracy. |
Elevation | Cond. | number | Elevation value (or supply a coordinate pair). |
ElevationUnit | No | enum | Elevation unit. |
VerticalAccuracy | No | number | Vertical accuracy value. |
VerticalAccuracyUnit | No | enum | Unit for vertical accuracy. |
VerticalDatum | Cond. | lookup | Required when Elevation is present, unless the Site has a default. |
IsPrimarySpatial | Default: false | bool | Mark as the location's primary spatial coordinate. |
IsPrimaryElevation | Default: false | bool | Mark as the location's primary elevation. |
MeasurementStatus | Default: Measured | enum | Measurement status. |
CollectionMethod | No | enum | Collection method. |
MeasurementDate | No | date | Date measured. |
MeasuredBy | No | text | Who measured. |
SurveyOrganization | No | lookup | Surveying organization (must be active). |
Notes | No | text | Free text. |
Water Level
Sheet: one sheet named Water Levels (required). One reading per row. See Water levels.
| Column | Required | Type | Notes |
|---|---|---|---|
LocationCode | Yes | lookup | Monitoring location (code or alias). |
Well | No | lookup | Well at the resolved location. |
MeasurementDate | Yes | date-time | When the level was measured. |
Unit | Default: ft | enum | Unit for the length values below. |
Method | No | enum | Measurement method. |
Equipment | No | lookup | Instrument (by code or asset tag). |
MeasuringPointElevation | No | number | Measuring-point elevation. |
DepthToWater | No | number | Depth to water. |
GroundwaterElevation | No | number | Groundwater elevation. |
LnaplThickness / DepthToLnapl | No | number | LNAPL thickness / depth (paired). |
DnaplThickness / DepthToDnapl | No | number | DNAPL thickness / depth (paired). |
TotalDepth | No | number | Total depth. |
IsDry | No | bool | Well-dry flag. |
DryReason | No | text | Reason if dry. |
IsValid | Default: true | bool | Validity flag. |
Qualifier | No | text | Data qualifier. |
MeasuredBy | No | text | Who measured. |
Notes | No | text | Free text. |
At least one measurement value is required per row, and the NAPL thickness/depth pairs must be supplied together — both enforced at validation.
Well Purge
Sheet: one sheet named Well Purges (required). One purge event per row. See Well purges.
| Column | Required | Type | Notes |
|---|---|---|---|
LocationCode | Yes | lookup | Monitoring location. |
Well | No | lookup | Well at the location. |
Method | No | enum | Purge method. |
Criterion | No | enum | Purge criterion. |
Equipment | No | lookup | Instrument (by code or asset tag). |
PurgeStart | Yes | date-time | Purge start. |
PurgeEnd | No | date-time | Purge end (must be after start). |
TargetVolume / PurgedVolume | No | number | Target / actual purge volume. |
VolumeUnit | No | enum | Unit for the volumes. |
PurgeRate | No | number | Purge rate. |
PurgeRateUnit | No | enum | Unit for the purge rate. |
PumpDepth | No | number | Pump intake depth. |
PumpDepthUnit | No | enum | Unit for pump depth. |
WentDry | No | bool | Well-went-dry flag. |
IsValid | Default: true | bool | Validity flag. |
Qualifier | No | text | Data qualifier. |
PurgedBy | No | text | Who purged. |
Notes | No | text | Free text. |
Amount/unit pairs must be supplied together, enforced at validation.
Field Parameter
Sheet: one sheet named Field Parameters (required). This format has dynamic parameter columns — see below. See Field parameters.
Fixed columns
| Column | Required | Type | Notes |
|---|---|---|---|
LocationCode | Yes | lookup | Monitoring location. |
Well | No | lookup | Well at the location. |
Date | Yes | date | Reading date. |
Time | Yes | time | Reading time. |
RecordedBy | No | text | Who recorded. |
Equipment | No | lookup | Meter/probe (by code or asset tag). |
ProbeDepth | No | number | Sonde depth in the water column. |
ProbeDepthUnit | No | text | Unit for probe depth. |
IsUnstable | Default: false | bool | Session marked unstable. |
StabilizedAt | No | date-time | Stabilization time. |
ReadingInvalid | Default: false | bool | This reading is invalid. |
ReadingNotes | No | text | Reading-level notes. |
Notes | No | text | Session-level notes. |
Dynamic parameter columns
Every header that is not one of the fixed columns above is treated as a parameter column, and its cell holds that parameter's value for the row.
- Header format:
ParameterNameorParameterName(unit)— for exampleTemperature(°C),pH,Dissolved Oxygen(mg/L). The parameter is resolved by name (then code) against your active parameters; an unknown parameter fails the row. - Unit: the
(unit)hint is resolved by name or code. With no hint, or an unrecognized one, Erde falls back to the parameter's default unit (with an informational note); a parameter with no default unit and no usable hint fails. - Two columns that resolve to the same parameter in one row is an error.
- At least one parameter value is required per row. A blank parameter cell simply means no reading for that parameter on that row.
Logger
File: exactly one file. Logger telemetry is staged as a per-location (or single-stream) summary and streamed straight to the database on commit — it is not one staged row per reading. CSV is unbounded; an Excel logger file is capped at 100,000 rows. See Continuous loggers and the load modes.
Logger files have reserved column names rather than a fixed schema. Two independent choices shape the file:
Layout (auto-detected):
| Layout | Columns | Meaning |
|---|---|---|
| Wide | Timestamp, one column per channel (e.g. Water Level (ft), Temperature (°C)) | The channel header may embed a unit in parentheses; each cell is that channel's reading. |
| Tall | Timestamp, Parameter, Value, optional Unit | One reading per row. Detected when both Parameter and Value columns are present. |
Load mode (chosen by whether a LocationCode column is present):
| Mode | LocationCode column | Behavior |
|---|---|---|
| Bulk — one file, many locations | Present | One summary row per location; auto-creates logger streams. Up to 5,000 distinct location codes per import. |
| Single stream | Absent | The whole file loads into the one stream you pick on the form. |
Timestamp is always required. A reading whose timestamp or value can't be parsed
is skipped and counted, and reported in the summary's Skipped count.
Field artifacts: Well, Borehole, Sediment Core, Test Pit
These are multi-sheet workbooks — a parent sheet plus child sheets, with an optional Locations sheet — uploaded as one Excel workbook or one CSV per sheet (name each CSV after its sheet). See Locations and field artifacts.
Linkage. Child rows attach to their parent by a parent-code column;
parent rows attach to a location by LocationCode:
| Format | Parent sheet | Child sheets | Parent-code link |
|---|---|---|---|
| Well | Wells | Intervals | WellCode |
| Borehole | Boreholes | Lithology Intervals, Sampling Runs, Groundwater Observations | BoreholeCode |
| Sediment Core | Sediment Cores | Lithology Intervals | SedimentCoreCode |
| Test Pit | Test Pits | Lithology Intervals, Groundwater Observations | TestPitCode |
Which sheets are required. At least one of the parent or child sheets must be present — a child-only upload appends to parents that already exist in the Site (resolved by code). The optional Locations sheet (documented at the end) can create the parent locations in the same import. Only one sheet of each type is allowed.
The depth/dimension unit for a parent and its child intervals comes from the
parent row (DepthUnit, or DimensionUnit for Test Pit) — child sheets carry
no separate unit column. All Status columns are header-required but default,
so a blank status cell is filled.
Wells sheet
| Column | Required | Type | Notes |
|---|---|---|---|
LocationCode | Yes | lookup | Parent location. |
Code | Yes | text | Well code. |
Borehole | No | lookup | Associated borehole. |
PermitNumber | No | text | Permit number. |
WellType | Yes | lookup | Well type. |
Status | Default: Active | enum | Well status. |
PrimaryAquifer | No | lookup | Primary aquifer. |
InstallationStartDate / InstallationEndDate | No | date | Installation dates. |
DrillingOrganization / DrilledBy / DrillingMethod | No | lookup / text / lookup | Drilling details. |
DecommissionDate … DecommissionReportNumber | No | mixed | Decommissioning details. |
Depth / DepthUnit | No | number / enum | Total depth and its unit (also the unit for child intervals). |
Diameter / DiameterUnit | No | number / enum | Borehole diameter. |
TocElevation / TocElevationUnit / TocVerticalDatum | No | mixed | Top-of-casing elevation. |
SurfaceCompletionType / StickupHeight / StickupHeightUnit | No | mixed | Surface completion. |
ScreenTop … SlotSizeUnit | No | mixed | Inline screen shortcut: any value here creates a screen interval on the well. |
Notes | No | text | Free text. |
Intervals sheet (Well)
One sheet for both casing/screen and annular intervals, discriminated by
IntervalType. Fields meant for the other type are rejected on the wrong row.
| Column | Required | Type | Notes |
|---|---|---|---|
WellCode | Yes | text | Parent well. |
IntervalType | Yes | enum | Casing vs Annular. |
Top / Bottom | Yes | number | Interval depth range (parent's depth unit). |
CasingType | Cond. | enum | Casing / Screen / Sump — for casing rows. |
InnerDiameter / OuterDiameter | No | number | Diameters. |
CasingMaterial / ScreenType / Aquifer / SlotSize | No | mixed | Casing/screen fields (casing rows only). |
AnnularMaterial / PlacementMethod / Quantity / QuantityUnit | No | mixed | Annular fields (annular rows only). |
Notes | No | text | Free text. |
Boreholes sheet
| Column | Required | Type | Notes |
|---|---|---|---|
LocationCode | Yes | lookup | Parent location. |
Code | Yes | text | Borehole code. |
BoreholeType | Yes | lookup | Borehole type. |
Status | Default: Active | enum | Borehole status. |
DrillingStartDate … DrillingMethod | No | mixed | Drilling details. |
Depth / DepthUnit, Diameter / DiameterUnit | No | number / enum | Total depth and diameter (depth unit also drives child intervals). |
TerminationNotes / RefusalType | No | text / enum | Termination. |
WaterColumnDepth / WaterColumnDepthUnit | No | number / enum | Water column depth. |
LoggedBy | No | text | Logged by. |
DecommissionDate … DecommissionReportNumber | No | mixed | Decommissioning details. |
Notes | No | text | Free text. |
Sampling Runs sheet (Borehole)
| Column | Required | Type | Notes |
|---|---|---|---|
BoreholeCode | Yes | text | Parent borehole. |
RunNumber | Yes | text | Run number. |
DepthStart / DepthEnd | Yes | number | Run depth range (parent's depth unit). |
SamplerType | Yes | enum | Sampler type. |
RecoveryLength | No | number | Recovered length. |
Condition | No | enum | Sample condition. |
Description / LoggedBy / LoggedAt | No | text | Run details. |
Sediment Cores sheet
| Column | Required | Type | Notes |
|---|---|---|---|
LocationCode | Yes | lookup | Parent location. |
Code | Yes | text | Sediment core code. |
Status | Default: Active | enum | Sediment core status. |
CollectionStartDate … CoringMethod | No | mixed | Collection details. |
DepthStart / DepthEnd / DepthUnit | Yes | number / enum | Core depth range and unit (required on this parent; the unit drives child intervals). |
Diameter / DiameterUnit | No | number / enum | Diameter. |
RefusalType / TerminationNotes | No | enum / text | Termination. |
RecoveredLength | No | number | Recovered length. |
WaterColumnDepth / WaterColumnDepthUnit | No | number / enum | Water column depth. |
LoggedBy / StorageLocation / DisposedDate / DisposedBy | No | mixed | Handling/storage. |
Notes | No | text | Free text. |
Test Pits sheet
| Column | Required | Type | Notes |
|---|---|---|---|
LocationCode | Yes | lookup | Parent location. |
Code | Yes | text | Test pit code. |
Status | Default: Open | enum | Test pit status. |
ExcavationDate / BackfillDate | No | date | Key dates. |
ExcavationOrganization / ExcavatedBy / ExcavationMethod | No | mixed | Excavation details. |
Length / Width / Depth | No | number | Dimensions (share DimensionUnit). |
DimensionUnit | No | enum | Shared linear unit for length/width/depth. |
TerminationReason / TerminationNotes | No | enum / text | Termination. |
BackfillMethod / BackfillNotes / LoggedBy | No | mixed | Backfill and logging. |
Notes | No | text | Free text. |
Lithology Intervals sheet (Borehole, Sediment Core, Test Pit)
Prefixed by the parent-code column for its format (BoreholeCode,
SedimentCoreCode, or TestPitCode).
| Column | Required | Type | Notes |
|---|---|---|---|
| (parent code) | Yes | text | Parent borehole / sediment core / test pit. |
DepthStart / DepthEnd | Yes | number | Interval depth range (parent's depth unit). |
Description | Cond. | text | Interval description. At least one of Description, Lithology, or FieldUscsClassification is required. |
Lithology | Cond. | lookup | Lithology classification. Satisfies the at-least-one rule above. |
FieldUscsClassification | Cond. | text | Field USCS classification. Satisfies the at-least-one rule above. |
Color / Texture / Structure / Odor | No | text | Descriptive fields. |
Moisture / Consistency / Density / Sheen / Napl | No | enum | Classified observations. |
Groundwater Observations sheet (Borehole, Test Pit)
Prefixed by the parent-code column (BoreholeCode or TestPitCode).
| Column | Required | Type | Notes |
|---|---|---|---|
| (parent code) | Yes | text | Parent borehole / test pit. |
Type | Yes | enum | Observation type. |
ObservationTime | No | text | When observed. |
DepthToWater | No | number | Depth to water. |
Observation | No | text | Observation text. |
MeasuredBy | No | text | Who measured. |
MeasurementMethod | No | enum | Measurement method. |
Locations sheet (optional, all field-artifact formats)
A shared optional sheet that creates the parent locations in the same import. Its columns are identical to the Location format (core columns plus the inline primary-coordinate block).
Lab formats
| Format | Page |
|---|---|
| Lab Report (multi-sheet EDD) | The full sheet-and-column contract is on its own page: Lab Report (EDD) format. |
| Lab Results (Single Sheet) (flat) | One wide sheet combining the report, sample, analysis, result, and validation columns — batch codes ride in the analysis columns' typed LeachateBatchCode / PreparationBatchCode / AnalysisBatchCode columns, and Erde collapses the sheet into the review tabs. It is more permissive than the multi-sheet EDD: the lab sample code is optional (a result can attach to an existing project sample by field sample code alone), and it adds two column groups the EDD omits — FieldSampleCode/SampleDate on analysis and result rows, and the inline Val_* validation columns for already-validated historical data. The validated qualifier rides in Val_Qualifier; disposition (rejected, estimated, and so on) is derived from it through the Qualifiers reference data, so there are no separate rejected or estimated columns. See the EDD column reference for column meanings and Enumerations and codes for value lists. |