NY DMV Traffic Tickets - Violations & Enforcement Data avatar

NY DMV Traffic Tickets - Violations & Enforcement Data

Pricing

from $0.03 / 1,000 ny dmv ticket records

Go to Apify Store
NY DMV Traffic Tickets - Violations & Enforcement Data

NY DMV Traffic Tickets - Violations & Enforcement Data

New York DMV adjudicated traffic tickets (public open data, 13.4M tickets, 2022-2026): charged code and description, year/month/weekday, driver age and gender, licence state, police agency and court. No names, addresses or plates.

Pricing

from $0.03 / 1,000 ny dmv ticket records

Rating

0.0

(0)

Developer

Wenhao Yang

Wenhao Yang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Every traffic and parkway violation the New York State Department of Motor Vehicles has adjudicated and closed out, 13,402,132 tickets, covering 2022 through 2026.

Both of the DMV's enforcement streams are in here: the regular court disposition stream (TSLED, 10,089,197 tickets) and the New York City and Rochester Traffic Violations Bureau administrative stream (TVB, 3,312,935).

Low cost

From $0.00005 per record, down to $0.00003 at Gold Pay-per-event: you are charged per record delivered, and nothing for the query.

What you get

FieldMeaning
violationCode / violationDescriptionWhat was charged - 1180D "SPEED IN ZONE" 1,565,830 / 5091 853,170 / 1110A "DISOBEYED TRAFFIC DEVICE" 844,218 / 306B "UNINSPECTED MOTOR VEHICLE" 827,665 and 1,017 more codes
violationYear / violationMonth / violationWeekdayWhen
ageAtViolation / genderThe driver, as recorded - age, and M 9,817,676 / F 3,269,088 / C 203,913 / U 111,455
licenseStateWhere the licence was issued - NEW YORK 10,572,397 / NEW JERSEY 381,709 / PENNSYLVANIA 218,174 / CONNECTICUT 167,948 and 66 more
policeAgencyWho wrote it - 902 agencies, from NEW YORK CITY POLICE DEPARTMENT 3,266,421 down to village departments
courtWhere it was disposed of - 1,392 courts, including the TVB bureaus (Bronx TVB 512,157 / Brooklyn South TVB 493,086) and county traffic agencies
sourceWhich stream - TSLED or TVB

Modes

  • rows (default) - tickets matching your filters.
  • aggregate - one count row per group: by year, month, weekday, driver gender or enforcement stream.

Example inputs

One violation code - code is a substring match on the charged code, so 1180D is speeding in a zone.

{ "code": "1180D", "maxResults": 100 }

One adjudication stream - source splits the court dispositions (TSLED) from the Traffic Violations Bureau (TVB).

{ "source": "TVB", "maxResults": 100 }

Young drivers on one weekday - a ageFrom / ageTo range fences out the junk ages (-1, and birth years that landed in the column) automatically.

{ "ageFrom": 16, "ageTo": 25, "weekday": "SATURDAY", "maxResults": 100 }

The register counted by year - mode=aggregate returns one row per group and every group, not a truncated top-N.

{ "mode": "aggregate", "groupBy": "year" }

Which courts handle the most - court matches the court name; mode=aggregate with groupBy=year counts them by year.

{ "court": "TVB", "mode": "aggregate", "groupBy": "year" }

What this dataset does not contain

There is no name, no address, no licence number and no plate.

A person appears in this register only as (age at the time, gender, state that issued the licence). That is not an omission on our part - the DMV publishes this file with those fields already removed, and cells small enough to identify an individual are suppressed upstream before publication.

So this is an enforcement-pattern dataset, not a person-lookup dataset. It answers questions like which violation codes are rising, how enforcement is distributed across agencies and courts, whether age or weekday correlates with violation type, and how the two adjudication streams differ. It cannot answer "has this driver been ticketed" and it cannot be joined to an individual.

Three things about the fields

The age column carries junk values. The floor is -1 and the ceiling is 2024 - a birth year has landed in the age column. 206,448 rows are recorded as zero or less and 10,863 are above 100. Every age range you supply fences those out automatically, so ageFrom=16 cannot be swamped by 'unknown' rows recorded as -1.

There is no calendar day. The source publishes a year, a month and a weekday, and nothing finer. Day-level or "last 30 days" filtering is impossible on this register and the actor does not pretend otherwise - you get a year, a month and a weekday.

Two columns are deliberately not offered as aggregates. policeAgency has 902 distinct values and court has 1,392. Both are available as filters (exact or substring), but a "top N agencies" aggregate over them would silently drop most of the tail, so neither is offered as a grouping dimension. The dimensions you can group by are all genuinely small.

The window is rolling

This is not a historical archive. The dataset's own title is "Traffic Tickets Issued: Four Year Window" - the State keeps a rolling window and drops older years as new ones arrive. Today the register covers 2022-2026:

2022 2,584,657 2025 3,020,647
2023 2,851,858 2026 2,032,774
2024 2,912,196

If you need a violation from 2019, it is not in the source and it is not in this actor.

Source

Counts below are a live snapshot - the register is refreshed monthly, so exact figures move between reads. The order of magnitude and the ratios are stable.

New York State Department of Motor Vehicles, published on data.ny.gov as Traffic Tickets Issued: Four Year Window - public open data, no login and no key. Note that it is refreshed monthly, not daily, unlike most registers in this series; the newest month present reflects that cadence.

Output

Every record carries the same key set regardless of mode - the ticket fields plus the aggregate columns (groupKey, groupCount, groupBy), which are "" outside aggregate mode. Every record carries sourceUpdatedAt, the date the State last rebuilt the register.

  • NYC OATH Hearings - where New York City agencies' own summonses are adjudicated.
  • NYC DOB Permits - the building permits whose violations show up in that tribunal.

Example output

One ticket - code=1225C2A returns the record below. Every record carries the ticket fields plus the aggregate columns (groupKey, groupCount, groupBy), which are "" outside aggregate mode:

{
"platform": "ny-dmv-tickets",
"source": "TVB",
"mode": "rows",
"groupKey": "", "groupCount": "", "groupBy": "",
"violationCode": "1225C2A",
"violationDescription": "OPERATING MOTOR VEHICLE WITH MOBILE PHONE",
"violationYear": "2025",
"violationMonth": "12",
"violationWeekday": "WEDNESDAY",
"ageAtViolation": "37",
"gender": "M",
"licenseState": "PENNSYLVANIA",
"policeAgency": "NEW YORK CITY POLICE DEPARTMENT",
"court": "Queens South TVB",
"sourceUpdatedAt": "2026-09-06"
}

mode=aggregate, groupBy=source - one row per adjudication stream:

TSLED 10,089,197
TVB 3,312,935

Speeding in a zone - code=1180D:

1180D | 2026 | 9 | SPEED IN ZONE | NEW YORK CITY POLICE DEPARTMENT

Violations by weekday - mode=aggregate, groupBy=weekday:

WEDNESDAY 2,110,004 SATURDAY 1,776,187
THURSDAY 2,102,764 MONDAY 1,725,532
TUESDAY 2,087,393 SUNDAY 1,551,489
FRIDAY 2,048,763