Open-source investigator Bellingcat says Russia launched "systematic" artillery and other barrages against Ukraine in 2014 that were "essentially an act of war" against its smaller neighbor.

In its December 21 report, titled Putin's Undeclared War, the group confirms Russia deliberately fired thousands of shells and missiles into eastern Ukraine in the opening months of a conflict in which Moscow has consistently denied playing any direct role.

The barrages came at a crucial juncture in the separatism-fueled war and appear to have been aimed at helping pro-Moscow fighters repel Kyiv's efforts to retake areas held by the separatists.

"Our evidence shows that this was a systematic attempt by the Russian military to destroy Ukrainian forces all along the border of the Luhansk and Donetsk regions in 2014, so it was essentially an act of war of Russia against Ukraine," says Sean Case, one of the researchers who compiled the report.

The report offers the first detailed public assessment of the extent of the Russian cross-border shelling into Ukraine's Luhansk and Donetsk regions in the summer of 2014.

U.S. and Ukrainian officials have previously accused Moscow of using artillery and rocket launchers based in Russia against Kyiv's forces in 2014 but have not publicly detailed the scale of the attacks.

Bellingcat, a group of investigative journalists and citizen journalists specializing in analysis of open-source images and other materials, found artillery units of the Russian armed forces fired on at least 149 separate occasions against targets in Ukraine from July to September 2014. The analysts used images from Google Earth and other open sources to document activities along the border during the three-month period.

The targets were military positions the Ukrainian Army had taken up in June along the eastern border in an effort to cut off supply lines from Russia to separatist forces deeper inside Ukraine. In some cases, the researchers found evidence of Ukrainian positions being pummeled by massive Russian fire.

"Several of the Ukrainian camps were hit with what appears to be hundreds of artillery shells in a very short space of time," Case says. "For example, there is one camp just south of the town of Biryukove, close to the Dolzhanskyy checkpoint, and on July 16 on the satellite image you can see that the camp is covered with literally hundreds of artillery craters, each at least a few meters wide, and which seems to have basically annihilated the Ukrainian position."

He says that in this case, the researchers traced the fire back to a Russian position a few kilometers away with batteries of multiple-launch rocket systems (MLRS).

"There is a Russian military position of 10 rocket launchers, each of which can fire 40 rockets at a time, which we believe was all used either at the same time or in a very short space of time to fire at this Ukrainian military position," Case says. "We believe that here and in many other cases the intention of the Russian military was to completely annihilate these Ukrainian camps and remove completely their ability to take part in the Ukrainian conflict."

To find evidence that specific Russian units engaged in shelling, the researchers looked for the telltale blast marks that howitzers and rocket-launch systems leave on the ground beneath and around them. The Russian military used artillery located mostly on Russian territory but in some cases set up just inside Ukraine itself to get the best line of fire on the Ukrainian camps, the researchers said.

In addition to what they say is clear evidence of shelling from at least 149 positions, the researchers also found another 130 Russian locations they judged likely to have been used as firing positions. In those locations, they spotted concentrations of howitzers or rocket-launch systems that were aimed at Ukrainian positions but which did not show clear signs of blast marks.

The Russian artillery fire proved so effective that by August the Ukrainian military was forced to retreat from the border and abandon its efforts to cut off the separatists' supply lines. The defeat was the first in a series of setbacks that subsequently saw the Ukrainian Army lose much of the territory it had earlier retaken from the Russian-backed separatists during Kyiv's summer counteroffensive.

Case says that the new report proves that Russia's cross-border shelling of Ukraine was a deliberate part of Moscow's strategy to help the separatists roll back Kyiv's forces.

"Our evidence shows that one cannot say that this artillery fire was just due to mistakes by Russian commanders on the ground or that this was the action of individual commanders who fired across the border," he says.

Moscow has repeatedly denied that it conducted cross-border shelling into Ukraine in 2014. The shelling was first reported by Ukrainian officials as it occurred and was later corroborated by NATO's release of satellite imagery the same year.

Kyiv and NATO have also provided evidence of wider Russian military intervention in Ukraine in 2014 that included Russian servicemen operating without identifiable markings inside Ukraine and delivery of unmarked Russian tanks and other heavy military equipment to separatist units.

After repeatedly denying the presence of Russian forces in Crimea after pro-Russian President Viktor Yanukovych fled in February 2014, Russian President Vladimir Putin eventually acknowledged sending troops there to support "Crimea's self-defense forces" and in March 2015 said he had ordered a plan to seize the peninsula from Ukraine weeks before a Russian-staged referendum there.

The fighting in eastern Ukraine has killed more than 9,750 people since March 2014, and international negotiations have hit a stalemate in their efforts to secure a lasting peace deal.

Bellingcat was among the most vocal debunkers of Moscow's claims that a Russian-supplied missile launcher could not have been used to shoot down a Malaysia Airlines passenger jet over eastern Ukraine in July 2014, killing 298 people. The group's investigators asserted in November 2014 that a launcher "the Russian military provided separatists in eastern Ukraine with the Buk missile" was the likely culprit in the MH17 tragedy -- two years before a similar conclusion was reached by an official investigation.