Know before the lights go out. Push alerts, restoration times, and plain-language answers for power outages in PG&E territory. Free, no account.
Android, right now: grab the latest OutageWatch-x.y.z.apk from the Releases page and open it on your phone. You may need to allow "install from this source" when your browser or files app asks. It updates in place over older versions.
About the Play Protect warning: the first time you open the APK, Android may say it "hasn't seen an app from this developer before." That is expected for any app installed outside the Play Store, not a sign of a problem. OutageWatch is signed and asks only for internet, notifications, and approximate location. Tap More details, then Install anyway to continue. The warning goes away once the app is on the Play Store (planned for August 2026).
iOS and the app stores: native App Store and Google Play listings are planned for August 2026. Until then, the Android APK above is the way in.
![]() Add an area |
![]() Your areas at a glance |
![]() Outages near you |
![]() Plain-language answer |
![]() Quiet hours & more |
Pick your ZIP code or a precise address, and OutageWatch watches PG&E's public outage map for you.
- Push the moment it matters. A notification when an outage starts at your location, when the restoration estimate moves, when power is back, and when a PSPS safety shutoff is coming.
- See it on a map. Your watched areas, live outage footprints, restoration estimates, and how many customers are affected.
- Plain-language answers. Every outage has a short "what's going on and when is it coming back" written from the real feed data, not marketing copy.
- Quiet hours. No overnight buzzing, except a planned-safety-shutoff warning, which always comes through.
- No account, no sign-up, no ads. Your saved areas stay on your device.
An outage started at your location, the restoration estimate moved by more than 30 minutes, power was restored, or a PSPS warning covers your area. Quiet hours are respected for everything except PSPS. Nothing else, ever.
Outage detail includes a short, calm answer to "why is my power out and when is it coming back," rendered by Claude Haiku from the structured feed data only. The model is not allowed to invent restoration times or causes, and responses are cached per outage update so it stays fast and cheap.
flowchart LR
PGE["PGE ArcGIS<br/>outage feed"]
subgraph cloud ["Google Cloud Run"]
direction TB
Poller["Poller<br/>fetch every 5 min,<br/>diff vs last state"]
API["Public API<br/>reads + subscribe"]
end
FCM["Firebase<br/>Cloud Messaging"]
App["Android / iOS app"]
GCS[("State<br/>GCS")]
FS[("Subscriptions<br/>Firestore")]
PGE -->|poll| Poller
Poller <--> GCS
Poller -->|match changes| FS
Poller -->|push| FCM
FCM --> App
App <-->|subscribe, read outages| API
API --> GCS
API --> FS
A poller on Cloud Run reads PG&E's feed every five minutes, diffs it against the previous snapshot, matches changes to saved areas, and sends pushes through FCM. A separate public API serves reads and subscriptions to the apps and to a small web status page at /. Devices never poll PG&E directly. Raw snapshots are recorded so a real outage day becomes a regression fixture.
| Layer | Built with |
|---|---|
| App | Kotlin, Compose Multiplatform (one shared UI for Android + iOS), MapLibre |
| Backend | Python 3.12, FastAPI, uv, deployed to Google Cloud Run |
| Data | Firestore (subscriptions), Cloud Storage (feed state), Firebase Cloud Messaging |
| AI | Claude Haiku for the explanation card |
| Sources | PG&E public ArcGIS outage services, US Census ZCTA gazetteer |
Backend
cd backend
uv sync --extra server
uv run ruff check .
uv run pytest
uv run python scripts/dev_server.py # local API with fixture data on :8787Android
cd mobile
./gradlew :shared:testAndroidHostTest
./gradlew :androidApp:assembleDebugFirebase config for push goes in mobile/local.properties (see androidApp/build.gradle.kts). Debug builds work without it; push is simply skipped. iOS builds from mobile/iosApp in Xcode on a Mac.
See CONTRIBUTING.md for the full setup and PR flow.
OutageWatch has no accounts and collects no analytics. Your saved areas and a push token live on your device and in the backend only to deliver alerts. Full details in the Privacy Policy and Terms of Use.
- Found a bug or have an idea? Open an issue.
- Security report? See SECURITY.md.
- Want to help? CONTRIBUTING.md and the Code of Conduct.
Not affiliated with PG&E. Data comes from PG&E's public outage map and can lag behind reality. Do not rely on OutageWatch for safety-critical decisions. For emergencies call 911. Report downed power lines to PG&E at 1-800-743-5000.
MIT © Nic Glazkov




