One of the most popular elements on a ScanGoal match page is the momentum chart — a horizontal series of small green and red bars under the score. Each bar represents 3 minutes of match time. Green means the home team is pressing, red means the away team. Bar height represents intensity. Here's how to read it accurately.

What goes into a bar

Each 3-minute slice is a weighted aggregation of several event streams:

The intensity score for each event is normalized against the league baseline so a corner kick in a low-tempo league counts a bit more than the same corner in a high-tempo league.

Reading patterns

Three patterns are worth recognising:

1. The runaway pattern

One side has high green/red bars across many consecutive 3-minute slots. This is a team genuinely controlling the match — likely to break scoring deadlock, win a corner, or force a defensive error.

2. The seesaw pattern

Bars alternate between green and red of moderate height. This is open, two-way play. Higher BTTS probability, no clear control. Good context for in-play Over markets.

3. The defensive lock pattern

Both sides show very low bars across many slots. The match has stalled — possession is being kept in midfield without penetration. This often precedes a 0:0 or 1:0 result and is a strong context signal for Under markets.

Why we redraw the chart on every update

One technical detail worth knowing: every refresh, the chart is rebuilt from scratch. We do this because partial updates would slowly leak SVG elements into the DOM, eventually slowing the page. (We learned this the hard way — the early version of momentum chart was leaking ~3,000 SVG rectangles per match over 3 hours, blowing up the HTML to nearly 1MB.)

So when you see a momentum chart update, it's a clean redraw, never appended.

What it doesn't show

Combining momentum with our other signals

The most useful workflow:

  1. Glance at the score and Powerd to see the matchup baseline
  2. Read the momentum chart to see what's happening right now
  3. Cross-check with the dominance bar (current 5-min window pressure split)
  4. Check the live betting line — if the line hasn't moved despite obvious pressure, the market may be slow to react

This combination is far more useful than the score alone. A team trailing 0:1 with sustained green pressure for 12+ minutes is a different situation than a team trailing 0:1 with no pressure at all.

Where the data comes from

Event data is collected from multiple match-data scrapers and normalized into our database. We sample at sub-minute frequency where the source allows, then aggregate into the 3-minute slice for visualization. Refresh rate is typically 30 seconds for live matches.