Skip to main content

pgw-api

Python API client for Philadelphia Gas Works (PGW). Fetches natural gas usage data (monthly, daily, and hourly) from the PGW customer portal.

Installation

pip install pgw-api

Usage

import asyncio
import aiohttp
from pgw_api import PGWApiClient


async def main():
    client = PGWApiClient("your-email@example.com", "your-password")

    async with aiohttp.ClientSession(cookie_jar=aiohttp.CookieJar()) as session:
        usage = await client.async_get_usage(session)

        for entry in usage:
            print(f"{entry.month:%B %Y}: {entry.ccf} CCF ({entry.cf} ft³)")
            if entry.period_start and entry.period_end:
                print(f"  Period: {entry.period_start} to {entry.period_end}")


asyncio.run(main())

API

PGWApiClient(username, password)

Creates a client instance with PGW portal credentials.

await client.async_get_usage(session)

Authenticates and returns a list of GasUsage objects sorted by month (newest first).

await client.async_get_daily_usage(session, start, end)

Authenticates and returns a list of DailyGasUsage objects for the given date range (newest first). Requires a smart meter — most residential accounts only have monthly data and will return an empty list.

from datetime import date

daily = await client.async_get_daily_usage(session, date(2024, 1, 1), date(2024, 1, 31))
for entry in daily:
    print(f"{entry.date}: {entry.ccf} CCF")

await client.async_get_hourly_usage(session, usage_date)

Authenticates and returns a list of HourlyGasUsage objects for a single day (newest first). Requires a smart meter that reports interval data. Most residential accounts only have monthly data and will return an empty list.

from datetime import date

hourly = await client.async_get_hourly_usage(session, date(2024, 1, 15))
for entry in hourly:
    print(f"{entry.timestamp}: {entry.ccf} CCF")

await client.async_validate_credentials(session)

Validates credentials without fetching usage data. Returns True or raises PGWAuthError.

GasUsage

Property Type Description
month date First of the billing month
ccf float Usage in hundreds of cubic feet
cf float Usage in cubic feet (CCF × 100)
period_start date | None Meter read start date
period_end date | None Meter read end date

DailyGasUsage

Property Type Description
date date Usage date
ccf float Usage in hundreds of cubic feet
cf float Usage in cubic feet (CCF × 100)

HourlyGasUsage

Property Type Description
timestamp datetime Usage timestamp
ccf float Usage in hundreds of cubic feet
cf float Usage in cubic feet (CCF × 100)

Exceptions

  • PGWAuthError — invalid credentials or expired session
  • PGWConnectionError — network or portal issues
  • PGWError — base exception class

Release files for pgw-api 1.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pgw-api 1.4.0
File Size Uploaded
pgw_api-1.4.0.tar.gz 11.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pgw-api 1.4.0
File Interpreter ABI Platform
pgw_api-1.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 19.1 kB

Release files / pgw_api-1.4.0.tar.gz

Download URL pgw_api-1.4.0.tar.gz
Size 11.1 kB
Tags Source
SHA-256 checksum
How to use checksums
6702205092fcc6197592f8ccb498ce1b6d18971e9f67dc23ffe5db25be84eb17
BLAKE2b-256 checksum
How to use checksums
eca9121a37a45adfa52b300089acc7a3e625ada494ae90644b69a95ebc1ba381
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / pgw_api-1.4.0-py3-none-any.whl

Download URL pgw_api-1.4.0-py3-none-any.whl
Size 8.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
472a2cf9d8794068ed87a204763110fbb8cf9282e89f6a3620ab5c8a216e9248
BLAKE2b-256 checksum
How to use checksums
f1ab41861e994a129a257cbd7a001ffef923363a806a9c79a9bf2d89c961452f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.4.0 This release

2 release files

1.3.1

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page