Public Utility Data Liberation Project (PUDL) Data Release
Authors/Creators
- 1. Catalyst Cooperative
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.jsonmetadata describing their schemas to support querying and preview through the PUDL Data Viewer. See PR #5339. -
Standardized all unit strings in
pudl.metadata.fieldsto Pint expression syntax, replacing ad-hoc abbreviations (gpm,min,F,cfm), underscore-separated compound units (lb_per_MMBTU,USD_per_MWh), and inconsistent capitalization. A newpudl.metadata.unitsmodule definesPUDL_UNIT_REGISTRY, apint.UnitRegistryextended with energy-industry units (MMBtu,Mcf,MMcf,TBtu,VAr,USD). 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
EIA-930
EIA Electricity API
-
Updated the bulk EIA Electricity API data used to fill in redacted fuel prices. See PR #5396.
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 asnumberbut contain integer counts have been corrected to"type": "integer". A bug whereconvert_cols_dtypesandget_parquet_tableoverrides inFIELD_METADATA_BY_RESOURCE, were sometimes ignored has been fixed. -
Added
dbtexpect_column_values_to_be_betweentests 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 useerror_ifthresholds 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 renamedstandard_so2_fraction_scrubbed.max_oil_heat_input(multi-fuel generators) anddry_cooling_pct(cooling equipment) were extracted as percentages; both are now divided by 100 in the transform step and the cooling column is renameddry_cooling_fraction. Field descriptions for the FERC1*_fraction_costcolumns have been updated to say “fraction (0-1)” instead of “percentage”. All true_pctcolumns 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.scriptsnow use Click-native exits and callmain()directly in the module launcher, which fixes automation that branches onpudl_check_for_buildsuccess 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
PudlGeoParquetIOManagerwrote a WKT string, causing"Geoparquet column 'geometry' has invalid CRS"when the spatial extension was loaded. Switching to nativegeopandas.GeoDataFrame.to_parquet()produces spec-compliant GeoParquet 1.0.0 metadata. See issues #4061, #5074 and PR #5347. -
Dropped the uninformative
is_totalcolumn from core_rus7__yearly_distribution_services and out_rus7__yearly_distribution_services, renamed theservice_statusvalues to the self-explanatoryconnected_this_year,retired_this_year,total_in_placeandidle_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_ENVIRONMENTwas 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_dtypesandapply_pudl_dtypes.resource(aka table) name will now return all of the authoritative resource-specific dtypes instead of the generic or source-specific types.dtype_backendwill now return the types for the specific file type, which extends the previous behavior of returning pandas dtypes. The dtype management now lives inpudl.metadata.dtypes. See #5361. -
Fixed
pudl_deployreturning 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 usesctx.exit()like the other scripts fixed in #5374. See #5382 and PR #5384. -
Fixed the longstanding issue with
zenodo_data_releasesandbox 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
compresslevelfrom 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_dtypesandapply_pudl_dtypes:resource(aka table) name will now return all of the authoritative resource-specific dtypes instead of the generic or source-specific types.dtype_backendwill now return the types for the specific file type, which extends the previous behavior of returning pandas dtypes. The dtype management now lives inpudl.metadata.dtypes. See #5361. -
Reworked the nightly PUDL build and deployment automation to send start and status notifications to the
pudl-deploymentsZulip 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
PudlGeoParquetIOManagerintoPudlParquetIOManagerand retired thegeoparquet_io_managerDagster resource key. The four geo assets (out_censusdp1tract__states/counties/tractsandout_ferc714__georeferenced_respondents) now useparquet_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 tobuilds.catalyst.coopand send a per-stage duration + outcome report to Zulip. Centralized deployment logic and validation in aDeploymentPlanPydantic model inpudl.deploy.pudl. Replaced some ad-hoccurl/JSON GitHub Actions dispatch with theghCLI and a shareddispatch_github_workflow()helper. Added required-argument & duplicate-key validation todevtools/generate_batch_config.pyBatch 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
- PUDL v2026.7.2 Data Dictionary
- PUDL v2026.7.2 Documentation
- PUDL in the AWS Open Data Registry
- PUDL v2026.7.2 in a free, public AWS S3 bucket: s3://pudl.catalyst.coop/v2026.7.2/
- PUDL v2026.7.2 in a requester-pays GCS bucket: gs://pudl.catalyst.coop/v2026.7.2/
- Zenodo archive of the PUDL GitHub repo for this release
- PUDL v2026.7.2 release on GitHub
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:
- Follow us on GitHub
- Use the PUDL Github issue tracker to let us know about any bugs or data issues you encounter
- GitHub Discussions is where we provide user support.
- Watch our GitHub Project to see what we're working on.
- Email us at hello@catalyst.coop for private communications.
- On Mastodon: @CatalystCoop@mastodon.energy
- On BlueSky: @catalyst.coop
- Connect with us on LinkedIn
- Play with our data and notebooks on Kaggle
- Combine our data with ML models on HuggingFace
- Learn more about us on our website: https://catalyst.coop
- Subscribe to our announcements list for email updates.
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 |