Covers.com Odds, Line History & Betting Trends Scraper
Pricing
from $0.50 / 1,000 results
Covers.com Odds, Line History & Betting Trends Scraper
Scrapes Covers.com games for NFL, NBA, MLB, NHL and college leagues: odds from many sportsbooks (spread, total, moneyline), opening lines, line movement history, public betting percentages, trends, injuries and standings.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
ActorFlow
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape sportsbook odds from Covers.com (covers.com) for NFL, NCAA football, CFL, NBA, NCAA basketball, WNBA, MLB and NHL games. Every game comes back as one record with odds from every listed sportsbook (spread, total and moneyline in American and decimal format), opening lines, line movement history per book, public betting percentages, betting trends, injuries and optional standings. Paste a Covers.com odds page and press Start, export the results as JSON, CSV or Excel, or call the actor as an API.
Target website: covers.com

✨ Features of this Covers.com odds scraper
- Odds from every sportsbook — spread, total and moneyline per book (DraftKings, FanDuel, BetMGM, Caesars, bet365, BetRivers, Fanatics, Hard Rock, theScore and more) with American and decimal prices and the time each price last changed.
- Opening lines — the opening moneyline, spread and total of every game.
- Line movement history — every line change of every book for the moneyline, spread and total, starting from the opening line, to track steam moves and closing line value.
- Consensus and public betting % — the share of picks on each side of the spread and the total, with the number of picks.
- Betting trends — Covers.com ATS, totals and recent-form trend statements for both teams, rated high or low.
- Injuries — both teams' injury reports with status, injury and practice participation.
- Weather — hourly forecast for the game (NFL, NCAAF, CFL and MLB): condition, temperature, humidity, wind and chance of precipitation. Empty for indoor leagues and finished games.
- Head-to-head — the series record and the last meetings of the two teams with score, winner, ATS result and total.
- Player props — Covers' projections per game (player props, spread and total) with pick, line, projection, difference, expected value, star rating and the best price plus every book's line (NFL, NCAAF, NBA, NCAAB, MLB, NHL; empty when Covers has not posted them yet).
- Futures — one record per team and market (championship, conference, division) with the opening price and every book's price. Not available for CFL or soccer.
- League trends — season straight-up, against-the-spread and over/under records by situation (home, away, favorites, dogs) for each league.
- Soccer (odds only) — Premier League, MLS and Champions League: home/draw/away and total prices per sportsbook plus line movement. Soccer has no match-up pages on Covers.com, so there are no trends, consensus, injuries, weather or head-to-head.
- Standings — one row per team with wins, losses and ATS / over-under records.
- Past games and date ranges — read a schedule day by day and get finished games with final scores, cover results and line history. Finished games can be cached so repeat runs skip them.
- Flat odds-by-book view — the dataset has a second table view with one row per game and sportsbook, ready for spreadsheets.
- Proxy support — a US proxy is on by default because the list of sportsbooks depends on the visitor country.
- No browser required — plain page requests make runs fast and cheap.
🚀 How to scrape Covers.com odds in 5 steps
- Sign up for a free Apify account — includes $5 monthly credit.
- Open the actor page and click Try for free.
- Keep the prefilled NFL odds page, add other Covers.com URLs, or pick leagues and data types.
- Click Start and wait for the run to complete.
- Download results from the Output tab in JSON, CSV, or Excel format.
You can also run this actor via the Apify API or integrate it directly into your workflows using Zapier, Make, or n8n.
💰 Pricing
This actor uses pay-per-result billing: each game (or standings team) is one result.
- New Apify accounts include $5 of free monthly credit.
- Covers.com pages are large (1 to 5 MB), so the actor fetches the heavy pages only for the data types you select. It costs significantly less to run than browser-based scrapers.
- Odds only is the cheapest setting. Line history and consensus add one extra page per game.
- Use the cache project name for finished games so scheduled runs only pay for new results.
🔧 Input configuration

The numbers in the screenshot: 1 the Covers.com page URLs (odds, game, schedule, standings, futures or league trends pages), 2 the optional cache project name that skips finished games you already have, 3 the maximum games per start URL. Leagues, schedule dates, data types and the proxy settings follow below the screenshot.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
Covers.com page URLs (startUrls) | array | — | prefill: NFL odds page | League odds pages, game pages, schedule pages and standings pages. Leave empty to use the leagues below. |
Cache project name (cacheProjectName) | string | — | — | Skips finished games already scraped under this name; they are not charged or counted. Live odds are never cached. |
Max items (maxItems) | integer | — | 5 | Maximum games per start URL, or per league when searching by league. Standings always return the full table. |
Leagues (leagues) | array | — | [] | nfl, ncaaf, cfl, nba, ncaab, wnba, mlb, nhl, premier-league, mls, champions-league (soccer: odds only, no dates or standings). Empty means NFL when no start URL is given. |
Schedule date from (dateFrom) | string | — | — | First day (YYYY-MM-DD) of the schedule to read. Past days return finished games. |
Schedule date to (dateTo) | string | — | — | Last day, at most 31 days after the first. Defaults to the first day. |
Data types (dataTypes) | array | — | [] (odds only) | odds, consensus, lineHistory, trends, injuries, standings, weather, headToHead, playerProps (per game), futures and leagueTrends (one table per league, not limited by Max items). Applies to every game, including games from start URLs. |
Proxy country (countryCode) | string | — | US | US, CA or GB. The sportsbook list depends on the visitor country. |
Proxy configuration (proxyConfiguration) | object | — | Apify Proxy, US | Apify Proxy with a US IP. Without a proxy only your own country's books are returned. |
Supported URL types:
- Odds page:
https://www.covers.com/sport/football/nfl/odds(any supported league) - Game page:
https://www.covers.com/sport/football/nfl/matchup/379626(also/picks) - Schedule page:
https://www.covers.com/sports/nfl/matchups?selectedDate=2026-10-11(also?weekNumber=5) - Standings page:
https://www.covers.com/sport/football/nfl/standings - Futures page:
https://www.covers.com/sport/football/nfl/odds/futures - League trends page:
https://www.covers.com/sport/football/nfl/league-trends
📦 Covers.com odds scraper output data
The output is a JSON dataset. A game record has the keys type, id, gameId, league, sport, url, gameDate, startTime, status, venue, awayTeam, homeTeam, awayAbbr, homeAbbr, awayScore, homeScore, resultSummary, books, openingLines, consensus, lineHistory, trends, injuries, weather, headToHead, playerProps, changeType (null unless the cache is on), scrapedAt. Data types you did not select are null. Futures records have type: future (league, sport, market, selection, selectionAbbr, openOdds, openDecimal, bestBook, bestOdds, books). League trends records have type: leagueTrends (period, straightUp, againstTheSpread, overUnder). Standings records have type: standing with league, group, team, wins, losses, ties, stats and scrapedAt. The dataset has 2 views:
- Overview — one row per game or standings team with teams, kickoff, status, scores and record.
- Odds by sportsbook — one row per game and sportsbook with the spread, total and moneyline prices.
Output at a glance:
| Game | Kickoff (UTC) | Status | DK spread | DK total | DK moneyline (away / home) | Spread public % (away / home) |
|---|---|---|---|---|---|---|
| HOU @ JAC | 2026-10-18 13:30 | scheduled | 2.5 (100) | 42.5 (-110) | 124 / -148 | 34% / 66% |
| TEN @ IND | 2026-10-18 17:00 | scheduled | 6.5 (-106) | 44.5 (-112) | 270 / -340 | 28% / 72% |
Sample output (raw JSON, arrays shortened to 2 items):
[{"type": "game","id": "nfl-379626","gameId": "379626","league": "nfl","sport": "football","url": "https://www.covers.com/sport/football/nfl/matchup/379626","startTime": "2026-10-18T13:30:00.000Z","status": "scheduled","venue": "Wembley Stadium","awayTeam": "Houston Texans","homeTeam": "Jacksonville Jaguars","awayAbbr": "HOU","homeAbbr": "JAC","awayScore": null,"homeScore": null,"resultSummary": null,"books": [{"book": "BetMGM","moneyline": {"away": 120,"home": -145,"awayDecimal": 2.2,"homeDecimal": 1.69},"spread": {"away": 2.5,"home": -2.5,"awayOdds": -105,"awayDecimal": 1.95,"homeOdds": -115,"homeDecimal": 1.87},"total": {"line": 42.5,"overOdds": -108,"overDecimal": 1.93,"underOdds": -110,"underDecimal": 1.91},"updatedAt": "2026-10-16T19:33:57.000Z"},{"book": "bet365","moneyline": {"away": 125,"home": -150,"awayDecimal": 2.25,"homeDecimal": 1.67},"spread": {"away": 2.5,"home": -2.5,"awayOdds": -104,"awayDecimal": 1.96,"homeOdds": -116,"homeDecimal": 1.86},"total": {"line": 42.5,"overOdds": -109,"overDecimal": 1.92,"underOdds": -111,"underDecimal": 1.9},"updatedAt": "2026-10-17T08:38:18.000Z"}],"openingLines": {"moneyline": {"away": 139,"home": -158},"spread": {"away": 2.5,"home": -2.5},"total": {"line": 43.5}},"consensus": {"moneyline": null,"spread": {"awayPct": 34,"homePct": 66,"awayPicks": 354,"homePicks": 694},"total": {"overPct": 57,"underPct": 43,"overPicks": 362,"underPicks": 278}},"lineHistory": [{"market": "moneyline","book": "BetMGM","isOpen": true,"time": "11:05","period": null,"away": -110,"awayDecimal": 1.91,"home": -110,"homeDecimal": 1.91},{"market": "moneyline","book": "BetMGM","isOpen": false,"time": "Oct 13 17:38","period": null,"away": 125,"awayDecimal": 2.25,"home": -145,"homeDecimal": 1.69}],"trends": [{"kind": "trend","team": "away","rating": "high","text": "The Houston Texans have covered the 2H Spread in 8 of their last 9 away games (+6.60 Units / 60% ROI)"},{"kind": "trend","team": "away","rating": "high","text": "The Houston Texans have hit the 1H Team Total Over in 13 of their last 20 games (+5.07 Units / 22% ROI)"}],"injuries": [{"team": "HOU","player": "J. Hansen","position": "LB","status": "Injured","injury": "Illness","date": "Oct 15, '26","practice": "Full Participation In Practice"},{"team": "HOU","player": "A. Al-Shaair","position": "LB","status": "Injured","injury": "Groin","date": "Oct 15, '26","practice": "Full Participation In Practice"}],"scrapedAt": "2026-10-17T19:28:13.181Z"},{"type": "game","id": "nfl-380000","gameId": "380000","league": "nfl","sport": "football","url": "https://www.covers.com/sport/football/nfl/matchup/380000","startTime": "2026-10-18T17:00:00.000Z","status": "scheduled","venue": "Lucas Oil Stadium","awayTeam": "Tennessee Titans","homeTeam": "Indianapolis Colts","awayAbbr": "TEN","homeAbbr": "IND","awayScore": null,"homeScore": null,"resultSummary": null,"books": [{"book": "BetMGM","moneyline": {"away": 270,"home": -325,"awayDecimal": 3.7,"homeDecimal": 1.31},"spread": {"away": 6.5,"home": -6.5,"awayOdds": -105,"awayDecimal": 1.95,"homeOdds": -125,"homeDecimal": 1.8},"total": {"line": 44.5,"overOdds": -110,"overDecimal": 1.91,"underOdds": -108,"underDecimal": 1.93},"updatedAt": "2026-10-16T20:46:45.000Z"},{"book": "bet365","moneyline": {"away": 270,"home": -340,"awayDecimal": 3.7,"homeDecimal": 1.29},"spread": {"away": 6.5,"home": -6.5,"awayOdds": -102,"awayDecimal": 1.98,"homeOdds": -118,"homeDecimal": 1.85},"total": {"line": 44.5,"overOdds": -109,"overDecimal": 1.92,"underOdds": -111,"underDecimal": 1.9},"updatedAt": "2026-10-17T18:56:07.000Z"}],"openingLines": {"moneyline": {"away": 269,"home": -325},"spread": {"away": 6.5,"home": -6.5},"total": {"line": 44}},"consensus": {"moneyline": null,"spread": {"awayPct": 28,"homePct": 72,"awayPicks": 266,"homePicks": 674},"total": {"overPct": 50,"underPct": 50,"overPicks": 289,"underPicks": 293}},"lineHistory": [{"market": "moneyline","book": "BetMGM","isOpen": true,"time": "18:17","period": null,"away": 250,"awayDecimal": 3.5,"home": -300,"homeDecimal": 1.33},{"market": "moneyline","book": "BetMGM","isOpen": false,"time": "Oct 11 19:47","period": null,"away": 260,"awayDecimal": 3.6,"home": -325,"homeDecimal": 1.31}],"trends": [{"kind": "trend","team": "away","rating": "high","text": "The Tennessee Titans have hit the 4Q Game Total Under in 11 of their last 16 games (+5.30 Units / 28% ROI)"},{"kind": "trend","team": "away","rating": "high","text": "The Tennessee Titans have hit the 4Q Moneyline in 7 of their last 16 games (+4.30 Units / 26% ROI)"}],"injuries": [{"team": "TEN","player": "J. Elliott","position": "DL","status": "Out","injury": "NIR - Personal","date": "Oct 15, '26","practice": "Did Not Participate In Practice"},{"team": "TEN","player": "J. Franklin-Myers","position": "DL","status": "Injured","injury": "NIR-Rest","date": "Oct 15, '26","practice": "Full Participation In Practice"}],"scrapedAt": "2026-10-17T19:28:13.796Z"}]
🐍 How to scrape Covers.com odds with Python, JavaScript or the API
Run the actor programmatically with the official Apify clients. Replace <YOUR_API_TOKEN> with the token from your Apify Console.
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("confidential_gnat/covers-odds-trends-scraper").call(run_input={"startUrls": [{"url": "https://www.covers.com/sport/football/nfl/odds"}],"dataTypes": ["odds", "consensus", "lineHistory"],"maxItems": 5,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('confidential_gnat/covers-odds-trends-scraper').call({startUrls: [{ url: 'https://www.covers.com/sport/football/nfl/odds' }],dataTypes: ['odds', 'consensus', 'lineHistory'],maxItems: 5,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL — start a run and wait for the dataset:
curl -X POST "https://api.apify.com/v2/acts/confidential_gnat~covers-odds-trends-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"startUrls":[{"url":"https://www.covers.com/sport/football/nfl/odds"}],"dataTypes":["odds","consensus","lineHistory"],"maxItems":5}'
💡 What you can use Covers.com odds data for
- Odds comparison and line shopping across US sportsbooks
- Tracking line movement and closing line value with the per-book line history
- Fading or following the public with consensus and public betting percentages
- Building handicapping and betting models from trends, injuries and standings
- Sports betting content, odds widgets and alerts for newsletters and apps
Bettors, handicappers, odds comparison sites, sports media and quant researchers typically use this data.
⚠️ Limitations & known issues
- Public data only — Covers.com is a commercial publisher that earns affiliate revenue, and its terms of use page could not be found. The actor reads only logged-out public pages and reproduces odds, percentages and structured fields. It does not copy expert article text and never follows sportsbook redirect links. Check Covers.com's terms and your local betting-data rules before commercial use.
- Current odds are for upcoming games only — finished games return final scores and line history, but no current book prices (
booksis empty). - Sportsbooks depend on the IP — Covers.com shows the books licensed where the visitor is. With a US proxy you usually get 9 books; some US IPs only see prediction-market books, so the actor retries with another IP. Other countries show their own books.
- Football schedule pages are weekly — NFL, NCAAF and CFL schedule dates return the whole week's games. Other leagues return a single day.
- Consensus and trends — public percentages are only shown before a game starts, so finished games have
consensusfilled with null values. - Large pages — pages are 1 to 5 MB. Line history returns hundreds of entries per game.
- Leagues — NFL, NCAAF, CFL, NBA, NCAAB, WNBA, MLB and NHL. Soccer is odds only; golf, futures and player props are not covered.
❓ Frequently asked questions
Can I scrape Covers.com legally?
The actor only collects data that is already publicly visible on Covers.com: no login, paywall or private content is accessed. Scraping publicly available data is generally considered lawful (see hiQ Labs v. LinkedIn), but you are responsible for complying with Covers.com's terms of service and applicable laws, and for how you use betting data.
What data does the Covers.com scraper return?
One record per game with the teams, kickoff time, venue, status and score, plus odds per sportsbook, opening lines, consensus percentages, line history, trends and injuries depending on the data types you select. Standings return one record per team.
How many games can I scrape from one URL?
Max items limits the games per start URL, or per league when you search by league and date range. Date ranges are limited to 31 days. Standings always return the full league table.
Do I need a proxy to scrape covers.com?
The site does not block scrapers, but the sportsbooks shown depend on where the visitor is. The actor therefore uses Apify Proxy with a US IP by default. Without a proxy you only see the books of your own country, for example four UK books from outside the US. Change the proxy country to CA or GB to see those countries' books.
How do I scrape Covers.com odds with Python?
Use the Python example above with the apify-client package, then iterate over the dataset items. Each item is a game with a nested books list.
Can I run this Covers.com scraper on a schedule?
Yes, use Apify Schedules. For odds snapshots, run it as often as you need, live odds are never cached. For results history, set a cache project name so finished games already scraped are skipped, not charged and not counted towards Max items.
What output formats are supported?
JSON, CSV, Excel, XML and RSS, either from the Output tab or through the Apify API.
How do I get line movement from Covers.com?
Select the lineHistory data type. Each game then has a lineHistory list with the opening line and every later update for each sportsbook and market, with the American and decimal prices and the time of the change.
🔗 Other actors you may find useful
| Scraper | Description |
|---|---|
| 🏈 Action Network Odds & Public Betting Scraper | Sportsbook odds, public betting splits, opening lines, line movement and sharp-money signals. |
| 📈 Kalshi Markets Scraper | Prediction market prices, implied probability, spread, volume and open interest. |
| 🎟️ Gametime Events Website Scraper | Sports, concert and theater events with ticket prices and venues from Gametime. |
| 📰 Google News AI Scraper | Google News articles by topic or keyword with sources and publish dates. |
| 🎬 YouTube Video List Scraper | Video lists from YouTube channels and playlists with titles, views and dates. |
💬 Support & contact
If you encounter any issues or have questions, please open an issue or reach out via the Apify Community Forum.
You can also find more of our actors on the Actor Flow page.