Service request no. NYC311-PULSE-01 Filed 2026 In progress

Where does NYC's 311 system fall behind?

A relational database and Power BI dashboard built on real NYC 311 service request data, with an automated Python and SQL pipeline behind it.

The question

NYC's 311 line handles millions of service requests a year, everything from noise complaints to broken streetlights. Response times vary a lot by agency, borough, and complaint type, but that variation is buried in raw city data. This project turns it into something a decision maker could actually act on.

Replace this paragraph with your specific question once you've explored the data, for example: which agency misses its own response time the most, or which neighborhoods wait longest for the same complaint type.

How it works

1

Pull

A Python script calls the NYC Open Data (Socrata) API for 311 requests.

2

Automate

A scheduled GitHub Actions workflow runs that script weekly, no manual step required.

3

Model

Data lands in a PostgreSQL star schema: one fact table, four dimension tables.

4

Analyze

SQL with CTEs and window functions answers questions like agency ranking and month over month change.

5

Visualize

Power BI connects to the database directly and models relationships, DAX measures, and the dashboard below.

Data model

Fact table
fact_311_requests
Dimension
dim_agency
Dimension
dim_complaint_type
Dimension
dim_borough
Dimension
dim_date

Key finding

XX%

Fill this in once you've run the analysis. A specific number beats a general claim, for example a percentage gap between the slowest and fastest agency, or a resolution-time trend over time.

Live dashboard

NYC 311 Service Requests Dashboard

Download full-resolution PDF

Tech stack

SQL PostgreSQL Relational database design Star schema data modeling Python ETL pipeline Power BI DAX Data visualization GitHub Actions CI/CD automation REST API integration