Teton Intake

How can you check the PFAS numbers on our pages?

You can download the data we used. These are the 's test results for in drinking water near five bases. This page also says what we changed in the files and how we count.

Jump to: files · source · what we changed · how we count · unusual rows · checking a file

Which files can you download?

There is one file per base. Each file holds every result the Department listed for that base on the day of our download. The files are in format, a plain text table.

Base name in the Department's dataStateDownloadedResultsFile
Peterson Space Force BaseColoradoSept 23, 202628,635Peterson file
3.7 megabytes
Willow Grove NASJRBPennsylvaniaSept 29, 20263,960Willow Grove file
0.5 megabytes
Biddle ANGB (formerly Horsham/Willow Grove ANG)PennsylvaniaSept 29, 2026720Biddle file
0.1 megabytes
Warminster NAWC ADPennsylvaniaSept 29, 20269,648Warminster file
1.1 megabytes
Fairchild AFBWashingtonOct 4, 202693,495Fairchild file
12.4 megabytes

A file never changes once it is published. The date in its name is the day of our download. A later download gets a new file with a new date.

What the results show is on the place pages for Peterson, Willow Grove and Warminster and Fairchild. The Willow Grove page covers all three Pennsylvania bases.

Where does the data come from?

The Department of War publishes its test results for off-base drinking water in an online tool. The tool gives no permanent link to a set of results. So we state the query in words.

This is how we ran it in September and October 2026:

  1. Run the basic search once with its standard settings. Only after that did the tool let us select every chemical.
  2. Open Advanced Search. Choose the state and the base name from the table above.
  3. Select all chemicals. Set no date filter.
  4. Export the results.

The tool's own view pre-selects only and . So check that all chemicals are selected before you export.

Each file is a snapshot. The Department may add or correct results later. A newer download can then differ from ours.

What did we change in the files?

Three things, and nothing else.

Dates. Our exports wrote dates as day, month, year: 15.6.2022. We rewrote them as year, month, day: 2022-06-15. We assume the original format follows the language settings of the browser. We have not tested that.

Order. We downloaded the Peterson data three times. Each download held the same 28,635 rows. The order of the rows was not always the same. So we sort every file the same way: by sample date, laboratory report, sample ID and chemical. Rows that still tie are sorted by the remaining columns. Values are compared as text.

Row numbers. We added a first column named row. It numbers the sorted rows. That lets anyone point to a single line.

No value was changed. No row was removed. Empty cells stay empty.

After these steps, all three Peterson downloads gave the same file, character for character. For the three Pennsylvania bases and Fairchild we have one download each. There, the same test has not been done.

What do the columns hold?

The column names are the Department's own. This table says what our five files contain. It describes the files. It is not an official definition.

ColumnIn our files
rowThe line number we added.
Component IDEmpty in every row.
ComponentThe military branch: Air Force or Navy.
StateColorado, Pennsylvania or Washington.
Installation NameThe base name, as in the table above.
Installation TypeActive, or National Guard.
Lab Report IdThe laboratory report number.
Laboratory Sample IDThe laboratory's number for the sample.
Sample DateThe sample date, rewritten by us as year-month-day.
Analysis MethodThe method label: 537, 537.1, 1633 or QSM_B15.
CAS NumberThe registry number of the chemical.
Analyte AbbreviationThe short name of the chemical, such as PFOS.
Final ResultThe measured amount. Empty in every row flagged U or UJ.
Limit of DetectionThe detection limit of that row. Filled in every row.
Final Units in every row.
Final QualificationThe laboratory flag: empty, , U or UJ.
Treatment SystemYes, No or empty.
Pre Or Post Treatmentpre-treatment, post-treatment or empty.

How do we count?

One row is one result. A result is one chemical in one analysis. It is not a well, a home or a tap.

Samples. We speak of samples only where each sample ID in the count lists the chemical once. That holds for all three Pennsylvania files and for the Fairchild file. In the Peterson file, three sample IDs break the rule. Counts that include them are counts of results.

No clean-up. We never remove rows that look like duplicates.

Highest values. We report the highest result without a laboratory flag. Results flagged J are estimates. We show their highest value separately.

Not detected. Rows flagged U or UJ carry no result. We read both flags as "not detected". That means below the detection limit of that row. It does not mean zero.

Treatment. We sort each row by its own treatment label. There are four groups: No, Yes with pre-treatment, Yes with post-treatment, and empty. We call the empty group "not stated". We never add it to another group. The data calls no sample untreated, so neither do we.

What is unusual in the Peterson file?

Three sample IDs hold many results each. The IDs are C256053, C256105 and C257545. Each lists the same 18 chemicals 14 times. Together that is 756 rows. All belong to laboratory report W9128F-18-F-0241. Their sample dates are March 1, 2 and 3, 2022.

The values under one ID differ widely. Under C256105, PFOS runs from not detected to 1,100 ng/L. The numbers fit 42 samples filed under three IDs. In all three of our downloads, these rows came as 42 groups of 18 chemicals. Each group had one treatment label. The export does not confirm that reading. Our sorted files no longer show the groups.

541 of the 756 rows match at least one other row in every original column. Most are "not detected" at the same limit. We keep them all. Two of the three IDs carry more than one treatment label. So we read the label of each row.

Leaving out the 756 rows would change none of the highest values on the Peterson page. For PFOS, and PFOA, the file holds 180 results after treatment. 15 of them come from these rows. All 15 are "not detected" at a limit of 14 ng/L.

640 rows carry no treatment label. They belong to 16 sample IDs. Their sample dates run from October 7, 2025 to January 6, 2026. We count them as "not stated". Their highest values are lower than the highest on the Peterson page.

Three early reports list one very low detection limit. Laboratory reports 46942531, C214191 and C241473 hold 234 rows. Their sample dates are December 14, 2021, January 18, 2022 and February 15, 2022. Every one of these rows lists a detection limit of 0.05 ng/L. Every other row in the file lists 0.82 ng/L or more. Results in the three reports run from 0.05 to 0.44 ng/L. The export does not explain the difference. We have not changed these rows. They hold six of the 174 "not detected" results after treatment for PFOS, PFHxS and PFOA.

What is unusual in the Pennsylvania files?

In these three files, no sample ID lists a chemical twice. So each sample ID counts as one sample.

One Warminster sample is listed with a treatment system: C2883-FS, dated April 4, 2024. The place page leaves it out. Every other row says No.

For the two Navy bases, results up to April 1, 2022 carry the method label 537. From April 20, 2022, the label is 537.1. The place page explains why some chemicals are left out before April 2022.

Some pairs of samples are nearly identical and may be field duplicates. The files do not mark them.

What is unusual in the Fairchild file?

No sample ID lists a chemical twice. Each sample ID has one date, one report, one method and one treatment label. So each sample ID counts as one sample.

"Before treatment" is not always untreated water. Up to May 2024, the numbers of samples before and after treatment were similar. From August 2024, there were about three before for every one after. In the February 2026 round, sample numbers run in short groups that end with the sample after treatment. Results before it often fall step by step. We think some samples were taken between filter stages. The file does not say. The place page therefore shows highest values only for this group.

Two reports hold the highest results without a treatment system. They are FA99560, with 12 samples from October 7, 2022, and FA89688, with 2 samples from October 7, 2021. Within them, high results and results with nothing detected alternate. We have not changed these rows.

Padded IDs. 82 sample IDs and 10 report IDs end in spaces, up to 20 characters. That affects 3,280 rows from August to November 2024. Our file keeps the spaces.

The file holds no samples between December 30, 2024 and February 16, 2026.

How can you check a file?

Check your copy. A checksum is a fingerprint of a file. If one character changes, the checksum changes. These are the checksums of our five files:

The same list is available as a plain text file. On Windows, PowerShell computes a checksum with Get-FileHash followed by the file name. On macOS or Linux, use shasum -a 256 followed by the file name.

A matching checksum shows that your copy equals ours. It cannot show that our copy equals the Department's data. For that, rebuild the file.

Rebuild the file. Download the export from the Department's tool, as described above. Then run our short script on it. It makes the three changes listed on this page. If the Department's data has not changed, you get our file and our checksum.

The script needs Python and the package openpyxl. Read it before you run it. If your export writes dates in another format, the script takes that format as an option.

Our own downloads. For our records, these are the checksums of the export files as we downloaded them. A new download may not match them, because the row order can change.

What can the files not tell you?

The files carry no address, no well number and no name of a water system. Nobody can look up a home in them. The same well can appear many times.

The results start in 2021. They do not show what the water held in earlier years. The place pages cover that period from other records.

A result is what a laboratory found in one sample. That is not necessarily what came out of a tap. None of these values decides whether someone has a legal claim.

Where does this page's information come from?

We link a source at the point each claim is made. If a link is broken or a source has been superseded, tell us.

Was this page helpful? Anonymous — adds 1 to a counter, nothing about you.