1X2
Over / Under
Both Teams to Score
Top correct scores
Calculate probabilities on the Form tab to see your Match Verdict.
Match Verdict
Quick Stats
📋 Match Log
No matches logged yet. Calculate a fixture, then hit "Add to Match Log".
💡 How To Use PitchPulse
Five recent matches per side, one league baseline, and PitchPulse turns it into a full set of match probabilities in one tap.
Step 1 — League Baseline: Pick a Country and League to auto-fill the average home/away goals for that competition, or type your own. Defaults are Home 1.50 / Away 1.20 — a generic mid-table read. "Reset to default" undoes any manual edits.
Step 2 — Team names: Name your Home and Away side.
Step 3 — Recent form: Read off each team's last 5 matches (home matches only for the Home side, away matches only for the Away side). Drop the single highest and single lowest goals-for, add up the remaining 3, and enter that as GF Σ — then do the same for goals-against as GA Σ.
Step 4 — Calculate: Hit "⚡ Calculate Probabilities". The Markets tab fills in with 1X2, Over/Under, BTTS, and the top correct scores; the stats strip up top shows λ Home, λ Away, and the model's Best Bet.
Step 5 — Track it: On the Verdict tab, hit "+ Add to Match Log" to save the pick, then fill in the real final score once the match is played. Signal Check and Calibration build up as your log grows.
📊 Where To Get Your Team Stats
PitchPulse doesn't pull live data — you feed it the numbers, which keeps it fast, offline-friendly, and usable for any league on earth.
FlashScore.com & WhoScored.com — filter a team's results by venue (home or away), then read off the score of each of the last 5. Drop the best and worst goals-for, sum the remaining 3 for GF Σ; do the same for goals-against to get GA Σ.
Official league sites — most top-flight league sites (e.g. premierleague.com, laliga.com) list a filterable fixture history per club.
FBref.com — free match logs for almost every senior league worldwide, filterable by venue.
Use the Country/League selector on the Form tab first — it auto-fills from a built-in database. If your league isn't listed, search "[league name] goals per game average" for the current season, or just leave the defaults (1.50 home / 1.20 away) as a generic baseline.
⚙️ Good To Know
Inputs, theme, and the Match Log are saved in your browser's local storage only. There's no backend and nothing is ever sent anywhere.
Served over HTTPS, PitchPulse installs as a standalone app via the "Install App" button (or your browser's install prompt) and keeps working offline once installed.
Toggle the sun/moon icon in the header any time — your choice is remembered on next visit.
❓ Methodology & FAQ
A trimmed-mean Poisson model. Each team's last 5 matches (home-only for the Home side, away-only for the Away side) are averaged with the single best and single worst result dropped, so one outlier scoreline can't dominate the read on current form. Those trimmed averages become attack/defence strength relative to the league baseline, which convert into expected goals (λ) for each side — from there, independent Poisson distributions build the score matrix, with a Dixon-Coles correction applied to the low-scoring cells before it's renormalized. Every market on the Markets tab is derived from that final matrix.
Independent Poisson treats home and away goals as statistically unrelated, but real match goals are mildly coupled by things like game state and tactics — and that shows up specifically in the low-scoring cells. The Dixon & Coles (1997) tau correction adjusts exactly those four cells (0–0, 1–0, 0–1, 1–1) before the matrix is renormalized. PitchPulse uses a fixed, literature-standard ρ = -0.13 rather than calibrating it per match — it's the same correction and formula ScoreMatrix uses, just with a static ρ instead of ScoreMatrix's dynamic per-match calibration, which keeps this model lightweight and dependency-free.
A single 6–0 or 0–5 in the last 5 can swing a raw average far more than it should. Trimming the high and low outcome keeps the read closer to a team's typical performance rather than its most extreme one.
HomeAttack = Home team's trimmed home goals-for ÷ league average home goals. HomeDefence = trimmed home goals-against ÷ league average away goals. Away strengths mirror this using the team's away form. λHome = HomeAttack × AwayDefence × league average home goals, and λAway = AwayAttack × HomeDefence × league average away goals. A strength of 1.00× means exactly league average; 1.25× means 25% above it.
1.50 home goals, 1.20 away goals per match — a generic mid-table baseline. Raw goal counts only mean something relative to context: 1.8 goals a game is modest in a high-scoring league and strong in a defensive one. Pick your league from the Country/League selector to auto-fill the real numbers, or enter them yourself for the sharpest read.
Best Bet is a consensus pick, not just whichever market has the single highest raw probability. It looks at the model's two most likely exact scorelines and checks what they agree on: the same 1X2 result, the same BTTS side, or the same side of a fixed 2.5 Over/Under line. Whichever agreed-upon market has the higher probability becomes the Best Bet. If the top two scorelines don't agree on anything, it falls back to whichever double-chance line (1X or X2) is more likely — a deliberately conservative call over backing either single outcome outright.
A 🟢/🟡/🔴/⚪ tier for the specific bet category behind your current Best Bet (e.g. "Home Win"), computed from your own logged history using a Wilson score interval lower bound rather than a raw hit rate — so a 2-for-2 record doesn't get overrated. It needs 5+ resolved picks in that category before it rates anything; below that it shows ⚪ UNPROVEN.
The 📊 Calibration button opens a running Brier score (0–1 scale, lower is better) per market — 1X2, Over/Under 2.5, BTTS — comparing your all-time average against your last 10 resolved matches. This is independent of Signal Check: it grades the model's raw probabilities directly, rather than just whether the top pick won.
Hit "+ Add to Match Log" on the Verdict tab after calculating to save a prediction. Once the match is played, enter the real final score — it's marked ✅ HIT or ❌ MISS against the Best Bet pick, and rolls into the Hit Rate shown in the stats bar. Best Bet, the Match Log, and the Markets tab all grade against the same fixed Over/Under 2.5 line, so a logged "Over 2.5" always stays comparable.
No. Everything — inputs, theme, and your Match Log — lives in your browser's local storage. There's no backend and no data ever leaves your device.
Yes — served over HTTPS, PitchPulse is an installable PWA. Use the "Install App" button in the header, or your browser's own install prompt, and it'll keep working offline afterward.
PitchPulse produces a probability estimate from recent form — not a guarantee. It doesn't yet account for injuries, motivation, or opponent quality beyond the last-5-match window, and Signal Check / Calibration are only as meaningful as how many matches you've logged and resolved. Please gamble responsibly. — by Victor Korir
Questions about the model, licensing, or custom builds? Reach out directly: