{
  "openapi": "3.0.1",
  "info": {
    "title": "Covers.com Scraper - NFL, NBA & MLB Odds + Consensus",
    "description": "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.",
    "version": "0.1",
    "x-build-id": "IJa0L7stwGj1jboYX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/parseforge~covers-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-parseforge-covers-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/parseforge~covers-scraper/runs": {
      "post": {
        "operationId": "runs-sync-parseforge-covers-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/parseforge~covers-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-parseforge-covers-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "leagues": {
            "title": "Leagues",
            "type": "array",
            "description": "Leagues to pull the Covers board for. Every league returns the same schema; UFC returns fight rows instead of game rows.",
            "items": {
              "type": "string",
              "enum": [
                "nfl",
                "ncaaf",
                "cfl",
                "nba",
                "ncaab",
                "wnba",
                "mlb",
                "nhl",
                "mls",
                "premier-league",
                "champions-league",
                "ufc"
              ],
              "enumTitles": [
                "NFL",
                "NCAA Football",
                "CFL",
                "NBA",
                "NCAA Basketball",
                "WNBA",
                "MLB",
                "NHL",
                "MLS",
                "English Premier League",
                "UEFA Champions League",
                "UFC / MMA"
              ]
            },
            "default": [
              "mlb"
            ]
          },
          "countryCode": {
            "title": "Sportsbook market",
            "enum": [
              "us",
              "ca",
              "gb",
              "ie",
              "au",
              "nz",
              "de",
              "es",
              "it",
              "nl",
              "se",
              "br",
              "mx",
              "ar",
              "in",
              "za"
            ],
            "type": "string",
            "description": "Covers shows a different set of sportsbooks per market, and honours this as a query parameter — so a US board can be read from anywhere with no proxy. US returns roughly nine books, Canada eight, the UK four.",
            "default": "us"
          },
          "stateProvince": {
            "title": "State or province",
            "type": "string",
            "description": "Two-letter US state or Canadian province, e.g. ny, nj, pa, on. Changes which books are legal to show — New York swaps in the prediction markets Polymarket and Underdog. Leave empty for the national board."
          },
          "oddsScopes": {
            "title": "Odds scopes",
            "type": "array",
            "description": "Which board to read. Full Game is the main line. Derivatives are sport-specific: halves and quarters for football and basketball, periods for hockey, first five innings for baseball. A scope a sport does not offer is skipped with a warning.",
            "items": {
              "type": "string",
              "enum": [
                "full-game",
                "first-half",
                "second-half",
                "first-quarter",
                "second-quarter",
                "third-quarter",
                "fourth-quarter",
                "first-period",
                "second-period",
                "third-period",
                "first-5-innings"
              ],
              "enumTitles": [
                "Full Game",
                "First Half",
                "Second Half",
                "First Quarter",
                "Second Quarter",
                "Third Quarter",
                "Fourth Quarter",
                "First Period (NHL)",
                "Second Period (NHL)",
                "Third Period (NHL)",
                "First 5 Innings (MLB)"
              ]
            },
            "default": [
              "full-game"
            ]
          },
          "teams": {
            "title": "Teams",
            "type": "array",
            "description": "Keep only games involving these teams. Accepts an abbreviation (BOS) or any part of the club name (Red Sox). Leave empty for the whole board.",
            "items": {
              "type": "string"
            }
          },
          "dateFrom": {
            "title": "Date from",
            "type": "string",
            "description": "Earliest start date to keep, as YYYY-MM-DD. Covers publishes the forward board only, so this trims the slate rather than reaching back."
          },
          "dateTo": {
            "title": "Date to",
            "type": "string",
            "description": "Latest start date to keep, as YYYY-MM-DD."
          },
          "books": {
            "title": "Sportsbooks",
            "type": "array",
            "description": "Keep quotes from these books only, e.g. DraftKings, FanDuel, BetMGM, bet365, Caesars. Best price and hold are recomputed over the books you keep. Leave empty for every book in the market.",
            "items": {
              "type": "string"
            }
          },
          "minBooksQuoting": {
            "title": "Minimum books quoting",
            "minimum": 0,
            "type": "integer",
            "description": "Drop games priced by fewer than this many sportsbooks. Useful for skipping the half-priced fringe of a big slate."
          },
          "maxHoldPercent": {
            "title": "Maximum hold (%)",
            "type": "number",
            "description": "Keep only games where at least one market's cheapest book holds no more than this margin. 4.5 is a normal main line; below 2 is sharp."
          },
          "onlyArbitrage": {
            "title": "Only arbitrage games",
            "type": "boolean",
            "description": "Keep only games where the best price on both sides, across all books in this market, adds up to under 100%.",
            "default": false
          },
          "minConsensusPercent": {
            "title": "Minimum consensus (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep only games where public money is at least this lopsided, e.g. 70. Fetches the consensus board even when you are not buying the consensus block."
          },
          "consensusSide": {
            "title": "Consensus side",
            "enum": [
              "either",
              "away",
              "home"
            ],
            "type": "string",
            "description": "Which side the consensus threshold applies to.",
            "default": "either"
          },
          "minPropStarRating": {
            "title": "Minimum prop star rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only games holding at least one prop Covers rates this highly, out of 5, and trim the prop list to those. Fetches the projections board even when you are not buying it."
          },
          "minPropEvPercent": {
            "title": "Minimum prop EV (%)",
            "type": "number",
            "description": "Same idea against Covers' expected-value figure, e.g. 5 keeps props with 5% edge or better."
          },
          "includeBookBreakdown": {
            "title": "Every sportsbook's quote",
            "type": "boolean",
            "description": "Keep the per-book array on each market. Turn this off for a compact row that still carries the best price, the consensus number, hold and fair value.",
            "default": true
          },
          "includeLineHistory": {
            "title": "Line movement history",
            "type": "boolean",
            "description": "Every timestamped price change, per sportsbook, for the moneyline, spread and total. One request per game.",
            "default": false
          },
          "includeConsensus": {
            "title": "Public betting consensus",
            "type": "boolean",
            "description": "Covers' signature block: the percentage of picks on each side and on over/under, with the pick counts. NFL, NBA, NHL, MLB, NCAAF, NCAAB, CFL and WNBA only.",
            "default": false
          },
          "consensusSegments": {
            "title": "Consensus segments",
            "type": "array",
            "description": "Which crowd to read. Overall is everyone, Team Money Leaders is the profitable cappers, Top 10% is the sharpest tenth — and they routinely disagree with the public.",
            "items": {
              "type": "string",
              "enum": [
                "overall",
                "expert",
                "top10pct"
              ],
              "enumTitles": [
                "Overall (the public)",
                "Team Money Leaders",
                "Top 10% of cappers"
              ]
            },
            "default": [
              "overall"
            ]
          },
          "includePlayerProps": {
            "title": "Player prop projections",
            "type": "boolean",
            "description": "Covers' own model projection for each player prop, with the gap to the posted line, an EV percentage, a star rating, a written rationale and the best price across books. MLB, NFL, NBA and NHL only.",
            "default": false
          },
          "includeMatchupDetail": {
            "title": "Matchup hub detail",
            "type": "boolean",
            "description": "Season records with units won, both teams' last ten with closing numbers, head to head, next three fixtures, series splits, projected lineups and — for MLB — the plate umpire's own over/under record. One request per game.",
            "default": false
          },
          "includeInjuries": {
            "title": "Injury report",
            "type": "boolean",
            "description": "The league injury list, attached to each game and filtered to the two clubs playing.",
            "default": false
          },
          "includeFutures": {
            "title": "Futures markets",
            "type": "boolean",
            "description": "Championship, conference and division futures for each league, as extra rows: every selection with its opening number and a price per sportsbook.",
            "default": false
          },
          "maxLineHistoryPoints": {
            "title": "Line history points per book",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on how far back the movement series goes for each book and market. Lower it to keep rows small.",
            "default": 60
          },
          "maxItems": {
            "title": "Maximum games",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many game rows. Leave empty for the whole board."
          },
          "maxConcurrency": {
            "title": "Concurrent requests",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "How many games to enrich at once. Covers serves anonymous traffic without rate limiting, so 6 is comfortable.",
            "default": 6
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}