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.2.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.2.0
File Size Uploaded
pgw_api-1.2.0.tar.gz 9.6 kB Details

Built distribution (wheel)

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

Total release size: 17.6 kB

Release files / pgw_api-1.2.0.tar.gz

Download URL pgw_api-1.2.0.tar.gz
Size 9.6 kB
Tags Source
SHA-256 checksum
How to use checksums
ee9f034341b2d031d93676d8009a41b45e901e6bfdf2ef8086575d86939f242b
BLAKE2b-256 checksum
How to use checksums
2ef2b5e1c3902476a0be87a375848602bdb02a39e466225df87c4f2f2bc8cad5
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 Aug 31, 2026.

Transparency log

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

Download URL pgw_api-1.2.0-py3-none-any.whl
Size 7.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e627a04f78377ecb38661e8681e6276de108421df4306868eeda410a2b5a8ac3
BLAKE2b-256 checksum
How to use checksums
9c8e6a1a15b89036ace598809f851597e25a972b8bf2f0a1552132ae77b0313f
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 Aug 31, 2026.

Transparency log

Release history Release notifications | RSS feed

1.4.0

2 release files

1.3.1

2 release files

1.2.1

2 release files

This release

1.2.0 This release

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