An open, structured database of 12,405 CCTV / IP camera models and their technical specifications, covering 159 brands across every market segment β from budget consumer WiFi cameras to enterprise PTZ domes and thermal imaging systems. Each camera is a validated JSON file, aggregated into a single queryable dataset (JSON + CSV).
Field coverage
π Full field-coverage report β COVERAGE.md
cctv-database.com β search 12,405 cameras Β· full spec sheets Β· copy-paste Frigate configs Β· open & auditable
Why this exists
Camera spec sheets are scattered across vendor PDFs, retailer pages, and paywalled databases (IPVM, etc.) in inconsistent formats. This repo normalises them into one machine-readable structure so they can be compared, filtered, and reused.
The dataset is CC0 and always will be β free to use, copy, and redistribute with no restrictions. The website is just a convenient viewer; the data here is the source of truth.
Sourcing & trust
Every spec is transcribed from a manufacturer datasheet or official product page β never guessed, never inferred. When a field isn't documented it's left empty rather than filled with a plausible value: a missing spec is honest; a fabricated one is a landmine for anyone choosing a camera by it.
- Datasheet-first β retailer/reseller listings only corroborate; they're never the sole source for a spec a datasheet would carry.
- Omit, don't guess β sentinel values (e.g. "0 lux with IR"), marketing rounding, and models with no verifiable spec sheet are dropped, not recorded.
- Traceable β every record carries a
sourcesarray of URLs and alast_verifieddate, so any value can be checked at its origin.
Errors are still possible in any compiled dataset β always confirm against the official datasheet before purchasing or deploying.
Get the data
The whole dataset is committed and ready to use β no build step, no API key, no rate limit.
| Format | File | Contents |
|---|---|---|
| JSON | data/cameras.json |
all 12,405 cameras as one array |
| CSV | data/cameras.csv |
flattened, spreadsheet-friendly |
| ZIP | cameras.zip |
versioned + checksummed, attached to each release |
Querying the JSON
const cameras = require('./data/cameras.json'); // All 4K PoE outdoor cameras const poe4k = cameras.filter(c => c.power_source?.includes('poe') && c.resolution.megapixels >= 8 ); // All cameras with color night vision const colorNight = cameras.filter(c => c.night_vision?.type === 'color' ); // All cameras for the UK market const uk = cameras.filter(c => c.markets?.includes('UK') ); // All cameras with no subscription fee const noSub = cameras.filter(c => c.features?.some(f => f.toLowerCase().includes('no subscription')) ); // Only NDAA (Section 889) compliant cameras β manufacturer-stated const ndaa = cameras.filter(c => c.ndaa_compliant === true);
Or open data/cameras.csv in any spreadsheet for a quick browse.
Static JSON API
A read-only, static JSON API is hosted alongside the site (CC0, no key, no rate limit):
| Endpoint | Returns |
|---|---|
/api/brands.json |
brand index β name, slug, camera count |
https://www.cctv-database.com/api/brands/{slug}.json |
a brand summary + its cameras (brief) |
https://www.cctv-database.com/api/cameras/{id}.json |
one full camera record |
For bulk use, grab the whole dataset from data/cameras.json / data/cameras.csv, or a versioned, checksummed cameras.zip from any release.
Browse online
Browse the database β cctv-database.com
Prefer to self-host or browse offline? A standalone demo (just demo.html + cameras.json, no build step) is included β serve the docs/ folder locally with any static server, e.g. python3 -m http.server inside docs/, then open it.
On cctv-database.com you can:
- Search β instant full-text search across brand, model, and features
- Filter β narrow by brand, camera type, night vision, resolution, or market
- Sort β click any column header to sort ascending/descending
- Detail drawer β click a row to slide open the full spec sheet (resolution, connectivity, protocols, storage, audio, source links)
- Community notes β user-reported quirks and behaviors per camera, sourced and attributed, kept separate from datasheet specs
- Pagination β page through all 12,405 cameras, 25 per page
- Stats bar β live counts for total cameras, brands, 4K+, WiFi, and no-subscription models
Schema
Each camera JSON follows schema/camera.schema.json. Required fields:
{
"id": "reolink-rlc-823a",
"brand": "Reolink",
"model": "RLC-823A",
"type": "bullet",
"resolution": { "megapixels": 8, "label": "4K UHD" }
}Common optional fields:
| Field | Type | Example |
|---|---|---|
connectivity |
string[] |
["wifi", "ethernet"] (network only β PoE lives in power_source) |
night_vision.type |
string |
"color" / "ir" / "none" |
night_vision.range_m |
number |
30 |
night_vision.min_lux_color |
number |
0.01 |
power.method |
string |
"PoE (802.3af) / DC 12V" |
network.ethernet_speed_mbps |
number |
100 (RJ45 link speed) |
ip_rating |
string |
"IP67" |
ik_rating |
string |
"IK10" |
audio.two_way |
boolean |
true |
protocols |
string[] |
["onvif", "rtsp"] |
markets |
string[] |
["UK", "EU", "DE"] |
features |
string[] |
["no subscription", "IP67"] |
sources |
string[] |
datasheet / retailer URLs |
See CONTRIBUTING.md for the full field reference and naming conventions.
Contributing
Three paths β pick the one that fits you:
| Path | Best for | |
|---|---|---|
| π | Open a GitHub issue | Anyone β fill a web form, no cloning needed |
| π§ | npm run add β interactive CLI wizard |
Regular contributors β guided questions, writes JSON for you |
| π | Edit JSON directly | Developers β see CONTRIBUTING.md |
The wizard flow:
git clone https://github.com/YOUR_USERNAME/cctv-camera-database.git cd cctv-camera-database && npm install npm run add # asks questions, writes the JSON file npm run build # validates everything
See CONTRIBUTING.md for the full field reference, naming conventions, and what makes a good entry.
Maintainer & integration tooling
The data is committed and validated in CI β consumers never build it (see Get the data). These tools are for maintainers and integrators.
Build & validate
npm install # installs Ajv for schema validation (no runtime deps) npm run build # validates all JSON, writes data/cameras.json + data/cameras.csv
Other scripts: npm run add (interactive add-a-camera wizard) and npm run check-sources [brand] (probes every sources URL for dead/moved links β see docs/check-sources.md; also runs weekly in CI).
RTSP reference layer
data/rtsp-patterns.json is a CC0 brand-level RTSP URL reference for 183 brands (120 verified / 63 unverified / 351 stream templates). Each path is confirmed against the manufacturer's own documentation β never copied from aggregators. Regenerate after editing strix/verified/:
RTSP_PATTERNS_DATE=$(date +%Y-%m-%d) node scripts/build-rtsp-patterns.jsLocal QA tool
tools/qa.html is a zero-dependency, offline browser tool for previewing and sanity-checking camera data before you open a PR β a wide grid view across the dataset, gap highlighting, outlier flags, and in-browser schema validation (the schema is compiled to tools/qa-validator.js via node tools/build-qa-validator.js, regenerate after any schema change). Open it from the repo root (it reads ../data/cameras.json, or use the file picker). See tools/plan-demo-and-tools.md.
Verifying Frigate configs
The shipped configs.frigate snippets are generated; run one of these cameras and you can mark it community-verified (configs.frigate.verified / tested_by / tested_version) via the Verify a Frigate config issue form.
Frigate: beyond the baseline (ONVIF PTZ + two-way audio)
Each configs.frigate block ships a working detect/record baseline, plus structured fields for the deeper integrations: autotracking, onvif_port (the ONVIF control port for manual PTZ β 80 on most cameras, 2020 on Tapo, 8000 on Reolink), and two_way_audio (Frigate live-view talk via the go2rtc backchannel, set where the datasheet confirms two-way audio). The go2rtc methods, per-brand port table, and autotracking rules are documented once in docs/frigate-beyond-baseline.md rather than repeated per camera.
NetBox device-type export
scripts/gen-netbox.js exports cameras into netbox-community/devicetype-library YAML device types β PoE interface (with the standard parsed from power.method), DC power port, microSD module bay, and weight, sourced from each camera's datasheet.
node scripts/gen-netbox.js --brand Hikvision # β netbox-out/device-types/Hikvision/*.yaml node scripts/gen-netbox.js --brand Hikvision --report # list PoE cameras still missing a link speed
A device type is only emitted when the camera has a known RJ45 link speed (network.ethernet_speed_mbps), since the library requires an interface type and it is never guessed. Before opening a PR against devicetype-library, run the generated files through that repo's yamlfmt pre-commit hook so they match its canonical formatting.
Coverage
By the numbers
| Metric | Count |
|---|---|
| Total cameras | 12,405 |
| Brands | 159 |
| Form factors | 11 (bullet, dome, turret, PTZ, dual-lens, panoramic, covert, box, fisheye, floodlight, doorbell) |
| PoE wired | 8,999 |
| WiFi | 1,158 |
| Battery / wire-free | 340 |
| 4K / 8MP+ | 2,652 |
| 4β7MP | 4,928 |
| Under 4MP | 4,825 |
| With integration configs (Frigate / Home Assistant) | 9,155 |
With color-lux rating (night_vision.min_lux_color) |
8,917 |
All 159 brands
All 159 brands β camera count & market segment (click to expand)
| Brand | Cameras | Segment |
|---|---|---|
| Dahua | 1,996 | Enterprise + consumer, global |
| Hikvision | 1,859 | Enterprise + consumer, global |
| Hanwha | 662 | Enterprise AI, Korea/global |
| ACTi | 531 | Enterprise IP + analog, NDAA, TW/global |
| i-PRO | 504 | Enterprise AI (ex-Panasonic), JP/global |
| Uniview | 360 | Enterprise NDAA, global |
| HiLook (Hikvision) | 351 | Budget installer, EU/UK/AU |
| Bosch | 260 | Enterprise + thermal, EU/global |
| Milesight | 185 | Prosumer/Enterprise IoT, global |
| Vivotek | 183 | Enterprise AI, global |
| Amcrest | 182 | Prosumer, global |
| Intelbras | 170 | #1 Latin America, BR/AR/LATAM |
| Kedacom | 169 | Enterprise, CN/global |
| NOVUS | 164 | Installer IP + analog (AAT), PL/EU |
| Sunell | 155 | β |
| AVYCON | 153 | Prosumer/commercial (NDAA), US |
| Axis | 147 | Enterprise premium, global |
| TVT | 147 | Prosumer budget, CN/IN/SE Asia |
| Kenik | 145 | β |
| ABUS | 144 | Consumer + professional, GDPR-first, DE/AT/CH |
| Annke | 140 | Prosumer, global |
| Reolink | 127 | Prosumer, no-subscription, global |
| GeoVision | 110 | Enterprise, TW/Asia/global |
| LILIN | 110 | β |
| IMOU (Dahua) | 108 | Consumer + prosumer, global |
| Mobotix | 104 | Enterprise GDPR-first, EU |
| IC Realtime | 101 | β |
| Arecont Vision | 89 | Enterprise megapixel/multi-sensor (legacy), US |
| EZVIZ (Hikvision) | 87 | Consumer, global |
| Tapo (TP-Link) | 87 | Consumer budget, global |
| HikMicro | 86 | β |
| Mapesen | 83 | OEM/budget IP + analog, CN/global |
| Urmet | 78 | Prosumer/installer, IT/EU |
| Grundig | 76 | β |
| Ganz | 72 | Enterprise (CBC Group), JP/US/global |
| Digital Watchdog | 70 | Enterprise NDAA, US |
| CP Plus | 67 | India #2 brand, IN |
| Homaxi | 65 | β |
| Honeywell | 62 | Enterprise, US/IN |
| Infiniti Optics | 62 | β |
| Matrix | 62 | β |
| Speco | 61 | Professional/commercial (NDAA), US |
| Hi-Focus | 60 | Made-in-India, BIS certified, IN |
| Illustra | 60 | β |
| Luminys | 58 | β |
| Jovision | 57 | OEM/consumer (CloudSEE), CN/global |
| Alibi | 56 | β |
| BCS | 56 | Installer IP + analog, PL/EU |
| Avtron | 55 | Enterprise + analog, IN |
| Infinova | 50 | β |
| Eufy (Anker) | 46 | Consumer no-subscription, global |
| Ubiquiti UniFi | 46 | Prosumer/SMB, US/global |
| Lorex | 43 | Consumer NVR systems, CA/US |
| Uniarch (Uniview) | 43 | Budget NDAA sub-brand, global |
| ZKTeco | 42 | β |
| Comelit | 41 | Installer IP + door-entry, IT/EU |
| Srihome | 40 | Budget consumer WiFi, CN/global |
| D-Link | 39 | Consumer/SMB, TW/global |
| InVid Tech | 39 | β |
| JideTech | 38 | Consumer/prosumer PoE, CN/global |
| Pelco | 37 | Enterprise legacy, NA/global |
| DITS Vision | 34 | Made-in-India IP + analog, IN |
| Luma | 33 | Custom-install (SnapAV), US |
| Arlo | 32 | Consumer premium wire-free, global |
| 3xLOGIC | 31 | Enterprise (VIGIL), US |
| Dallmeier | 30 | β |
| Xiaomi | 28 | Consumer smart home, CN/global |
| OpenEye | 27 | β |
| PIX-LINK | 27 | Budget consumer WiFi, CN/global |
| TKH Security | 27 | Enterprise (Siqura), NL/EU |
| eneo | 26 | β |
| ieGeek | 26 | Consumer WiFi/solar, CN/global |
| Oncam | 26 | β |
| Sony | 26 | Professional imaging (IPELA), JP/global |
| Eagle Eye Networks | 25 | Cloud-managed VMS cameras, US/global |
| VIGI (TP-Link) | 25 | Business/SMB PoE, global |
| ClareVision | 24 | Custom-install (SnapAV), US |
| Vicon | 24 | β |
| Ajax | 23 | Professional alarm + wired PoE cameras, EU/UK |
| Hiseeu | 23 | Budget consumer kits, CN/global |
| Foscam | 22 | Consumer WiFi/PoE, global |
| Wyze | 22 | Budget consumer, US |
| Prama | 21 | β |
| Ring (Amazon) | 21 | Consumer ecosystem, global |
| TRUEN | 20 | β |
| Verkada | 20 | Cloud-managed enterprise, US/CA |
| Sparsh | 17 | β |
| SV3C | 17 | Budget consumer, CN/US |
| Avigilon | 16 | Enterprise NDAA, global |
| EverFocus | 16 | Enterprise/transport, TW/global |
| Boavision | 14 | Consumer WiFi/solar/4G, CN/global |
| Kasa | 14 | Consumer budget, global |
| Panasonic | 14 | β |
| Google Nest | 13 | Consumer smart home, global |
| Linovision | 13 | β |
| Blink (Amazon) | 12 | Budget battery, US/UK/EU |
| ESP | 12 | Installer HDview + Rekor IP, UK/EU |
| Inner Range | 12 | β |
| Instar | 12 | Privacy-first prosumer, DE/EU |
| Swann | 12 | Consumer, AU/US/UK |
| Camius | 11 | Consumer direct, US |
| Night Owl | 11 | Consumer DIY DVR/NVR, US |
| Resideo | 11 | Smart-home security (Honeywell Home), US |
| Tiandy | 11 | Enterprise + prosumer, CN/ME/Africa |
| Costar | 10 | Enterprise (Arecont successor), US |
| FLIR (Teledyne) | 10 | Thermal imaging, NA/EU |
| Aqara | 9 | Smart home HomeKit, EU/global |
| Bolide | 9 | Professional (NDAA), US |
| Lupus Electronics | 9 | Privacy-first, DE/AT/CH |
| Yale | 9 | Consumer smart home, UK/EU |
| Zmodo | 9 | β |
| AvertX | 8 | Professional (NDAA), US |
| LaView | 8 | Consumer WiFi/solar/4G, US |
| LTS | 7 | Prosumer/installer, US |
| American Dynamics | 6 | β |
| BEWARD | 6 | β |
| IQinVision | 6 | Enterprise megapixel (legacy), US |
| Siemens | 6 | Enterprise legacy (Building Tech), global |
| Brickcom | 5 | β |
| Genie | 5 | β |
| Messoa | 5 | β |
| Neutron | 5 | β |
| Nuvico | 5 | β |
| Philips Hue | 5 | β |
| PLANET | 5 | β |
| Siqura | 5 | β |
| Vitek | 5 | β |
| ALLNET | 4 | β |
| Canon | 4 | Enterprise optical, JP/global |
| Godrej | 4 | Consumer, IN |
| Grandstream | 4 | Prosumer/SMB IoT, US/global |
| Legrand | 4 | β |
| Longse | 4 | OEM/budget, CN/global |
| March Networks | 4 | Enterprise retail/banking, NA |
| Netatmo | 4 | Privacy-first no-subscription, EU |
| Qubo | 4 | Consumer, IN |
| RVi | 4 | β |
| SimpliSafe | 4 | DIY monitored security, US |
| Synology | 4 | NAS-native cameras, global |
| ADT | 3 | Monitored security, US |
| Cohu | 3 | β |
| Fanvil | 3 | β |
| SANNCE | 3 | β |
| Somfy | 3 | Smart home, FR/EU |
| TP-Link | 3 | β |
| 2N | 2 | β |
| Delta Dore | 2 | β |
| ecobee | 2 | β |
| Hive | 2 | Smart home, UK |
| Steinel | 2 | Outdoor smart light/cam, DE/AT/CH |
| TRENDnet | 2 | β |
| WiZ | 2 | β |
| ASECAM | 1 | OEM/budget (AliExpress), CN/global |
| Bosch Smart Home | 1 | Consumer smart home, DE/AT/CH |
| Fermax | 1 | β |
| HOLOWITS | 1 | β |
| IDIS | 1 | Enterprise DirectIP, KR/global |
| IMILAB | 1 | Consumer smart home (Xiaomi eco), CN/global |
| Philips | 1 | β |
Market coverage
Cameras carry a markets[] tag (ISO country codes + region tags like EU/MENA/LATAM) where a regional availability is known. Coverage is intentionally sparse β most entries are untagged or global β so rather than a hand-maintained table that drifts, filter by market on cctv-database.com or query the field directly:
const uk = require('./data/cameras.json').filter(c => c.markets?.includes('UK'));
Repository layout
cctv-camera-database/
βββ cameras/ # source of truth β one JSON file per camera, grouped by brand
β βββ dahua/ # 1996 cameras
β βββ hikvision/ # 1859 cameras
β βββ hanwha/ # 662 cameras
β βββ acti/ # 531 cameras
β βββ i-pro/ # 504 cameras
β βββ uniview/ # 360 cameras
β βββ β¦153 more brands
βββ data/ # GENERATED β do not edit by hand
β βββ cameras.json # all 12,405 cameras as one array
β βββ cameras.csv # flattened, spreadsheet-friendly
β βββ rtsp-patterns.json # CC0 brand-level RTSP URL layer (183 brands)
βββ strix/
β βββ verified/ # per-brand RTSP source files β rtsp-patterns.json
βββ schema/
β βββ camera.schema.json
βββ scripts/
β βββ build.js # aggregates + validates cameras/ β data/
βββ tools/ # local QA tool (qa.html) + browser schema validator
βββ docs/
β βββ glossary.md # field reference (source β edit when adding fields)
β βββ cameras.json # GENERATED β aggregate copy for the demo/Pages API
β βββ cameras/ # GENERATED β one browsable .md spec sheet per camera
βββ CONTRIBUTING.md
βββ LICENSE
How this was built
The dataset and its tooling were assembled with Claude Code. The demo video was produced with hve-spielberg, a Claude Code skill for AI-powered video production built on Remotion.
Roadmap
Shipped: JSON Schema CI, the web frontend (search / filter / sort / compare), Frigate + Home Assistant config export, the NetBox device-type export, and the read-only API above.
Open β contributions very welcome:
- Re-source ~1,051 reseller-only cameras to official OEM datasheets (#164 / #165)
- Backfill pixel resolution for the ~545 entries that state megapixels but no widthΓheight (#169)
- Frigate verification drive β only 32 of 9,046 shipped configs are community-verified; confirm one you run
- Grow
community_notesβ the per-camera quirks/behaviors layer (#297)
Community
| π Report a data error | Open a correction issue |
| β Add a missing camera | Open a camera submission |
| π Report a security issue | GitHub Security Advisories |
| π¬ Code of conduct | CODE_OF_CONDUCT.md |
| π Changelog | CHANGELOG.md |
Releases
Tagged releases ship a versioned, checksummed cameras.zip (JSON + CSV) β see the latest release or the full history. The CHANGELOG records what changed in each version. For the always-current data, use data/cameras.json on the default branch.
Disclaimer
Specifications are compiled from manufacturer datasheets and reputable retailers and may contain errors or become outdated. Always confirm against the official datasheet (linked in each entry's sources array) before purchasing. Not affiliated with any manufacturer.
Citation
If you use this dataset, a link back is appreciated:
CCTV Camera Database (v2.21.0), CC0 1.0. https://cctv-database.com β https://github.com/ch-bas/cctv-camera-database
License
Data is released under CC0 1.0 (public domain). Trademarks and model names belong to their respective owners.