{
  "id": "deepstate-monthly-12m",
  "title": "Russia gained 84 km² in June — pace holds near two-year low",
  "description": "Net monthly change in territory control over the last 12 months. Positive — Russian gains, negative — Ukrainian gains.",
  "unit": "square kilometres (km²)",
  "date_range": "Rolling last 12 months",
  "topic": "territory",
  "license": "CC-BY-4.0",
  "license_url": "https://creativecommons.org/licenses/by/4.0/",
  "page_url": "https://visua.no/en/charts/deepstate-monthly-12m/",
  "dataset_url": "https://visua.no/data/deepstate-monthly-12m.csv",
  "meta_url": "https://visua.no/data/deepstate-monthly-12m.meta.json",
  "datawrapper_id": "6zuLc",
  "chart_png_url": "https://datawrapper.dwcdn.net/6zuLc/full.png",
  "supabase_view": "chart_deepstate_control_monthly_change_12m",
  "cadence": "Daily, ~06:00 UTC",
  "last_updated": "2026-07-28",
  "key_points": [
    "The line chart shows Russian monthly net gains in Ukraine for the last 12 months based on data from <a href=\"https://visua.no/en/charts/deepstate-monthly-12m/#chp3-source\">Deepstate Map</a>. ",
    "As a net figure, it can still hide territory moving both ways within the same month. For a breakdown by side, check <a href=\"https://visua.no/en/charts/deepstate-gross-flows/\">this chart</a>.",
    "Since the start of 2026, Russian gains have been steadily decreasing, but as of the end of June, Ukraine hasn't liberated more territory than Russia captured in one month. On some days in spring and June, Ukraine was able to liberate more territory than Russia captured.",
    "Scope is territory inside Ukraine's internationally recognised borders. Crimea and the pre-2022 LPR/DPR footprint are excluded, so the series isolates post-2022 movement; Ukraine's 2024 Kursk incursion (Ukrainian-held Russian territory) is a separate ledger and is excluded entirely."
  ],
  "source": {
    "key": "deepstate",
    "name": "DeepState Map",
    "short_name": "DeepState",
    "url": "deepstatemap.live",
    "description": "What it shows\nDeepState is a Ukrainian OSINT project publishing an interactive map of the Russo-Ukrainian war, updated daily. The map distinguishes occupied, liberated, and contested (grey-zone) territory.\n\nWhat it's based on\nThe territorial control depicted on the map is based on geolocated footage, open-source reports, community submissions, and direct communication with Ukrainian units.\n\nWho's behind it\nIt is created and maintained by NGO DeepstateUA, which has employees and a volunteer team of over 100 people. The founders of the project are Roman Pohorilyi and Ruslan Mykula. \n\nAlignment to the sides of the war\nThroughout the full-scale war, DeepState positions itself as a fact-based project. The map has partnerships with the Ukrainian Ministry of Defence and General Staff, and the project also has a closed map solution for the Ukrainian defence forces. DeepState has publicly stated that during Ukrainian offensive operations, it delays map updates for operational-security reasons. Yet it has contradicted the official position of the General Staff and spoken out publicly about Russian advances that the General Staff hadn't communicated prior.\n\nGeneral data risks and usefulness\nThe map data — like any source heavily based on OSINT — tends to be a lagging indicator.",
    "coverage": "April 2022 — present",
    "cadence": "Continuous · Snapshotted daily ~06:00 UTC",
    "citation": "DeepState. (2026). DeepState Map. https://deepstatemap.live.",
    "shared_points": []
  },
  "processing": [
    {
      "n": "01",
      "title": "Snapshot",
      "desc": "Read DeepState’s own published area figures from their public API once a day, ~06:00 UTC. Each snapshot is stored with its capture time in the database so changes can be replayed."
    },
    {
      "n": "02",
      "title": "Clean",
      "desc": "Normalise the raw figures into a tidy daily table: key each row by snapshot date and capture time, and add the fixed pre-2022 occupied baseline to express total Russian-controlled area."
    },
    {
      "n": "03",
      "title": "Aggregate",
      "desc": "Derive the chart’s metric by differencing consecutive snapshots — month-end minus the previous month-end for the monthly charts, or snapshot-over-snapshot smoothed with a 7-day rolling average for the daily tempo. No geometry is involved; the input is DeepState’s scalar area number."
    },
    {
      "n": "04",
      "title": "Round & publish",
      "desc": "Round to a sensible precision, write a one-row-per-period view, and refresh the Datawrapper chart."
    }
  ],
  "data_dictionary": [
    {
      "name": "month",
      "type": "text",
      "unit": "YYYY-MM",
      "desc": "The completed calendar month. One row per fully-elapsed month; the current partial month is excluded. The window is the last 12 complete months."
    },
    {
      "name": "monthly_change_km2",
      "type": "number",
      "unit": "km²",
      "desc": "Net change in Russian-controlled area versus the previous month-end. Positive — Russian gains, negative — Ukrainian gains. Rounded to 2 decimals."
    }
  ],
  "citation": {
    "in_text": "P. Krasnomovets (2026)",
    "full": "P. Krasnomovets (2026). \"Russia gained 84 km² in June — pace holds near two-year low.\" Processed from DeepState Map. Retrieved from https://visua.no/en/charts/deepstate-monthly-12m/",
    "bibtex": "@misc{krasnomovets2026deepstatemonthly12m,\n  author = {Krasnomovets, P.},\n  title  = {Russia gained 84 km² in June — pace holds near two-year low},\n  year   = {2026},\n  source = {DeepState Map},\n  url    = {https://visua.no/en/charts/deepstate-monthly-12m/}\n}"
  },
  "contact": "pavlo@visua.no",
  "issues_url": "https://github.com/krasnomovets/visua-pipeline/issues"
}
