Pacific Power APIpacificpower.net ↗
Access real-time outage data from Pacific Power across OR, WA, and CA. Query by ZIP, county, or state to get incident details, ETR, cause, and customer counts.
What is the Pacific Power API?
The Pacific Power API provides 5 endpoints covering real-time outage data across Oregon, Washington, and California. With get_outage_incidents, you can retrieve individual incident records including GPS coordinates, cause, crew status, and estimated time of restoration. Other endpoints expose state-level summaries, ZIP code lookups, county-level counts, and Pacific Power's served states list.
curl -X GET 'https://api.parse.bot/scraper/47282ce0-6372-4988-aebc-2d35ad9c11b1/get_outage_summary?state=OR' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace pacificpower-net-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Pacific Power outage data — bounded, re-runnable."""
from parse_apis.pacific_power_utility_api import PacificPower, State, InvalidInput
pp = PacificPower()
# Get outage summary for Oregon
summary = pp.outagesummaries.get(state=State.OR)
print(summary.state, summary.total_outages, summary.total_customers_affected, summary.last_updated)
# Browse counties with outages
for county in summary.counties:
print(county.county_name, county.out_count_unplan, county.cust_out_unplan)
# Look up a specific ZIP code's outage status
zip_detail = summary.zip_outages.get(zip_code="97211")
print(zip_detail.zip_code, zip_detail.out_count_unplan, zip_detail.cust_out_unplan)
# Look up a specific county's outage status via typed error handling
try:
county_detail = summary.county_outages.get(county="Douglas")
print(county_detail.county_name, county_detail.out_count_plan, county_detail.cust_out_unplan)
except InvalidInput as exc:
print(f"invalid input: {exc}")
# List incidents for that state (capped)
for incident in summary.incidents.list(limit=3):
print(incident.cause, incident.etr, incident.zip, incident.cust_out, incident.crew_status)
# Get service area info
info = pp.serviceinfos.get()
print(info.states, info.description)
print("exercised: outagesummaries.get / county_outages.get / zip_outages.get / incidents.list / serviceinfos.get")
High-level summary of outages for a given state. Returns total outage counts, total customers affected, and per-county/per-ZIP breakdowns of planned and unplanned outages. Data refreshes every few minutes; the last_updated timestamp indicates freshness.
| Param | Type | Description |
|---|---|---|
| state | string | State code. Accepted values: OR, WA, CA. |
{
"type": "object",
"fields": {
"zips": "array of objects with zipCode, outCountPlan, outCountUnplan, custOutPlan, custOutUnplan",
"state": "string, state code queried",
"counties": "array of objects with countyName, outCountPlan, outCountUnplan, custOutPlan, custOutUnplan",
"last_updated": "string, timestamp of last data refresh",
"total_outages": "integer, total number of active outages",
"total_customers_affected": "integer, total customers currently without power"
},
"sample": {
"data": {
"zips": [
{
"zipCode": "97211",
"custOutPlan": 0,
"outCountPlan": 0,
"custOutUnplan": 3,
"outCountUnplan": 3
}
],
"state": "OR",
"counties": [
{
"countyName": "Benton",
"custOutPlan": 1,
"outCountPlan": 1,
"custOutUnplan": 1,
"outCountUnplan": 1
}
],
"last_updated": "Wednesday, June 10 01:30 PM, 2026",
"total_outages": 27,
"total_customers_affected": 209
},
"status": "success"
}
}About the Pacific Power API
Outage Summaries and Incident Details
The get_outage_summary endpoint accepts a state parameter (OR, WA, or CA) and returns aggregate outage counts alongside arrays of affected ZIP codes and counties. Each entry in the zips and counties arrays includes separate counts for planned vs. unplanned outages (outCountPlan, outCountUnplan) and the corresponding number of customers affected (custOutPlan, custOutUnplan). The response also includes total_outages, total_customers_affected, and a last_updated timestamp.
Incident-Level Data
get_outage_incidents returns the full list of discrete outage events for a state. Each incident object carries latitude and longitude for map placement, cause, etr (estimated time of restoration), crewStatus, custOut (customers out), outCount, reported timestamp, and zip. This makes it the right endpoint for building outage maps or alerting systems that need geographic and operational detail per event.
ZIP Code and County Lookups
get_outage_by_zip and get_outage_by_county accept a specific ZIP or county name alongside a state code and return planned/unplanned outage counts for that geography. Both return zero counts rather than an error when no active outages are present, so null-checking is not required on those fields. get_service_areas returns the list of state codes Pacific Power serves along with a coverage description — useful for validating inputs before querying the other endpoints.
The Pacific Power API is a managed, monitored endpoint for pacificpower.net — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when pacificpower.net changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official pacificpower.net API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display a live outage map using incident
latitude,longitude,cause, andetrfields fromget_outage_incidents. - Build a county-level dashboard showing planned vs. unplanned outage counts and affected customer totals.
- Send ZIP code outage alerts by polling
get_outage_by_zipfor specific service areas. - Aggregate state-wide customer impact numbers from
get_outage_summaryfor utility monitoring reports. - Track crew deployment status across active incidents using the
crewStatusfield fromget_outage_incidents. - Validate which states a user's address falls under before querying outage data, using
get_service_areas.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Pacific Power offer an official developer API?+
How does `get_outage_incidents` differ from `get_outage_summary`?+
get_outage_incidents returns one object per discrete outage event, including coordinates, ETR, cause, crew status, and the reported timestamp. get_outage_summary collapses all events into aggregate counts grouped by ZIP code and county, plus state-level totals. Use incidents when you need per-event detail; use summary when you need rolled-up counts.How current is the outage data?+
get_outage_summary and get_outage_incidents includes a last_updated timestamp reflecting when the source data was last refreshed. Outage maps at utilities typically update on a polling interval rather than in true real-time, so there may be a lag of several minutes between a new outage occurring and it appearing in results.Does the API cover historical outage data or outage frequency over time?+
Can I query outages for a specific city or address rather than a ZIP code or county?+
get_outage_by_zip) and county (get_outage_by_county). City-level or address-level granularity is not exposed. You can fork this API on Parse and revise it to add an address-to-ZIP resolution step before passing the ZIP to the existing lookup endpoint.