Sports betting line movement watcher with Slack alerts

Log every odds snapshot to Google Sheets every two hours and get a Slack ping the moment a line moves sharply across major books.

Agentic Task
The Odds APIGoogle SheetsSlackOperationsPersonal ProductivityResearch & MonitoringNotifications & AlertsData Sync

Build me an agent workflow that watches sports betting line movement and logs every odds snapshot to Google Sheets, then alerts Slack when a line moves sharply. Run it on a cron trigger every 2 hours.

Inputs to expose as workflow config (with sensible defaults):

- Sport keys (default: americanfootball_nfl and basketball_nba) - Markets (default: h2h, spreads) - Region (default: us) - Odds format (default: american) - Google Sheets spreadsheet ID and tab name for the odds log - Slack channel for alerts - Sharp move thresholds: spread shift in points (default 1.5) and implied probability swing in percentage points (default 8) - Lookback window for movement (default: last 24 hours)

On every run, the agent should:

1. Call The Odds API "Get Odds" once per configured sport with the configured markets and region. Skip any event whose commence_time is in the past (already started).

2. For every remaining event, append one row per bookmaker per market outcome into the Google Sheets log via "Append Values". Columns, in order: timestamp (run time, ISO 8601 UTC), event (away @ home), commence_time, sport, bookmaker, market, outcome (team name or Over/Under), line/point (for spreads and totals), price (American odds), implied_probability (computed from American price). If the sheet is empty, write the header row first.

3. After writing, call Google Sheets "Get Values" to read back the log (all rows in the configured tab), then compute line movement per event + market + outcome over the lookback window. For each (event, market, outcome) group, compare the most recent snapshot against the earliest snapshot inside the window. For spreads, movement = current point minus earliest point. For h2h, compute implied probability from American odds and take the consensus across the major US books (DraftKings, FanDuel, BetMGM, Caesars, BetRivers) at each end of the window.

4. Flag a move as sharp if any of these are true inside the window: - Spread point moved by the configured threshold or more in the same direction across at least 3 of the major US books. - Consensus implied probability for an h2h outcome swung by the configured threshold or more across the major US books. Ignore moves where the earliest snapshot is less than 1 hour old (not enough history).

5. For each flagged move, post one Slack message via "Send a Message" to the configured channel. The message should name the event, the market and outcome, the direction of the move (e.g. "Chiefs spread shortened from -3 to -4.5"), which books moved first, and the time window the shift happened in. Group multiple flagged moves for the same event into one message when possible. If nothing is sharp this run, do not post anything.

Operational notes for the agent: be conservative with The Odds API credits — one Get Odds call per sport per run, not per event. Always include timestamp on every appended row so the movement calculation works. If the same event already moved enough to trigger an alert in the last 6 hours, skip re-alerting on the same direction so the channel does not get spammed. Keep the implied probability formula standard: for positive American odds p = 100 / (odds + 100); for negative odds p = -odds / (-odds + 100).

Additional information

What does this prompt do?
  • Pulls fresh odds for your tracked sports and markets every two hours and writes a row per bookmaker to a Google Sheets log.
  • Compares the latest numbers against the earliest snapshot in the last 24 hours to spot real line movement, not noise.
  • Pings a Slack channel when a spread shifts by 1.5 points or more, or when implied probability swings by more than 8 points across the major books.
  • Skips games that have already kicked off so your alerts stay focused on bets you can still place.
What do I need to use this?
  • An account with The Odds API (the free starter plan is enough to get going).
  • A Google account with access to the spreadsheet you want to use as your odds log.
  • A Slack workspace and the name of the channel you want alerts posted to.
  • A short list of the sports, markets, and books you care about (defaults are NFL and NBA, moneyline and spreads, US books).
How can I customize it?
  • Change the sports, markets, or region (for example add MLB totals, or switch to UK books).
  • Tune what counts as a sharp move by adjusting the spread and implied probability thresholds.
  • Pick a different Slack channel, or DM a specific person instead of posting publicly.
  • Speed up or slow down the cadence (every hour for game day, every six hours in the off season).

Frequently asked questions

What counts as a sharp line move?
By default, a spread that shifts 1.5 points or more from its earliest value in the last 24 hours, or an implied probability swing of more than 8 points across the consensus of major books. Both thresholds are easy to change.
Which sports and books does this work with?
It works with anything The Odds API covers, which is 70+ sports and 40+ bookmakers including DraftKings, FanDuel, BetMGM, Caesars, and BetRivers. NFL and NBA are the defaults.
Will it spam my Slack channel?
No. The watcher only posts when a tracked event crosses your sharp move threshold inside the 24 hour window, and it skips games that have already started.
Do I need a paid plan with The Odds API?
The free starter plan with 500 credits per month is enough to track a couple of sports and markets every two hours. Heavier coverage benefits from a paid plan.
Can I keep a permanent history of odds?
Yes. Every run appends fresh rows to your Google Sheet, so you build up a full snapshot log over time that you can chart, pivot, or export however you like.

Stop refreshing odds screens looking for line moves.

Connect The Odds API, Google Sheets, and Slack once. Geni logs every snapshot and pings you the moment a line moves sharply.