{"id":46984467,"url":"https://github.com/t00ts/maverick","last_synced_at":"2026-03-11T13:31:07.942Z","repository":{"id":235519512,"uuid":"790852076","full_name":"t00ts/maverick","owner":"t00ts","description":"A robust bet365 betting bot","archived":false,"fork":false,"pushed_at":"2024-11-25T18:18:26.000Z","size":34,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-11-25T19:26:38.388Z","etag":null,"topics":["bet365","bot","live-betting","sports-betting"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/t00ts.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-23T16:40:25.000Z","updated_at":"2024-11-25T18:18:30.000Z","dependencies_parsed_at":"2024-04-23T18:10:52.862Z","dependency_job_id":"31397ba2-d23a-44eb-9ff0-e0ab0815d4d5","html_url":"https://github.com/t00ts/maverick","commit_stats":null,"previous_names":["t00ts/maverick"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/t00ts/maverick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t00ts%2Fmaverick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t00ts%2Fmaverick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t00ts%2Fmaverick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t00ts%2Fmaverick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/t00ts","download_url":"https://codeload.github.com/t00ts/maverick/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t00ts%2Fmaverick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30382673,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T12:49:11.341Z","status":"ssl_error","status_checked_at":"2026-03-11T12:46:41.342Z","response_time":84,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bet365","bot","live-betting","sports-betting"],"created_at":"2026-03-11T13:31:07.432Z","updated_at":"2026-03-11T13:31:07.929Z","avatar_url":"https://github.com/t00ts.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Maverick\n\nMaverick is an app that can place bets automatically on Bet365 leveraging your existing web browser. It runs on Windows and macOS (Linux coming soon) and simulates human behaviour to avoid being detected. Bets are placed in an average of 5 seconds, making it ideal for live matches and real-time betting.\n\nMaverick itself is just your executor arm for unattended betting. You can think of it as an API for Bet365. Maverick does not include a betting strategy nor will perform any bets by itself. It's up to the user to send instructions to Maverick for them to be executed.\n\nInstructions are sent via Websockets. The user is responsible for spinning up a Websocket server, through which it can send and receive commands from Maverick. An example server that is commonly used to start off can be found [here](https://github.com/t00ts/maverick-server). You can connect as many Maverick clients to your server as you want.\n\nBasic programming knowledge is strongly recommended. This is not a plug-and-play solution.\n\n## How to use it?\n\nMaverick is available upon request:\n- Email: abel `(at)` akila `(dot)` tech\n- Telegram:  `(at)` abel `(underscore)` maverick.\n\nYou should be up and running in around 2-3 days since your first contact.\n\n\u003cdetails\u003e\n  \u003csummary\u003eI need more markets, would you add them?\u003c/summary\u003e\n  Yes, no problem, should be quick.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eWhat about other betting platforms?\u003c/summary\u003e\nWe can add other betting platforms for those willing to sponsor their development.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCan it place bets on multiple platforms at the same time?\u003c/summary\u003e\nYes indeed.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCan it use a Telegram group as feed for its tips?\u003c/summary\u003e\nAbsolutely. There's an open source extension for Maverick available which you can customize for your particular needs and includes Telegram.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCan I run it in my own computer at home or do I need a server?\u003c/summary\u003e\nYou can use both, but at home is always easier.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eI need XYZ, can you do it for me?\u003c/summary\u003e\nMaybe, shoot me an email, let's chat!\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eIs the full source code available for sale?\u003c/summary\u003e\nSure, everyone has a price.\n\u003c/details\u003e\n\n\n----\n\n## Supported bet types\n\n- [X] Single bets\n- [X] Multi-legged bets (a.k.a. \"parlay\" or \"accumulator\")\n\n\n## Supported markets\n\n- [X] Result\n- [X] Double chance\n- [X] Draw no bet\n- [X] Goal line\n- [X] Goals\n- [X] Asian handicap\n- [X] Score\n\n## Features\n\n- Hands-free bet placement on live matches\n  - Error detection on match, market, and bet levels\n  - Auto-retry capabilities:\n    - Participant suspended\n    - Accept odds changed\n    - Input quantity failure\n    - Click or selection failure\n  - Authentication QR code detection\n  - Authentication QR code solving\n\n- Hands-free bet closing for active bets\n  - Auto-retry on close suspended\n  - Minimum cash out threshold\n  - Return tracking\n\n- Auto-login (and re-login) with error detection\n- Request lifetime history tracking\n- Detailed error reporting\n- Bet queuing\n- Settings accessible through TOML file\n\n## How to use\n\n### 1. Configuration\n\nMaverick expects to find a `Config.toml` file in the same directory as the executable. The file is pretty self-explanatory, but here's what to expect from every category:\n\n| Category  | Description                                                                               |\n| --------- | ----------------------------------------------------------------------------------------- |\n| Server    | Connection URL to the WebSocket (RF6455) server that will send the commands to Maverick   |\n| Browser   | Canonical path to the Chrome browser executable                                           |\n| Platforms | Betting platform credentials (in plain text) and additional features to be enabled        |\n| X         | Developer credentials to post your bets on 𝕏                                              |\n\n\n#### Server settings\n\nThis is how the server settings should look:\n\n```toml\n[server]\naddr = \"ws://SERVER_HOST:PORT\"\nmax_retries = 10\n```\n\n| Property    | Description                                    |\n| ----------- | ---------------------------------------------- |\n| addr        | The Websocket server address (incl. port)      |\n| max_retries | Max. nº of reconnection attempts before abort. |\n\n\n#### Browser settings\n\nThis is how the browser settings should look:\n\n```toml\n[browser]\nbin_path = \"/absolute/path/to/chrome\"\nwindow_size = [1500, 900]\n```\n\n| Property       | Description                                          |\n| -------------- | ---------------------------------------------------- |\n| bin_path       | The absolute path of the Chrome binary.              |\n| window_size*   | An array specifying window width and height.         |\n| _window_pos_*  | _(Optional)_ Window left and top offset coordinates. |\n\n*_Window size and position settings may not as expected work on macOS._\n\n\n#### Platform settings\n\nThis is how a platform configuration should look:\n\n```toml\n[platforms.bet365]\nhost = \"www.bet365.com\"\nusername = \"theBetGod\"\npassword = \"iLoveMe$$i!\"\nlanguage = \"en\"\nfeatures = []\n```\n\n| Property | Description                              |\n| -------- | ---------------------------------------- |\n| host     | The root domain/host for the platform    |\n| username | The username of the account used to bet  |\n| password | The account password (in plain text)     |\n| language | The language of the account used to bet  |\n| features | Additional features to be enabled        |\n\n\n### 2. Running Mavierick\n\nMaverick is contained in a single binary and can be excuted using the command line.\n\n**Note:** It is strongly recommended to run Maverick using a proper terminal/command line interface. Especially on Windows, the default console is known to cause issues when dealing with certain characters and colors.\n\n#### macOS\n```bash\n$ ./maverick\n```\n\n#### Windows\n```bash\nmaverick.exe\n```\n\nOn startup, Maverick will automatically connect to the WebSocket server defined in the configuration file. On any disconnect, it will attempt to reconnect `max_retries` times. If a connection can't be established, Maverick will gracefully shut down.\n\n\n### 3. Interfacing with Maverick\n\n\u003e 💡 We strongly encourage all new users to play around with the `betreq` CLI utility included in your Maverick bundle in order for you to understand how to specify your bets and get familiar with the API syntax.\n\u003e \n\u003e On Windows: `betreq.exe`\n\u003e \n\u003e On macOS/Linux: `./betreq`\n\n\nMaverick supports 3 commands from the upstream:\n\n| Command         | Description                           |\n| --------------- | ------------------------------------- |\n| `session_start` | Starts a new session.                 |\n| `place_bet`     | Attempts to place a bet               |\n| `close_bet`     | Attempts to close an open/active bet  |\n\n\n#### Session Start\n\n`session_start` will effectively start a new session. This means:\n1. Dump full bet history for current session into a session log file.\n2. Clear bet history and start a new, fresh betting session.\n3. Reset equity for this session with current account balance.\n\n#### Example:\n```json\n\"session_start\"\n```\n\n#### Place Bet\n\n`place_bet` will attempt to place a bet in the given match. `place_bet` contains a `BetRequest` object,\nfor which the main parameters are:\n\n- `id`: A UUID that will uniquely identify this bet request on your system.\n- `host`: The root domain for the betting platform (platform `host` value from `Config.toml`)\n- `bet`: The bet(s) to be placed, which contains:\n  - `match`: The details to identify the live match _(see below for more details)_.\n  - `market`: The actual market and participant we're betting on _(see below for more details)_.\n  - `odds`: The minimum odds we are looking for to place the bet.\n  - `tf`: The time frame for the bet _(e.g. `FirstHalf`, `SecondHalf`, `FullTime`)_.\n  - `stake`: The amount of capital to be deployed on this bet.\n\n#### Identifying a match\n\nThere's currently two ways of specifying a match:\n\n##### Using the platform url:\n```json\n\"match\": \"https://www.bet365.com/#/IP/EV00000012345678\"\n```\n\n##### Using the team names:\n```json\n\"match\": [\"Roma\", \"Lazio\"]\n```\n\n\u003e _Note: Combined bets only support url-identified matches._\n\n#### Bets\n\nSome examples of actual bets:\n\n##### Result\n\n```json\n\"bet\": {\n  \"market\": {\n    \"result\": \"Ajax FC\"   // Uses name to specify participant\n  },\n  \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n  \"odds\": 3.2,\n  \"tf\": \"FullTime\"\n}\n```\n\n##### Double Chance\n\n```json\n\"bet\": {\n  \"market\": {\n    \"double_chance\": 1  // Uses index to specify participant\n  },\n  \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n  \"odds\": 2.1,\n  \"tf\": \"FullTime\"\n}\n```\n\n##### Draw No Bet\n\n```json\n\"bet\": {\n  \"market\": {\n    \"draw_no_bet\": \"Sevilla\"\n  },\n  \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n  \"odds\": 1.8,\n  \"tf\": \"FullTime\"\n}\n```\n\n##### Goal Line (single)\n\n```json\n\"bet\": {\n  \"market\": {\n    \"goal_line\": {\n      \"over\": [3.0],\n      \"score\": [1, 2]\n    }\n  },\n  \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n  \"odds\": 3.45,\n  \"tf\": \"FirstHalf\"\n}\n```\n\n##### Goal Line (split)\n\n```json\n\"bet\": {\n  \"market\": {\n    \"goal_line\": {\n      \"score\": [0,1],\n      \"under\": [2.0, 2.5]\n    }\n  },\n  \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n  \"odds\": 2.5,\n  \"tf\": \"FullTime\"\n}\n```\n\n##### Goals\n\n```json\n\"bet\": {\n  \"market\": {\n    \"goals\": {\n      \"over\": 4.0\n    }\n  },\n  \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n  \"odds\": 2.83,\n  \"tf\": \"FirstHalf\"\n}\n```\n\n##### Asian Handicap (single line)\n\n```json\n\"bet\": {\n  \"market\": {\n    \"asian_hcp\": {\n      \"line\": [1.5],\n      \"score\": [0, 2],\n      \"team\": \"Manchester City\"\n    }\n  },\n  \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n  \"odds\": 4.15,\n  \"tf\": \"FullTime\"\n}\n```\n\n##### Asian Handicap (spread)\n\n```json\n\"bet\": {\n  \"market\": {\n    \"asian_hcp\": {\n      \"line\": [-0.5, -1],\n      \"score\": [0, 0],\n      \"team\": \"Udinese FC\"\n    }\n  },\n  \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n  \"odds\": 2.5,\n  \"tf\": \"FullTime\"\n}\n```\n\n###### Catching fast-changing handicaps\n\nYou can specify a tolerance factor for fast-changing handicaps. In the following example, all line values have a ±0.25 tolerance factor, which you can adapt to your needs.\n\n```json\n\"line\":[[3.5],0.25]\n```\n\n```json\n\"line\":[[0.0, 0.5],0.25]\n```\n\n##### Score\n\nScore is always a 2-element array, where the first element is the home team score and the second is the away team score.\n\n```json\n\"bet\": {\n  \"market\": {\n    \"score\": [3, 4]\n  },\n  \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n  \"odds\": 11.5,\n  \"tf\": \"FirstHalf\"\n}\n```\n\n\n#### Full Example: A complete multi-legged bet request\n```json\n{\n  \"place_bet\": {\n    \"bet\": [\n      {\n        \"market\": {\n          \"result\": \"Leicester City\"\n        },\n        \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n        \"odds\": 15.3,\n        \"tf\": \"FullTime\"\n      },\n      {\n        \"market\": {\n          \"goals\": {\n            \"over\": 3.0\n          }\n        },\n        \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n        \"odds\": 4.1,\n        \"tf\": \"FirstHalf\"\n      },\n      {\n        \"market\": {\n          \"score\": [2, 1]\n        },\n        \"match\": \"https://www.bet365.com/#/IP/EV00000012345678\",\n        \"odds\": 3.85,\n        \"tf\": \"FullTime\"\n      }\n    ],\n    \"host\": \"www.bet365.com\",\n    \"id\": \"7e81d4da-3440-44d8-ad29-edc84fb73157\",\n    \"stake\": 25\n  }\n}\n```\n\n#### Odds\n\nThe minimum odds required to place the bet are set in `odds`. If the platform offers anything above, the bet will be placed.\n\n\n### Stake\n\nThe nominal cash amount to use for the bet, in the account currency.\n\n\n### CloseBet\n\nCloseBet will attempt to close an open/active bet. The request is pretty straightfoward:\n- `bet_req_id` corresponds to the original bet request id used in `PlaceBet` when the bet was placed.\n- `min_cashout` is the minimum **percent** cashout value relative to the wager placed for Maverick to close the bet.\n\n#### Example:\n```json\n{\n  \"close_bet\": {\n    \"bet_req_id\": \"7e81d4da-3440-44d8-ad29-edc84fb73157\",\n    \"min_cashout\": 1.6\n  }\n}\n```\n\n\n## Maverick responses\n\nOccasionally, Maverick will send data back to the Websocket server. These are the messages that can be expected.\n\n### Session started\n\nEvery time a new platform is logged in, a `SessionData` message will be sent back to the server containing:\n- Starting time of the current session\n- Starting balance of all currently logged in platforms\n\nHere's an example:\n\n```json\n{\n  \"date\":1702985129669,\n  \"start_balance\":{\n    \"bet365.com\": 995.24,\n    \"bwin.es\": 52.98\n  }\n}\n```\n\n### Bet Reports\n\nWhen either a `PlaceBet` or `CloseBet` is completed, Maverick will always send a full `BetRequest` object back to the server with all the details and history of everything that happened during that request, including (if applies) the close.\n\nHere's a complete example of what it might look like:\n\n```json\n{\n  \"id\":\"0dd700b3-0a9c-452e-b3f6-c0228f9492aa\",\n  \"host\":\"www.bet365.com\",\n  \"bet\":[\n    {\n      \"match\":{\n        \"Url\":\"https://www.bet365.com/#/AC/B1/C1/D8/E161801311/F3/\"\n      },\n      \"market\":{\n        \"Goals\":{\n          \"Over\":2.5\n        }\n      },\n      \"odds\":1.66,,\n      \"tf\":\"FullTime\"\n    },\n    {\n      \"match\":{\n        \"Url\":\"https://www.bet365.com/#/AC/B1/C1/D8/E161190320/F3/\"\n      },\n      \"market\":{\n        \"Score\":[1, 2]\n      },\n      \"odds\":23.0,\n      \"tf\":\"FullTime\"\n    },\n    {\n      \"match\":{\n        \"Url\":\"https://www.bet365.com/#/AC/B1/C1/D8/E161190309/F3/I1/\"\n      },\n      \"market\":{\n        \"Score\":[3, 2]\n      },\n      \"odds\":34.0,\n      \"tf\":\"FullTime\"\n    },\n    {\n      \"match\":{\n        \"Url\":\"https://www.bet365.com/#/AC/B1/C1/D8/E161190315/F3/\"\n      },\n      \"market\":{\n        \"Score\":[2, 2]\n      },\n      \"odds\":40.0,\n      \"tf\":\"FirstHalf\"\n    },\n    {\n      \"match\":{\n        \"Url\":\"https://www.bet365.com/#/AC/B1/C1/D8/E161190989/F3/\"\n      },\n      \"market\":{\n        \"Score\":[0, 0]\n      },\n      \"odds\":2.6,\n      \"tf\":\"FirstHalf\"\n    }\n  ],\n  \"stake\":5,\n  \"hist\":[\n    {\n      \"timestamp\":1727283011713,\n      \"status\":\"Received\"\n    },\n    {\n      \"timestamp\":1727283012883,\n      \"status\":\"Ready\"\n    },\n    {\n      \"timestamp\":1727283016891,\n      \"status\":{\n        \"Loaded\":\"https://www.bet365.com/#/AC/B1/C1/D8/E161801311/F3/\"\n      }\n    },\n    {\n      \"timestamp\":1727283023366,\n      \"status\":{\n        \"Loaded\":\"https://www.bet365.com/#/AC/B1/C1/D8/E161190320/F3/\"\n      }\n    },\n    {\n      \"timestamp\":1727283030439,\n      \"status\":{\n        \"Loaded\":\"https://www.bet365.com/#/AC/B1/C1/D8/E161190309/F3/I1/\"\n      }\n    },\n    {\n      \"timestamp\":1727283031093,\n      \"status\":{\n        \"Error\":{\n          \"OddsChanged\":41.0\n        }\n      }\n    }\n  ]\n}\n```\n\nWhen the bet is actually placed, the last status update will look like this:\n```json\n{\n  \"timestamp\":1727176294823,\n  \"status\":{\n    \"Placed\":{\n      \"ref\":\"BF7709201861A\",\n      \"amt\":5.0,\n      \"odds\":123.45,\n      \"acct_balance\":94.30\n    }\n  }\n}\n```\n\n#### Errors\n\nThe following is a comprehensive list of all errors that can occur while executing a `BetRequest`.\n\n| Error code                  | Description                                                |\n| --------------------------- | ---------------------------------------------------------- |\n| MarketSuspended             | Market was suspended at the time of attempting the bet     |\n| OddsChanged(f32)            | Odds changed and are out of the specified tolerance factor |\n| NotLoggedIn                 | User is not logged in                                      |\n| MatchNotFound               | Match not found (probably finished)                        |\n| MatchSuspended              | Match was suspended at the time of attempting the bet      |\n| MarketNotSupported          | Market is not supported                                    |\n| MarketNotAvailable          | Market was not available at the time of attempting the bet |\n| ParticipantNotFound         | Participant was not found                                  |\n| NoOpenBets                  | No bets are open for the specified match                   |\n| BetNotFound                 | The requested bet (to close) was not found                 |\n| CloseSuspended              | Closing was suspended when attempting to close this bet    |\n| CloseNotAvailable           | Closing is not available for the requested bet             |\n| BelowMinCashout(f32)        | Bet return is below min cashout % threshold                |\n| Timeout(String)             | Took to long to perform a task                             |\n| BetMalformed(String)        | An error in the bet request's betting amount               |\n| AuthQRCodeRequested(String) | Platform requested QR authentication by a user             |\n| QRSolverService(String)     | Errors originated from the QR Solver service               |\n| PlatformErrorMsg(String)    | Platform error message appeared when placing a bet         |\n| License(String)             | License error (includes details as a String)               |\n| Other(String)               | Other errors (includes details as a String)                |\n| Unknown                     | Unknown error                                              |\n\n\n## Runtime requirements\n\nMaverick is expected to run on a dedicated environment. It's not meant to be used in hostile environments nor anywhere where a human is interfering with its operation.\n\n- Chrome needs to be in the main display of the computer running Maverick.\n- Chrome must remain in foreground at all times.\n- Chrome must be exclusively used by Maverick.\n- Betting platforms have been manually granted all the permissions they require.\n- Betting accounts used have been manually authorized by a human.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ft00ts%2Fmaverick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ft00ts%2Fmaverick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ft00ts%2Fmaverick/lists"}