5,000,000 requests/month · Monitor usage & optimize pulls
Pro plan · 5,000,000 requests/month
Used
42,262
Remaining
4,957,738
Monthly Limit
5M
How different polling strategies use your 5M monthly budget
💡 Even at 5-minute polling for all 10 sports (288,000 req/mo), you'd use only 1.7% of your monthly budget. You have enormous headroom.
Sports tracked
NFL, MLB, NBA, NCAAF, NCAAB, NHL, EPL, MLS, UCL, Golf
Markets per pull
h2h + spreads + totals per sport per request
Bookmakers per pull
DK, FD, BetMGM, Caesars, PointsBet, BetRivers, WH, Bovada, MyBookie, BetOnline
Background poll interval
Cron in oddsService.ts → startOddsPolling()
Requests per cycle
One per sport (markets bundled in single call)
Current monthly estimate
10 sports × 12 polls/day × 30 days
Budget consumed
Leaves 99.28% unused — massive room to increase frequency
Ranked by impact. You have 5M credits — use them strategically.
Reduce poll interval to 5–15 minutes
Your current 2-hour interval means odds can be 119 minutes stale. At 5-min polling for all 10 sports you'd use ~288K req/mo — just 5.8% of your budget. Line movement and arb windows open and close in minutes.
Poll in-season sports more frequently than off-season
NFL is off-season right now. Poll MLB, NBA, NHL, EPL, MLS, UCL every 5 min. Poll NFL/NCAAF/NCAAB every 30 min or skip entirely until their season starts. Saves ~30% of requests.
Add player props market to game detail pulls
Currently you only fetch h2h, spreads, and totals. The Odds API also serves player_props (anytime TD, passing yards, etc.) — these are high-value for premium subscribers and each game-level props pull costs 1 request.
Fetch scores endpoint for auto-settle
The /scores endpoint costs 1 request per sport and returns final scores for the last 3 days. Use this instead of re-fetching full odds to settle picks — much cheaper than a full odds pull.
Use event-level pulls for game detail page
Currently game detail re-fetches the full sport odds list to find one game. The /events/{id}/odds endpoint fetches a single game's odds for 1 credit. Switch game detail to use this endpoint.
Cache-hit rate monitoring
Track how often the frontend reads from DB cache vs. triggering a live API pull. If cache-hit rate is >95%, your polling interval is already optimal.
Skip sports with no upcoming games
Before each poll, check if the sport has games in the next 48 hours using the /sports endpoint (free, 0 credits). Skip the odds pull if no games are scheduled.
Narrow bookmaker list per market
For the arb scanner you need all 10 books. For the pick feed you only need the top 4 (DK, FD, BetMGM, Caesars). Splitting these into two call types reduces payload size and processing time.
You're in great shape
At current usage you'll consume ~0.07% of your monthly budget. The biggest opportunity is not saving credits — it's spending more of them on fresher data. Dropping to 5-minute polls would make your arb scanner and line movement alerts dramatically more valuable to subscribers.
server/services/oddsService.ts → change TWO_HOURS to FIVE_MINUTES = 5 * 60 * 1000inSeason = false to save ~30% off-seasonserver/services/gameDataService.ts → replace the sport-wide odds pull in game detail with /events/{id}/oddsmarkets: "h2h,spreads,totals,player_props" to unlock prop betting picks for VIP subscribers