← About

Data Format Documentation

CC-BY-4.0

Overview

DroneCompare publishes its complete drone comparison dataset as a single JSON file. The data is updated whenever an admin refreshes the export and is available at:

https://cdn.dronecompare.org/data.json

The data is licensed under Creative Commons Attribution 4.0 International (CC-BY-4.0). You are free to use, share, and adapt the data for any purpose, as long as you provide appropriate attribution to DroneCompare (dronecompare.org).

Top-Level Structure

{
  "license": "CC-BY-4.0",
  "licenseUrl": "https://creativecommons.org/licenses/by/4.0/",
  "attribution": "DroneCompare (dronecompare.org)",
  "schema": { ... },
  "entities": [ ... ],
  "exportedAt": "2026-02-17T12:00:00.000Z"
}
FieldTypeDescription
licensestringSPDX license identifier (CC-BY-4.0)
licenseUrlstringURL to the full license text
attributionstringRequired attribution text when reusing the data
schemaobjectComplete schema definition (fields, categories, units, tags)
entitiesarrayAll drone entities with their field values
exportedAtstringISO 8601 timestamp of when the export was generated

Schema Object

The schema describes all fields, their types, validation rules, translations, and display configuration. It contains four arrays:

{
  "schema": {
    "fields": [ ... ],
    "categoryOrder": [ "identity", "pricing", "physical", ... ],
    "units": [ ... ],
    "tags": [ ... ]
  }
}
FieldTypeDescription
fieldsarrayAll schema field definitions
categoryOrderstring[]Display order of field categories
unitsarrayUnit definitions (grams, meters, etc.)
tagsarrayTag definitions for multi-instance fields (e.g., "primary", "secondary")

Field Object

Each field in schema.fields has the following structure:

PropertyTypeDescription
idstring (UUID)Unique field identifier
keystringDotted key path (e.g., physical.weight, camera.resolution)
typestringField type (see Field Types)
requiredbooleanWhether this field must have a value for every entity
categorystringDisplay category (matches categoryOrder)
unitIdstring?Reference to a unit in schema.units
parentIdstring?Parent group field ID (for nested fields)
sortOrdernumberDisplay order within category
visiblebooleanWhether the field is shown in the comparison table
filterablebooleanWhether users can filter by this field
highlightBestbooleanWhether to highlight the best value among compared entities
highlightDirectionstring?"highest" or "lowest": which direction is "best"
allowsMultiplebooleanWhether this group supports multiple instances (e.g., multiple cameras)
collapsedByDefaultbooleanWhether the group is collapsed by default in the UI
defaultExpandedInstancesnumber?Number of instances to show expanded by default for multi-instance groups (null = all expanded)
minValue / maxValuenumber?Validation constraints for numeric fields
minLength / maxLengthnumber?Validation constraints for string fields
translationsobjectDisplay names and descriptions keyed by locale (see below)
unitobject?Resolved unit object (if unitId is set)
enumOptionsarray?Available options for enum type fields

Field Translations

"translations": {
  "en": {
    "displayName": "Weight",
    "description": "Total takeoff weight including battery"
  },
  "nb": {
    "displayName": "Vekt",
    "description": "Total startvekt inkludert batteri"
  }
}

Entity Object

Each entity (drone) in the entities array has this structure:

{
  "id": "01900000-0000-0000-0000-000000000001",
  "slug": "dji-mini-4-pro",
  "values": {
    "identity.name": "DJI Mini 4 Pro",
    "physical.weight": 249,
    "camera.resolution": [
      { "index": 0, "value": "48 MP", "tags": ["primary"] },
      { "index": 1, "value": "12 MP", "tags": ["secondary"] }
    ],
    ...
  },
  "createdAt": "2026-02-01T00:00:00.000Z",
  "updatedAt": "2026-02-15T10:30:00.000Z"
}
PropertyTypeDescription
idstring (UUID)Unique entity identifier
slugstringURL-safe identifier (e.g., dji-mini-4-pro)
valuesobjectField values keyed by field key (see Value Formats)
createdAtstringISO 8601 timestamp
updatedAtstringISO 8601 timestamp

Field Types Reference

TypeValue FormatExample
stringPlain string or LocalizedString"DJI Mini 4 Pro"
numberNumeric value249
booleantrue or falsetrue
enumString matching an enumOptions[].value"manual"
dateISO 8601 date string"2024-09-15"
urlURL string"https://www.dji.com/mini-4-pro"
dimensions2dString "L×W""148×94"
dimensions3dString "L×W×H""148×94×64"
rangeString "min:max""-10:40"
groupNo value; serves as a container for child fields

Special Value Formats

LocalizedString

String fields that support translations use a special wrapper object instead of a plain string. Identified by the _localized: true flag:

{
  "_localized": true,
  "translations": {
    "en": "Primary Camera",
    "nb": "Hovedkamera"
  }
}

Multi-Instance Values

Fields inside a group with allowsMultiple: true store an array of instance values. Each instance has an index, value, and optional tags:

[
  { "index": 0, "value": "48 MP", "tags": ["primary"] },
  { "index": 1, "value": "12 MP", "tags": ["secondary"] }
]
PropertyTypeDescription
indexnumberInstance index (0-based)
valueanyThe field value (same types as single-value fields)
tagsstring[]Semantic tags (e.g., "primary", "wide_angle"). References schema.tags[].key

Null Values

Missing or unknown values are represented as null. Not every entity has a value for every field. This is by design (sparse data model).

Units

Units are defined in schema.units and referenced by fields via unitId:

{
  "id": "...",
  "key": "grams",
  "translations": {
    "en": {
      "singular": "gram",
      "plural": "grams",
      "abbreviation": "g"
    }
  }
}

Tags

Tags are used to semantically label multi-instance values (e.g., "primary camera", "wide-angle lens"):

{
  "id": "...",
  "key": "primary",
  "category": "payload",
  "sortOrder": 0,
  "translations": {
    "en": { "displayName": "Primary" },
    "nb": { "displayName": "Primær" }
  }
}

Enum Options

Fields with type: "enum" include an enumOptions array defining all valid values:

{
  "id": "...",
  "fieldId": "...",
  "value": "manual",
  "sortOrder": 0,
  "translations": {
    "en": { "displayName": "Manual" },
    "nb": { "displayName": "Manuell" }
  }
}

Attribution

When using DroneCompare data, please provide attribution. A suitable credit looks like:

Data from DroneCompare (https://dronecompare.org), licensed under CC-BY-4.0.

For code projects, including the attribution in your README or about page is sufficient. For data visualizations, a small credit line is appropriate.