Skip to main content

Methodology

Last Updated: 2026-05-21

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 numberPA DEP eDMR (Permit_Number)Verbatim
Facility namePA DEP eDMR (Primary_Facility_Name)Verbatim
CountyPA DEP eDMR (County)Verbatim
Latitude / longitudePA DEP eDMR (Latitude / Longitude)Verbatim, numeric-coerced
Primary facility IDPA DEP eDMR (Primary_Facility_ID)Verbatim
ParameterPA DEP eDMR (Parameter_Name)Verbatim
Parameter code (STORET)PA DEP eDMR (Parameter_Code)Verbatim
Statistical base labelPA DEP eDMR (Statistical_Base_Code)Verbatim string (e.g. "Daily Maximum")
UnitsPA DEP eDMR (Units)Verbatim
OutfallPA DEP eDMR (Outfall)Zero-padded to 3 digits when numeric; preserved verbatim otherwise
Monitoring locationPA DEP eDMR (Monitoring_Location)Verbatim (e.g. "Final Effluent", "Raw Sewage Influent")
Permit limit (numeric)PA DEP eDMR (Permit_Limit)Verbatim if numeric; NaN if non-numeric
Permit limit (raw)PA DEP eDMR (Permit_Limit)Verbatim string preserved before numeric coercion
Reported value (raw)PA DEP eDMR (DMR_Value)Verbatim string preserved (e.g. "< 250.000", "12.5")
Reported value (effective)Permit Minder-derivedComputed from raw — see "Reported values" below
Monitoring period (string)PA DEP eDMR (Monitoring_Period_End_Date)ISO-formatted from source end date
Monitoring period endPA DEP eDMR (Monitoring_Period_End_Date)Verbatim, parsed to date
Monitoring period startPA DEP eDMR (Monitoring_Period_Begin_Date) when present; otherwise Permit Minder-derivedVerbatim for non-monthly rows; computed first-day-of-end-month for legacy monthly rows that pre-date the explicit-begin-date pipeline — see below
DMR received datePA DEP eDMR (DMR_Received_Date)Verbatim, parsed to date
Did dischargePA DEP eDMR (Discharge)Yes/No → boolean
Receiving streamEPA ECHO npdes_outfalls_layerJoined on (permit, outfall)
Facility typeEPA ECHO ICIS-NPDES (FACILITY_TYPE_INDICATOR)Verbatim — POTW, NON-POTW, FEDERAL
SIC code / descriptionPermit Minder permit-industry lookupJoined on permit_number
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 raw reported value

Source data

Permit Minder ingests Pennsylvania Department of Environmental Protection electronic Discharge Monitoring Report (eDMR) data through PA DEP's public SSRS direct-render endpoint (cedatareporting.pa.gov/ReportServer). These are self-reported monitoring results NPDES-permitted facilities are required to submit to PA DEP under the federal Clean Water Act.

Permit Minder also joins two EPA ECHO datasets to PA DEP rows for enrichment: npdes_outfalls_layer for receiving-stream attribution keyed on (permit, outfall), and ICIS_PERMITS.FACILITY_TYPE_INDICATOR for facility-type classification. Both ECHO datasets are public bulk downloads from echo.epa.gov.

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

Reported values

Operators report values to PA DEP 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:

  • 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.

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 (after non-detect substitution if applicable, see "Reported values"), against
  • the permit limit on file for the same row.

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 eDMR data. Each row links to the source PA DEP eDMR record.

Floor versus ceiling limits

PA DEP eDMR uses descriptive labels (e.g. "Daily Maximum", "Average Monthly", "Instantaneous Minimum") rather than short codes for the statistical base of each row. 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 ingests both the period-begin and period-end dates from PA DEP eDMR. The PA DEP eDMR endpoint applies full-period containment to its date filters: a row is returned only when its full monitoring period is contained within the query window. Because of that, Permit Minder uses a tiered ingest to capture both short and long monitoring periods:

  • Monthly statewide windows capture calendar-month reporting periods (the bulk of PA DEP eDMR rows).
  • Quarterly statewide windows capture calendar-quarterly reporting periods, which monthly windows cannot return.
  • Per-permit five-year windows capture semi-annual, annual, and other multi-month reporting periods, which neither monthly nor calendar-quarterly statewide windows can return.

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.

Receiving stream

Receiving-stream attribution is sourced from EPA ECHO's NPDES outfall layer (STATE_WATER_BODY_NAME from npdes_outfalls_layer), joined on (permit, outfall). Approximately 6% of rows have no receiving-stream value in EPA ECHO — 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. Permit Minder does not infer streams from facility location.

Facility type

Facility type is 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 currently break NON-POTW down by sector. Permits absent from EPA ECHO ICIS-NPDES (typically PA DEP non-NPDES general permits) display blank for facility type.

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 has been verified through the current production load. Weekly PA DEP ingest runs on Sundays via the verified apply_dmr_rowspipeline. Because facilities report on monthly, quarterly, semi-annual, or annual cycles depending on the parameter and permit, the most recent monitoring period available from PA DEP typically lags real-world discharge activity by 30–90 days for monthly parameters and longer for quarterly or annual ones. The most recent ingest cutoff 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.org with the facility name, parameter, and monitoring period.