Betting Odds Movement Tracker & Line Alert
Pricing
$0.20 / 1,000 odds movement rows
Betting Odds Movement Tracker & Line Alert
Track sportsbook line movement between runs: spreads, totals, and moneylines diffed against the previous snapshot. Outputs per-line deltas, new-line flags, and movement alerts for NFL, NBA, MLB, NHL. Run on a schedule to catch moves. Unofficial; not affiliated with ESPN.
Pricing
$0.20 / 1,000 odds movement rows
Rating
0.0
(0)
Developer
kyle herman
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Odds movement API / line movement tracker for sportsbook lines. Each run fetches
current betting odds (spread, moneyline, over/under) from public ESPN endpoints for
MLB, NFL, NBA, NHL, WNBA, NCAAF, NCAAB, EPL and MLS, diffs them against the previous
run's snapshot, and outputs one row per line with movement deltas, an is_new
flag, and a moved flag — perfect for betting line alerts.
Run it on a schedule (e.g. every 15 minutes) and pair it with Apify webhooks or the dataset API to catch line moves as they happen.
Odds are informational only — not betting advice. Unofficial; not affiliated with ESPN or any sportsbook.
How it works
- Fetches the current odds slate for your selected leagues.
- Loads the previous snapshot from a named key-value store
(
odds-movement-snapshots) — persisted across runs. - Diffs each line (keyed by
league:event_id:provider) and computes deltas for spread, over/under and both moneylines. - Saves the fresh snapshot (full replace, so finished/absent events are pruned automatically).
The first run seeds the baseline — all rows come back with is_new: true and
null deltas. From the second run onward you get real movement data.
Input
All fields are optional; an empty input {} works out of the box.
| Field | Type | Default | Description |
|---|---|---|---|
leagues | array | ["mlb","nfl","nba","nhl"] | League codes: mlb, nfl, nba, nhl, wnba, ncaaf, ncaab, epl, mls |
minSpreadMove | number | 0 | Minimum absolute spread change (points) for a spread-only move to be flagged moved. 0 reports all moves. |
emitUnchanged | boolean | true | When true, every current line is pushed each run (deltas of 0 for unchanged). When false, only moved/new rows are pushed — ideal for alert pipelines. |
includeAllProviders | boolean | false | When true, enumerates every bookmaker's line per event (slower). Otherwise uses fast scoreboard consensus odds. |
{"leagues": ["nfl", "mlb"],"minSpreadMove": 0.5,"emitUnchanged": false}
Output
One row per current event-provider line (real example from a run):
{"league": "nfl","event_id": "401873271","event_name": "Carolina Panthers at Arizona Cardinals","start_time_utc": "2026-08-07T00:00:00Z","home_team": "Arizona Cardinals","away_team": "Carolina Panthers","provider": "DraftKings","spread": 1.5,"spread_details": "CAR -1.5","over_under": 35.5,"home_moneyline": -102,"away_moneyline": -118,"fetched_at": "2026-08-06T13:14:42Z","prev_spread": 1.5,"spread_delta": 0.0,"prev_over_under": 35.5,"over_under_delta": 0.0,"prev_home_moneyline": -102,"home_moneyline_delta": 0,"prev_away_moneyline": -118,"away_moneyline_delta": 0,"is_new": false,"moved": false,"snapshot_age_minutes": 0.33}
Field notes:
spreadis relative to the home team;spread_detailsis the human-readable line (e.g."CAR -1.5").prev_*and*_deltafields arenullon the first sighting of a line (is_new: true) or when either side is missing a value.movedistruewhen any non-null delta is non-zero (subject tominSpreadMovefor spread-only moves).snapshot_age_minutestells you how stale the comparison baseline is.
Alerting recipe
- Schedule the Actor every 15 minutes.
- Set
emitUnchanged: falseandminSpreadMove: 0.5. - Attach a webhook on run-succeeded that reads the default dataset — every item is a line that just moved (or a brand-new line).
Notes & limits
- In the offseason or early in the day, ESPN may not have attached odds to
events yet; the Actor logs this and exits cleanly without touching the
snapshot. (
emitUnchanged: true, the default, ensures rows are produced whenever any odds exist.) - Data source: ESPN's public scoreboard and odds JSON APIs. Coverage and bookmakers depend on what ESPN exposes (often DraftKings consensus).
- Snapshot lives in the named key-value store
odds-movement-snapshotsunder keysnapshotand is fully replaced each run.