{"id":3089,"date":"2026-07-06T10:00:00","date_gmt":"2026-07-06T10:00:00","guid":{"rendered":"https:\/\/oddspapi.io\/blog\/?p=3089"},"modified":"2026-06-21T15:53:25","modified_gmt":"2026-06-21T15:53:25","slug":"no-vig-odds-api","status":"publish","type":"post","link":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/","title":{"rendered":"No-Vig Odds API: Calculate Fair Odds 3 Ways in Python"},"content":{"rendered":"<p>Every price a bookmaker shows you is inflated. Add up the implied probabilities of any market and they sum to more than 100 percent. That excess is the vig (the juice, the margin), and until you strip it out you are not looking at a probability, you are looking at a sales price. &#8220;No-vig&#8221; or &#8220;fair&#8221; odds are what is left after you remove it, and they are the foundation of every +EV calculation, every model benchmark, and every Kelly stake.<\/p>\n<p>Here is what most tutorials skip: <strong>how<\/strong> you remove the vig changes the answer. This guide shows the three de-vig methods that matter (proportional, power, and Shin) in plain Python, run against live data from the OddsPapi feed, and tells you which to use and when.<\/p>\n<h2>Why You Can&#8217;t Just Divide by the Overround<\/h2>\n<p>The naive method, dividing each implied probability by the booksum, is fine for a coin-flip market. It quietly breaks on lopsided ones because of the <strong>favorite-longshot bias<\/strong>: bettors systematically overbet longshots, so a longshot&#8217;s market price carries more inflated probability than the favorite&#8217;s. Split the vig evenly and you hand the longshot a fair price that is still too short. Models built on those numbers leak value on exactly the bets where the edge is supposed to live.<\/p>\n<p>So there are three methods worth knowing:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Method<\/th>\n<th>Assumption<\/th>\n<th>Longshot handling<\/th>\n<th>Use when<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Proportional<\/td>\n<td>Vig is spread evenly across outcomes<\/td>\n<td>Untouched (can overprice)<\/td>\n<td>Balanced markets, quick work<\/td>\n<\/tr>\n<tr>\n<td>Power (logarithmic)<\/td>\n<td>Vig scales with each outcome&#8217;s probability<\/td>\n<td>Strips more from longshots<\/td>\n<td>Lopsided markets, modelling<\/td>\n<\/tr>\n<tr>\n<td>Shin<\/td>\n<td>Vig protects the book from insiders<\/td>\n<td>Strips more from longshots, gently<\/td>\n<td>Sharp benchmarks, research<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h2>Get a Live Price<\/h2>\n<p>First, pull a real market. We use a Pinnacle line because Pinnacle runs one of the tightest margins in the business, which makes its de-vigged price the closest thing to a true market consensus. Auth is the <code>apiKey<\/code> query parameter, never a header.<\/p>\n<pre class=\"wp-block-code\"><code>import requests\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE = \"https:\/\/api.oddspapi.io\/v4\"\n\nparams = {\n    \"apiKey\": API_KEY,\n    \"fixtureId\": \"id1000018868194690\",   # Breidablik vs KA Akureyri\n    \"bookmakers\": \"pinnacle\",\n}\ndata = requests.get(f\"{BASE}\/odds\", params=params).json()\nmarkets = data[\"bookmakerOdds\"][\"pinnacle\"][\"markets\"]\n\n# Over\/Under 2.5 goals (market 1010): a deliberately lopsided 2-way market\nou = markets[\"1010\"][\"outcomes\"]\nover = ou[\"1010\"][\"players\"][\"0\"][\"price\"]    # 1.285\nunder = ou[\"1011\"][\"players\"][\"0\"][\"price\"]   # 3.60\nprint(over, under)\n<\/code><\/pre>\n<p>Over 2.5 is 1.285, Under is 3.60. The implied probabilities are 77.8 and 27.8 percent, summing to 105.6 percent, so the overround (the vig) is 5.6 percent. Now we remove it three ways.<\/p>\n<h2>Method 1: Proportional (The Baseline)<\/h2>\n<pre class=\"wp-block-code\"><code>def devig_proportional(odds):\n    \"\"\"Scale every implied probability down by the booksum.\"\"\"\n    implied = [1 \/ o for o in odds]\n    booksum = sum(implied)\n    fair_probs = [p \/ booksum for p in implied]\n    return [round(1 \/ p, 3) for p in fair_probs]   # fair decimal odds\n\n\nprint(devig_proportional([1.285, 3.60]))   # -> [1.357, 3.802]\n<\/code><\/pre>\n<p>Fair Over 1.357, fair Under 3.802. Simple, but notice it removed the same 5.3 percent from each side. On a market this lopsided, that is the part to question.<\/p>\n<h2>Method 2: Power (Corrects the Longshot Bias)<\/h2>\n<p>The power method raises each implied probability to an exponent <code>k<\/code> chosen so the results sum to exactly 1. Because raising a small number to a power above 1 shrinks it faster than a large one, more vig comes off the longshot.<\/p>\n<pre class=\"wp-block-code\"><code>def devig_power(odds):\n    \"\"\"Find k so that sum(implied_i ** k) == 1, then invert.\"\"\"\n    implied = [1 \/ o for o in odds]\n    lo, hi = 0.5, 3.0\n    for _ in range(200):                       # bisection on k\n        k = (lo + hi) \/ 2\n        if sum(p ** k for p in implied) - 1 &gt; 0:\n            lo = k\n        else:\n            hi = k\n    fair_probs = [p ** k for p in implied]\n    return [round(1 \/ p, 3) for p in fair_probs]\n\n\nprint(devig_power([1.285, 3.60]))   # -> [1.32, 4.127]  (k = 1.107)\n<\/code><\/pre>\n<p>Fair Over 1.320, fair Under 4.127. The favorite&#8217;s fair price shortened and the longshot&#8217;s lengthened well past the proportional 3.802. Power decided the Under was overbet and stripped more of its inflated probability.<\/p>\n<h2>Method 3: Shin (The Sharp&#8217;s Choice)<\/h2>\n<p>The Shin method models the vig as the book&#8217;s insurance against insider-informed bettors, solving for the proportion <code>z<\/code> of informed money. It sits between proportional and power and is the method most often used to extract a sharp consensus.<\/p>\n<pre class=\"wp-block-code\"><code>def devig_shin(odds):\n    \"\"\"Solve Shin's model for z, the insider proportion.\"\"\"\n    b = [1 \/ o for o in odds]\n    B = sum(b)\n    def probs(z):\n        return [((z * z + 4 * (1 - z) * (bi * bi) \/ B) ** 0.5 - z)\n                \/ (2 * (1 - z)) for bi in b]\n    lo, hi = 1e-9, 0.5\n    for _ in range(200):                       # bisection on z\n        z = (lo + hi) \/ 2\n        if sum(probs(z)) - 1 &gt; 0:\n            lo = z\n        else:\n            hi = z\n    return [round(1 \/ p, 3) for p in probs(z)]\n\n\nprint(devig_shin([1.285, 3.60]))   # -> [1.333, 4.003]  (z = 5.7%)\n<\/code><\/pre>\n<p>Fair Over 1.333, fair Under 4.003. Shin lands between the other two, a more conservative longshot correction than power.<\/p>\n<h2>The Three Side by Side<\/h2>\n<p>The whole reason this matters, on one lopsided market:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Method<\/th>\n<th>Fair Over 2.5<\/th>\n<th>Fair Under 2.5<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Raw Pinnacle (with vig)<\/td>\n<td>1.285<\/td>\n<td>3.60<\/td>\n<\/tr>\n<tr>\n<td>Proportional<\/td>\n<td>1.357<\/td>\n<td>3.802<\/td>\n<\/tr>\n<tr>\n<td>Shin (z = 5.7%)<\/td>\n<td>1.333<\/td>\n<td>4.003<\/td>\n<\/tr>\n<tr>\n<td>Power (k = 1.107)<\/td>\n<td>1.320<\/td>\n<td>4.127<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>On the longshot, proportional says fair value is 3.802 while power says 4.127. That is a 9 percent difference in the price you would need to beat for a +EV bet, on the exact same market. Pick the wrong method and your value scanner either misses real edges or invents fake ones.<\/p>\n<p>It works the same on three-way markets. The same fixture&#8217;s 1X2 (market 101) priced 1.675 \/ 4.61 \/ 4.14 de-vigs to 1.768 \/ 4.866 \/ 4.370 proportionally, but 1.726 \/ 5.040 \/ 4.498 under the power method, which again pushes the longshot Draw and Away prices longer.<\/p>\n<h2>Which One Should You Use?<\/h2>\n<ul>\n<li><strong>Proportional<\/strong> for balanced markets (moneylines near even, two-way totals at the median line) where the bias is negligible and speed matters.<\/li>\n<li><strong>Power<\/strong> as the default for modelling and value scanning across lopsided markets. It is simple, has one parameter, and corrects the bias that actually costs you money.<\/li>\n<li><strong>Shin<\/strong> when you want the academically grounded sharp consensus, especially for research or calibrating against closing lines.<\/li>\n<\/ul>\n<p>Whichever you choose, de-vig the <strong>sharpest<\/strong> book you can. That is why we pulled Pinnacle: its fair odds are the benchmark the rest of the market gets measured against. To build that benchmark from many books at once rather than one, see our <a href=\"https:\/\/oddspapi.io\/blog\/consensus-odds-fair-odds-calculator-python\/\">consensus odds calculator<\/a>. To measure the vig itself before you strip it, the <a href=\"https:\/\/oddspapi.io\/blog\/vig-calculator-python-sportsbook-margin\/\">vig calculator<\/a> and <a href=\"https:\/\/oddspapi.io\/blog\/bookmaker-margin-analytics-vig-trends\/\">margin analytics<\/a> guides go deeper. And to turn fair odds into bets, the <a href=\"https:\/\/oddspapi.io\/blog\/expected-value-betting-python-ev-clv\/\">expected value<\/a> and <a href=\"https:\/\/oddspapi.io\/blog\/kelly-criterion-staking-calculator-python\/\">Kelly staking<\/a> tutorials pick up exactly here.<\/p>\n<h2>Frequently Asked Questions<\/h2>\n<h3>What are no-vig odds?<\/h3>\n<p>No-vig (or fair) odds are a bookmaker&#8217;s prices with the built-in margin removed, so the implied probabilities sum to exactly 100 percent. They represent the book&#8217;s true estimate of each outcome&#8217;s probability and are the starting point for any expected-value calculation.<\/p>\n<h3>How do I remove the vig from odds in Python?<\/h3>\n<p>Convert each price to an implied probability (1 divided by the decimal odds), then renormalise so they sum to 1. The simplest method divides each by the booksum (proportional); the power and Shin methods adjust for the favorite-longshot bias by stripping more probability from longshots.<\/p>\n<h3>Which de-vig method is most accurate?<\/h3>\n<p>For balanced markets all three agree closely. For lopsided markets the power and Shin methods are more accurate because they correct the favorite-longshot bias that proportional ignores. Power is the common default for modelling; Shin is favoured for extracting a sharp consensus.<\/p>\n<h3>Why de-vig Pinnacle specifically?<\/h3>\n<p>Pinnacle runs one of the lowest margins in the market and moves its lines sharply, so its no-vig price is the closest single-book proxy for the true market probability. It is the standard benchmark for measuring value at softer books.<\/p>\n<h3>Is there a no-vig odds API?<\/h3>\n<p>OddsPapi gives you the raw prices from 350+ bookmakers, including Pinnacle, on a free tier, plus free historical odds. You apply the de-vig method of your choice (the functions above are all you need) to turn those into fair odds for any market.<\/p>\n<h2>Build Your Fair-Odds Engine<\/h2>\n<p>No-vig odds are three lines of Python away once you have clean prices. <a href=\"https:\/\/oddspapi.io\/\">Get a free OddsPapi API key<\/a>, pull Pinnacle and 350+ other books, and strip the vig your way.<\/p>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\"@type\": \"Question\", \"name\": \"What are no-vig odds?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No-vig (or fair) odds are a bookmaker's prices with the built-in margin removed, so the implied probabilities sum to exactly 100 percent. They represent the true estimate of each outcome's probability and are the starting point for any expected-value calculation.\"}},\n    {\"@type\": \"Question\", \"name\": \"How do I remove the vig from odds in Python?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Convert each price to an implied probability (1 divided by the decimal odds), then renormalise so they sum to 1. The proportional method divides each by the booksum; the power and Shin methods adjust for the favorite-longshot bias by stripping more probability from longshots.\"}},\n    {\"@type\": \"Question\", \"name\": \"Which de-vig method is most accurate?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"For balanced markets all three agree closely. For lopsided markets the power and Shin methods are more accurate because they correct the favorite-longshot bias that proportional ignores. Power is the common default for modelling; Shin is favoured for a sharp consensus.\"}},\n    {\"@type\": \"Question\", \"name\": \"Why de-vig Pinnacle specifically?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Pinnacle runs one of the lowest margins in the market and moves its lines sharply, so its no-vig price is the closest single-book proxy for the true market probability. It is the standard benchmark for measuring value at softer books.\"}},\n    {\"@type\": \"Question\", \"name\": \"Is there a no-vig odds API?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"OddsPapi gives you the raw prices from 350+ bookmakers including Pinnacle on a free tier, plus free historical odds. You apply the de-vig method of your choice to turn those into fair odds for any market.\"}}\n  ]\n}\n<\/script><\/p>\n<p><!--\nFocus Keyphrase: no vig odds\nSEO Title: No-Vig Odds API: Calculate Fair Odds 3 Ways in Python\nMeta Description: Strip the vig and get fair odds from any bookmaker in Python. Compare proportional, power, and Shin de-vig methods with live data from 350+ books, free.\nSlug: no-vig-odds-api\n--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Strip the vig and get fair odds from any bookmaker in Python. Compare proportional, power, and Shin de-vig methods with live data from 350+ books, free.<\/p>\n","protected":false},"author":2,"featured_media":3090,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[8,9,11,10],"class_list":["post-3089","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","tag-free-api","tag-odds-api","tag-python","tag-sports-betting-api"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>No-Vig Odds API: Calculate Fair Odds 3 Ways in Python | OddsPapi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"No-Vig Odds API: Calculate Fair Odds 3 Ways in Python | OddsPapi Blog\" \/>\n<meta property=\"og:description\" content=\"Strip the vig and get fair odds from any bookmaker in Python. Compare proportional, power, and Shin de-vig methods with live data from 350+ books, free.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/\" \/>\n<meta property=\"og:site_name\" content=\"OddsPapi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-06T10:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/no-vig-odds-api-scaled.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1429\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Odds API Writer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/oddspapi.io\/logo-v2.webp\" \/>\n<meta name=\"twitter:creator\" content=\"@oddspapiapi\" \/>\n<meta name=\"twitter:site\" content=\"@oddspapiapi\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Odds API Writer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/\"},\"author\":{\"name\":\"Odds API Writer\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13\"},\"headline\":\"No-Vig Odds API: Calculate Fair Odds 3 Ways in Python\",\"datePublished\":\"2026-07-06T10:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/\"},\"wordCount\":1061,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/no-vig-odds-api-scaled.webp\",\"keywords\":[\"Free API\",\"Odds API\",\"Python\",\"Sports Betting API\"],\"articleSection\":[\"How To Guides\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/\",\"url\":\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/\",\"name\":\"No-Vig Odds API: Calculate Fair Odds 3 Ways in Python | OddsPapi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/no-vig-odds-api-scaled.webp\",\"datePublished\":\"2026-07-06T10:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#primaryimage\",\"url\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/no-vig-odds-api-scaled.webp\",\"contentUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/no-vig-odds-api-scaled.webp\",\"width\":2560,\"height\":1429,\"caption\":\"No-Vig Odds API - OddsPapi API Blog\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oddspapi.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"No-Vig Odds API: Calculate Fair Odds 3 Ways in Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\",\"url\":\"https:\/\/oddspapi.io\/blog\/\",\"name\":\"OddsPapi\",\"description\":\"Sports Odds API Tutorials &amp; Guides\",\"publisher\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\"},\"alternateName\":\"Odds Papi\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/oddspapi.io\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\",\"name\":\"OddsPapi\",\"url\":\"https:\/\/oddspapi.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2025\/11\/oddspapi.png\",\"contentUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2025\/11\/oddspapi.png\",\"width\":135,\"height\":135,\"caption\":\"OddsPapi\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/oddspapiapi\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13\",\"name\":\"Odds API Writer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/33b204f24af3d02e35b25ae730c0536121ca6a783fdb196e7611c9e49fcd13eb?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/33b204f24af3d02e35b25ae730c0536121ca6a783fdb196e7611c9e49fcd13eb?s=96&d=mm&r=g\",\"caption\":\"Odds API Writer\"},\"url\":\"https:\/\/oddspapi.io\/blog\/author\/andy-lavelle\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"No-Vig Odds API: Calculate Fair Odds 3 Ways in Python | OddsPapi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/","og_locale":"en_US","og_type":"article","og_title":"No-Vig Odds API: Calculate Fair Odds 3 Ways in Python | OddsPapi Blog","og_description":"Strip the vig and get fair odds from any bookmaker in Python. Compare proportional, power, and Shin de-vig methods with live data from 350+ books, free.","og_url":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/","og_site_name":"OddsPapi Blog","article_published_time":"2026-07-06T10:00:00+00:00","og_image":[{"width":2560,"height":1429,"url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/no-vig-odds-api-scaled.webp","type":"image\/webp"}],"author":"Odds API Writer","twitter_card":"summary_large_image","twitter_image":"https:\/\/oddspapi.io\/logo-v2.webp","twitter_creator":"@oddspapiapi","twitter_site":"@oddspapiapi","twitter_misc":{"Written by":"Odds API Writer","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#article","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/"},"author":{"name":"Odds API Writer","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13"},"headline":"No-Vig Odds API: Calculate Fair Odds 3 Ways in Python","datePublished":"2026-07-06T10:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/"},"wordCount":1061,"commentCount":0,"publisher":{"@id":"https:\/\/oddspapi.io\/blog\/#organization"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/no-vig-odds-api-scaled.webp","keywords":["Free API","Odds API","Python","Sports Betting API"],"articleSection":["How To Guides"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/","url":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/","name":"No-Vig Odds API: Calculate Fair Odds 3 Ways in Python | OddsPapi Blog","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#primaryimage"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/no-vig-odds-api-scaled.webp","datePublished":"2026-07-06T10:00:00+00:00","breadcrumb":{"@id":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#primaryimage","url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/no-vig-odds-api-scaled.webp","contentUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/06\/no-vig-odds-api-scaled.webp","width":2560,"height":1429,"caption":"No-Vig Odds API - OddsPapi API Blog"},{"@type":"BreadcrumbList","@id":"https:\/\/oddspapi.io\/blog\/no-vig-odds-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oddspapi.io\/blog\/"},{"@type":"ListItem","position":2,"name":"No-Vig Odds API: Calculate Fair Odds 3 Ways in Python"}]},{"@type":"WebSite","@id":"https:\/\/oddspapi.io\/blog\/#website","url":"https:\/\/oddspapi.io\/blog\/","name":"OddsPapi","description":"Sports Odds API Tutorials &amp; Guides","publisher":{"@id":"https:\/\/oddspapi.io\/blog\/#organization"},"alternateName":"Odds Papi","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/oddspapi.io\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/oddspapi.io\/blog\/#organization","name":"OddsPapi","url":"https:\/\/oddspapi.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2025\/11\/oddspapi.png","contentUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2025\/11\/oddspapi.png","width":135,"height":135,"caption":"OddsPapi"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/oddspapiapi"]},{"@type":"Person","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13","name":"Odds API Writer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/33b204f24af3d02e35b25ae730c0536121ca6a783fdb196e7611c9e49fcd13eb?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/33b204f24af3d02e35b25ae730c0536121ca6a783fdb196e7611c9e49fcd13eb?s=96&d=mm&r=g","caption":"Odds API Writer"},"url":"https:\/\/oddspapi.io\/blog\/author\/andy-lavelle\/"}]}},"_links":{"self":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3089","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/comments?post=3089"}],"version-history":[{"count":1,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3089\/revisions"}],"predecessor-version":[{"id":3091,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/3089\/revisions\/3091"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media\/3090"}],"wp:attachment":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media?parent=3089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/categories?post=3089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/tags?post=3089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}