Skip to content
Back to skills

Wprdc Ianpcook

ASecurity

Query Pittsburgh's Western PA Regional Data Center (WPRDC) — 363+ datasets covering property assessments, air quality, 311 requests, jail census, overdose data, permits, violations, and more. Run SQL queries against live tables without downloading. Use when user asks about Pittsburgh/Allegheny County public data, property lookups, civic data, or regional statistics.

  • 57 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added May 31, 2026
databasesrustgobashsql

Works with

  • cli

Security analysis

A100/100

Scanned May 31, 2026

npx -y skills add diegosouzapw/awesome-omni-skill --skill wprdc --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Wprdc Ianpcook?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Wprdc Ianpcook
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/diegosouzapw-wprdc-ianpcook/badge)](https://www.skillsdirectory.com/skills/diegosouzapw-wprdc-ianpcook)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: wprdc
description: Query Pittsburgh's Western PA Regional Data Center (WPRDC) — 363+ datasets covering property assessments, air quality, 311 requests, jail census, overdose data, permits, violations, and more. Run SQL queries against live tables without downloading. Use when user asks about Pittsburgh/Allegheny County public data, property lookups, civic data, or regional statistics.
version: 1.1.0
homepage: https://data.wprdc.org
metadata:
  emoji: 📊
  tags:
    - pittsburgh
    - civic-data
    - wprdc
    - ckan
    - property
    - public-data
    - allegheny-county
---

# WPRDC - Pittsburgh Regional Data Center

Query 363+ datasets from the Western PA Regional Data Center. Property assessments, air quality, 311 requests, jail census, overdose data, parking, permits, violations — all queryable via SQL without downloading.

## Quick Start

```bash
# Search for datasets
<skill>/wprdc.py search "property sales"
<skill>/wprdc.py search "air quality" --org allegheny-county

# Get dataset info
<skill>/wprdc.py info property-assessments

# List resources (tables) in a dataset
<skill>/wprdc.py resources property-assessments

# See field schema
<skill>/wprdc.py fields assessments

# SQL query (the killer feature!)
<skill>/wprdc.py query 'SELECT "PARID", "PROPERTYADDRESS" FROM @assessments WHERE "PROPERTYCITY"='"'"'PITTSBURGH'"'"' LIMIT 5'

# Quick parcel lookup
<skill>/wprdc.py parcel 0028F00194000000

# Download a dataset
<skill>/wprdc.py download property-assessments --format csv
```

## Commands

### `search <query>`
Search for datasets by keyword.

Options:
- `--org <name>` — Filter by organization (e.g., `allegheny-county`, `city-of-pittsburgh`)
- `--group <name>` — Filter by topic group (e.g., `health`, `housing-properties`)
- `--limit <n>` — Max results (default: 10)
- `--json` — Raw JSON output

### `info <dataset>`
Get detailed information about a dataset, including description, resources, and metadata.

### `resources <dataset>`
List all resources (tables/files) in a dataset with their IDs and queryability status.

### `fields <resource>`
Show the field schema for a resource. Use shortcut names or resource IDs.

### `query <sql>`
Execute SQL queries against live data. **This is the power feature!**

**Important:** Column names must be double-quoted because PostgreSQL is case-sensitive:
```sql
SELECT "PARID", "PROPERTYADDRESS" FROM @assessments WHERE "PROPERTYCITY"='PITTSBURGH' LIMIT 5
```

Use `@shortcut` notation for common tables (see Shortcuts below).

Options:
- `--json` — Raw JSON output
- `--table` — Format as ASCII table

### `parcel <pin>`
Quick property lookup by parcel ID. Returns address, assessments, building info, and last sale.

```bash
<skill>/wprdc.py parcel 0028F00194000000
```

### `download <dataset>`
Download a resource to a file.

Options:
- `--resource <id|name>` — Specific resource
- `--format <csv|json|geojson>` — Preferred format
- `--output <path>` — Output filename

### `orgs`
List all organizations publishing data.

### `groups`
List all topic groups (categories).

### `shortcuts`
Show available query shortcuts.

## Query Shortcuts

Use `@shortcut` in SQL queries instead of long resource IDs:

| Shortcut | Dataset |
|----------|---------|
| `@assessments` | Property Assessments (584K parcels) |
| `@sales` | Property Sales |
| `@311` | 311 Service Requests |
| `@permits` | PLI Permits |
| `@violations` | PLI Violations |
| `@overdoses` | Fatal Accidental Overdoses |
| `@jail` | Jail Daily Census |
| `@air-quality` | Air Quality |
| `@fishfry` | Fish Fry Map |

Example:
```bash
<skill>/wprdc.py query 'SELECT * FROM @overdoses WHERE "death_year"=2024 LIMIT 10'
```

## Before Querying, Ask Yourself

1. **Scope**: Is this City of Pittsburgh only, or all of Allegheny County?
   - PLI violations, 311, permits → **City of Pittsburgh only** (90 neighborhoods)
   - Property assessments, overdoses, jail → **All of Allegheny County** (130 municipalities)

2. **Freshness**: When was this dataset last updated? Run `info <dataset>` first.

3. **Fields**: What columns exist? Run `fields <resource>` before writing SQL.

4. **Size**: How many records? Start with `LIMIT 10`, expand once you know it works.

## NEVER Do

- **NEVER use CAST(), ROUND(), AVG(), or other SQL functions** — WPRDC blocks them. You'll get "Access denied: Not authorized to call function". Do aggregation client-side.

- **NEVER query without LIMIT on large tables** — Assessments has 584K rows. Queries timeout. Always add `LIMIT`.

- **NEVER assume county-wide coverage for City datasets** — PLI violations, 311, permits are **City of Pittsburgh only**. Aspinwall, Fox Chapel, Mt. Lebanon = separate municipalities, not in the data.

- **NEVER trust "under maintenance" datasets** — County plumbing inspections, housing inspections, food facilities are currently broken. Check `info` first.

- **NEVER forget column quoting** — UPPERCASE columns need double quotes (`"PARID"`), lowercase don't (`case_year`). Wrong quoting = cryptic "column does not exist" errors.

- **NEVER use wildcards on unindexed text** — `LIKE '%something%'` on large tables will timeout. Be specific.

## Common Errors

| Error | Cause | Fix |
|-------|-------|-----|
| `409 CONFLICT` + "column does not exist" | Unquoted uppercase column | Add quotes: `"PARID"` not `PARID` |
| `Access denied: Not authorized to call function` | Used CAST/ROUND/AVG | Remove function, process client-side |
| Timeout / no response | Query too large | Add `LIMIT`, narrow `WHERE` clause |
| Empty results | Filter mismatch | Check exact string values with a broad query first |
| "resource not found" | Wrong resource ID | Use `resources <dataset>` to get correct ID |

## SQL Tips

1. **Quote UPPERCASE column names** — PostgreSQL is case-sensitive:
   ```sql
   SELECT "PROPERTYADDRESS" FROM @assessments  -- ✓ uppercase needs quotes
   SELECT case_year FROM @overdoses            -- ✓ lowercase works without quotes
   ```

2. **GROUP BY works**, but not aggregate functions:
   ```sql
   SELECT "PROPERTYCITY", COUNT(*) as cnt 
   FROM @assessments 
   GROUP BY "PROPERTYCITY" 
   ORDER BY cnt DESC 
   LIMIT 10
   ```

3. **Check fields first** — Column names vary wildly between datasets

## Coverage Map (Critical!)

| Dataset | Coverage | Municipalities |
|---------|----------|----------------|
| Property Assessments | **All Allegheny County** | 130 municipalities |
| Property Sales | **All Allegheny County** | 130 municipalities |
| Fatal Overdoses | **All Allegheny County** | By zip code |
| Jail Census | **All Allegheny County** | County facility |
| 911 Dispatches | **Most of county** | 111 of 130 municipalities |
| Air Quality | **All Allegheny County** | Monitor locations |
| PLI Violations | **City of Pittsburgh ONLY** | 90 neighborhoods |
| PLI Permits | **City of Pittsburgh ONLY** | 90 neighborhoods |
| 311 Requests | **City of Pittsburgh ONLY** | 90 neighborhoods |

**If someone asks about Fox Chapel, Aspinwall, Mt. Lebanon, etc.** → Only county-wide datasets apply. No PLI/311 data for suburbs.

## Organizations & Topics

Use `orgs` and `groups` commands to explore. Major publishers:
- **allegheny-county** (143 datasets) — assessments, health, jail
- **city-of-pittsburgh** (126 datasets) — 311, permits, violations

## Example Queries

```bash
# Property lookup by parcel ID
<skill>/wprdc.py parcel 0028F00194000000

# Search by address (use SQL)
<skill>/wprdc.py query 'SELECT * FROM @assessments WHERE "PROPERTYHOUSENUM"='"'"'251'"'"' AND "PROPERTYADDRESS" LIKE '"'"'%PASADENA%'"'"''

# Overdose trends by year
<skill>/wprdc.py query 'SELECT case_year, COUNT(*) as deaths FROM @overdoses GROUP BY case_year ORDER BY case_year'

# Filter by neighborhood (City of Pittsburgh only)
<skill>/wprdc.py query 'SELECT "VIOLATION", COUNT(*) FROM @violations WHERE "NEIGHBORHOOD"='"'"'Hazelwood'"'"' GROUP BY "VIOLATION" ORDER BY COUNT(*) DESC LIMIT 10'

# Cross-tab query
<skill>/wprdc.py query 'SELECT combined_od1, race, COUNT(*) FROM @overdoses GROUP BY combined_od1, race ORDER BY COUNT(*) DESC LIMIT 20'
```

## Known Issues (as of Jan 2026)

- **311 Data** stopped updating Feb 2025 — new system transition
- **County Plumbing Inspections** — under maintenance
- **County Housing Inspections** — under maintenance  
- **County Food Facilities** — under maintenance

Always run `info <dataset>` to check last update date before relying on data.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.