Flashscore Odds Movement & Closing Line Tracker
Pricing
from $1.70 / 1,000 odds movements
Flashscore Odds Movement & Closing Line Tracker
Track betting line movement on Flashscore. Run it on a schedule: each run snapshots pre-match odds from 100+ bookmakers and returns only the prices that moved, with previous, current and opening odds, plus closing lines at kick-off. 1X2, totals, handicaps, 21 sports.
Pricing
from $1.70 / 1,000 odds movements
Rating
0.0
(0)
Developer
Elena Vance
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Track how betting odds move on Flashscore's odds comparison — 1X2, moneyline, over/under, Asian handicap and more, from 100+ bookmakers across countries — and capture every line's closing price at kick-off. Football, tennis, basketball, hockey and 17 more sports.
Flashscore shows only two prices per outcome: the opening one and the current one. Nothing in between is kept anywhere. This Actor builds that history for you: run it on a schedule, and each run compares the bookmakers' prices with the previous run and returns only the lines that moved — previous price, new price, change in percent, and the opening price for context.
You pay for movement, not for polling: a run where nothing moved returns nothing and costs only the start fee.
No API key, no login, no proxy, no browser. Export to JSON, CSV, Excel or pull it from the API.
How it works
- Every run lists the upcoming matches in your leagues (starting within
horizonHours), reads every bookmaker's prices, and compares each line with what it last reported for it. - A line that moved becomes one row:
changeType: moved, withhomePreviousOdds → homeOddsand so on. A main over/under line moving from 2.5 to 2.75 goals is a movement too (previousLine → line). - A line seen for the first time — on the tracker's first run, or when a
match enters the horizon — becomes one
first-seenrow with its current and opening price: the baseline later movements are measured from. - After kick-off, the next run writes every tracked line's closing
price (
recordType: closing). Flashscore freezes pre-match odds at kick-off, so this is the exact closing line, not an approximation from the last snapshot.
The tracker remembers prices between runs in a named key-value store,
flashscore-odds-tracker-{trackerName}. Runs with the same trackerName
share it; give each schedule its own name.
Quick start: schedule it
-
Fill the input — for example the Premier League, GB bookmakers:
{"trackerName": "premier-league","leagues": ["ENGLAND: Premier League"],"horizonHours": 48,"bookmakerCountries": ["GB"],"markets": ["HOME_DRAW_AWAY", "OVER_UNDER", "ASIAN_HANDICAP"],"historyDatasetName": "odds-history-epl"} -
Save it as a task, then open Schedules → Create new, add the task, and pick an interval. Every 15 minutes (
*/15 * * * *) catches most moves; every 5 minutes before big matches catches steam; hourly is plenty for early-week markets. -
Set
historyDatasetNameso every run appends to one continuous dataset instead of scattering rows across one dataset per run.
The schedule interval is the tracker's time resolution: a move is timestamped
between previousObservedAt and observedAt.
What you get
Real, unedited output — Betway moving on Uzbekistan U23 v Japan U23, 44 minutes before kick-off:
| Field | Value |
|---|---|
recordType / changeType | movement / moved |
eventId / eventUrl | S2o8i9BD / https://www.flashscore.com/match/S2o8i9BD/ |
tournament / startTime | ASIA: Asian Games - Play Offs / 2026-09-30T10:30:00Z |
homeName / awayName | Uzbekistan U23 / Japan U23 |
bookmakerName / bookmakerId / bookmakerCountry | Betway / 26 / GB |
market / period | HOME_DRAW_AWAY / FULL_TIME |
homeOpeningOdds → homePreviousOdds → homeOdds | 4.2 → 6.0 → 5.5 |
drawOpeningOdds → drawPreviousOdds → drawOdds | 3.4 → 3.75 → 3.75 |
awayOpeningOdds → awayPreviousOdds → awayOdds | 1.75 → 1.5 → 1.53 |
maxChangePercent / shortenedOutcome | -8.33 / home |
margin / previousMargin | 0.1021 / 0.1 |
previousObservedAt / observedAt / minutesToStart | 2026-09-30T09:42:29Z / 2026-09-30T09:45:22Z / 44 |
outcomes | [{"name":"home","odds":5.5,"previousOdds":6,"change":-0.5,"changePercent":-8.33,"openingOdds":4.2,"active":true}, …] |
The usual outcomes have fixed columns — home, draw, away, over,
under, yes, no, each as …Odds, …PreviousOdds and …OpeningOdds —
so a spreadsheet or SQL table needs no JSON unpicking. Every outcome, including
correct scores, is also in outcomes with its own change.
Row types
recordType | changeType | Meaning |
|---|---|---|
movement | first-seen | First sighting of a line: current price next to the opening price |
movement | moved | A price (or the main line itself) changed since it was last reported |
movement | suspended / reactivated | The bookmaker pulled or restored the line |
closing | closing | The closing price after kick-off, next to the last price the tracker saw and the opening price |
Closing lines and CLV
Closing rows carry the closing price (homeOdds…), the opening price
(homeOpeningOdds…) and the tracker's last pre-kick-off observation
(homePreviousOdds…). Join them with your bets on eventId + bookmakerId +
market + line to measure closing-line value. closingSource is
flashscore when the closing price was read after kick-off (the normal case)
and last-snapshot if that read failed.
Handicaps are always from the home side
line: -1.5 on an Asian handicap row means the home side gives 1.5.
Flashscore quotes each side from its own view; this Actor pairs them, so every
handicap row is a complete two-way book. Tennis set and game lines are kept
apart by lineType (SETS / GAMES).
Input
| Field | Default | What it does |
|---|---|---|
trackerName | default | Names the tracker's memory. One name per schedule. |
sports | football | Sports to follow. |
leagues | all | Competition names (ENGLAND: Premier League) or Flashscore league URLs. Strongly recommended. |
matchIds | — | Follow specific matches (id or URL) until kick-off instead of leagues. |
horizonHours | 24 | Follow matches starting within this many hours (max 168). |
bookmakerCountries | GB | Bookmaker countries; several are merged, each bookmaker once. US-NJ, CA-ON for per-state markets. |
bookmakers | all | Only these bookmakers (part of the name or id). |
markets | 1X2, moneyline, over/under, Asian handicap | Markets to track. |
periods | FULL_TIME | FIRST_HALF, FIRST_SET, … |
lines | main | Main line only, or every line. |
minChangePercent | 0 | Report a line only once a price has moved this much since it was last reported. Small drifts add up. |
emitFirstSeen | true | Report first sightings (the baseline). |
emitClosingLines | true | Write closing lines after kick-off. |
historyDatasetName | — | Also append every row to this named dataset. |
maxMatches | 50 | Matches per run, soonest first (matches without odds don't count). |
maxItems | 5000 | Charged rows per run. Anything over it is carried to the next run, not lost. |
Pricing
Pay per event — you pay only for what is reported:
| Event | Price |
|---|---|
Price movement or first sighting (odds-movement) | $2.00 per 1,000 rows |
Closing line (closing-line) | $1.00 per 1,000 rows |
| Run start | $0.00005 per run |
A row is a whole bookmaker line — all three 1X2 prices, or both sides of a total — not a single price. Unchanged lines are free. What a schedule costs depends on how many lines you follow and how much they move. As a guide, one Premier League round (10 matches, GB bookmakers, 1X2 + over/under + Asian handicap, main lines) is about 800 lines:
- First sightings: ~800 rows once per round ≈ $1.60.
- Movement: typically 2–10 % of lines move per 15-minute run, more in the last hours before kick-off ≈ $0.03–0.16 per run.
- Closing lines: ~800 rows per round ≈ $0.80.
Set minChangePercent (for example 2) to report only meaningful moves, and
maxItems and the run's maximum charge to cap any single run.
FAQ
Why is the first run bigger than the rest? It reports every line once as
first-seen, with its opening price — the baseline. Later runs report only
changes. Turn off emitFirstSeen to skip the baseline.
What if two scheduled runs overlap? The second one sees the first holding the tracker's lock and exits immediately without charging for data. A lock left by a crashed run expires after 45 minutes.
What if a run hits my maximum charge? It stops gracefully. Movements it could not report are kept and reported by the next run, measured from the last price you actually received.
Does it track in-play odds? No. Flashscore's odds comparison is pre-match; at kick-off the prices freeze, which is what makes the closing line exact.
Can I get history from before I started? Only the opening price, which every row carries. Flashscore keeps no history in between, which is why this tracker exists — start it early in the week.
Postponed matches? They are dropped without a closing line. A delayed kick-off is followed until the match actually starts.
How do I reset a tracker? Use a new trackerName, or delete the key-value
store flashscore-odds-tracker-{name} in Storage.
Related
- Flashscore Betting Odds & Opening Lines Scraper — a one-off snapshot of every bookmaker's current and opening odds, for any match, including finished ones.
- Flashscore Tennis Scraper — tennis results, statistics, point-by-point, rankings and draws.
This Actor is not affiliated with Flashscore or Livesport. It reads publicly available odds; check that your use complies with the site's terms and your local gambling regulations.
Ready-made examples
Open one, press Try for free, and change the input to your own:
- Track Premier League odds movement
- Collect closing lines for Europe's top 5 leagues
- Detect steam moves in football odds
- Track bet365 football odds over time
More Flashscore Actors
Same data source, same flat rows and pay-per-result pricing:
- Flashscore Betting Odds Scraper — pre-match odds from 100+ bookmakers with opening prices, plus outright winner odds
- Flashscore Match Stats Scraper — player stats with xG, lineups, box scores and team stats per match
- Flashscore League Archive — every season's results, tables and top scorers, back to 1901
- Flashscore Teams & Players — squads, transfers with fees, market values and player careers
- Flashscore Tennis Scraper — ATP/WTA results, serve stats, point-by-point, draws and rankings