wprdc

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.

16 stars

Best use case

wprdc is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

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.

Teams using wprdc should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/wprdc/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/data-ai/wprdc/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/wprdc/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How wprdc Compares

Feature / AgentwprdcStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

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.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 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.

Related Skills

bgo

10
from diegosouzapw/awesome-omni-skill

Automates the complete Blender build-go workflow, from building and packaging your extension/add-on to removing old versions, installing, enabling, and launching Blender for quick testing and iteration.

Coding & Development

accessibility-ux-audit

16
from diegosouzapw/awesome-omni-skill

Audit and enhance accessibility and UX across all pages and components.

accessibility-testing

16
from diegosouzapw/awesome-omni-skill

WCAG 2.2 compliance testing, screen reader validation, and inclusive design verification. Use when ensuring legal compliance (ADA, Section 508), testing for disabilities, or building accessible applications for 1 billion disabled users globally.

accessibility-rules

16
from diegosouzapw/awesome-omni-skill

Concise accessibility checklist and practices for components in the repository. Use when implementing UI to ensure keyboard, screen reader, and focus semantics.

accessibility-planning

16
from diegosouzapw/awesome-omni-skill

Plan accessibility compliance - WCAG 2.2, Section 508, EN 301 549, inclusive design principles, audit planning, and remediation strategies.

accessibility-design

16
from diegosouzapw/awesome-omni-skill

WCAG 2.1 AA compliance patterns, screen reader compatibility, keyboard navigation, and ARIA best practices. Use when implementing accessible interfaces, reviewing UI components, or auditing accessibility compliance. Covers semantic HTML, focus management, color contrast, and assistive technology testing.

accessibility-design-checklist

16
from diegosouzapw/awesome-omni-skill

Эксперт по accessibility дизайну. Используй для WCAG, a11y чеклистов и inclusive design.

accessibility-design-checker

16
from diegosouzapw/awesome-omni-skill

Ensures designs meet accessibility requirements including WCAG compliance, color contrast, keyboard navigation, screen reader support, and focus management. Reviews designs for accessibility issues and provides recommendations.

accessibility-contrast-audit

16
from diegosouzapw/awesome-omni-skill

[Design System] Quantitative accessibility audit for UI - contrast ratios, font sizes, tap targets, heading hierarchy. Use when (1) checking WCAG color contrast compliance, (2) auditing text sizes for readability, (3) validating touch/click target sizes, (4) reviewing heading structure and landmarks, (5) user asks to 'check accessibility', 'audit contrast', 'WCAG compliance', or 'a11y check'.

accessibility-compliance

16
from diegosouzapw/awesome-omni-skill

Implement WCAG 2.2 compliant interfaces with mobile accessibility, inclusive design patterns, and assistive technology support. Use when auditing accessibility, implementing ARIA patterns, building for screen readers, or ensuring inclusive user experiences.

accessibility-by-default

16
from diegosouzapw/awesome-omni-skill

Treats accessibility as a baseline requirement, not a feature. WCAG 2.1/2.2 AA principles embedded into every decision.

accessibility-basic-check

16
from diegosouzapw/awesome-omni-skill

Run a basic accessibility checklist for UI changes. Use when a junior developer needs quick a11y guidance.