Open database of 11,400+ CCTV camera specs across 130+ brands, with Frigate and ONVIF/RTS integration, CC0
246
stars
810
commits
JavaScript
primary language
Sep 11, 2026
updated
An open, structured database of 3,750 CCTV / IP camera models and their technical specifications, covering 83 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).
📊 Full field-coverage report → COVERAGE.md
cctv-database.com — search 3,750 cameras · full spec sheets · copy-paste Frigate configs · open & auditable
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.
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.
What you see above:
The database was assembled with the help of Claude Code.
Specs are sourced from manufacturer datasheets and reputable retailer listings —
each entry includes a sources array with URLs. As with any compiled dataset,
errors are possible; always verify against the official datasheet before purchasing
or deploying.
The demo video was produced with hve-spielberg, a Claude Code skill for AI-powered video production built on Remotion.
cctv-camera-database/
├── cameras/ # source of truth — one JSON file per camera, grouped by brand
│ ├── hikvision/ # 479 cameras
│ ├── i-pro/ # 354 cameras
│ ├── dahua/ # 352 cameras
│ ├── acti/ # 249 cameras
│ ├── bosch/ # 153 cameras
│ ├── abus/ # 144 cameras
│ └── …77 more brands
├── data/ # GENERATED — do not edit by hand
│ ├── cameras.json # all 3,750 cameras as one array
│ ├── cameras.csv # flattened, spreadsheet-friendly
│ └── rtsp-patterns.json # CC0 brand-level RTSP URL layer (172 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
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).
data/rtsp-patterns.json is a CC0 brand-level RTSP URL reference for 172 brands (118 verified / 54 unverified / 349 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.js
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.
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.
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.
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.
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'))
);
Or open data/cameras.csv in any spreadsheet for a quick browse.
| Metric | Count |
|---|---|
| Total cameras | 3,750 |
| Brands | 83 |
| Form factors | 11 (bullet, dome, turret, PTZ, dual-lens, panoramic, covert, box, fisheye, floodlight, doorbell) |
| PoE wired | 2,810 |
| WiFi | 706 |
| Battery / wire-free | 232 |
| 4K / 8MP+ | 1,007 |
| 4–7MP | 1,586 |
| Under 4MP | 1,157 |
| With integration configs (Frigate / Home Assistant) | 3,156 |
With color-lux rating (night_vision.min_lux_color) | 2,382 |
| Brand | Cameras | Segment |
|---|---|---|
| Hikvision | 479 | Enterprise + consumer, global |
| i-PRO | 354 | Enterprise AI (ex-Panasonic), JP/global |
| Dahua | 352 | Enterprise + consumer, global |
| ACTi | 249 | Enterprise IP + analog, NDAA, TW/global |
| Bosch | 153 | Enterprise + thermal, EU/global |
| ABUS | 144 | Consumer + professional, GDPR-first, DE/AT/CH |
| Annke | 140 | Prosumer, global |
| Reolink | 127 | Prosumer, no-subscription, global |
| Uniview | 123 | Enterprise NDAA, global |
| GeoVision | 93 | Enterprise, TW/Asia/global |
| EZVIZ (Hikvision) | 87 | Consumer, global |
| Axis | 81 | Enterprise premium, global |
| Digital Watchdog | 70 | — |
| Kedacom | 63 | Enterprise, CN/global |
| Speco | 61 | Professional/commercial (NDAA), US |
| Hi-Focus | 60 | Made-in-India, BIS certified, IN |
| Jovision | 57 | — |
| IMOU (Dahua) | 56 | Consumer + prosumer, global |
| Tapo (TP-Link) | 55 | Consumer budget, global |
| Eufy (Anker) | 46 | Consumer no-subscription, global |
| Hanwha | 46 | Enterprise AI, Korea/global |
| Ubiquiti UniFi | 46 | Prosumer/SMB, US/global |
| Uniarch (Uniview) | 43 | Budget NDAA sub-brand, global |
| Lorex | 40 | Consumer NVR systems, CA/US |
| Srihome | 40 | — |
| Luma | 33 | Custom-install (SnapAV), US |
| HiLook (Hikvision) | 30 | Budget installer, EU/UK/AU |
| TKH Security | 27 | — |
| CP Plus | 26 | India #2 brand, IN |
| Xiaomi | 26 | Consumer smart home, CN/global |
| Amcrest | 25 | Prosumer, global |
| Arlo | 25 | Consumer premium wire-free, global |
| VIGI (TP-Link) | 25 | Business/SMB PoE, global |
| ClareVision | 24 | — |
| Hiseeu | 23 | — |
| Ajax | 22 | Professional alarm + wired PoE cameras, EU/UK |
| Foscam | 22 | Consumer WiFi/PoE, global |
| Ring (Amazon) | 21 | Consumer ecosystem, global |
| Verkada | 20 | Cloud-managed enterprise, US/CA |
| Vivotek | 19 | Enterprise AI, global |
| SV3C | 17 | Budget consumer, CN/US |
| Avigilon | 16 | Enterprise NDAA, global |
| Wyze | 14 | Budget consumer, US |
| Blink (Amazon) | 12 | Budget battery, US/UK/EU |
| Google Nest | 12 | Consumer smart home, global |
| Instar | 12 | Privacy-first prosumer, DE/EU |
| Milesight | 12 | Prosumer/Enterprise IoT, global |
| Swann | 12 | Consumer, AU/US/UK |
| Camius | 11 | Consumer direct, US |
| Night Owl | 11 | — |
| Resideo | 11 | — |
| Tiandy | 11 | Enterprise + prosumer, CN/ME/Africa |
| Costar | 10 | Enterprise (Arecont successor), US |
| FLIR (Teledyne) | 10 | Thermal imaging, NA/EU |
| Kasa | 10 | Consumer budget, global |
| Aqara | 9 | Smart home HomeKit, EU/global |
| Lupus Electronics | 9 | Privacy-first, DE/AT/CH |
| Pelco | 9 | Enterprise legacy, NA/global |
| TVT | 9 | Prosumer budget, CN/IN/SE Asia |
| Yale | 9 | Consumer smart home, UK/EU |
| D-Link | 8 | — |
| Intelbras | 8 | #1 Latin America, BR/AR/LATAM |
| LaView | 8 | Consumer WiFi/solar/4G, US |
| Mobotix | 8 | Enterprise GDPR-first, EU |
| LTS | 7 | Prosumer/installer, US |
| Canon | 4 | Enterprise optical, JP/global |
| Godrej | 4 | Consumer, IN |
| Grandstream | 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 |
| SimpliSafe | 4 | DIY monitored security, US |
| Synology | 4 | NAS-native cameras, global |
| ADT | 3 | Monitored security, US |
| Somfy | 3 | Smart home, FR/EU |
| Hive | 2 | Smart home, UK |
| Honeywell | 2 | Enterprise, US/IN |
| Steinel | 2 | Outdoor smart light/cam, DE/AT/CH |
| ASECAM | 1 | — |
| Bosch Smart Home | 1 | Consumer smart home, DE/AT/CH |
| IDIS | 1 | Enterprise DirectIP, KR/global |
| IMILAB | 1 | — |
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'));
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.
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.
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.
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:
community_notes — the per-camera quirks/behaviors layer (#297)| 🐛 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 |
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.
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.
If you use this dataset, a link back is appreciated:
CCTV Camera Database (v2.2.0), CC0 1.0. https://cctv-database.com — https://github.com/ch-bas/cctv-camera-database
Data is released under CC0 1.0 (public domain). Trademarks and model names belong to their respective owners.
JavaScript
71.6%
HTML
28.4%
Open database of 11,400+ CCTV camera specs across 130+ brands, with Frigate and ONVIF/RTS integration, CC0
246
stars
810
commits
JavaScript
primary language
Sep 11, 2026
updated
An open, structured database of 3,750 CCTV / IP camera models and their technical specifications, covering 83 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).
📊 Full field-coverage report → COVERAGE.md
cctv-database.com — search 3,750 cameras · full spec sheets · copy-paste Frigate configs · open & auditable
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.
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.
What you see above:
The database was assembled with the help of Claude Code.
Specs are sourced from manufacturer datasheets and reputable retailer listings —
each entry includes a sources array with URLs. As with any compiled dataset,
errors are possible; always verify against the official datasheet before purchasing
or deploying.
The demo video was produced with hve-spielberg, a Claude Code skill for AI-powered video production built on Remotion.
cctv-camera-database/
├── cameras/ # source of truth — one JSON file per camera, grouped by brand
│ ├── hikvision/ # 479 cameras
│ ├── i-pro/ # 354 cameras
│ ├── dahua/ # 352 cameras
│ ├── acti/ # 249 cameras
│ ├── bosch/ # 153 cameras
│ ├── abus/ # 144 cameras
│ └── …77 more brands
├── data/ # GENERATED — do not edit by hand
│ ├── cameras.json # all 3,750 cameras as one array
│ ├── cameras.csv # flattened, spreadsheet-friendly
│ └── rtsp-patterns.json # CC0 brand-level RTSP URL layer (172 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
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).
data/rtsp-patterns.json is a CC0 brand-level RTSP URL reference for 172 brands (118 verified / 54 unverified / 349 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.js
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.
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.
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.
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.
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'))
);
Or open data/cameras.csv in any spreadsheet for a quick browse.
| Metric | Count |
|---|---|
| Total cameras | 3,750 |
| Brands | 83 |
| Form factors | 11 (bullet, dome, turret, PTZ, dual-lens, panoramic, covert, box, fisheye, floodlight, doorbell) |
| PoE wired | 2,810 |
| WiFi | 706 |
| Battery / wire-free | 232 |
| 4K / 8MP+ | 1,007 |
| 4–7MP | 1,586 |
| Under 4MP | 1,157 |
| With integration configs (Frigate / Home Assistant) | 3,156 |
With color-lux rating (night_vision.min_lux_color) | 2,382 |
| Brand | Cameras | Segment |
|---|---|---|
| Hikvision | 479 | Enterprise + consumer, global |
| i-PRO | 354 | Enterprise AI (ex-Panasonic), JP/global |
| Dahua | 352 | Enterprise + consumer, global |
| ACTi | 249 | Enterprise IP + analog, NDAA, TW/global |
| Bosch | 153 | Enterprise + thermal, EU/global |
| ABUS | 144 | Consumer + professional, GDPR-first, DE/AT/CH |
| Annke | 140 | Prosumer, global |
| Reolink | 127 | Prosumer, no-subscription, global |
| Uniview | 123 | Enterprise NDAA, global |
| GeoVision | 93 | Enterprise, TW/Asia/global |
| EZVIZ (Hikvision) | 87 | Consumer, global |
| Axis | 81 | Enterprise premium, global |
| Digital Watchdog | 70 | — |
| Kedacom | 63 | Enterprise, CN/global |
| Speco | 61 | Professional/commercial (NDAA), US |
| Hi-Focus | 60 | Made-in-India, BIS certified, IN |
| Jovision | 57 | — |
| IMOU (Dahua) | 56 | Consumer + prosumer, global |
| Tapo (TP-Link) | 55 | Consumer budget, global |
| Eufy (Anker) | 46 | Consumer no-subscription, global |
| Hanwha | 46 | Enterprise AI, Korea/global |
| Ubiquiti UniFi | 46 | Prosumer/SMB, US/global |
| Uniarch (Uniview) | 43 | Budget NDAA sub-brand, global |
| Lorex | 40 | Consumer NVR systems, CA/US |
| Srihome | 40 | — |
| Luma | 33 | Custom-install (SnapAV), US |
| HiLook (Hikvision) | 30 | Budget installer, EU/UK/AU |
| TKH Security | 27 | — |
| CP Plus | 26 | India #2 brand, IN |
| Xiaomi | 26 | Consumer smart home, CN/global |
| Amcrest | 25 | Prosumer, global |
| Arlo | 25 | Consumer premium wire-free, global |
| VIGI (TP-Link) | 25 | Business/SMB PoE, global |
| ClareVision | 24 | — |
| Hiseeu | 23 | — |
| Ajax | 22 | Professional alarm + wired PoE cameras, EU/UK |
| Foscam | 22 | Consumer WiFi/PoE, global |
| Ring (Amazon) | 21 | Consumer ecosystem, global |
| Verkada | 20 | Cloud-managed enterprise, US/CA |
| Vivotek | 19 | Enterprise AI, global |
| SV3C | 17 | Budget consumer, CN/US |
| Avigilon | 16 | Enterprise NDAA, global |
| Wyze | 14 | Budget consumer, US |
| Blink (Amazon) | 12 | Budget battery, US/UK/EU |
| Google Nest | 12 | Consumer smart home, global |
| Instar | 12 | Privacy-first prosumer, DE/EU |
| Milesight | 12 | Prosumer/Enterprise IoT, global |
| Swann | 12 | Consumer, AU/US/UK |
| Camius | 11 | Consumer direct, US |
| Night Owl | 11 | — |
| Resideo | 11 | — |
| Tiandy | 11 | Enterprise + prosumer, CN/ME/Africa |
| Costar | 10 | Enterprise (Arecont successor), US |
| FLIR (Teledyne) | 10 | Thermal imaging, NA/EU |
| Kasa | 10 | Consumer budget, global |
| Aqara | 9 | Smart home HomeKit, EU/global |
| Lupus Electronics | 9 | Privacy-first, DE/AT/CH |
| Pelco | 9 | Enterprise legacy, NA/global |
| TVT | 9 | Prosumer budget, CN/IN/SE Asia |
| Yale | 9 | Consumer smart home, UK/EU |
| D-Link | 8 | — |
| Intelbras | 8 | #1 Latin America, BR/AR/LATAM |
| LaView | 8 | Consumer WiFi/solar/4G, US |
| Mobotix | 8 | Enterprise GDPR-first, EU |
| LTS | 7 | Prosumer/installer, US |
| Canon | 4 | Enterprise optical, JP/global |
| Godrej | 4 | Consumer, IN |
| Grandstream | 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 |
| SimpliSafe | 4 | DIY monitored security, US |
| Synology | 4 | NAS-native cameras, global |
| ADT | 3 | Monitored security, US |
| Somfy | 3 | Smart home, FR/EU |
| Hive | 2 | Smart home, UK |
| Honeywell | 2 | Enterprise, US/IN |
| Steinel | 2 | Outdoor smart light/cam, DE/AT/CH |
| ASECAM | 1 | — |
| Bosch Smart Home | 1 | Consumer smart home, DE/AT/CH |
| IDIS | 1 | Enterprise DirectIP, KR/global |
| IMILAB | 1 | — |
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'));
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.
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.
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.
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:
community_notes — the per-camera quirks/behaviors layer (#297)| 🐛 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 |
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.
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.
If you use this dataset, a link back is appreciated:
CCTV Camera Database (v2.2.0), CC0 1.0. https://cctv-database.com — https://github.com/ch-bas/cctv-camera-database
Data is released under CC0 1.0 (public domain). Trademarks and model names belong to their respective owners.
JavaScript
71.6%
HTML
28.4%