Covers Sports Odds and Consensus Scraper
Pricing
Pay per event
Covers Sports Odds and Consensus Scraper
๐ Extract Covers community betting consensus, lines, and pick counts for MLB, WNBA, and CFL. Filter sides or totals by segment and date.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
21 days ago
Last modified
Categories
Share
Turn public Covers community betting sentiment into structured matchup data.
The actor extracts consensus percentages, betting lines, and pick counts for each side of a matchup. Use it for daily sports-betting research, dashboards, model features, and line-versus-crowd monitoring. No Covers login or private API key is required.
What does Covers Sports Odds and Consensus Scraper do?
It reads public consensus tables on Covers and creates one clean dataset row per matchup. Each row keeps the away and home values together so comparisons require no post-processing.
- ๐ MLB, WNBA, CFL, or all available leagues
- ๐ Sides and totals consensus markets
- ๐ฅ Overall, Team Money Leaders, and Top 10% segments
- ๐ Percentages, current line/price, and public pick counts
- ๐ Stable team IDs and matchup detail links
- ๐ Source and extraction timestamps for monitoring
Who is it for?
Betting analysts can compare public positioning with model probabilities.
Odds dashboards can refresh consensus panels on a schedule.
Data scientists can collect sentiment features alongside prices and outcomes.
Publishers can monitor which games draw unusually one-sided interest.
Automation teams can send changing consensus records to a database or alert workflow.
Why use this actor?
Manual copying is slow and makes side ordering easy to mix up. The actor preserves away/home order and labels every record with its market and segment.
- Repeatable JSON, CSV, Excel, XML, and RSS exports
- Typed numeric percentages and pick counts
- No browser automation overhead
- Configurable result limit for inexpensive tests
- Ready for Apify schedules, webhooks, API clients, and MCP
What Covers data can you extract?
| Field | Meaning |
|---|---|
league | League shown by Covers |
market | sides or totals |
segment | Audience segment used for consensus |
matchupDateTime | Covers display date and Eastern time |
awayTeam, homeTeam | Full team names |
awayTeamId, homeTeamId | Stable Covers team identifiers |
awayConsensusPercent, homeConsensusPercent | Public consensus shares |
awayLine, homeLine | Displayed side or total values |
awayPickCount, homePickCount | Public pick volumes |
detailUrl | Covers matchup consensus page |
sourceUrl | Exact table requested |
scrapedAt | UTC extraction timestamp |
How to scrape Covers consensus
- Open the actor input page.
- Choose one league or keep All leagues.
- Select Sides or Totals.
- Choose the consensus audience segment.
- Optionally enter a date in
YYYY-MM-DDformat. - Set the maximum number of matchups.
- Click Start.
- Open the Dataset tab to preview or export results.
Input
{"league": "all","market": "sides","segment": "overall","maxItems": 50}
| Input | Type | Default | Notes |
|---|---|---|---|
league | string | all | all, mlb, wnba, or cfl |
market | string | sides | sides or totals |
segment | string | overall | overall, expert, or top10pct |
date | string | current | Optional YYYY-MM-DD competition date |
maxItems | integer | 50 | Between 1 and 1,000 |
A small prefill keeps the first run cheap.
For scheduled collection, leave date empty to request the current board.
Output example
{"league": "MLB","market": "sides","segment": "overall","matchupDateTime": "Thu. Jul 23 5:15 pm ET","awayTeam": "Arizona","awayTeamId": "afc3194f-5cf7-459b-9113-a3230107902e","awayConsensusPercent": 31,"awayLine": "-131","awayPickCount": 257,"homeTeam": "St. Louis","homeTeamId": "420114c4-e4c3-40e0-aaff-a32301078454","homeConsensusPercent": 69,"homeLine": "+114","homePickCount": 571,"detailUrl": "https://contests.covers.com/consensus/matchupconsensusdetails/...","scrapedAt": "2026-07-13T00:00:00.000Z"}
Sides and totals
Choose sides to collect the two team-side values displayed by Covers.
Choose totals to collect over/under consensus from the corresponding public table.
The output shape remains stable, and market records which interpretation applies.
Do not combine snapshots from different markets without grouping by market.
That field prevents accidental comparisons between moneyline/side and total values.
Consensus audience segments
overall represents the broad Covers community table.
expert maps to Covers' Team Money Leaders selection.
top10pct maps to Covers' Top 10% segment.
Save segment in downstream database keys because percentages can differ for the same game.
How much does it cost to scrape Covers sports odds consensus?
Pricing is pay per event:
- A $0.005 one-time Actor start charge
- $0.00010812 per matchup on BRONZE, with plan-based tier prices from $0.00012434 (FREE) down to $0.000030274 (DIAMOND)
- Automatic volume discounts on higher Apify plans
You can control spend with maxItems.
The Console shows an estimate before the run and exact charged events afterward.
There are no hidden Covers subscription fees for this public scope.
Scheduling a consensus monitor
Use an Apify schedule for daily or intraday snapshots.
Keep date empty so each scheduled run requests the current Covers board.
Recommended pipeline:
- Run every hour during active game windows.
- Export records to a database keyed by team IDs, market, segment, and start time.
- Compare the newest percentages with the previous snapshot.
- Alert only when the change exceeds your threshold.
- Retain pick-count changes to distinguish movement from low-volume noise.
Integrations
Connect the actor with:
- Google Sheets for a shared betting-research workbook
- Make for no-code percentage-change alerts
- Zapier for notifications and routing
- Slack for one-sided consensus alerts
- Webhooks for immediate dataset processing
- BigQuery or Snowflake for historical model features
- Python notebooks for consensus-versus-result analysis
Apify datasets can also be downloaded directly in CSV, JSON, Excel, XML, or RSS.
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/covers-sports-odds-consensus-scraper').call({league: 'mlb',market: 'sides',segment: 'overall',maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/covers-sports-odds-consensus-scraper').call(run_input={'league': 'all','market': 'totals','segment': 'top10pct','maxItems': 100,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST \'https://api.apify.com/v2/acts/automation-lab~covers-sports-odds-consensus-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"league":"wnba","market":"sides","segment":"overall","maxItems":50}'
Read the returned run's dataset after it finishes. Use a secret manager rather than embedding production tokens in source code.
Use with Apify MCP
Connect through https://mcp.apify.com?tools=automation-lab/covers-sports-odds-consensus-scraper.
Claude Code
Register the remote HTTP server from your terminal:
claude mcp add --transport http apify-covers \'https://mcp.apify.com?tools=automation-lab/covers-sports-odds-consensus-scraper'
Run claude mcp list to confirm the server is registered, then complete the Apify authentication prompt when Claude first connects.
Claude Desktop, Cursor, and VS Code
Add this server to the client's MCP JSON configuration (Claude Desktop's claude_desktop_config.json, Cursor's MCP settings, or VS Code's MCP configuration):
{"mcpServers": {"apify-covers": {"type": "http","url": "https://mcp.apify.com?tools=automation-lab/covers-sports-odds-consensus-scraper"}}}
Restart or reload the client, enable apify-covers, and complete the Apify authentication flow. The same endpoint and configuration work in all three clients; never paste an Apify token directly into a shared configuration file.
Example prompts:
- โGet today's overall MLB sides consensus from Covers.โ
- โExtract top-10-percent totals consensus and highlight games above 65%.โ
- โCompare this Covers snapshot with yesterday's records.โ
Data quality tips
- Compare team IDs instead of abbreviations when joining snapshots.
- Keep the
marketandsegmentfields in every database key. - Treat
matchupDateTimeas Covers display text in Eastern time. - Use
scrapedAtas the authoritative snapshot time. - Check pick counts before treating a large percentage as high confidence.
- Store raw line strings because formatting differs by market.
- Expect available leagues and matchups to vary by sports season.
Error handling and troubleshooting
The actor retries temporary network failures with bounded backoff. A non-success HTTP response fails clearly rather than returning misleading empty data. Markup changes also produce a clear parser error instead of silent success.
Why did I get โNo consensus matchups foundโ?
The selected league or date may have no public games. Try league: "all" and omit date.
Why are there fewer rows than maxItems?
maxItems is a cap, not a guarantee. Covers may expose fewer matchups for that filter.
Why do percentages differ between runs? Consensus changes as new public picks arrive. That is expected and useful for monitoring.
Responsible use and legality
This actor accesses public Covers pages without bypassing login controls. Scraping legality depends on jurisdiction, purpose, and how data is stored or republished. Review Covers' terms, applicable laws, and your compliance obligations.
The output is informational and is not betting advice. Do not use the actor to facilitate prohibited gambling activity. Respect reasonable run frequency and avoid unnecessary load on the source website.
Limitations
The actor extracts the verified public consensus table, not every sportsbook's full odds feed. Available leagues depend on the live Covers navigation and sports calendar. Displayed dates use Covers formatting and Eastern-time labels. Historical date availability is controlled by Covers. A source markup redesign may require an actor update.
Related sports scrapers
Explore other sports data tools from automation-lab:
- Action Network sports odds and line movement scraper
- Browse the automation-lab Store profile for complementary sports actors.
Choose the Action Network actor for that source's line-movement workflow. Choose this actor when Covers community consensus and public pick counts are the required signal.
FAQ
Does it require a Covers account? No. The supported consensus tables are public.
Can I export to CSV or Excel? Yes. Open the dataset and select the required format.
Can it run on a schedule? Yes. Apify schedules support daily and intraday monitoring.
Does maxItems create more matchups?
No. It only limits how many available rows are saved.
Can I scrape multiple markets in one run? Each run selects one market. Use two scheduled tasks when you need both sides and totals.
Is the data live?
It reflects the public Covers table at the time shown by scrapedAt.
Support
If a run fails, include the run URL and non-sensitive input in your report. That gives maintainers the response status, selected filters, and parser logs needed to investigate.
For reproducible monitoring, keep your input configuration stable and record actor build versions with snapshots.