NYC Open Data Civic Toolkit

Live queries against NYC government open data via Socrata. Geometry & areas computed in your browser. Catalog verified 2026-06-04.

Dog Runs
Dog Census
Off Leash in Parks
Off Leash in Public
Canine Waste
Complaints
Dog Share
Dog Licensing
Parking
Property Distress
Street Work
Datasets
Loading 93 dog runs…
Loading…

Off-Leash Tickets — NYC Parks by Year

Source: OATH jz4z-kudi (violation_date = issue date) · per-park rows attributed via violation_location_street_name match against Parks Properties (enfh-gkve) · citywide line is the true universe.
PEP in-park enforcement is back on the rise.

Off Leash in Public — NYC's Citywide Leash Law

Source: OATH jz4z-kudi · charge "DOGS TO BE RESTRAINED" / "UNLEASHED DOG" (AH62) · NYC Health Code §161.05 · the leash rule that applies on streets and sidewalks citywide, distinct from the Parks Department rule on the Off Leash in Parks tab.
The Sanitation Department, not the police or Parks, writes the public leash tickets.

Where the tickets are written

North Brooklyn Dog Census

A community survey by North Brooklyn Dogs (volunteers from the McCarren, McGolrick & Cooper Park dog runs) · . Aggregated results only; individual responses are private.
How to read this: a self-selected community sample, not a citywide survey.

Canine Waste Tickets — NYC's Pooper-Scooper Law

Source: OATH jz4z-kudi · charge "FAILURE TO REMOVE CANINE WASTE" (AK09) · DOH Health Code §161.03 / NYS PHL 1310 · enforced primarily by DSNY's DOS Enforcement Agents. Each ticket forward-geocoded (street_name + house + borough) via NYC Planning Labs GeoSearch.
Citywide enforcement of the pooper-scooper law has effectively collapsed since 2019.
Each solid red bubble is one address-exact location; radius scales with total tickets there (log scale, capped at 22px). Hollow dashed rings are recovered tickets that carry no house number, plotted at street-line or tax-lot-center precision (less exact than the solid bubbles). Hover for the per-year breakdown and the precision of each point.

311 Complaints

Resident-reported complaints to NYC 311 — the demand side, kept separate from the agency enforcement citations on the Off-Leash and Canine Waste tabs. Sources: 311 Service Requests erm2-nwe9 (2021-present) + fhrw-4uyv (historic). Pick a complaint type below.
Dog Waste
Dog Off-Leash
Unleashed Dog in Public

Dog Waste by Council District

Dog Off-Leash (Animal in a Park) by Council District

Unleashed Dog in Public by Council District

Dog Licensing

Source: NYC Dog Licensing Dataset nu7n-tubp. Registered dogs = distinct dogs with a license active during 2024 (mid-year renewals collapsed to one dog), rolled up from ZIP to borough. Licensing undercounts real ownership, so treat these as a proxy denominator, not a dog census.

Licenses issued per year, by borough

Per registered dog, by borough

Estimated dogs per 1,000 residents, by council district

Dog Share of the City

How big a slice of NYC's complaints and enforcement is actually about dogs. Each pie is all 311 service requests (or all OATH/ECB violations) citywide since 2020; the highlighted green slice is the dog and canine share. Click it to drill into the breakdown. Filter by year and borough.
311 Complaints
Violations
How this is measured

This tab puts dogs in context: every pie is the full citywide volume of complaints or violations, not a dog-only subset, so the green slice shows how small (or large) a share of the city's attention is actually about dogs.

The two denominators

  • 311 Complaints: all NYC 311 Service Requests (erm2-nwe9), every complaint type, 2020 to present (about 21 million records).
  • Violations: the OATH Hearings Division case file (jz4z-kudi), every summons returnable to the OATH tribunal across all city agencies (sanitation, buildings, health, fire, and the rest), 2020 to present (about 4.8 million). The "Group by" toggle switches the pie between issuing agency and specific violation type; in the violation-type view, the issuing-agency filter narrows to one agency (which sharpens the labels, since each agency issues a tighter set of charges).
  • The most recent calendar year is partial, so it reads low.

What counts as "dog & canine" (broad on purpose)

The bucket deliberately includes signals the single-issue tabs leave out, to give a true big-picture share.

  • 311: every complaint type and descriptor whose label names a dog or canine. The largest by far is barking-dog noise, followed by off-leash, dog waste, unleashed dogs, unsanitary conditions on private property, dead dogs, pet-shop dog and cat sales, and dog licensing.
  • Violations: an allowlist of structured OATH charge codes for dog and companion-animal offenses: off-leash restraint, canine waste, licensing and ID, nuisance and control, rabies and sterilization, pet-shop sourcing, and dog-run rules.

Two things that keep the numbers honest

  • Carve-out for clean shares. The dog total is subtracted from its parent category, so the dog slice and every other slice are mutually exclusive and add up to the true citywide total. A barking-dog complaint counts as dog, not doubled into the Noise category.
  • Code, not text, for violations. OATH charge descriptions are long per-summons narratives. For restaurant food-safety charges they routinely contain the literal words "hot dog" and "corn dog", so matching the description text would sweep in hundreds of unrelated food violations. Matching the structured charge code (in any of a summons's up-to-four charge slots) avoids that entirely.

Coverage checks

  • NYC 311 uses a controlled vocabulary with no "K9", "puppy", "hound", or "pooch" entries, so the dog and canine keywords capture the full set. Exotic-pet and food-establishment categories are correctly excluded.
  • A summons can list up to four charges. The dog match scans all four slots, so a summons that is dog only in a secondary charge is still counted (it appears as "Other dog/canine" in the drill-down). Only a few dozen citywide fall in that case.

Caveats: "involves a dog" is not the same as "is only about a dog," and companion-animal codes that cover both dogs and cats are included. Licensing and enforcement both undercount real activity, so read these as directional shares, not a literal census. Filtering narrows the dog count and the denominator together, so the percentage always reflects the selected year and borough. Source: erm2-nwe9 and jz4z-kudi, verified live 2026-06-10; producer scripts/aggregate_dogshare.py.

Property Distress

Properties that are behind on their property taxes (eligible for the city's lien sale) and carrying open building violations (DOB/BIS plus ECB). The overlap is the distress signal: owners letting both the tax bill and the building slide at the same time. Tax data 9rz4-mjek, violations 3h2n-5cm9 + 6bgk-3dad.

Distressed properties by council district

Distressed properties

How this is measured

This tab crosses two public datasets to find properties under financial and physical distress at once: behind on property taxes, and sitting on unresolved building violations.

The two signals

  • Behind on taxes: the DOF Tax Lien Sale List (9rz4-mjek) — the properties the city has noticed as eligible for its annual lien sale because of overdue charges. Only liens that include property tax are counted (water_debt_only = N); water-only debt is excluded. The 2025 noticing cycle is used as "currently behind."
  • Open building violations: active DOB/BIS violations (3h2n-5cm9, category text containing "ACTIVE") plus active ECB violations (6bgk-3dad, ecb_violation_status = ACTIVE). ECB carries the unpaid penalty (balance_due), summed per property.
  • Distressed = a tax-delinquent property that also has at least one open violation of either kind.

Joining them honestly

  • The datasets are joined on Borough-Block-Lot, the city's parcel key. The raw block and lot strings are formatted differently across datasets (the violations feeds zero-pad, e.g. 00847/00038; the lien list does not, e.g. 8026/130), so a naive text match silently finds nothing. The keys are normalized (leading zeros stripped) before joining. Placeholder and TEST lots are dropped, and the join uses BBL rather than BIN, which is frequently a 0000000 placeholder in the DOB feed.

Caveats: the lien-sale list is a noticing-eligibility list, not a ledger of exact back-tax balances (NYC does not publish per-parcel tax arrears), and a property drops off once the debt is sold or cured, so this reflects the current cycle, not all-time delinquency. Open-violation counts are point-in-time. The ECB balance_due is the penalty owed on those violations, not the tax owed. Source datasets verified live 2026-06-16; producer scripts/aggregate_property_distress.py.

Street Work

When DOT crews are milling (grinding the old surface off) and paving (laying the new one) on a given block, from the department's weekly work schedule xnfm-u3k5. Also tracks the blocks that were milled and left unpaved — the rough, grooved streets everyone complains about.

Where the crews are

Scheduled work

How this is measured

Resurfacing a street is two separate visits. A milling crew grinds the worn asphalt off, leaving a grooved surface with the manhole covers standing proud of the road. A paving crew returns later to lay the new course. The gap between the two is where the complaints live.

The source

  • Street Resurfacing Schedule (xnfm-u3k5) — DOT publishes the blocks its crews are scheduled to mill or pave, refreshed weekly. Every row is one block, one day, one work type, with the crew (in-house or contract) and shift (day or night).
  • Every view on this tab queries the dataset live, so it reflects whatever DOT published most recently rather than a copy taken when this page was built. There is no precomputed file and nothing that needs regenerating.

The lookahead is short

  • DOT's schedule runs only a few days ahead — typically to the end of the current week. There is no months-out plan in this dataset, so "when is my street due" is answerable for the next few days and no further. If a street is not listed, that means it is not on this week's schedule, not that it is not planned.

Milled but not paved

  • Each block carries DOT's own segment id (oftcode). A block is counted as open when its most recent milling is newer than its most recent paving (or it has no paving on record in the window): ground down, not yet resurfaced. Only completed work counts — DOT publishes a few days ahead, and a paving booked for Thursday does not make the street paved today. Any work already scheduled shows in the Coming up column instead.
  • For blocks that did get repaved, the typical milling-to-paving turnaround is 16 days (median across 1,852 blocks repaved inside the window). That is the yardstick for whether an open block is simply in progress or genuinely lagging, and it is recomputed from the live data on every load rather than quoted from a constant.
  • The backlog is bounded to the last 90 days. That is not an arbitrary cut: with a turnaround measured in weeks, a block still "open" after three months is far more likely to be a paving DOT never logged than a street genuinely left in pieces. A full-history rollup surfaced 5,611 such blocks, and presenting those as a real backlog would have been misleading.

Caveats: this is a work schedule, not a completion log. A row means crews were planned to be on that block that day, and weather or equipment routinely moves the work, so scheduled is not the same as done. That cuts both ways in the backlog: a block genuinely paved on a day that never got its own row will still look "open" here. Treat it as a list of candidates to check, not a proven inventory of unpaved streets, and note it cannot show a block open for longer than the 90-day window. Gaps are calendar days, measured against today in New York rather than the reader's timezone. Coordinates are published in NY State Plane feet and reprojected to WGS84 for the map. Every figure on this tab is queried live — the schedule from xnfm-u3k5, and, in the milled-not-paved view, completion from DOT's protected-streets feeds wyih-3nzf (blocks) and bryy-vqd9 (intersections), all verified 2026-07-21. Nothing is precomputed and there is no snapshot to go stale. The street-history view reads the schedule only, so it reports what was booked and does not check whether a paving was confirmed; the milled-not-paved view is the one that checks.

GET