Skip to main content

Trend Score Methodology

LeanForge uses three Google Trends signals to produce a transparent score from 0 to 100. Higher scores indicate stronger current momentum, not guaranteed future demand. A signal that cannot be measured is left out rather than guessed, and a keyword with no measurable trend is reported as unmeasured rather than scored low.

45%

7-day velocity

Percentage change in interest against the reading exactly seven days earlier. Bounded to -200% through 200% before weighting.

20%

30-day velocity

Percentage change in interest against the reading exactly thirty days earlier. Bounded to -100% through 100% before weighting.

35%

Current interest

The latest complete-day Google Trends interest value on its native 0-100 scale. Only scored when at least one velocity is measurable.

Formula

base weights   7d velocity 0.45 · 30d velocity 0.20 · current interest 0.35

measured       the signals that have a value (an unmeasured signal is excluded)
weight_i       base_i ÷ Σ base_j over the measured signals
score          round(clamp(Σ subScore_i × weight_i, 0, 100))

The three base weights above are what each signal is worth when all three are measured; in that case the formula reduces to 0.45 / 0.20 / 0.35 exactly. Velocity inputs are normalized before weighting: seven-day velocity is bounded to -200% through 200%, thirty-day velocity to -100% through 100%, and both are mapped onto 0-100 so that zero change scores 50. Current interest already uses the Google Trends 0-100 scale. The weighted result is rounded and clamped to 0-100.

Both velocities compare the newest complete day against the reading exactly seven or thirty days earlier. The newest stored day is dropped when it is dated today, because the poller runs at 00:00 UTC and that day is still accruing; a partial day is not a measurement.

Unmeasured signals

Google Trends reports 0 for any day where interest fell below its sampling threshold. That is Google saying “too little to sample”, not a measured zero. A velocity is a percentage change, and there is no percentage change against a baseline of 0, so a velocity whose baseline day reads 0 (or whose baseline day is missing from our history) is recorded as unmeasured rather than as +100%, 0%, or any other number.

An unmeasured signal is excluded from the score and its base weight is redistributed across the signals that were measured, in proportion to their base weights. It never scores a midpoint and never drags the composite down. For example, with no 30-day baseline the effective weights become 7d velocity 0.5625 (0.45 ÷ 0.80) and current interest 0.4375 (0.35 ÷ 0.80), with 30-day velocity at 0. The “Why this score” panel on every keyword page shows the effective weight actually used.

A score of 0 means “not measured”

A Trend Score needs a trend. If neither the 7-day nor the 30-day velocity can be measured, the keyword is not scored at all: current interest alone is a level, not a trend, and scoring it on its own would turn a single unexplained spike into a confident high score. Such a keyword reports a Trend Score of 0 and the verdict Investigate instead of Publish, Track, Hold, or Skip.

Read 0 as “not measured”, not “no opportunity”. Any keyword at 0 is routed to Investigate before its direction is even consulted, so it can never be mislabelled as low interest. Investigate is a real outcome, not an error state; it is typical of terms whose search interest sits below Google’s sampling threshold on most days.

Direction labels

Rising
7-day velocity is greater than 10%.
Flat
7-day velocity is between -10% and 10%, or is unmeasured.
Falling
7-day velocity is below -10%.

Direction is derived from the 7-day velocity alone. An unmeasured velocity is shown as Flat because it makes no claim either way; the verdict for such a keyword is decided before direction is consulted.

Browse scoresUse the API