Published July 14, 2026 | Version v2026.7.2

Public Utility Data Liberation Project (PUDL) Data Release

Description

v2026.7.2 (2026-07-14)

This is a monthly PUDL data release, primarily motivated by updating the EIA-860M monthly data through May 2026. As usual, it also includes all of the other changes that have accumulated on main since our last release.

This month, we have new EIA-176 tables, the EIA-860 early release, Parquet outputs for DBF assets, improved units handling, GeoParquet bugfixes, and better signal:noise ratio in unit test logging outputs.

Enhancements

  • Added experimental Parquet outputs derived from the FERC DBF databases, and basic datpackage.json metadata describing their schemas to support querying and preview through the PUDL Data Viewer. See PR #5339.

  • Standardized all unit strings in pudl.metadata.fields to Pint expression syntax, replacing ad-hoc abbreviations (gpmminFcfm), underscore-separated compound units (lb_per_MMBTUUSD_per_MWh), and inconsistent capitalization. A new pudl.metadata.units module defines PUDL_UNIT_REGISTRY, a pint.UnitRegistry extended with energy-industry units (MMBtuMcfMMcfTBtuVArUSD). Added extensive new per-column units annotations. These changes should facilitate programmatic unit parsing, display, and conversion, and they are now surfaced in the PUDL metadata and datapackage outputs as machine-readable Pint-compatible unit definitions. See #5078 and #5361.

New Data

EIA-176

  • Added detailed core EIA-176 continuation-line tables for natural gas imports, supplemental gaseous fuel supplies, gas exports, and other gas disposition. See #5240 and #5245.

Expanded Data Coverage

EIA-191

  • Added EIA-191 data through end of March 2026. See PR #5396.

EIA-930

  • Added EIA-930 data through end of June 2026. See PR #5396

EIA Electricity API

EPA CEMS

EIA-860

EIA-860M

FERC Forms 2 and 6

  • Updated the raw FERC Form 2 and 6 archives to include additional 2025 data. This data is converted to SQLite, but not deeply integrated into PUDL. See PR #5396.

FERC CID

  • Updated the FERC company identifiers with data through end of June 2026. See PR #5396.

Documentation

  • Expanded the developer docs around metadata naming, typing, and updates to explain how unit annotations, field namespaces, and namespace/table-specific metadata overrides should be defined and maintained. See #5361.

  • Set up the sphinx_llm Sphinx extension to generate a Markdown version of the PUDL documentation, suitable for consumption by LLMs, based on the llms.txt convention. See PR #5381.

New Data Tests & Validations

  • A new valid_datapackage_unit_strings_check() asset check factory validates all unit strings in the PUDL datapackage descriptor against the registry after each ETL run. About a dozen fields in PHMSA gas and EIA-860 FGD data that were typed as number but contain integer counts have been corrected to "type": "integer". A bug where convert_cols_dtypes and get_parquet_table overrides in FIELD_METADATA_BY_RESOURCE, were sometimes ignored has been fixed.

  • Added dbt expect_column_values_to_be_between tests to codify range expectations for columns stated as percentages (0, 100) vs those that represent fractional values (0, 1). Column naming still needs to be standardized. FERC Form 1 fraction tests use error_if thresholds to accommodate a known small number of out-of-range values. See #5361.

Bug Fixes & Data Cleaning

  • Three EIA-860 columns that EIA reports as percentages but PUDL describes as fractions have been corrected. standard_so2_percent_scrubbed (boilers) was already stored as a fraction but misnamed; it is now renamed standard_so2_fraction_scrubbedmax_oil_heat_input (multi-fuel generators) and dry_cooling_pct (cooling equipment) were extracted as percentages; both are now divided by 100 in the transform step and the cooling column is renamed dry_cooling_fraction. Field descriptions for the FERC1 *_fraction_cost columns have been updated to say “fraction (0-1)” instead of “percentage”. All true _pct columns now carry an explicit "unit": "percent" annotation. See #5361.

  • Fixed several Click-based console scripts so shell callers now receive correct non-zero exit codes on failure. The script-entry conventions in pudl.scripts now use Click-native exits and call main() directly in the module launcher, which fixes automation that branches on pudl_check_for_build success or failure. See PR #5374.

  • Fixed a DuckDB >= 1.5 incompatibility with PUDL’s GeoParquet outputs. DuckDB 1.5 requires CRS metadata in PROJJSON format, but the old PudlGeoParquetIOManager wrote a WKT string, causing "Geoparquet column 'geometry' has invalid CRS" when the spatial extension was loaded. Switching to native geopandas.GeoDataFrame.to_parquet() produces spec-compliant GeoParquet 1.0.0 metadata. See issues #4061#5074 and PR #5347.

  • Dropped the uninformative is_total column from core_rus7__yearly_distribution_services and out_rus7__yearly_distribution_services, renamed the service_status values to the self-explanatory connected_this_yearretired_this_yeartotal_in_place and idle_in_place, and documented why RUS Form 7 Part B subcomponents do not sum to the reported total within a year. See issue #5262 and PR #5323.

  • Fixed several nightly/stable/branch deployment flow-control bugs: nightly builds were silently landing in staging instead of production because DEPLOYMENT_ENVIRONMENT was never wired into the build container’s Batch job, PUDL Viewer redeploys and Zenodo releases fired for every deploy type instead of being restricted to nightly builds and non-branch builds respectively, stale objects from earlier deployments were never cleared from the public GCS/S3 paths before new outputs were written, and a staging copy of a stable release tag was incorrectly treated as an immutable path that could never be cleared. See issue #5382 and PR #5384.

  • Added two new optional arguments to get_pudl_dtypes and apply_pudl_dtypesresource (aka table) name will now return all of the authoritative resource-specific dtypes instead of the generic or source-specific types. dtype_backend will now return the types for the specific file type, which extends the previous behavior of returning pandas dtypes. The dtype management now lives in pudl.metadata.dtypes. See #5361.

  • Fixed pudl_deploy returning a plain integer exit code from its Click command, which Click’s standalone mode silently discards, so shell callers previously saw exit code 0 even when a deployment stage failed. It now uses ctx.exit() like the other scripts fixed in #5374. See #5382 and PR #5384.

  • Fixed the longstanding issue with zenodo_data_release sandbox release failures happening even when the publication actually succeeded, because a client-side timeout on the publish request triggered a retry that legitimately 404s once a deposit is already published, and that raw 404 body was then parsed as if it were a real deposition. Also fixed the build-ID provenance marker file being a zero-byte upload, which Zenodo rejects outright. See PR #5384.

Performance Improvements

  • Sped up PUDL deploys by compressing SQLite databases concurrently in a thread pool and uploading to all four GCS/S3 targets concurrently instead of one at a time. Also reduced the SQLite compresslevel from 9 to 6, trading a little archive size for much faster compression step. See #5382 and PR #5384.

Developer Experience

  • Reduced spurious logging and error output from our unit tests. See PR #5362.

  • Added two new optional arguments to get_pudl_dtypes and apply_pudl_dtypesresource (aka table) name will now return all of the authoritative resource-specific dtypes instead of the generic or source-specific types. dtype_backend will now return the types for the specific file type, which extends the previous behavior of returning pandas dtypes. The dtype management now lives in pudl.metadata.dtypes. See #5361.

  • Reworked the nightly PUDL build and deployment automation to send start and status notifications to the pudl-deployments Zulip stream directly from GitHub Actions and the batch build script, with per-stage timing summaries and direct links to build logs and outputs. The nightly build container also no longer installs or bootstraps a local PostgreSQL cluster solely to initialize Dagster, and the batch script now refuses to trigger deployment unless all required stages, including output upload, completed successfully. See PR #5374.

  • Merged PudlGeoParquetIOManager into PudlParquetIOManager and retired the geoparquet_io_manager Dagster resource key. The four geo assets (out_censusdp1tract__states/counties/tracts and out_ferc714__georeferenced_respondents) now use parquet_io_manager. Updated the DuckDB dependency to >=1.5,<1.6. See issues #4061#5074 and PR #5347.

  • Extended the nightly build’s Zulip reporting and stage-tracking machinery (added in #5374) to pudl_deploy. Deployments now save logs to builds.catalyst.coop and send a per-stage duration + outcome report to Zulip. Centralized deployment logic and validation in a DeploymentPlan Pydantic model in pudl.deploy.pudl. Replaced some ad-hoc curl/JSON GitHub Actions dispatch with the gh CLI and a shared dispatch_github_workflow() helper. Added required-argument & duplicate-key validation to devtools/generate_batch_config.py Batch job config generator used by both the PUDL and FERC EQR build workflows. See issue #5382 and PR #5384.

  • Added a guard so that deploying to a permanent, version-tagged stable-release path that already has content raises immediately instead of silently uploading over it, and updated the Zenodo data release Zulip notification to state plainly whether a release was sandbox or production and publish or draft, with a link to the resulting record. See issue #5382 and PR #5384.

Other PUDL v2026.7.2 Resources

Contact Us

If you're using PUDL, we would love to hear from you! Even if it's just a note to let us know that you exist, and how you're using the software or data. Here's a bunch of different ways to get in touch:

Files

censusdp1tract.sqlite.zip

Files (18.7 GB)

Name Size
md5:7ed85451d2d60bcbab3c67f99d186773
25 Bytes Download
md5:cbdc2d320a6057fbe5c0df6ab04a8e7f
506.7 MB Preview Download
md5:f0548c0ab50999abc36d7be58312f220
315.9 kB Preview Download
md5:615b22865ddf960aab374d8bb8c585aa
275.0 MB Preview Download
md5:c81edd53dfb45b50e260bf651ed62621
202.9 MB Preview Download
md5:644bf10ae2fc42d7c3fae94948b0367d
274.6 kB Preview Download
md5:f9246b5f4e48d76d993599152a391ffa
1.2 GB Download
md5:b94957b420e08d9241df7b188ec54156
239.8 MB Preview Download
md5:e097890648735e401dc62932e52fe98e
202.7 MB Preview Download
md5:ecd1520230baaeb3fcce3e43db71d35f
2.3 MB Preview Download
md5:ee5c7f18d569c58f3f008b96a16bedff
8.5 MB Preview Download
md5:57356f762367abb52b0bd8bd22bf1dac
74.7 MB Preview Download
md5:e623a26fd232a031e8960da6a5285837
48.3 MB Preview Download
md5:9a40ee2f0a1e69208b0daa16bd19fc17
221.2 kB Preview Download
md5:f391fefcdff699e2bfce85a7fc250051
147.9 MB Download
md5:b2fb000bcdee0e1a38068c7db50a8b48
35.7 MB Preview Download
md5:74ec36940b4eb278aab156e6bee00cb6
23.1 MB Preview Download
md5:79f33157a8ae93c631520bbbf1aa977a
2.3 MB Preview Download
md5:bd09d11e1a79a1623b3d9789bf336c9e
7.2 MB Preview Download
md5:dcda16cc5ad3affabb1effdc3a7dc9bf
2.9 MB Preview Download
md5:4c3f682b34457db93fa0893ad3471909
2.8 MB Preview Download
md5:ed721d094cc309b0a7e5bc5b5f87cb7a
72.2 kB Preview Download
md5:8d9380da0e9e852da87565729eb1eb07
50.9 MB Download
md5:ef54bce5f8e1a20b7de2d18fcc770097
5.4 MB Preview Download
md5:bb2281f7fc1a459bfa25eca2f8e17c70
6.6 MB Preview Download
md5:3857529b8a5002e4e18f73845881d950
978.1 kB Preview Download
md5:ba679325b7ae96c87b6fa5584cfae491
2.0 MB Preview Download
md5:2297bdf6ac0eb8b3cb42044dddb843e0
44.0 MB Preview Download
md5:d4066b23d148e61f93d2ae3dd5045bec
27.2 MB Preview Download
md5:ab5508940175921f4fbfaaa0f1f6d44e
127.9 kB Preview Download
md5:a6f40aeaea52786c453fb7e501ba87cd
73.4 MB Download
md5:c057eee043ed472e1195281654d3d4ba
29.0 MB Preview Download
md5:2868f6fc1db30344822e075404aae4c5
15.1 MB Preview Download
md5:b918d65ebd5ef57075244103d5558f3c
1.3 MB Preview Download
md5:240ab648e9b6fb13f2540b217638676e
3.0 MB Preview Download
md5:26b61cd63e35f65a699e9752ac8e147a
66.1 MB Download
md5:43eeacb36da9dabd7e35b1cd322f78bf
199.8 MB Preview Download
md5:45d1da521a0f2cc192d5565511a90f88
35.5 MB Preview Download
md5:7ad27ed79076e63db771b6253aebf6a9
65.7 kB Preview Download
md5:694686904ca1871e1b96f2002d2a136d
192.9 kB Preview Download
md5:010376b94c91c8b78bc9c6ce5ad154f8
3.4 GB Preview Download
md5:2c768bdfdb89aef8b7cdff025ec5a2e2
11.8 GB Preview Download
md5:b424834455fb8a5eb02848942f308dfd
4.4 MB Preview Download