Why I built this
The City of Tulsa publishes a lot of useful data on its open data portal, but most of it comes as raw files and map layers that are hard to read unless you already know what you’re looking for. I wanted one place where anyone can see what the city publishes, with every chart traced back to the city’s own copy.
It’s also the same work I do every day: before anyone builds on a dataset, check whether it can be trusted, and say plainly where it can’t.
How the snapshot is made
- A refresh script takes a fresh snapshot of 11 datasets. Each dataset is one small module that names the city’s portal item and the fields it needs.
- Map layers are queried from the city’s mapping services. Spreadsheet files are downloaded, read once, and deleted. Only counts, totals, and simplified shapes are kept, never the raw rows.
- Before anything is saved, each dataset has to pass four checks: it’s still listed in the city’s catalog, every field the charts use is still there, its record count hasn’t fallen by more than half, and its summary fits a size budget.
- A dataset that fails keeps its last good snapshot, and its page says it’s out of date. The other datasets still update.
- The site is then type-checked, built, and smoke-tested, and the script writes a table of what changed. Nothing goes live until I’ve reviewed it.
- The pages are plain HTML built ahead of time. Charts and maps are drawn as SVG, and each one has a data table you can open.
Judgment calls in the data
Open data is rarely clean. These are the places where the city’s data needed a decision, and what each page does about it. Each chart also says where its summary leaves records out.
311 records that all share one month
110,918 Customer Care records have a type that begins “Legacy MAC,” and all of them are dated July 2016. Left in, they’d make that single month tower over every other, so the monthly chart leaves them out. Every other count on the page includes them.
Zoning acres that disagree with the map
The zoning layer has its own acres field, but it disagrees with the mapped shapes for 298 of 3,648 districts. The acres on the planning page are measured from the shapes instead.
Floodplain areas in the wrong units
The floodplain layer stores area in square degrees, which can’t be turned into acres directly. Floodplain acres are measured from the full-resolution shapes in Oklahoma’s state plane coordinates. The same method reproduces the square miles the city publishes for its neighborhood areas exactly, which is how I checked it.
Animal Welfare locations
The Animal Welfare file records unknown locations as 0,0, a point in the Atlantic Ocean. Those, and any coordinates outside the Tulsa area, are counted as unmapped. The rest are grouped into squares roughly 0.6 miles across, and squares with fewer than three intakes are left off, so the map shows patterns rather than individual addresses.
Files that stopped gaining records
Some files keep being re-published on schedule but haven’t gained new records in a long time. A page flags any file whose newest record is more than 6 months older than the snapshot.
- Customer Care cases (311): newest record from Jun 2023.
- Neighborhood dumpster requests: newest record from Jun 2023.
- Parks and Recreation facility usage: newest record from Apr 2024.
- Animal Welfare intakes: newest record from Dec 2025.
Neighborhood figures without a year
The Neighborhood Statistical Areas layer publishes population, income, housing, and education figures, but doesn’t say what year or source each one comes from. They’re shown exactly as published.
What this isn’t
This isn’t an official city resource, and it isn’t affiliated with the City of Tulsa. The city publishes this data for illustrative purposes only. For anything that matters, use the city’s own copy, linked from every dataset.