Skip to main content

Methodology

Last Updated: 2026-06-22

How Permit Minder processes Pennsylvania discharge monitoring data, how exceedances are identified, and what is and is not a Permit Minder judgment.

Source of every field

Some fields on Permit Minder are taken verbatim from the public source data. Some are computed by Permit Minder from the source data. The distinction matters, so we list it field by field.

FieldSourceWhat Permit Minder does with it
Permit numberICIS-NPDES (EXTERNAL_PERMIT_NMBR)Verbatim
StateICIS-NPDES (derived from the permit number prefix)Two-letter jurisdiction code
ParameterICIS-NPDES (PARAMETER_DESC)Verbatim
Parameter code (STORET)ICIS-NPDES (PARAMETER_CODE)Verbatim
Statistical base codeICIS-NPDES (STATISTICAL_BASE_CODE)Verbatim. The companion STATISTICAL_BASE_TYPE_CODE is used to determine whether a limit is a ceiling or a floor
UnitsICIS-NPDES (STANDARD_UNIT_DESC)Verbatim
OutfallICIS-NPDES (PERM_FEATURE_NMBR)Zero-padded to 3 digits when numeric; preserved verbatim otherwise
Permit limit (compared)ICIS-NPDES (LIMIT_VALUE_STANDARD_UNITS)The limit the reported value is compared against — standard units, so value and limit are on the same scale
Permit limit (raw)ICIS-NPDES (LIMIT_VALUE_NMBR)Preserved as published, before unit standardization
Reported value (raw)ICIS-NPDES (DMR_VALUE_NMBR / DMR_VALUE_STANDARD_UNITS)Verbatim string preserved before numeric coercion
Reported value (effective)Permit Minder-derivedComputed from raw, and used for the percent-over-limit figure only — never to decide whether a row is an exceedance. See "Reported values" below
Monitoring period endICIS-NPDES (MONITORING_PERIOD_END_DATE)Verbatim, parsed to date
Monitoring period (string)ICIS-NPDES (MONITORING_PERIOD_END_DATE)ISO-formatted from source end date
Source linkPermit Minder-derivedPermit-level link to the EPA ECHO record. It resolves at the permit and parameter level, not to a per-measurement source document.
Exceedance flagPermit Minder-derivedComputed — see "Exceedance calculation"
Exceedance percentPermit Minder-derivedComputed — see "Exceedance calculation"
Limit type (ceiling/floor/etc.)Permit Minder-derivedComputed from parameter, statistical base, and qualifier
Value qualifier kind (measured/non-detect/above-DL)Permit Minder-derivedComputed from the raw reported value. See the note under Reported values regarding records loaded on 2026-07-13.

Source data

Permit Minder ingests discharge monitoring report (DMR) data from EPA's Integrated Compliance Information System for the National Pollutant Discharge Elimination System (ICIS-NPDES), published as per-state bulk downloads through EPA ECHO (echo.epa.gov). These are self-reported monitoring results that NPDES-permitted facilities are required to submit to their permitting authority under the federal Clean Water Act, and that the authority reports to EPA.

Records Permit Minder collects going forward come from that EPA feed. Permit Minder no longer collects from a state agency's reporting system directly. Records collected before 12 July 2026 were read from Pennsylvania DEP's eDMR system; those records are labeled with that source and link back to it, because that is where they came from.

The EPA DMR feed reports monitoring results keyed by permit number and outfall. It does not carry facility descriptive attributes — facility name, county, receiving stream, or industry classification.

Facility name and county are therefore taken from a separate EPA file: the ICIS-NPDES facility table published in EPA's npdes_downloads bulk archive, joined to each monitoring record on the permit number. They are not read from the monitoring record itself, and Permit Minder does not infer them.

EPA publishes the county as a FIPS code rather than a name. Permit Minder resolves it to a county name using the U.S. Census Bureau's county list. A code that cannot be resolved is left blank rather than guessed at: a facility placed in the wrong county is worse than a facility with no county shown.

Records collected before 12 July 2026 carry a facility name read from PA DEP's own system. Those are left as they were found — restating them from a federal source would change what those records say about where they came from.

Receiving stream and industry classification are not shown for records collected from the EPA feed. The feed does not supply them, and Permit Minder does not substitute a value it cannot source.

Public eDMR data is also available directly through PA DEP at PA DEP eDMR Program.

Reported values

Operators report values as numbers, sometimes with a less-than or greater-than qualifier. Permit Minder preserves the original reported string in the "reported value" column shown on every row. For percent-over-limit calculations, Permit Minder applies the following substitutions:

Known exception: Pennsylvania records loaded on 2026-07-13

The description above holds for records loaded before 2026-07-13. A set of Pennsylvania records loaded on that date did not preserve the qualifier. The collection step read the numeric part of the reported value and did not carry the leading less-than or greater-than symbol, and those records were then stored as though the value had been measured directly. A reading the laboratory reported as below a detection limit may therefore appear on those rows as a measurement at that limit.

Permit Minder does not consider those rows reliable, and the collection path that produced them has been stopped: a record that does not carry its own qualifier is now refused rather than stored. The affected records are being withdrawn and re-collected from the EPA feed, which reports the qualifier in a dedicated column. Readers verifying a specific row from this period should consult the source record linked from that row. This is recorded in the audit log.

  • A reported value like 12.5 (a numeric reading) is used as is.
  • A reported value like < 250 (non-detect at detection limit 250) is replaced for calculation purposes by one-half of the detection limit. The original < 250 value is always shown alongside, with the substituted value labeled "(eff. 125)". This substitution is a methodology choice, not a measurement. See "Non-detect values" below for additional treatment.
  • A reported value like > 1000 (above an upper detection limit) is used as the value 1000 for calculation. The actual concentration is greater than 1000, so the percent-over-limit shown is conservative (at-least-N% over).
  • A reported value like ND or BDL (non-detect, no detection-limit given) is treated as a non-detect.
  • A reported value that cannot be read as a number at all — for example a <followed by text rather than a detection limit — is treated as not comparable. No substitution is made and no exceedance determination is drawn from it, because there is no value to compare against the limit. Permit Minder does not substitute a zero or any other placeholder in this case.

Permit limits

The permit-limit column on every row is the numeric ceiling, floor, or average specified in the facility's active NPDES permit for that parameter, outfall, monitoring period, units, statistical base, and monitoring location, as reported in the PA DEP eDMR system. Some permits report "Monitor and Report" or other free-text strings instead of a numeric value — see "Monitor and Report exclusions"below. Where a permit limit row in the source data carries no qualifier, the limit itself is taken verbatim. Permit Minder does not look up the underlying NPDES permit document; the displayed limit is what PA DEP eDMR currently publishes, which may differ from a permit document's text.

Exceedance calculation

An exceedance on Permit Minder is a single reported monitoring value that falls outside the numeric limit set by the facility's NPDES permit for that parameter, outfall, monitoring period, units, statistical base, and monitoring location. For most parameters the limit is a maximum (a ceiling), and an exceedance is a value greater than the limit. For floor-limit parameters (see below), an exceedance is a value less than the limit. Permit Minder uses the term "exceedance" for both directions.

For each row, Permit Minder compares:

  • the reported value exactly as the source reported it — including any less-than or greater-than qualifier — against
  • the permit limit on file for the same row.

No substituted value is used to decide whether a row is an exceedance. A qualified reading is compared as what it is: a reading of "< 3"tells us the value is below 3, and that either resolves against the limit or it does not. Where it does not resolve — a "< 3"against a maximum of 2 could be 1 or could be 2.5 — Permit Minder does not assert an exceedance. The half-detection-limit substitution described under "Reported values" is used for the percent-over-limit figure only, never to determine that a facility exceeded a limit.

Records collected before 2026-07-12, through Permit Minder's since-retired Pennsylvania DEP collection path, were determined differently: that path substituted half the detection limit and then compared the substituted number. Corrections to previously published records are recorded in the audit log.

If the reported value is outside the permitted range, Permit Minder flags the row as an exceedance and computes a percent-over-limit:

  • For ceiling limits: (reported − limit) / limit × 100.
  • For floor limits: (limit − reported) / limit × 100.

Permit Minder does not apply statistical smoothing, rolling averages, or weighting across periods. Each exceedance corresponds to a specific row of public discharge monitoring data. Each row links back to the system it was collected from: the PA DEP eDMR record for rows collected before 12 July 2026, and the facility Effluent Charts page on EPA ECHO for rows collected from the EPA feed. The ECHO link resolves at the permit and parameter level — it is not a deep link to a single measurement.

Floor versus ceiling limits

The EPA ICIS-NPDES feed carries a coded statistical base for each row (STATISTICAL_BASE_TYPE_CODE, e.g. a minimum-type code). Permit Minder classifies a row as a floor limit when:

  • the parameter is Dissolved Oxygen, a "% Removal" parameter (BOD5, CBOD5, CBOD20, TSS), or "Stream Flow, Minimum" (these are inherently floor parameters), OR
  • the statistical-base label contains the substring "MINIMUM", OR
  • the row's qualifier (where present) is >=.

All other rows are classified as ceiling limits. The classification is computed by Permit Minder; it is not a verbatim source field.

Monitor and Report exclusions

Some permit limits read "Monitor and Report", "MR", "Monitor only", "Required", or similar non-numeric strings. These rows have a measured reading but no enforceable numeric limit, so Permit Minder does not classify them as exceedances and does not include them in this database. They remain visible in the underlying PA DEP eDMR system. A total of 0 rows in the current dataset carry a non-numeric permit limit and are correctly excluded.

Non-detect values ("<X")

Some operator-reported values carry a less-than qualifier (e.g. < 250 ng/L), meaning the laboratory could not detect the substance at the stated detection limit. The actual concentration is unknown — somewhere between zero and the detection limit. For percent-over-limit calculations, Permit Minder follows the conventional approach of substituting one-half of the detection limit. This substitution is a methodology choice, not a measurement. The reported value column always shows the original < X form; the substituted value is shown as (eff. X/2) next to it.

For some parameters, the laboratory detection limit can be higher than the permit limit itself (for example, a non-detect at < 250 ng/L of PCBs against a permit limit of 0.064 ng/L — a detection limit nearly 4,000 times higher than the limit). In that situation, the substituted value mathematically exceeds the limit, but the actual concentration may well be at or below the permit limit.

Permit Minder classifies these rows as non-detect screening rather than measured exceedances and does not include them in headline counts of measured exceedances. A separate non-detect screening view on the facility detail page lists them with the original < X value and a link to the source DMR. Permit Minder does not characterize a non-detect screening row as a violation, an enforcement target, or a measured exceedance. We display them because a non-detect at a detection limit higher than the permit limit is itself relevant information — it tells the reader that the laboratory used did not have a detection limit fine enough to demonstrate compliance.

Non-detect screening rows are not included in Permit Minder alert digests; they are visible on the facility detail page.

Monitoring-period dates

Permit Minder collects the EPA ICIS-NPDES per-state file, which carries every monitoring period in the file regardless of its length. There is no query window, so monthly, quarterly, semi-annual, and annual reporting periods all arrive by the same path and no period length is systematically harder to obtain than another.

This is a change from how Permit Minder previously collected Pennsylvania. The PA DEP eDMR endpoint returned a row only when the query window fully contained its monitoring period, so long periods were invisible to a monthly query and were recovered by a separate per-permit sweep. That collection path was retired on 12 July 2026.

For non-monthly rows the period start is the source-published Monitoring_Period_Begin_Date. For legacy monthly rows ingested before the explicit-begin-date pipeline was wired through, the period start is the first day of the end-date month. For any row, the source DMR shows the exact reporting window.

Permit Minder reports exceedances as published by the source; it does not determine violations. Coverage reflects data as published, not real-time monitoring.

Standard coverage window

By default, Permit Minder presents Pennsylvania exceedance records whose monitoring-period end date falls within the most recent 5.5 years. This window rolls forward over time and is applied consistently across search results, facility detail pages, CSV and PDF exports, and email alerts.

Records whose monitoring period ended before that window are retained for source verification, correction history, and audit, but are not shown, exported, or alerted on by default. They remain available directly from the source system the record came from. Permit Minder does not represent its default coverage as a complete lifetime history of any permit.

Receiving stream

Records collected from the EPA feed carry no receiving stream at all. The discharge-monitoring feed does not publish one, and no member of the facility bundle supplies it. Permit Minder does not substitute a value it cannot source, and does not infer streams from facility location. Filtering by a specific stream therefore excludes every record collected from the EPA feed.

For records collected before 12 July 2026, receiving-stream attribution was sourced from EPA ECHO's NPDES outfall layer (STATE_WATER_BODY_NAME from npdes_outfalls_layer), joined on (permit, outfall). Approximately 6% of those rows have no receiving-stream value — typically because the permit is not in the federal NPDES outfall layer (some PA DEP non-NPDES permits) or the operator's outfall identifier does not match the federal record. For those rows the receiving stream is shown as blank.

Facility type

Facility type is not shown for records collected from the EPA feed. The facility bundle does publish a facility-type code. Permit Minder does not currently store it, so it is shown as blank, and filtering by a type excludes every record collected from the EPA feed. This is a gap in what we keep, not in what the source publishes — stated that way round because the distinction is the honest one.

For records collected before 12 July 2026, facility type was sourced from EPA ECHO ICIS-NPDES FACILITY_TYPE_INDICATOR, joined on permit_number. Three values: POTW (publicly-owned treatment works), NON-POTW, or FEDERAL. NON-POTW is heterogeneous — it includes industrial dischargers, non-municipal sewage authorities, stormwater-industrial permits, groundwater-cleanup permits, mines, quarries, and other non-POTW non-FEDERAL facilities. Permit Minder does not break NON-POTW down by sector. Permits absent from EPA ECHO ICIS-NPDES (typically PA DEP non-NPDES general permits) display blank.

NULL handling

When a field is missing in source, Permit Minder displays it as blank or "—". We do not substitute "Unknown", "N/A", or "0" for missing data. Blank means the source did not publish a value, not that the value is zero or non-existent.

Data freshness and ingest lag

Permit Minder's public dataset is built by scheduled collection runs against the EPA ECHO bulk DMR feed, applied through theapply_dmr_rows pipeline. Permit Minder does not certify the dataset as complete; coverage is sample-defensible against the EPA source rather than a certified-complete record.

Reported data reaches EPA after the facility submits it to its permitting authority and the authority reports it to EPA, so the feed lags real-world discharge activity. Because facilities report on monthly, quarterly, semi-annual, or annual cycles depending on the parameter and permit, that lag is typically 30–90 days for monthly parameters and longer for quarterly or annual ones. The most recent monitoring period present in the data is shown on the home page.

Exceedance vs. violation

An exceedance is not the same thing as a violation. Permit Minder does not determine violations.

A violation is a legal conclusion. Only the U.S. Environmental Protection Agency, the Pennsylvania Department of Environmental Protection, a court, or another body with enforcement authority can determine whether a particular exceedance constitutes a violation of the Clean Water Act or of a facility's NPDES permit. That determination depends on factors beyond the raw eDMR data, including upset and bypass provisions, compliance schedules, administrative orders, consent decrees, and enforcement discretion.

An exceedance, as Permit Minder uses the term, is a purely arithmetic observation: a reported value fell outside the permitted range on a given day, above a maximum limit, or below a minimum limit, depending on the parameter. Permit Minder reports exceedances as facts drawn from public records. Permit Minder does not characterize them as violations, predict enforcement outcomes, or rank or score facilities based on their exceedance history.

Known limitations

  • PA only. Permit Minder currently covers Pennsylvania eDMR data. Facilities permitted in other states are not included.
  • Self-reported. eDMR submissions are prepared by the permittees themselves. Permit Minder does not independently verify reported values.
  • Permit changes. Permits are renewed, modified, and reissued over time. Historical exceedances are compared against the limit in effect at the time of the reported value to the extent that information is available in the source data.
  • Detection-limit methodology. Non-detect values are substituted as described above. Where the detection limit exceeds the permit limit, Permit Minder classifies the row as non-detect screening rather than a measured exceedance.
  • Data-entry and transcription errors in the source dataset are occasionally identified by Permit Minder; documented findings are in the public audit log linked below.

Data-quality audit log

Permit Minder maintains a public log of data-quality issues identified during audits, what was done about each one, and what remains open. View the audit log.

Corrections

If a specific record on Permit Minder appears to inaccurately represent the underlying PA DEP data, contact hello@permitminder.com with the facility name, parameter, and monitoring period.