Skip to main content

Bulk Uploading Sample Results from a CSV

Load lab results into a sample report from a CSV, review and fix any problems the upload finds, then complete the upload.

Overview

Instead of typing lab results into a sample report cell by cell, you can upload them from a CSV, usually the file your analytical laboratory sends you.

You upload one CSV at a time, and you can upload several to the same sample report on different occasions. Before anything is saved you get a chance to review the data and fix any problems the upload finds.

⚠️ Completing an upload cannot be undone. You can delete the uploaded data manually afterward, but there is no single action that reverses the upload. If the CSV has different values for results already entered on the report, completing it overwrites those values permanently.


Before you begin

📝 Enter your sample IDs first. The upload matches each CSV row to a result on the report by its Sample ID and analyte, so the tool won't let you continue until every result in at least one sampling event has a sample ID. If the report has none yet, Generate Sample IDs in the Sampling Events section fills them in.

Upload Results is shown only while the report is open for data entry. Once the report has been submitted or marked Not Submitted, the button no longer appears.

Your file must be a CSV, no larger than 4 MB.


Uploading a CSV

  1. Open the sample report. In the Sampling Events section, click Upload Results.

  2. On the Upload Results screen, use Browse Files to choose your CSV.

  3. Every sampling event on the report appears as a collapsible panel, with the file's values filled in. Each panel's header reads Errors found in upload, Partially complete, No data or Complete. Expand a panel to see its grid, and correct anything highlighted (see below).

  4. Keep this document as an attachment on the sample report is ticked by default, which files the CSV under Lab Report in the report's attachments. Untick it if you don't want the attachment.

  5. Select Complete Upload. When it finishes, you're taken back to the sample report, where the uploaded results appear in the sampling events.

The Sampling Events section of a sample report, with the Generate Sample IDs and Upload Results buttons
The Upload Results screen with a Browse Files link and a note that the file must be a CSV of up to 4 MB
The Upload Results screen after a file is chosen, with two banners at the top and collapsed sampling event panels showing Errors found in upload, Complete and No data
The Keep this document as an attachment checkbox, ticked, and the Complete Upload button

What the CSV can contain

Columns are matched by name, in any order and regardless of capitalization. Common alternatives are accepted, shown in brackets:

  • Sample ID (ID)

  • Analyte (Compound, Compound Name, Pollutant, Parameter)

  • Result Value (Result, Value, Concentration) · Result Units (Units, Unit)

  • MDL Value (MDL, Detection Limit) · MDL Units · MRL Value (MRL, Reporting Limit) · MRL Units

  • Sample Type · Lab Method (Method, Analytical Method)

  • Sample Start Date/Time (Start Date/Time) · Sample End Date/Time (End Date/Time)

  • Sampled By · Container Type (Container) · Container Volume (Volume)

  • Preservative (Preservatives) · Hold Time Value · Hold Time Unit

  • Pacing · Pacing Value · Pacing Units · Aliquots

  • Qualifications (Qualification, Qual, Qual., Qualification Code)

Start and end times can also be split into separate date and time columns: Sample Start Date and Sample Start Time (or Collection_Date and Collection_Time, written with the underscore), and Sample End Date and Sample End Time.

Write dates and times as MM/DD/YYYY HH:MM or YYYY-MM-DD HH:MM, on a 24-hour clock (for example 01/15/2026 14:30). A date the upload can't read, such as 1/15/2026 8:00 after a spreadsheet drops the leading zeros, is highlighted for you to fix. Three cases are not highlighted, so check the times in the grid before you complete: a date with no time, such as 01/15/2026, is read as midnight; if the start is readable but the end is not, the end is set to the start time; and in separate time columns, a time that isn't HH:MM on a 24-hour clock (such as 2:30 PM) is misread rather than flagged.

📝 Leave MDL Units or MRL Units empty and they are filled in from Result Units. An ND result has no Result Units, so on an ND row fill in MDL Units and MRL Units yourself.

Every row needs a Sample ID and an Analyte. A row with a Result Value also needs a Sample End Date/Time. If you give only a Sample Start Date/Time, the end is set to the same time. Beyond that, include only the columns you want to load.


Fixing problems before you complete

The upload checks the file and reports what it finds, as banners across the top and as highlighting on individual cells. Common causes:

  • A column name it doesn't recognize

  • A row whose Sample ID and analyte don't match a result on this sample report

  • A row with no Sample ID at all

  • A unit or lab method it doesn't recognize

  • The wrong kind of value in a cell, such as text where a date and time is expected

Banners can be dismissed, but every highlighted cell must be corrected before you can complete the upload. You can edit the cells directly in the grid, except Sample ID and Analyte. Before completing, check that each cell you corrected shows the value you intended.

An expanded sampling event panel showing the results grid, with an unrecognized Units value and Lab Method highlighted in red

Two of these problems are left out rather than highlighted. A column it doesn't recognize is ignored. A row that doesn't match a result on the report, including a row with no Sample ID, isn't shown in the grid and isn't uploaded. A banner tells you they exist: The file contains additional columns that will not be uploaded or displayed. for unrecognized columns, and The file contains rows that cannot be uploaded or displayed. for unmatched rows. If any row has no Sample ID, you'll see The selected file is missing sample IDs for one or more results. instead of the unmatched-rows banner, so also check the CSV for rows with a mistyped Sample ID. To load that data, correct the CSV and upload it again.

Before completing, the trash icon removes the CSV and discards its data. Nothing has been written to the report yet at that point.


When the CSV would overwrite existing data

If the file has a different value for a field that is already filled in on the report, you'll get a warning banner: The selected file contains data that will overwrite existing data. It does not list which rows, and the affected cells aren't highlighted.

A warning banner saying the selected file contains data that will overwrite existing data

If you continue, a second window, Previously Entered Data Found in Upload, asks you to confirm with Overwrite Data.

The Previously Entered Data Found in Upload window, with Cancel and Overwrite Data buttons

⚠️ Overwriting replaces the existing values permanently and cannot be reversed. If you are not certain which rows overlap, cancel and compare the CSV against the report first.


What happens next

The uploaded results appear in the sampling events and behave like any other data. You can edit them in the data entry grid afterward.

Calculated results are then recalculated automatically from the new data. If that recalculation fails you'll see a warning that calculated values may be stale. Saving the sampling events again from the data entry grid recalculates them.

Back on the sample report, a banner lists any results left out of the calculations because their units don't match, and highlights those rows. Fix the units on those results to include them.

If you kept the CSV as an attachment, you can remove that attachment later without affecting the uploaded data.


FAQ

Why won't the tool let me continue?

No sampling event on the report has a sample ID on every result yet, so you'll see Sample IDs must be entered for each result before adding an upload. The upload matches rows by Sample ID, so fill them in, or use Generate Sample IDs, first.

My file was rejected before I could review it. Why?

It's not a CSV, it's over 4 MB, or it couldn't be read. All three are hard stops. A file that isn't a CSV shows a message such as TXT is not a supported file type. We support CSV files only. A file can't be read if it has no Sample ID or Analyte column, has the same column twice (two names for one column, such as Result and Value, count as the same column), has a row with more or fewer columns than the header row, or has a stray quotation mark in a cell. Then you'll see We couldn't process that file. Please verify it and try again. If you saved the file from Excel as CSV UTF-8, save it again as CSV (Comma delimited).

Can I upload calculated results?

No. Bulk upload loads sampling results only. Calculated results are worked out by the system, and they recalculate automatically once your uploaded data lands.

Can I undo an upload?

Not as a single action. You can delete the uploaded values manually in the data entry grid, but completing an upload is not reversible, and an overwrite replaces the previous values permanently.

The banner says data will be overwritten but not which rows. How do I find them?

It doesn't list them. Cancel, compare your CSV against the results already on the report, and re-upload only the rows you intend to add.

Do I have to include every column?

No. Every row needs a Sample ID and an Analyte. A row with a Result Value also needs a Sample End Date/Time (or a start time, which is then used as the end). Beyond that, include only the columns you want to load. Leaving MDL Units or MRL Units empty fills them from Result Units, except on an ND row, which has no Result Units.

Can I upload more than one file?

One at a time, but you can upload several CSVs to the same sample report on different occasions.

If I remove the CSV attachment later, do I lose the data?

No. The attachment and the uploaded data are independent once the upload is complete.


Related articles

Did this answer your question?