Betting Odds Movement Tracker & Line Alert avatar

Betting Odds Movement Tracker & Line Alert

Pricing

$0.20 / 1,000 odds movement rows

Go to Apify Store
Betting Odds Movement Tracker & Line Alert

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

kyle herman

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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

  1. Fetches the current odds slate for your selected leagues.
  2. Loads the previous snapshot from a named key-value store (odds-movement-snapshots) — persisted across runs.
  3. Diffs each line (keyed by league:event_id:provider) and computes deltas for spread, over/under and both moneylines.
  4. 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.

FieldTypeDefaultDescription
leaguesarray["mlb","nfl","nba","nhl"]League codes: mlb, nfl, nba, nhl, wnba, ncaaf, ncaab, epl, mls
minSpreadMovenumber0Minimum absolute spread change (points) for a spread-only move to be flagged moved. 0 reports all moves.
emitUnchangedbooleantrueWhen 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.
includeAllProvidersbooleanfalseWhen 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:

  • spread is relative to the home team; spread_details is the human-readable line (e.g. "CAR -1.5").
  • prev_* and *_delta fields are null on the first sighting of a line (is_new: true) or when either side is missing a value.
  • moved is true when any non-null delta is non-zero (subject to minSpreadMove for spread-only moves).
  • snapshot_age_minutes tells you how stale the comparison baseline is.

Alerting recipe

  1. Schedule the Actor every 15 minutes.
  2. Set emitUnchanged: false and minSpreadMove: 0.5.
  3. 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-snapshots under key snapshot and is fully replaced each run.