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 data | State | Downloaded | Results | File |
|---|---|---|---|---|
| Peterson Space Force Base | Colorado | Sept 23, 2026 | 28,635 | Peterson file 3.7 megabytes |
| Willow Grove NASJRB | Pennsylvania | Sept 29, 2026 | 3,960 | Willow Grove file 0.5 megabytes |
| Biddle ANGB (formerly Horsham/Willow Grove ANG) | Pennsylvania | Sept 29, 2026 | 720 | Biddle file 0.1 megabytes |
| Warminster NAWC AD | Pennsylvania | Sept 29, 2026 | 9,648 | Warminster file 1.1 megabytes |
| Fairchild AFB | Washington | Oct 4, 2026 | 93,495 | Fairchild 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:
- Run the basic search once with its standard settings. Only after that did the tool let us select every chemical.
- Open Advanced Search. Choose the state and the base name from the table above.
- Select all chemicals. Set no date filter.
- 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.
| Column | In our files |
|---|---|
row | The line number we added. |
Component ID | Empty in every row. |
Component | The military branch: Air Force or Navy. |
State | Colorado, Pennsylvania or Washington. |
Installation Name | The base name, as in the table above. |
Installation Type | Active, or National Guard. |
Lab Report Id | The laboratory report number. |
Laboratory Sample ID | The laboratory's number for the sample. |
Sample Date | The sample date, rewritten by us as year-month-day. |
Analysis Method | The method label: 537, 537.1, 1633 or QSM_B15. |
CAS Number | The registry number of the chemical. |
Analyte Abbreviation | The short name of the chemical, such as PFOS. |
Final Result | The measured amount. Empty in every row flagged U or UJ. |
Limit of Detection | The detection limit of that row. Filled in every row. |
Final Units | in every row. |
Final Qualification | The laboratory flag: empty, , U or UJ. |
Treatment System | Yes, No or empty. |
Pre Or Post Treatment | pre-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:
- Peterson:
fdb0ee67dd111a0e69bd320ba8ba962f ec1b884183fa6840 5d585952b9cc08b4 - Willow Grove:
18a1ff34b323dda8514f51b4c5db307b 6341d68e96d5682f 10f82660e22fbfc4 - Biddle:
be0274a232c006336dc568e5830ace5f 8447eab2d42ac6ee ea6a0e290a7542ff - Warminster:
ed8c9157f7c4a7b4b73e2a29de9d4081 6f76366bdfc13bb3 168f61a0f056db75 - Fairchild:
5c66b434244d08d384229bb1650c0c2c 263f7518a9489219 30ef2d191a13567b
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.
- Peterson:
885fbe78ec011629332b6ff6ff87800c 7b39341aa6a3eee9 743810492a309a59 - Willow Grove:
8539811ed022d44e0b23db1ea2989630 0e8de688c2b297e5 92717ceb41380e7e - Biddle:
2f5363937a4848e37c2e401202df77e7 e5440640f6c0b480 108876da684bc1f6 - Warminster:
520df3f8ab88afedba91c5d8f4de0daf 835c2110a6b29f28 ee6077a31271f7da - Fairchild:
aad72edfb920eb7f2d4e5316a146f0c5 458e7644ac1ce974 549c560bb2249e71
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?
- Department of War — Off-Base Drinking Water PFAS Testing Results
The measurement data. Query results have no permanent link, so the query is stated on this page. Retrieved September 23 and 29 and October 4, 2026. - Our five data files
Every count and value on this page describes these files. It can be checked by opening them.
We link a source at the point each claim is made. If a link is broken or a source has been superseded, tell us.
Found an error, or have a question?
Found an error? Have a question about something we published? Have a suggestion for a topic, the design, or anything else? Email feedback@tetonintake.com — we read everything. Corrections get priority: if something on this site is wrong, we want it fixed. One limit: we can't advise on individual cases — that's what lawyers, doctors, and other experts are for.