ch-bas/cctv-camera-database

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

ch-bas.github.io/cctv-camera-database/
blue-iris
cctv
cctv-cameras
claude-code
data-seed
frigate
frigate-nvr
hikvision
home-assistant
homeassistant
ip-camera
javascript
nextjs
onvif
onvif-library
open-data
reolink
rtsp
security-camera
surveillance

README

CCTV Camera Database

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).

build cameras brands license

Field coverage

environment 100% FOV 92% streams 53% dimensions 50% IK rating 43% color min-lux 64% Frigate 82%

📊 Full field-coverage report → COVERAGE.md


CCTV Camera Database — search 3,750 cameras, browse full specs, copy ready-to-use Frigate configs, and audit the open dataset with the built-in QA tool
cctv-database.com — search 3,750 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.


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.

What you see above:

  • 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 3,750 cameras, 25 per page
  • Stats bar — live counts for total cameras, brands, 4K+, WiFi, and no-subscription models

How this was built

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.


Repository layout

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

Quick start

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 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

Local 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.

Querying the data

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.


Coverage

By the numbers

MetricCount
Total cameras3,750
Brands83
Form factors11 (bullet, dome, turret, PTZ, dual-lens, panoramic, covert, box, fisheye, floodlight, doorbell)
PoE wired2,810
WiFi706
Battery / wire-free232
4K / 8MP+1,007
4–7MP1,586
Under 4MP1,157
With integration configs (Frigate / Home Assistant)3,156
With color-lux rating (night_vision.min_lux_color)2,382

All 83 brands

BrandCamerasSegment
Hikvision479Enterprise + consumer, global
i-PRO354Enterprise AI (ex-Panasonic), JP/global
Dahua352Enterprise + consumer, global
ACTi249Enterprise IP + analog, NDAA, TW/global
Bosch153Enterprise + thermal, EU/global
ABUS144Consumer + professional, GDPR-first, DE/AT/CH
Annke140Prosumer, global
Reolink127Prosumer, no-subscription, global
Uniview123Enterprise NDAA, global
GeoVision93Enterprise, TW/Asia/global
EZVIZ (Hikvision)87Consumer, global
Axis81Enterprise premium, global
Digital Watchdog70
Kedacom63Enterprise, CN/global
Speco61Professional/commercial (NDAA), US
Hi-Focus60Made-in-India, BIS certified, IN
Jovision57
IMOU (Dahua)56Consumer + prosumer, global
Tapo (TP-Link)55Consumer budget, global
Eufy (Anker)46Consumer no-subscription, global
Hanwha46Enterprise AI, Korea/global
Ubiquiti UniFi46Prosumer/SMB, US/global
Uniarch (Uniview)43Budget NDAA sub-brand, global
Lorex40Consumer NVR systems, CA/US
Srihome40
Luma33Custom-install (SnapAV), US
HiLook (Hikvision)30Budget installer, EU/UK/AU
TKH Security27
CP Plus26India #2 brand, IN
Xiaomi26Consumer smart home, CN/global
Amcrest25Prosumer, global
Arlo25Consumer premium wire-free, global
VIGI (TP-Link)25Business/SMB PoE, global
ClareVision24
Hiseeu23
Ajax22Professional alarm + wired PoE cameras, EU/UK
Foscam22Consumer WiFi/PoE, global
Ring (Amazon)21Consumer ecosystem, global
Verkada20Cloud-managed enterprise, US/CA
Vivotek19Enterprise AI, global
SV3C17Budget consumer, CN/US
Avigilon16Enterprise NDAA, global
Wyze14Budget consumer, US
Blink (Amazon)12Budget battery, US/UK/EU
Google Nest12Consumer smart home, global
Instar12Privacy-first prosumer, DE/EU
Milesight12Prosumer/Enterprise IoT, global
Swann12Consumer, AU/US/UK
Camius11Consumer direct, US
Night Owl11
Resideo11
Tiandy11Enterprise + prosumer, CN/ME/Africa
Costar10Enterprise (Arecont successor), US
FLIR (Teledyne)10Thermal imaging, NA/EU
Kasa10Consumer budget, global
Aqara9Smart home HomeKit, EU/global
Lupus Electronics9Privacy-first, DE/AT/CH
Pelco9Enterprise legacy, NA/global
TVT9Prosumer budget, CN/IN/SE Asia
Yale9Consumer smart home, UK/EU
D-Link8
Intelbras8#1 Latin America, BR/AR/LATAM
LaView8Consumer WiFi/solar/4G, US
Mobotix8Enterprise GDPR-first, EU
LTS7Prosumer/installer, US
Canon4Enterprise optical, JP/global
Godrej4Consumer, IN
Grandstream4
Longse4OEM/budget, CN/global
March Networks4Enterprise retail/banking, NA
Netatmo4Privacy-first no-subscription, EU
Qubo4Consumer, IN
SimpliSafe4DIY monitored security, US
Synology4NAS-native cameras, global
ADT3Monitored security, US
Somfy3Smart home, FR/EU
Hive2Smart home, UK
Honeywell2Enterprise, US/IN
Steinel2Outdoor smart light/cam, DE/AT/CH
ASECAM1
Bosch Smart Home1Consumer smart home, DE/AT/CH
IDIS1Enterprise DirectIP, KR/global
IMILAB1

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'));

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:

FieldTypeExample
connectivitystring[]["wifi", "ethernet"] (network only — PoE lives in power_source)
night_vision.typestring"color" / "ir" / "none"
night_vision.range_mnumber30
night_vision.min_lux_colornumber0.01
power.methodstring"PoE (802.3af) / DC 12V"
network.ethernet_speed_mbpsnumber100 (RJ45 link speed)
ip_ratingstring"IP67"
ik_ratingstring"IK10"
audio.two_waybooleantrue
protocolsstring[]["onvif", "rtsp"]
marketsstring[]["UK", "EU", "DE"]
featuresstring[]["no subscription", "IP67"]
sourcesstring[]datasheet / retailer URLs

See CONTRIBUTING.md for the full field reference and naming conventions.


Contributing

Three paths — pick the one that fits you:

PathBest for
🌐Open a GitHub issueAnyone — fill a web form, no cloning needed
🧙npm run add — interactive CLI wizardRegular contributors — guided questions, writes JSON for you
🛠Edit JSON directlyDevelopers — 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.


API

A read-only, static JSON API is hosted alongside the site (CC0, no key, no rate limit):

EndpointReturns
/api/brands.jsonbrand index — name, slug, camera count
https://www.cctv-database.com/api/brands/{slug}.jsona brand summary + its cameras (brief)
https://www.cctv-database.com/api/cameras/{id}.jsonone 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.


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 ~721 reseller-only cameras to official OEM datasheets (#164 / #165)
  • Backfill pixel resolution for the ~179 entries that state megapixels but no width×height (#169)
  • Frigate verification drive — only 25 of 2,827 shipped configs are community-verified; confirm one you run
  • Grow community_notes — the per-camera quirks/behaviors layer (#297)

Community

🐛 Report a data errorOpen a correction issue
➕ Add a missing cameraOpen a camera submission
🔒 Report a security issueGitHub Security Advisories
💬 Code of conductCODE_OF_CONDUCT.md
📋 ChangelogCHANGELOG.md

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.

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.

Citation

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

License

Data is released under CC0 1.0 (public domain). Trademarks and model names belong to their respective owners.

Contributors

ch-bas

769 commits

fvdpol

38 commits

elkampu

1 commits

Guflly

1 commits

ch-bas/cctv-camera-database

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

ch-bas.github.io/cctv-camera-database/
blue-iris
cctv
cctv-cameras
claude-code
data-seed
frigate
frigate-nvr
hikvision
home-assistant
homeassistant
ip-camera
javascript
nextjs
onvif
onvif-library
open-data
reolink
rtsp
security-camera
surveillance

README

CCTV Camera Database

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).

build cameras brands license

Field coverage

environment 100% FOV 92% streams 53% dimensions 50% IK rating 43% color min-lux 64% Frigate 82%

📊 Full field-coverage report → COVERAGE.md


CCTV Camera Database — search 3,750 cameras, browse full specs, copy ready-to-use Frigate configs, and audit the open dataset with the built-in QA tool
cctv-database.com — search 3,750 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.


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.

What you see above:

  • 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 3,750 cameras, 25 per page
  • Stats bar — live counts for total cameras, brands, 4K+, WiFi, and no-subscription models

How this was built

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.


Repository layout

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

Quick start

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 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

Local 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.

Querying the data

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.


Coverage

By the numbers

MetricCount
Total cameras3,750
Brands83
Form factors11 (bullet, dome, turret, PTZ, dual-lens, panoramic, covert, box, fisheye, floodlight, doorbell)
PoE wired2,810
WiFi706
Battery / wire-free232
4K / 8MP+1,007
4–7MP1,586
Under 4MP1,157
With integration configs (Frigate / Home Assistant)3,156
With color-lux rating (night_vision.min_lux_color)2,382

All 83 brands

BrandCamerasSegment
Hikvision479Enterprise + consumer, global
i-PRO354Enterprise AI (ex-Panasonic), JP/global
Dahua352Enterprise + consumer, global
ACTi249Enterprise IP + analog, NDAA, TW/global
Bosch153Enterprise + thermal, EU/global
ABUS144Consumer + professional, GDPR-first, DE/AT/CH
Annke140Prosumer, global
Reolink127Prosumer, no-subscription, global
Uniview123Enterprise NDAA, global
GeoVision93Enterprise, TW/Asia/global
EZVIZ (Hikvision)87Consumer, global
Axis81Enterprise premium, global
Digital Watchdog70
Kedacom63Enterprise, CN/global
Speco61Professional/commercial (NDAA), US
Hi-Focus60Made-in-India, BIS certified, IN
Jovision57
IMOU (Dahua)56Consumer + prosumer, global
Tapo (TP-Link)55Consumer budget, global
Eufy (Anker)46Consumer no-subscription, global
Hanwha46Enterprise AI, Korea/global
Ubiquiti UniFi46Prosumer/SMB, US/global
Uniarch (Uniview)43Budget NDAA sub-brand, global
Lorex40Consumer NVR systems, CA/US
Srihome40
Luma33Custom-install (SnapAV), US
HiLook (Hikvision)30Budget installer, EU/UK/AU
TKH Security27
CP Plus26India #2 brand, IN
Xiaomi26Consumer smart home, CN/global
Amcrest25Prosumer, global
Arlo25Consumer premium wire-free, global
VIGI (TP-Link)25Business/SMB PoE, global
ClareVision24
Hiseeu23
Ajax22Professional alarm + wired PoE cameras, EU/UK
Foscam22Consumer WiFi/PoE, global
Ring (Amazon)21Consumer ecosystem, global
Verkada20Cloud-managed enterprise, US/CA
Vivotek19Enterprise AI, global
SV3C17Budget consumer, CN/US
Avigilon16Enterprise NDAA, global
Wyze14Budget consumer, US
Blink (Amazon)12Budget battery, US/UK/EU
Google Nest12Consumer smart home, global
Instar12Privacy-first prosumer, DE/EU
Milesight12Prosumer/Enterprise IoT, global
Swann12Consumer, AU/US/UK
Camius11Consumer direct, US
Night Owl11
Resideo11
Tiandy11Enterprise + prosumer, CN/ME/Africa
Costar10Enterprise (Arecont successor), US
FLIR (Teledyne)10Thermal imaging, NA/EU
Kasa10Consumer budget, global
Aqara9Smart home HomeKit, EU/global
Lupus Electronics9Privacy-first, DE/AT/CH
Pelco9Enterprise legacy, NA/global
TVT9Prosumer budget, CN/IN/SE Asia
Yale9Consumer smart home, UK/EU
D-Link8
Intelbras8#1 Latin America, BR/AR/LATAM
LaView8Consumer WiFi/solar/4G, US
Mobotix8Enterprise GDPR-first, EU
LTS7Prosumer/installer, US
Canon4Enterprise optical, JP/global
Godrej4Consumer, IN
Grandstream4
Longse4OEM/budget, CN/global
March Networks4Enterprise retail/banking, NA
Netatmo4Privacy-first no-subscription, EU
Qubo4Consumer, IN
SimpliSafe4DIY monitored security, US
Synology4NAS-native cameras, global
ADT3Monitored security, US
Somfy3Smart home, FR/EU
Hive2Smart home, UK
Honeywell2Enterprise, US/IN
Steinel2Outdoor smart light/cam, DE/AT/CH
ASECAM1
Bosch Smart Home1Consumer smart home, DE/AT/CH
IDIS1Enterprise DirectIP, KR/global
IMILAB1

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'));

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:

FieldTypeExample
connectivitystring[]["wifi", "ethernet"] (network only — PoE lives in power_source)
night_vision.typestring"color" / "ir" / "none"
night_vision.range_mnumber30
night_vision.min_lux_colornumber0.01
power.methodstring"PoE (802.3af) / DC 12V"
network.ethernet_speed_mbpsnumber100 (RJ45 link speed)
ip_ratingstring"IP67"
ik_ratingstring"IK10"
audio.two_waybooleantrue
protocolsstring[]["onvif", "rtsp"]
marketsstring[]["UK", "EU", "DE"]
featuresstring[]["no subscription", "IP67"]
sourcesstring[]datasheet / retailer URLs

See CONTRIBUTING.md for the full field reference and naming conventions.


Contributing

Three paths — pick the one that fits you:

PathBest for
🌐Open a GitHub issueAnyone — fill a web form, no cloning needed
🧙npm run add — interactive CLI wizardRegular contributors — guided questions, writes JSON for you
🛠Edit JSON directlyDevelopers — 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.


API

A read-only, static JSON API is hosted alongside the site (CC0, no key, no rate limit):

EndpointReturns
/api/brands.jsonbrand index — name, slug, camera count
https://www.cctv-database.com/api/brands/{slug}.jsona brand summary + its cameras (brief)
https://www.cctv-database.com/api/cameras/{id}.jsonone 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.


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 ~721 reseller-only cameras to official OEM datasheets (#164 / #165)
  • Backfill pixel resolution for the ~179 entries that state megapixels but no width×height (#169)
  • Frigate verification drive — only 25 of 2,827 shipped configs are community-verified; confirm one you run
  • Grow community_notes — the per-camera quirks/behaviors layer (#297)

Community

🐛 Report a data errorOpen a correction issue
➕ Add a missing cameraOpen a camera submission
🔒 Report a security issueGitHub Security Advisories
💬 Code of conductCODE_OF_CONDUCT.md
📋 ChangelogCHANGELOG.md

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.

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.

Citation

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

License

Data is released under CC0 1.0 (public domain). Trademarks and model names belong to their respective owners.

Contributors

ch-bas

769 commits

fvdpol

38 commits

elkampu

1 commits

Guflly

1 commits

Languages

JavaScript

71.6%

HTML

28.4%