The City of Raleigh publishes 178 public datasets. Crime reports, restaurant inspections, building permits, bike lanes, speed humps, EV charging stations, dog parks: it is all there on data.raleighnc.gov, free for anyone to use.
Most citizens never touch it.
The barrier isn’t access. The barrier is discovery. The data lives behind an ArcGIS Hub portal, a web interface designed for GIS analysts. You can browse categories, click through maps, and eventually download a CSV, but the process assumes you already know what you are looking for.
I pointed my AI agent at the portal and see what was actually in there. I am using Hermes Agent (an open-source AI agent framework), and one of the things that makes it different is a saying we have: “Just ask Hermes.” It means the agent can discover, build, and ship tools without being walked through every step.
This was one of those moments. I pointed the agent at the URL, asked what was there, and it came back with something better than a summary: a command-line tool called raleigh that wraps the city’s API. It’s open source, published at git.brandyapple.com/magnus/agent-skills, zero dependencies, one file, ready to run.
178 Datasets, 10 Categories#
The first thing we did was dump the full catalog. Every dataset the city publishes, listed in one table:
raleigh catalog
That one command prints 178 rows: the full inventory of what Raleigh makes public. Transportation, public safety, property records, zoning, parks, food safety, government budgets, census data, environmental surveys. If the city tracks it, it is probably in here.
Filter by category:
raleigh catalog --category "Public Safety"
That gives you 16 datasets: police incidents (both NIBRS and SRS standards), fire incidents, EMS stations, code enforcement cases, communication infrastructure sites. Or search by keyword:
raleigh catalog --search bicycle
One result: Existing Bicycle Infrastructure (Public). More on that in a minute.
The categories command gives you the bird’s eye view:
Data You Did Not Know the City Had#
The dog park dataset is the kind of thing that makes open data suddenly feel useful. Every Raleigh dog park has 18 fields of structured data. Not just location and name: shade, bathroom availability, agility equipment, wood chips, small dog area, lights, benches, water fountains. The city tracks whether each park has a climbing platform.
Want to find what you need? Try this:
raleigh query "Raleigh Dog Parks" --where "SHADE='Yes'"
That gives you six parks. Out of 12 total, exactly half have shade. Add small dog area and you narrow it further:
raleigh query "Raleigh Dog Parks" --where "BATHROOM='Yes' AND WOOD_CHIPS='Yes'"
Seven parks. Millbrook-Exchange even has agility equipment. If you own a dog in Raleigh, this data tells you which park to visit before you leave the house.
The Restaurant Scores No One Talks About#
Wake County publishes every restaurant inspection score. The data is public. Most people do not know how to find it, or that it even exists. The command is dead simple:
raleigh info "Food Inspections"
Eight fields per record: score, date, inspector, description, type, permit ID. Everything is timestamped.
The worst recent score in the past 30 days? You can find it by joining the inspections table to the restaurants table by HSISID:
raleigh query "Food Inspections" --where "SCORE<85" --order-by "SCORE ASC" --limit 3
Flavor Hills got an 82 on their most recent inspection. The inspector’s notes tell the story: no sanitizer test kit available, dish machine not reaching 50ppm chlorine, and a menu item (salmon) marked with a consumer advisory asterisk that didn’t have the required Parasite Destruction Letter on file. The inspector offered to come back within 10 business days for a re-inspection.
The historic record is worse. When you go back further:
raleigh query "Food Inspections" --where "SCORE<70"
Restaurants with scores of zero include a Costco food court in Apex (2019, 2020), Dillard Drive Middle School’s cafeteria in Raleigh (2022), and Middle Creek Elementary’s cafeteria in Apex (2023). The notes range from “Serv Safe: 0” to “Keep refrigerators locked when not here. Rewash.”
This is the kind of data that the county collects, stores, and makes public but that most citizens never see. Through a CLI, finding the worst inspection in the past month is two commands and a join.
Your Neighbor Just Got a Building Permit#
The building permits dataset has 83 fields per record. Permit type, work class, proposed work description, estimated project cost, applied date, issued date, contractor, county account number, land use code.
We sorted by newest first:
raleigh query "Building Permits Issued Past 180 Days" --limit 5 --order-by "issueddate DESC"
The most recent permit in the database? Issued June 9, 2026. Less than three days ago. A restaurant converting its drink bar to a sushi bar downtown. $4.7 million in estimated project cost. The permit before that: a kitchen remodel and new ceiling light in a family home, issued the same day.
Data that fresh changes how you think about city government. You aren’t reading quarterly reports. You are reading individual decisions, days old, with cost estimates and contractor names.
Bike Lanes, Speed Humps, and EV Chargers#
The transportation category covers more than you would expect from a city government portal. Bike infrastructure with installation years going back to 2017:
raleigh query "Existing Bicycle Infrastructure (Public)" --limit 3 --json
Each record includes the facility type (sharrow, bike lane, separated lane, sidepath), the start and end points, and the year it was installed. The 2025 Comprehensive Network Category is tracked per segment. This is how you measure whether the city is actually building what it promised.
Speed humps are mapped by street. EV charging stations show availability status: AVBL (available) or TMPU (temporarily unavailable). The city center deck downtown has both an available and a temporarily unavailable station, which is useful to know before you drive there.
Download It All#
Every dataset can be exported to CSV, JSON, or GeoJSON. The GeoJSON includes lat/lng coordinates, so you can drop the data directly into QGIS, Observable, or any mapping tool:
raleigh download "Raleigh Dog Parks" -f geojson -o dog-parks.geojson
raleigh download "Food Inspections" --where "SCORE<70" -f csv -o bad-inspections.csv
The first command downloads all 12 dog parks with geometry. The second exports 19 bad inspection records to a CSV you can open in any spreadsheet.
How It Works#
The raleigh CLI is a single Python file, standard library only. It talks to the same ArcGIS REST API that powers the city’s data portal: the public endpoint, no API key required. Query a FeatureServer dataset (dog parks, bike lanes, building permits), it uses GeoJSON with full geometry. Query a MapServer table (food inspections), it detects the server type and switches to JSON with attribute format transparently. You never need to know which one you are querying.
The dataset catalog of all 178 services is embedded in the script. The city publishes its data through two content groups in ArcGIS Online, and the tool searches both. If you ever wonder whether a piece of data exists, raleigh search will tell you instantly.
Open Source#
You can find the tool at git.brandyapple.com/magnus/agent-skills under the raleigh skill directory. Or just grab the local install, one file, Python 3.8 or later, zero dependencies. Clone the repo and symlink the script into your PATH, or run it directly from the skill directory.
The dataset catalog itself is open data, too. All 178 service URLs and layer IDs were extracted from the city’s own ArcGIS Hub search API, which returns everything the city has chosen to share publicly. If a dataset stops working, the API will tell us, and the fix is a one-line change to the embedded catalog.
Try raleigh catalog and see what you find. The city already paid for the data.
