{"id":2517,"date":"2026-03-18T10:00:00","date_gmt":"2026-03-18T10:00:00","guid":{"rendered":"https:\/\/oddspapi.io\/blog\/?p=2517"},"modified":"2026-03-20T17:58:37","modified_gmt":"2026-03-20T17:58:37","slug":"football-odds-api-soccer-data","status":"publish","type":"post","link":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/","title":{"rendered":"Football Odds API: Real-Time Soccer Data"},"content":{"rendered":"<h2>Why You Need a Football Odds API<\/h2>\n<p>Football is the world&#8217;s most-bet sport. If you&#8217;re building anything with betting data \u2014 a model, a scanner, a dashboard \u2014 you need odds from more than 20 bookmakers. You need the sharps. You need Asian Handicaps. And you need it in JSON, not scraped HTML.<\/p>\n<p>Most APIs cover 40 soft bookmakers and call it a day. OddsPapi covers <strong>140+ bookmakers per match<\/strong>, including Pinnacle, Singbet, and Betfair Exchange \u2014 the books that actually set the market. That&#8217;s 1X2, Asian Handicaps (every line), Both Teams To Score, Over\/Under, and 460+ markets total. All on a free tier.<\/p>\n<h2>Football Odds Coverage: OddsPapi vs The Competition<\/h2>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Feature<\/th>\n<th>The Odds API<\/th>\n<th>SportsGameOdds<\/th>\n<th>OddsPapi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Bookmakers per match<\/td>\n<td>~15-20<\/td>\n<td>~30<\/td>\n<td><strong>140+<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Sharp books (Pinnacle, Singbet)<\/td>\n<td>No<\/td>\n<td>No<\/td>\n<td><strong>Yes<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Asian Handicap markets<\/td>\n<td>Limited<\/td>\n<td>Limited<\/td>\n<td><strong>Full (every line)<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Over\/Under lines<\/td>\n<td>2.5 only<\/td>\n<td>Some<\/td>\n<td><strong>1.5, 2.5, 3.5+<\/strong><\/td>\n<\/tr>\n<tr>\n<td>BTTS market<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<td><strong>Yes (109+ books)<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Tournaments<\/td>\n<td>~30 leagues<\/td>\n<td>~50 leagues<\/td>\n<td><strong>1,372 tournaments<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Betfair Exchange<\/td>\n<td>No<\/td>\n<td>No<\/td>\n<td><strong>Yes<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Free tier<\/td>\n<td>500 req\/mo<\/td>\n<td>Limited<\/td>\n<td><strong>250 req\/mo<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h2>1,372 Tournaments, Every League That Matters<\/h2>\n<p>OddsPapi covers <strong>1,372 football tournaments<\/strong> \u2014 from the Premier League, La Liga, Bundesliga, Serie A, and Ligue 1 down to lower divisions, youth leagues, and women&#8217;s football. Champions League, Europa League, MLS, Brasileiro Serie A, Eredivisie, Primeira Liga, Scottish Premiership, Turkish Super Lig, and hundreds more.<\/p>\n<p>Coverage extends to every competition that bookmakers price. If a bookmaker prices it, we have it.<\/p>\n<h2>Football Markets: From 1X2 to Asian Handicaps<\/h2>\n<p>Each football fixture on OddsPapi can have <strong>464+ unique markets<\/strong>. Here are the key ones with their market IDs \u2014 you&#8217;ll need these for API calls:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Market<\/th>\n<th>Market ID<\/th>\n<th>Outcomes<\/th>\n<th>Books<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Full Time Result (1X2)<\/td>\n<td>101<\/td>\n<td>Home (101), Draw (102), Away (103)<\/td>\n<td>125+<\/td>\n<\/tr>\n<tr>\n<td>Both Teams To Score<\/td>\n<td>104<\/td>\n<td>Yes (104), No (105)<\/td>\n<td>109+<\/td>\n<\/tr>\n<tr>\n<td>Over\/Under 2.5 Goals<\/td>\n<td>1010<\/td>\n<td>Over (1010), Under (1011)<\/td>\n<td>119+<\/td>\n<\/tr>\n<tr>\n<td>Over\/Under 1.5 Goals<\/td>\n<td>1012<\/td>\n<td>Over (1012), Under (1013)<\/td>\n<td>101+<\/td>\n<\/tr>\n<tr>\n<td>Over\/Under 3.5 Goals<\/td>\n<td>1014<\/td>\n<td>Over (1014), Under (1015)<\/td>\n<td>98+<\/td>\n<\/tr>\n<tr>\n<td>Asian Handicap -0.5<\/td>\n<td>1068<\/td>\n<td>Home (1068), Away (1069)<\/td>\n<td>53<\/td>\n<\/tr>\n<tr>\n<td>Asian Handicap 0<\/td>\n<td>1072<\/td>\n<td>Home (1072), Away (1073)<\/td>\n<td>22<\/td>\n<\/tr>\n<tr>\n<td>Asian Handicap -1<\/td>\n<td>1064<\/td>\n<td>Home (1064), Away (1065)<\/td>\n<td>24<\/td>\n<\/tr>\n<tr>\n<td>Asian Handicap +0.5<\/td>\n<td>1076<\/td>\n<td>Home (1076), Away (1077)<\/td>\n<td>30<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h3>Why Asian Handicaps Matter<\/h3>\n<p>Asian Handicaps are how sharps bet football. Each line has its own market ID \u2014 not one generic &#8220;Asian Handicap&#8221; market. This means you can compare Pinnacle&#8217;s -0.5 line directly against Bet365&#8217;s -0.5 line, or track how the -1.0 line moves across 24 bookmakers independently.<\/p>\n<p>Other APIs collapse these into a single market or don&#8217;t cover them at all. OddsPapi gives you every line (from +0.5 through -1.5 and beyond) as a distinct, queryable market.<\/p>\n<h2>Python Tutorial: Football Odds in 5 Steps<\/h2>\n<h3>Step 1: Setup<\/h3>\n<pre class=\"wp-block-code\"><code>import requests\nfrom datetime import datetime, timedelta\n\nAPI_KEY = \"YOUR_API_KEY\"  # Free at oddspapi.io\nBASE_URL = \"https:\/\/api.oddspapi.io\/v4\"\nSPORT_ID = 10  # Soccer\/Football<\/code><\/pre>\n<h3>Step 2: Browse Tournaments<\/h3>\n<pre class=\"wp-block-code\"><code>def get_tournaments():\n    \"\"\"Get all football tournaments.\"\"\"\n    response = requests.get(f\"{BASE_URL}\/tournaments\", params={\n        \"apiKey\": API_KEY,\n        \"sportId\": SPORT_ID\n    })\n    tournaments = response.json()\n    print(f\"{len(tournaments)} tournaments available\")\n    return tournaments\n\ntournaments = get_tournaments()\n\n# Filter to top leagues\nfor t in tournaments:\n    if any(name in t.get(\"tournamentName\", \"\") for name in [\"Premier League\", \"La Liga\", \"Bundesliga\", \"Serie A\", \"Champions\"]):\n        print(f\"  {t['tournamentName']} (ID: {t['tournamentId']})\")<\/code><\/pre>\n<h3>Step 3: Get Today&#8217;s Fixtures<\/h3>\n<pre class=\"wp-block-code\"><code>def get_fixtures(sport_id=SPORT_ID):\n    \"\"\"Get today's football fixtures with odds.\"\"\"\n    today = datetime.now().strftime(\"%Y-%m-%d\")\n    tomorrow = (datetime.now() + timedelta(days=1)).strftime(\"%Y-%m-%d\")\n\n    response = requests.get(f\"{BASE_URL}\/fixtures\", params={\n        \"apiKey\": API_KEY,\n        \"sportId\": sport_id,\n        \"from\": today,\n        \"to\": tomorrow\n    })\n\n    fixtures = response.json()\n    with_odds = [f for f in fixtures if f.get(\"hasOdds\")]\n    print(f\"{len(with_odds)} fixtures with odds today\")\n    return with_odds\n\nfixtures = get_fixtures()\nfor f in fixtures[:10]:\n    print(f\"  {f['participant1Name']} vs {f['participant2Name']} ({f['tournamentName']})\")<\/code><\/pre>\n<h3>Step 4: Fetch Odds from 140+ Bookmakers<\/h3>\n<pre class=\"wp-block-code\"><code>def get_odds(fixture_id):\n    \"\"\"Get odds from all bookmakers for a fixture.\"\"\"\n    response = requests.get(f\"{BASE_URL}\/odds\", params={\n        \"apiKey\": API_KEY,\n        \"fixtureId\": fixture_id\n    })\n    return response.json()\n\n# Pick a fixture and get odds\nfixture = fixtures[0]\nodds = get_odds(fixture[\"fixtureId\"])\nbookmakers = list(odds.get(\"bookmakerOdds\", {}).keys())\nprint(f\"{len(bookmakers)} bookmakers pricing {fixture['participant1Name']} vs {fixture['participant2Name']}\")<\/code><\/pre>\n<h3>Step 5: Compare Odds Across Bookmakers<\/h3>\n<pre class=\"wp-block-code\"><code>def compare_odds(odds_data, market_id=\"101\"):\n    \"\"\"Compare odds across all bookmakers for a market.\n\n    Market 101 = Full Time Result (1X2)\n    Outcomes: 101=Home, 102=Draw, 103=Away\n    \"\"\"\n    results = []\n\n    for slug, bookie in odds_data.get(\"bookmakerOdds\", {}).items():\n        market = bookie.get(\"markets\", {}).get(market_id)\n        if not market:\n            continue\n\n        row = {\"bookmaker\": slug}\n        for outcome_id, outcome in market.get(\"outcomes\", {}).items():\n            for player_id, player in outcome.get(\"players\", {}).items():\n                price = player.get(\"price\")\n                if outcome_id == \"101\":\n                    row[\"home\"] = price\n                elif outcome_id == \"102\":\n                    row[\"draw\"] = price\n                elif outcome_id == \"103\":\n                    row[\"away\"] = price\n\n        if \"home\" in row:\n            results.append(row)\n\n    # Sort by best home odds\n    results.sort(key=lambda x: x.get(\"home\", 0), reverse=True)\n\n    print(f\"\\n1X2 Odds from {len(results)} bookmakers:\")\n    print(f\"{'Bookmaker':<20} {'Home':>8} {'Draw':>8} {'Away':>8}\")\n    print(\"-\" * 46)\n    for r in results[:10]:\n        print(f\"{r['bookmaker']:<20} {r.get('home', 'N\/A'):>8} {r.get('draw', 'N\/A'):>8} {r.get('away', 'N\/A'):>8}\")\n\n    # Find best prices\n    best_home = max(results, key=lambda x: x.get(\"home\", 0))\n    best_draw = max(results, key=lambda x: x.get(\"draw\", 0))\n    best_away = max(results, key=lambda x: x.get(\"away\", 0))\n\n    print(f\"\\nBest Home: {best_home['home']} @ {best_home['bookmaker']}\")\n    print(f\"Best Draw: {best_draw['draw']} @ {best_draw['bookmaker']}\")\n    print(f\"Best Away: {best_away['away']} @ {best_away['bookmaker']}\")\n\ncompare_odds(odds)<\/code><\/pre>\n<h2>Advanced: Compare Asian Handicap Lines<\/h2>\n<p>This is where it gets interesting for sharps. Pull Asian Handicap -0.5 odds from every bookmaker and compare:<\/p>\n<pre class=\"wp-block-code\"><code>def compare_asian_handicap(odds_data, market_id=\"1068\"):\n    \"\"\"Compare Asian Handicap -0.5 across bookmakers.\n\n    Market 1068 = Asian Handicap -0.5\n    Outcomes: 1068=Home -0.5, 1069=Away +0.5\n    \"\"\"\n    results = []\n\n    for slug, bookie in odds_data.get(\"bookmakerOdds\", {}).items():\n        market = bookie.get(\"markets\", {}).get(market_id)\n        if not market:\n            continue\n\n        row = {\"bookmaker\": slug}\n        for outcome_id, outcome in market.get(\"outcomes\", {}).items():\n            for player_id, player in outcome.get(\"players\", {}).items():\n                price = player.get(\"price\")\n                if outcome_id == \"1068\":\n                    row[\"home_minus\"] = price\n                elif outcome_id == \"1069\":\n                    row[\"away_plus\"] = price\n\n        if \"home_minus\" in row:\n            results.append(row)\n\n    results.sort(key=lambda x: x.get(\"home_minus\", 0), reverse=True)\n\n    print(f\"\\nAsian Handicap -0.5 from {len(results)} bookmakers:\")\n    print(f\"{'Bookmaker':<20} {'Home -0.5':>10} {'Away +0.5':>10}\")\n    print(\"-\" * 42)\n    for r in results[:10]:\n        print(f\"{r['bookmaker']:<20} {r.get('home_minus', 'N\/A'):>10} {r.get('away_plus', 'N\/A'):>10}\")\n\ncompare_asian_handicap(odds)<\/code><\/pre>\n<p>This is where the edge lives. Soft bookmakers are slow to adjust Asian Handicap lines. Pinnacle moves first. If you can spot when Bet365&#8217;s -0.5 is still 1.95 but Pinnacle has already moved to 1.85, you&#8217;ve found value.<\/p>\n<h2>Free Historical Football Odds<\/h2>\n<p>Need to backtest your football model? Check Closing Line Value? Analyze how Asian Handicap lines moved before kickoff?<\/p>\n<p>OddsPapi includes <strong>historical odds on the free tier<\/strong>. Pull past odds for any fixture, any bookmaker, any market. Most APIs charge extra for historical data \u2014 or lock it behind enterprise plans. We include it free because backtesting is how you build models that actually work.<\/p>\n<p>Already using historical data? Check out our <a href=\"https:\/\/oddspapi.io\/blog\/bet365-historical-odds-guide-the-data-apis-and-strategy\/\">Bet365 Historical Odds Guide<\/a> for a deep dive on strategy.<\/p>\n<h2>FAQ: Football Odds API<\/h2>\n<h3>What sport ID is football\/soccer?<\/h3>\n<p>Sport ID <strong>10<\/strong>. Use <code>sportId=10<\/code> in all requests. This covers all football\/soccer tournaments worldwide \u2014 Premier League through to lower divisions.<\/p>\n<h3>How many bookmakers cover football?<\/h3>\n<p>Up to <strong>140+ bookmakers per match<\/strong> for top leagues (Premier League, Bundesliga, Champions League). Lower leagues may have 30-50 bookmakers depending on the competition.<\/p>\n<h3>Do you cover Asian Handicaps?<\/h3>\n<p>Yes. Every line has its own market ID \u2014 from Asian Handicap +0.5 (market 1076) through -1.5 (market 1060) and beyond. Unlike other APIs, we don&#8217;t collapse them into one generic market. You get each line separately so you can compare the same handicap across bookmakers.<\/p>\n<h3>Is the API free?<\/h3>\n<p>The free tier gives you <strong>250 requests per month<\/strong>. That&#8217;s enough to scan fixtures, pull odds, and compare prices across bookmakers. No credit card required.<\/p>\n<h3>Do you have Pinnacle football odds?<\/h3>\n<p>Yes. Pinnacle, Singbet, SBOBet, and other sharp bookmakers are included alongside 130+ soft books. You get the sharp prices that actually set the market.<\/p>\n<h3>What about live\/in-play football odds?<\/h3>\n<p>Yes. Filter fixtures by status to find live matches. For real-time updates without polling, the Pro tier includes <strong>WebSocket streaming<\/strong> \u2014 odds pushed to your client the instant they change.<\/p>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What sport ID is football\/soccer?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Sport ID 10. Use sportId=10 in all requests. This covers all football\/soccer tournaments worldwide.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How many bookmakers cover football?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Up to 140+ bookmakers per match for top leagues like the Premier League, Bundesliga, and Champions League. Lower leagues may have 30-50 bookmakers.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Do you cover Asian Handicaps?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes. Every line has its own market ID from Asian Handicap +0.5 (market 1076) through -1.5 (market 1060). Each line is separate so you can compare the same handicap across bookmakers.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Is the football odds API free?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"The free tier gives you 250 requests per month. Enough to scan fixtures, pull odds, and compare prices across bookmakers. No credit card required.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Do you have Pinnacle football odds?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes. Pinnacle, Singbet, SBOBet, and other sharp bookmakers are included alongside 130+ soft books.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What about live\/in-play football odds?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes. Filter fixtures by status to find live matches. The Pro tier includes WebSocket streaming for real-time odds pushed to your client instantly.\"\n      }\n    }\n  ]\n}\n<\/script><\/p>\n<h2>Start Building with Football Odds Data<\/h2>\n<p>Whether you&#8217;re building a model, scanning for value, or comparing lines across 140 bookmakers \u2014 start with 250 free API requests. No credit card, no enterprise sales call.<\/p>\n<p><strong><a href=\"https:\/\/oddspapi.io\">Get Your Free API Key at OddsPapi.io<\/a><\/strong><\/p>\n<p>Stop scraping. Stop paying for data that only covers soft books. Get the sharps, the Asian Handicaps, and the historical data \u2014 all in one API.<\/p>\n<p><!--\nFocus Keyphrase: football odds api\nSEO Title: Football Odds API: Real-Time Soccer Data from 140+ Bookmakers\nMeta Description: Access football odds from Pinnacle, Bet365 & 140+ bookmakers per match. 1X2, Asian Handicaps, BTTS & 460+ markets. Python tutorial with free API tier.\nSlug: football-odds-api-soccer-data\n--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Access football odds from Pinnacle, Bet365 &#038; 350+ bookmakers per match. 1X2, Asian Handicaps, BTTS &#038; 460+ markets. Python tutorial with free API tier.<\/p>\n","protected":false},"author":2,"featured_media":2519,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[8,9,11,15,10],"class_list":["post-2517","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","tag-free-api","tag-odds-api","tag-python","tag-soccer","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>Football Odds API: Real-Time Soccer Data | Odds API Development 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\/football-odds-api-soccer-data\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Football Odds API: Real-Time Soccer Data | Odds API Development Blog\" \/>\n<meta property=\"og:description\" content=\"Access football odds from Pinnacle, Bet365 &amp; 350+ bookmakers per match. 1X2, Asian Handicaps, BTTS &amp; 460+ markets. Python tutorial with free API tier.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/\" \/>\n<meta property=\"og:site_name\" content=\"Odds API Development Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-18T10:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-20T17:58:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/03\/football-odds-api-soccer-data-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=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/\"},\"author\":{\"name\":\"Odds API Writer\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13\"},\"headline\":\"Football Odds API: Real-Time Soccer Data\",\"datePublished\":\"2026-03-18T10:00:00+00:00\",\"dateModified\":\"2026-03-20T17:58:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/\"},\"wordCount\":827,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/03\/football-odds-api-soccer-data-scaled.webp\",\"keywords\":[\"Free API\",\"Odds API\",\"Python\",\"Soccer\",\"Sports Betting API\"],\"articleSection\":[\"How To Guides\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/\",\"url\":\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/\",\"name\":\"Football Odds API: Real-Time Soccer Data | Odds API Development Blog\",\"isPartOf\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/03\/football-odds-api-soccer-data-scaled.webp\",\"datePublished\":\"2026-03-18T10:00:00+00:00\",\"dateModified\":\"2026-03-20T17:58:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#primaryimage\",\"url\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/03\/football-odds-api-soccer-data-scaled.webp\",\"contentUrl\":\"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/03\/football-odds-api-soccer-data-scaled.webp\",\"width\":2560,\"height\":1429,\"caption\":\"Football Odds API - OddsPapi API Blog\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oddspapi.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Football Odds API: Real-Time Soccer Data\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/oddspapi.io\/blog\/#website\",\"url\":\"https:\/\/oddspapi.io\/blog\/\",\"name\":\"OddsPapi\",\"description\":\"Sports Odds APIs 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":"Football Odds API: Real-Time Soccer Data | Odds API Development 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\/football-odds-api-soccer-data\/","og_locale":"en_US","og_type":"article","og_title":"Football Odds API: Real-Time Soccer Data | Odds API Development Blog","og_description":"Access football odds from Pinnacle, Bet365 & 350+ bookmakers per match. 1X2, Asian Handicaps, BTTS & 460+ markets. Python tutorial with free API tier.","og_url":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/","og_site_name":"Odds API Development Blog","article_published_time":"2026-03-18T10:00:00+00:00","article_modified_time":"2026-03-20T17:58:37+00:00","og_image":[{"width":2560,"height":1429,"url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/03\/football-odds-api-soccer-data-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":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#article","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/"},"author":{"name":"Odds API Writer","@id":"https:\/\/oddspapi.io\/blog\/#\/schema\/person\/b6f21e649c4f556f0a95c23a0f1efa13"},"headline":"Football Odds API: Real-Time Soccer Data","datePublished":"2026-03-18T10:00:00+00:00","dateModified":"2026-03-20T17:58:37+00:00","mainEntityOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/"},"wordCount":827,"commentCount":0,"publisher":{"@id":"https:\/\/oddspapi.io\/blog\/#organization"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/03\/football-odds-api-soccer-data-scaled.webp","keywords":["Free API","Odds API","Python","Soccer","Sports Betting API"],"articleSection":["How To Guides"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/","url":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/","name":"Football Odds API: Real-Time Soccer Data | Odds API Development Blog","isPartOf":{"@id":"https:\/\/oddspapi.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#primaryimage"},"image":{"@id":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#primaryimage"},"thumbnailUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/03\/football-odds-api-soccer-data-scaled.webp","datePublished":"2026-03-18T10:00:00+00:00","dateModified":"2026-03-20T17:58:37+00:00","breadcrumb":{"@id":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#primaryimage","url":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/03\/football-odds-api-soccer-data-scaled.webp","contentUrl":"https:\/\/oddspapi.io\/blog\/wp-content\/uploads\/2026\/03\/football-odds-api-soccer-data-scaled.webp","width":2560,"height":1429,"caption":"Football Odds API - OddsPapi API Blog"},{"@type":"BreadcrumbList","@id":"https:\/\/oddspapi.io\/blog\/football-odds-api-soccer-data\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oddspapi.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Football Odds API: Real-Time Soccer Data"}]},{"@type":"WebSite","@id":"https:\/\/oddspapi.io\/blog\/#website","url":"https:\/\/oddspapi.io\/blog\/","name":"OddsPapi","description":"Sports Odds APIs 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\/2517","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=2517"}],"version-history":[{"count":2,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/2517\/revisions"}],"predecessor-version":[{"id":2533,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/posts\/2517\/revisions\/2533"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media\/2519"}],"wp:attachment":[{"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/media?parent=2517"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/categories?post=2517"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oddspapi.io\/blog\/wp-json\/wp\/v2\/tags?post=2517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}