Covers.com Scraper - NFL, NBA & MLB Odds + Consensus
Pricing
Pay per event
Covers.com Scraper - NFL, NBA & MLB Odds + Consensus
Scrape Covers.com odds for 12 leagues from up to nine sportsbooks. Public betting percentages, line movement history, player prop projections with EV, injury reports, futures, and computed hold, fair value and arbitrage. No proxy.
Pricing
Pay per event
Rating
0.0
(0)
Developer
ParseForge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Covers.com Scraper - NFL, NBA & MLB Odds, Consensus and Line Movement
Scrape NFL odds, NBA odds, MLB odds and college football odds for 12 leagues, from up to nine sportsbooks at once — plus the public betting percentages Covers is known for. Every game comes back with each book's opening and current number, the best price on the board, how far the line has moved, what share of the public is on each side, and the market maths already done: hold, no-vig fair value and arbitrage. No login, no API key, no proxy. Export to CSV, JSON, Excel, or XML.
Odds APIs charge a monthly subscription and quote one blended price per game. This reads the same public Covers pages your browser does, keeps every book's number separate so you can shop the line, and adds the two things an odds feed never has: who the public is betting, and Covers' own player-prop projections with an EV figure attached.
| Who uses it | What they scrape Covers.com for |
|---|---|
| Bettors and handicappers | Line shopping across nine books, and fading a public that is 70% on one side |
| Quant and model builders | Timestamped line movement per book, to study how a number actually travelled |
| Odds and media sites | A normalised feed of moneylines, spreads and totals for 12 leagues |
| Prop bettors | Covers' projection, the gap to the posted line, an EV percentage and a star rating |
| Affiliate and content teams | Live numbers for comparison pages, with each book's deep link attached |
| Data scientists | Labelled market data: implied probability, hold, no-vig fair price, arbitrage edge |
What it does
This Actor collects the Covers.com betting board for a league and returns each game as one row. Every row carries:
- 🧾 The game: both clubs with their full name, abbreviation, crest, conference and — for MLB — both starting pitchers with their throwing hand and ERA.
- 📊 Every book's line: DraftKings, FanDuel, BetMGM, Caesars, bet365, BetRivers, Fanatics, theScore Bet and Hard Rock Bet, each with its moneyline, spread and total, in American, decimal and fractional at once.
- 🛒 Line shopping, solved: the best price and the best number on each side, with the book that has it named, plus that book's deep link.
- 📈 Movement: the opening number, the current consensus number, and how far each has travelled.
- 🧮 Market maths already done: implied probability, per-book hold, no-vig fair probability and fair price, and whether the board is an arbitrage — computed across all three legs on soccer, and always with both sides matched at the same number.
- 🚩 Bad quotes flagged, not hidden: a book contradicting itself, or sitting far off the rest of the board, is delivered with
isCoherent: falseand kept out of the best-price and fair-value columns. - ⏱️ A last-updated stamp per book, so you can tell a stale price from a live one.
- ⚽ Three-way markets for soccer, with the draw priced and de-vigged properly.
- 🥊 UFC fight cards as their own rows, with each book's price on both fighters.
Turn on the optional blocks and each row also carries the public betting consensus, the timestamped line-movement series, player prop projections with EV, the matchup hub (records, head to head, last ten, lineups, umpire) and the injury report. Futures come back as extra rows.
Results export to CSV, JSON, Excel, or XML, or stream from the API.
What you can do with Covers.com data
🛒 Shop every line before you bet.
One row already names the book with the best price on each side and the best number on each spread and total, so the comparison is a column, not a workflow.
👥 Fade the public.
Covers publishes what share of picks sits on each side. Set Minimum consensus (%) to 70 and you get only the lopsided games — and you can read three different crowds: everyone, the profitable cappers, and the sharpest 10%. They disagree more often than you would expect, and that disagreement is the signal.
🕰️ Study how a number actually moved.
The line-movement block returns every timestamped price change, per book, across the moneyline, spread and total — not a daily snapshot. A single game routinely carries 300+ points across nine books.
🎯 Find props with an edge already priced.
The projections block is Covers' own model, not a book's number: the projected stat, the gap to the posted line, an EV percentage, a 1-5 star rating and a written rationale. Filter to Minimum prop EV (%) and keep only the ones worth reading.
⚖️ Hunt arbitrage and low-hold markets.
Turn on Only arbitrage games, or set Maximum hold (%) to 2 to keep only the sharpest markets on the board.
🌍 Read a different sportsbook market from anywhere.
Covers renders a different set of books per country and per US state. This Actor passes the market as a parameter, so a US board reads the same from Buenos Aires as from New Jersey — and it needs no proxy to do it. Setting the state to ny even swaps in the prediction markets Polymarket and Underdog.
Leagues covered
| League | Board | Derivative scopes | Consensus | Prop projections |
|---|---|---|---|---|
| NFL | Moneyline, spread, total | Halves, quarters | ✅ | ✅ |
| NCAA Football | Moneyline, spread, total | Halves, quarters | ✅ | — |
| CFL | Moneyline, spread, total | Halves, quarters | ✅ | — |
| NBA | Moneyline, spread, total | Halves, quarters | ✅ | ✅ |
| NCAA Basketball | Moneyline, spread, total | Halves | ✅ | — |
| WNBA | Moneyline, spread, total | Halves, quarters | ✅ | — |
| MLB | Moneyline, spread, total | First 5 innings | ✅ | ✅ |
| NHL | Moneyline, spread, total | Periods | ✅ | ✅ |
| MLS | Three-way, total | Halves | — | — |
| English Premier League | Three-way, total | Halves | — | — |
| UEFA Champions League | Three-way, total | Halves | — | — |
| UFC / MMA | Fight moneyline | — | — | — |
A league out of season has no board; the Actor says so and moves on rather than failing. Asking for a scope a sport does not offer — quarters on a baseball board — is skipped with a warning instead of silently returning the full game.
Derivative boards are thinner than the full game, and honestly so. Covers renders one market at a time on a half or a quarter, so the Actor makes one request per market and merges them. Where a market simply is not posted — NFL first-half moneylines, most weeks — that market is absent from the row rather than present and empty, and the scope is only charged when it returns something.
Input
| Field | What it does |
|---|---|
| Leagues | Which boards to read. Default MLB. |
| Sportsbook market | Country whose books to show. us gives ~nine books, ca eight, gb four. |
| State or province | ny, nj, pa, on… Changes which books are legal to display. |
| Odds scopes | Full game, halves, quarters, periods, or first five innings. |
| Teams | Keep only games involving these clubs, by abbreviation or name. |
| Date from / Date to | Trim the forward slate to a window. |
| Sportsbooks | Keep only these books; best price and hold are recomputed over them. |
| Minimum books quoting | Skip thinly-priced games. |
| Maximum hold (%) | Keep only markets tighter than this margin. |
| Only arbitrage games | Keep only boards where the best prices add up to under 100%. |
| Minimum consensus (%) | Keep only games the public is lopsided on. |
| Consensus segments | The public, the money leaders, or the top 10% of cappers. |
| Minimum prop star rating / EV (%) | Keep only games holding a prop that good, and trim the prop list to it. |
| Optional data blocks | Six checkboxes, all off by default. |
| Maximum games | Stop after this many rows. |
Filters read blocks you have not bought
The filters run on the complete row, before the optional blocks are dropped. So you can filter on consensus, or on prop EV, without paying for those columns in the output: the Actor fetches what the filter needs, decides, and then delivers only what you asked for. "Give me games where the public is 70% on one side, but do not send me the consensus block" costs exactly one board scan more than the plain run.
Output
One row per game per scope. With every optional block off, a row looks like this — trimmed here, the real row carries every book:
{"league": "mlb","leagueLabel": "MLB","gameId": "369617","scopeLabel": "Full Game","matchup": "BOS @ MIA","startTime": "2026-08-25T22:40:00.000Z","startTimeEt": "Today, 18:40","status": "scheduled","away": {"abbr": "BOS", "name": "Boston Red Sox", "conference": "American League","startingPitcher": "P. Tolle", "pitcherHand": "L", "pitcherEra": 3.08},"home": {"abbr": "MIA", "name": "Miami Marlins", "conference": "National League","startingPitcher": "T. Phillips", "pitcherHand": "R", "pitcherEra": 4.64},"moneyline": {"opening": { "away": { "price": -160, "decimal": 1.63, "fractional": "5/8" } },"books": [{"book": "BetMGM", "bookSlug": "betmgm","lastUpdated": "2026-08-25T20:03:43.000Z","away": { "price": -150, "decimal": 1.67, "impliedProbability": 0.6 },"home": { "price": 125, "decimal": 2.25, "impliedProbability": 0.44444 },"holdPercent": 4.444,"deepLinkAway": "/go/b?q[0].LId=19108267&q[0].SId=136068157"}],"best": {"away": { "price": -140, "book": "bet365" },"home": { "price": 135, "book": "Caesars" }},"booksQuoting": 9,"lowestHoldPercent": 1.623,"fairProbabilityAway": 0.58369,"fairPriceAway": -137,"isArbitrage": false,"priceMovementAway": 20},"spread": { "consensusLine": -1.5, "lineMovement": 0, "best": { "away": { "price": 125, "line": -1.5, "book": "Hard Rock Bet" } } },"total": { "consensusLine": 7, "lineMovement": -0.5, "best": { "away": { "price": 115, "line": 7, "book": "theScore Bet" } } },"booksQuoting": 9,"countryCode": "us","matchupUrl": "https://www.covers.com/sport/baseball/mlb/matchup/369617"}
With the optional blocks on, the same row also carries:
{"consensus": [{ "market": "sides", "segment": "overall", "awayPercent": 68, "homePercent": 32,"awayPicks": 352, "homePicks": 167, "totalPicks": 519 }],"lineHistory": [{ "book": "BetMGM", "market": "moneyline", "updatedAt": "2026-08-25T19:43:00.000Z","awayPrice": -135, "homePrice": 115 }],"playerProps": [{ "player": "S. Torkelson", "position": "1B", "team": "Detroit Tigers","market": "TOTAL RBIS", "line": 0.5, "projection": 0.5, "difference": 0,"evPercent": 19.13, "starRating": 4,"analysis": "When estimating his home run ability, Spencer Torkelson ranks in the 93rd percentile…","bestBook": "bet365", "bestPrice": 275, "bestSide": "over" }],"matchupDetail": {"awayRecord": "78-53", "homeRecord": "61-70","awayUnitsWon": 1102, "homeUnitsWon": -1808,"headToHead": [ { "date": "Aug 24, '26", "opponent": "MIA", "moneyline": -116, "moneylineTeam": "BOS", "overUnder": "u7.5" } ],"awayLastTen": [], "awayNextThree": [], "awayLineup": [],"seriesRecords": [ { "game": "Game 1", "overall": "25-18", "afterWin": "12-7", "afterLoss": "13-11" } ],"umpire": "Paul Clemons", "umpireOverUnderRecord": "9-12", "umpireRunsPerGame": 9.05},"injuries": [{ "player": "V. Mesa Jr.", "position": "RF", "team": "Tampa Bay Rays","status": "Ten Day IL - Hamstring", "injury": "Hamstring", "date": "Aug 18, '26" }]}
Futures come back as their own rows:
{"league": "mlb", "market": "World Series", "selection": "LA Dodgers","openingPrice": 300, "bestPrice": 170, "bestBook": "DraftKings","impliedProbability": 0.37037, "payoutPer100": 170,"books": [ { "book": "FanDuel", "price": 160 }, { "book": "DraftKings", "price": 170 } ]}
Two things the maths refuses to fake
Arbitrage is only claimed where both sides share a number. Taking the best price on each side regardless of handicap would pair an away +3 against a home -1.5 and report a 15% edge that does not exist. Fair value and arbitrage are computed at the consensus line, and pricedAtLine names it so you can audit the figure. Line shopping still shows you the genuinely best quote on each side, price and number together, from one book rather than two.
A quote a book will not stand behind is excluded from the maths. Every sportsbook prices both sides above 100% implied — that margin is the business. A book whose own two sides add up to less than 100%, or that sits far from where every other book has the game, is publishing something stale or mis-mapped. Measured on one UFC card, that pattern faked an arbitrage on 12 of 27 fights. Those quotes still arrive in the books array, marked isCoherent: false and counted in booksQuotedIncoherent; they simply do not win a best-price column.
Rows with no market at all are not delivered. Covers lists a full fight card and a full slate before the books price them. A row that is two names and nothing else is not an odds board, so it is skipped rather than sold — on one UFC card that was 38 of 65 rows.
Fields that are only there when the sport has them
The Actor does not pad rows with dead columns. spread is absent on soccer, threeway is absent everywhere else, startingPitcher is MLB-only, and umpire appears only on a baseball matchup hub. A block you did not turn on is not present at all, rather than present and null.
Pricing
Pay per event, so a cheap run stays cheap:
| Event | Price | When it fires |
|---|---|---|
| Actor start | $0.03 | Once per run |
| League board scanned | $0.01 | Once per league |
| Game with full odds board | $0.007 | Per game — the main row |
| Derivative board scanned | $0.008 | Per extra scope that returns lines |
| Line movement history | $0.004 | Per game, when movement is returned |
| Public betting consensus | $0.003 | Per game, when consensus is returned |
| Player prop projections | $0.006 | Per game, when props are returned |
| Matchup hub detail | $0.005 | Per game, when the hub is returned |
| League injury report | $0.008 | Once per league, when injuries are returned |
| Futures selection | $0.002 | Per futures row |
The optional events are charged only when they arrive with data. A game with no consensus published, or no props posted, is delivered without that block and without that charge.
Why $7 per 1,000 games. The other Covers scraper on the Store charges $10 per 1,000 for a single flat result and none of the blocks above. This is 30% cheaper for a row that carries every book's number, both other markets, the computed fair value, and — when you want them — consensus, movement, projections and the hub. The Actor runs HTTP-only with no proxy and no browser, which is what makes that price hold up.
Notes and limits
- Forward board only. Covers publishes upcoming and in-progress games. There is no historical archive here; the date filters trim the current slate rather than reaching back. Line movement, on the other hand, does reach back — to the market's opening price.
- Times are Eastern.
startTimeis a proper UTC timestamp when Covers publishes the game in its schema.org block (today's slate); otherwise it is derived from the on-page label, which is always kept verbatim instartTimeEt. - Consensus is joined by team pair, because the consensus board keys games by a different id than the odds board. On the rare occasion two clubs meet twice in a day, both games receive both consensus rows.
- Soccer has no matchup hub, so
matchupUrlis null there and the matchup block returns nothing for those leagues. - Covers serves anonymous traffic without rate limiting. Twenty parallel requests all returned 200 in testing, which is why this Actor ships with no proxy configuration at all — and why your run does not pay for one.
- Measured cost. A default run — one league, the plain board — costs about $0.025 per 1,000 games in platform usage. That is the margin behind the $7 price, and it is what lets the optional blocks stay cheap.
FAQ
Do I need a proxy? No. Covers accepts the sportsbook market as a query parameter on every page, so the Actor reads a US, Canadian or UK board from wherever it happens to run.
Can I get closing lines for finished games? You get the last published board and the full movement series up to it. Covers replaces a finished game's board with its result, so run the Actor before kick-off if you need the close.
Why did a league return nothing? It is out of season, or its board is not up yet. The log says which. NBA and NCAA Basketball are empty through the summer.
Which leagues have the consensus block? NFL, NBA, NHL, MLB, NCAAF, NCAAB, CFL and WNBA. Covers does not publish consensus for soccer or UFC.
How do I keep runs small while testing? Set Maximum games to 5 and leave the optional blocks off. That is two requests and five rows.
Legal
This Actor collects data that Covers.com publishes publicly, without logging in and without circumventing any access control. You are responsible for using the output in line with Covers' terms and with the law that applies to you. Betting odds and public consensus are factual market data, not betting advice.
