Atlas · Methodology

How the number was produced

The national camera figure is the most quotable claim on this site. That makes it the one that most deserves to be checkable. This page documents the extraction end to end — including what it gets wrong.

Source
OpenStreetMap, via the Overpass API
Licence
ODbL 1.0 — © OpenStreetMap contributors
Extract date
Aug 15, 2026
Query scope
Per state, by ISO3166-2 area — 51 areas (50 states + District of Columbia)
Mapped camera coordinates
118,623
Counties holding at least one
2,223
Refresh
Manual, by re-running the fetch. There is no live feed.

What one record means

A mapped camera coordinate is one OpenStreetMap object that a volunteer recorded as an automated license plate reader. It is not an Unsurveilled field observation. We have not personally confirmed any pole.

We treat one OSM object as one physical reader. That is an assumption, and it is the largest single source of error in the count. A gantry carrying four cameras may be mapped as one node or as four; both happen. We do not correct for it, because inventing a multiplier would be worse than reporting what the source says.

The query

Each state is queried by its ISO3166-2 administrative area, not by a bounding box — a single continent-sized query times out on the public Overpass instance, and the per-state form gives every camera a state attribution for free. Within each area, two clauses:

  • node["man_made"="surveillance"]["surveillance:type"~"^(ALPR|ANPR)$",i]
    ANPR is the British term for the same device; the ,i makes the match case-insensitive
  • node["man_made"="surveillance"]["camera:type"~"ALPR",i]
    an alternative tagging convention some mappers use

Nodes only. Ways and relations tagged as surveillance are not matched, so a camera mapped as an area does not appear. That is a deliberate undercount: placing a point at the centroid of an area would invent a precision the source does not have.

Note what is not in the query. A device tagged only as a speed camera is not collected, even though many speed cameras do read plates, because the tag does not establish it. Nor is anything inferred from an operator or address tag. The count is therefore a floor in at least three separate ways.

Deduplication

Because each state is queried separately, an object near a boundary can be returned twice. Records are keyed by their OpenStreetMap object ID and any repeat is discarded, so the same physical node cannot be counted under two states. Coordinates the Albers USA projection cannot place — a bad latitude, a transposed pair, a point outside the United States — are dropped rather than drawn in the ocean, and the number dropped is published in the data sidecar alongside the count.

Vendor attribution

Vendor comes from the manufacturer and brand tags on the object, run through one shared classifier. The operator tag is never read as a vendor. An earlier build did read it, and "Chicago Police Department" duly appeared in the vendor list — an agency is not a manufacturer, and conflating them would misattribute hardware to organisations that merely run it.

7,534 coordinates — 6.4% — carry no vendor we can identify. Those read Unspecified, which means the fact is unrecorded, not that the camera has no vendor.

Vendor as classifiedCoordinates
Flock Safety96,780
Unspecified7,534
Motorola Solutions5,899
Genetec2,494
Axis Communications1,102
Leonardo/Elsag979
Ubicquia596
Rekor589
Ekin563
Neology490
Axon332
PlateSmart239
Avigilon181
Verkada167
Redspeed104
MAV104
LiveView Technologies71
NDI Recognition Systems64
Kapsch59
Bosch48
Insight LPR45
Costar43
Uniview42
Hanwha Vision31
PaceTalk26
Hikvision13
SkyCop11
Dahua9
Turing5
Jenoptik1
Inex Technologies1
Automotus1

Operator, and why most are unknown

Where OpenStreetMap records an operator we keep it verbatim. Most objects have none. An unattributed camera is operator unknown — it is not evidence of government operation, and the Atlas never presents it as such. Some mapped readers are run by private businesses, and treating those as municipal surveillance would be a straightforward error.

Geography

State comes from the query area the object was returned by. County is assigned geometrically, by testing each coordinate against US Census county polygons — not from any address or operator tag. 2,223 counties hold at least one coordinate. Municipal camera counts on jurisdiction dossiers are point-in-polygon against the municipal boundary, never a radius around a town centre: a radius absorbs neighbouring cities, and in testing produced 65 cameras for a town whose boundary contains 46.

Place labels come from a separate OpenStreetMap extract of 5,464 cities and towns, retrieved Aug 15, 2026. A place label says nothing about whether cameras are present.

Coverage, stated as three different things

These measure different facts and the site keeps them apart:

Coordinate coverage
49 of 50 states hold at least one mapped coordinate
Jurisdiction-record coverage
22 of 50 states hold at least one program or decision record
Any-data coverage
50 of 50 states hold either
District of Columbia
77 coordinates. Queried, reported, and never counted as a state.

There is deliberately no national “devices represented” total. Adding mapped coordinates to the device counts stated in program records would count the same hardware twice wherever we hold both, so the two are published separately and never summed.

Known false-positive and false-negative risks

  • Multi-camera installations mapped as a single object undercount; single cameras mapped as several overcount.
  • Removed cameras can persist in OpenStreetMap until a volunteer edits them. A coordinate is evidence a reader was observed, not that it is there today.
  • Mis-tagged devices. A speed camera or ordinary CCTV tagged as ALPR by mistake enters the set.
  • Private deployments are included where mapped. They are surveillance infrastructure, and they are not government programs.
  • Coverage follows mappers, not cameras. Dense areas reflect active local mapping communities. A state with few coordinates has thin OSM coverage, which is not a finding about that state.
  • Alaska returned zero. That is an absence of mapping, not an absence of readers.

Reproducing this

The extraction is a script, not a manual process. The fetch, the vendor classifier, the point-in-polygon assignment, and the binary packer all live in the repository, and re-running them against a fresh Overpass response reproduces the dataset. The snapshot itself is committed, so any figure on this site can be checked against the exact data that produced it.

Corrections

If a coordinate is wrong — wrong position, removed camera, wrong vendor, known operator, duplicate, or not an ALPR at all — tell us and we will correct the record and say that we did. Errors in the underlying map are better fixed at the source, in OpenStreetMap itself, where the correction benefits everyone rather than only this site.