visua.no Ukraine in open data

Ukraine in open data. Visual, documented, auto-updated.

Territory

Russia gained 84 km² in June — pace holds near two-year low

Net monthly change in territory control over the last 12 months. Positive — Russian gains, negative — Ukrainian gains.

What you should know about this chart

  • The line chart shows Russian monthly net gains in Ukraine for the last 12 months based on data from Deepstate Map.
  • As a net figure, it can still hide territory moving both ways within the same month. For a breakdown by side, check this chart.
  • 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.

About the source

DeepState Map

deepstatemap.live

What it shows — DeepState 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.

What it's based on — The territorial control depicted on the map is based on geolocated footage, open-source reports, community submissions, and direct communication with Ukrainian units.

Who's behind it — It 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.

Alignment to the sides of the war — Throughout 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.

General data risks and usefulness — The map data — like any source heavily based on OSINT — tends to be a lagging indicator.

Retrieved on
2026-07-28
Coverage
April 2022 — present
Update cadence
Continuous · Snapshotted daily ~06:00 UTC
Citation
DeepState. (2026). DeepState Map. https://deepstatemap.live.

How we processed the data

  1. 01 Snapshot 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.
  2. 02 Clean 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.
  3. 03 Aggregate 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.
  4. 04 Round & publish Round to a sensible precision, write a one-row-per-period view, and refresh the Datawrapper chart.

Pipeline source: github.com/krasnomovets/visua-pipeline

Changelog

Editorial changes

No editorial changes logged yet. Last updated 2026-07-28.

Data updates · last 5

Per-day values aren’t mirrored here yet. The full series is available as a CSV.

Data dictionary

Columns in the downloadable CSV — the exact output of this chart’s processed view. Periods without a usable upstream snapshot are absent rows, never interpolated or carried forward.

ColumnTypeUnit / formatDescription
month text YYYY-MM The completed calendar month. One row per fully-elapsed month; the current partial month is excluded. The window is the last 12 complete months.
monthly_change_km2 number km² Net change in Russian-controlled area versus the previous month-end. Positive — Russian gains, negative — Ukrainian gains. Rounded to 2 decimals.

These columns are the exact output of this chart’s database view, verified against the published CSV. DeepState publishes its own terminology for the raw map — where they differ, their definitions are authoritative for the upstream data.

Reuse this work

You’re free to

  • Republish the chart on your own site, in print, in a paper.
  • Restyle the chart — change colours, fonts, layout.
  • Remix the data with other sources to build something new.
  • Use the chart commercially. <mark>Make sure you check the terms of primary data source — {source} publishes under its own terms.</mark>

The only ask

  • Credit the original source (DeepState) and the processed dataset (this site).
  • Link back to this page when republishing online.
  • Don’t imply DeepState or this site endorses your republication.

All charts and processed datasets on this site are released under Creative Commons Attribution 4.0 (CC-BY 4.0). The underlying source data is licensed by its respective provider — DeepState publishes under its own terms.

Citations

Please cite both this processed dataset and, most importantly, the original DeepState source. The DeepState's work should be recognised. Two-part citations look like this:

In-text

P. Krasnomovets (2026)

Full citation

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,
  author = {Krasnomovets, P.},
  title  = {Russia gained 84 km² in June — pace holds near two-year low},
  year   = {2026},
  source = {DeepState Map},
  url    = {https://visua.no/en/charts/deepstate-monthly-12m/}
}

Download

Everything used to produce this chart. The CSV and PNG come straight from Datawrapper; the processed series and source data are linked from the pipeline repository.

Embed code — responsive iframe

Iframe

<iframe title="Russia gained 84 km² in June — pace holds near two-year low" aria-label="Line chart" id="datawrapper-chart-6zuLc" src="https://datawrapper.dwcdn.net/6zuLc/" scrolling="no" frameborder="0" loading="lazy" style="width: 0; min-width: 100% !important; border: none;" height="400" data-external="1"></iframe>

Use the unversioned dwcdn.net/6zuLc/ path — the daily refresh always serves the latest version. Full snippet from Datawrapper →

For scripts & agents

Every chart is built to have .csv and .meta.json siblings at a stable URL — no auth, no rate limits for reasonable use. Pages are plain HTML, so the methodology above is readable without JavaScript.

  • Dataset (CSV)

    https://visua.no/data/deepstate-monthly-12m.csv

    Latest full series. Stable URL — re-fetch daily, content updates in place.

  • Metadata (JSON)

    https://visua.no/data/deepstate-monthly-12m.meta.json

    Schema, source, processing steps, key points, license. Machine-readable version of this page.

  • Site index for agents

    https://visua.no/llms.txt

    Plain-text index of every chart, dataset URL, and methodology page on the site.

Questions, corrections, source ideas

Using this chart in a story or a paper and something’s unclear? Spotted an error? Know a data source worth tracking? I read (almost) everything — usually same-day.