Skip to main content
Odds-API.io: Sports Odds for Sheets brings live odds from 450+ bookmakers into Google Sheets without code. Search a team or league in the side panel, compare the best price per market across bookmakers, and insert it as a clean, typed table. Or use the =ODDS() and =ODDS_TABLE() formulas directly in a cell.

Install from Google Workspace Marketplace

Install it in Google Sheets. Connect an Odds-API.io API key from a paid plan.

Add-on overview

Screenshots and a short tour of what the add-on does.

What it does

  • Explore: search a team or league, see the best price per market across bookmakers, the fair price and line movement, then insert any of it as a sheet.
  • Recipes: one click builds a sheet of best prices, arbitrage, value bets or dropping odds, with optional refresh every minute.
  • Playground: call any GET endpoint of the API, preview the response and insert it as a table.
  • Formulas: =ODDS(eventId, [market], [bookmaker], [refresh]) and =ODDS_TABLE(sport, [league], [market], [refresh]).
  • AI-ready tables: every table has typed columns, comes with suggested questions for Gemini in Sheets, and can be copied as a prompt for ChatGPT, Claude or any AI assistant.

Install

You need an Odds-API.io API key from a paid plan. Get one at odds-api.io/pricing; the key is on your dashboard right after checkout.
1

Install the add-on

Open the Odds-API.io listing on the Google Workspace Marketplace, click Install and approve the permissions. Use the same Google account you open your spreadsheets with.
2

Open the side panel

In any spreadsheet, go to Extensions > Odds-API.io: Sports Odds for Sheets > Open.
3

Connect your key

Paste your API key and click Connect. The panel checks the key and shows how many bookmakers are on it.
The key is saved for your Google account, so it works in every spreadsheet you open, and is only sent to api.odds-api.io.

The side panel

The panel has three tabs at the bottom: Explore, Recipes and Playground. The gear icon at the top opens Settings.

Explore

Type at least two letters of a team or league (for example Arsenal or NBA) to search upcoming events, or pick a sport and league under Browse and click Show events. Opening an event shows:
  • Best price per market (ML, Spread, Totals and every other market the bookmakers price), with the bookmaker that has it. Click Show more lines to see alternative lines.
  • Fair price, the margin-free price, when your plan includes the odds summary (Growth and above). On other plans the panel shows the best price across your own bookmakers instead.
  • Bookmaker filter: compare only the bookmakers you pick, or all bookmakers on your key.
  • Line movement: click Show line movement for a price history chart of one bookmaker and market (available for the bookmakers that record movement history).
From the event you can insert three tables:

Recipes

Recipes build a ready-made sheet in one click. Set the filters, then click Build sheet. After a recipe has run, tick Refresh every minute while this panel is open to rewrite the same sheet every 60 seconds. See Auto-refresh and limits.

Playground

The Playground calls any GET endpoint of the API and turns the response into a table.
  1. Click the endpoint at the top and pick one, for example /odds, /events or /settlements.
  2. Required parameters are filled in for you: the last event you opened and the bookmakers on your key. Click optional parameters below them to add more.
  3. Click Send request. The panel shows the response time and row count, as a table or as raw JSON.
  4. Click Insert to sheet or Copy for AI.
The copy button next to the request URL copies it with your key masked, so you can share it safely. The parameters match the API reference.

When a sheet already exists

If a sheet with the same name is already in the spreadsheet, the panel asks what to do:
  • Replace: clears the sheet and writes fresh data.
  • Add rows: keeps what is there and adds the new rows below, useful for building a history.
  • New sheet: keeps the old sheet and writes to a new one, for example Arbitrage (2).

What an inserted table looks like

  • A bold, frozen header row with a filter on every column.
  • Typed columns: odds as decimal numbers, percentages, dates and times in UTC, event ids as plain numbers.
  • A named range oddsapi_<sheet name>, so formulas and charts can refer to the table by name.
  • Notes two columns to the right of the table: what the columns mean, the request it came from (key masked), when it was fetched and suggested questions for an AI assistant.
Sheets always get decimal odds, so formulas and AI analysis stay numeric. Settings > Odds format only changes how odds look inside the panel (decimal, American or fractional).

Formulas

The add-on adds two custom functions. They work in any spreadsheet where the add-on is installed and your key is connected.

ODDS

Odds for one event, one row per bookmaker, market line and selection. Returns these columns, with a header row: Examples:

ODDS_TABLE

The next 20 upcoming events of a sport or league, with the best price per selection on the main line of one market. Returns these columns, with a header row: Examples:
ODDS_TABLE reads the odds summary, so it needs the Growth plan or higher. On other plans it returns a message instead of prices; use =ODDS(eventId) or the Best prices recipe, which falls back to the bookmakers on your key.

Refreshing formulas

Google Sheets caches custom function results and only recalculates a formula when one of its arguments changes. The add-on also reuses an identical response for 30 seconds. To fetch fresh prices on demand:
  1. Insert a checkbox in a spare cell, for example Z1 (Insert > Checkbox), or type any value there.
  2. Pass that cell as the refresh argument: =ODDS(123456, "ML", , $Z$1).
  3. Tick or untick the checkbox (or change the value) whenever you want new prices. Every formula that points at Z1 fetches again.
Do not use =NOW(), =RAND() or a cell that contains them as the refresh argument. Google Sheets blocks custom functions that reference volatile functions and shows an error instead of prices.
For hands-free updates, build the sheet from a recipe in the side panel and turn on Auto-refresh: it rewrites the sheet every 60 seconds while the panel is open. Every refresh makes new API requests that count towards your plan’s request limit, so refresh only the formulas you need.

Older formula names

Sheets built with version 1 of the add-on keep working: ODDS_GET_ARBITRAGE and ODDS_GET_VALUE now return a pointer to the Arbitrage and Value bets recipes in the side panel, which replace them.

Auto-refresh and limits

  • Recipe refresh: after you build a recipe sheet, Refresh every minute while this panel is open rewrites that sheet every 60 seconds. It stops when you close the panel, switch away from the recipe or a request fails; the panel shows why it paused.
  • Formula refresh: see Refreshing formulas.
  • Request limit: the panel and the formulas use your API key, so every refresh counts towards your plan’s hourly request limit (see Best Practices). When the limit is hit, the panel retries twice with a short pause, then shows Too many requests.
  • Large tables: the panel writes tables in batches of 5,000 rows and shows progress, so large Playground responses do not hit Google’s time limit.
  • Bookmakers per request: the API returns up to 30 bookmakers per odds request. The panel splits larger selections into several requests; =ODDS() without a bookmaker uses the first 30.

Using it with Gemini, ChatGPT and Claude

Inserted tables are built to be read by AI assistants: one header row, snake_case column names, numeric odds and UTC times. Each table’s notes include suggested questions, for example “Which bookmaker has the best price most often?”.
  • Gemini in Sheets: open Gemini in the spreadsheet and ask about the table directly.
  • Copy for AI: every Insert button has a Copy for AI button next to it. It copies a prompt with the column names and types and the table as CSV (up to 500 rows) to your clipboard. Paste it into ChatGPT, Claude or any other assistant and add your question.
  • Let the assistant query the API: to give Claude, ChatGPT, Cursor or another assistant live access to the API itself, use the Odds-API.io MCP server. Setup steps per tool are in AI & Vibe Coding.

Permissions and privacy

The add-on asks for three Google permissions, the minimum it needs: Your API key and panel settings are stored in your Google account’s add-on storage (Apps Script user properties). They are not shared with other people who open the spreadsheet, and the key is only sent to api.odds-api.io. The contents of your spreadsheets are never sent to Odds-API.io. Details: privacy policy.

Troubleshooting

This almost always means you are signed in to more than one Google account in the same browser. Google add-ons run under the default account (the first one you signed in with), which may not be the account that installed the add-on. Sign out of the other accounts, or open the spreadsheet in an incognito or guest window signed in to one account only, then open the add-on again.
The add-on is not installed for the Google account viewing the sheet. Custom functions only work for people who have installed the add-on, so collaborators without it see #NAME?. Each collaborator who wants live formulas needs to install the add-on and connect their own API key. To share a static copy instead, copy the cells and use Paste special > Values only.
The add-on is installed but no key is connected for your Google account. Open Extensions > Odds-API.io: Sports Odds for Sheets > Open and paste your key.
Copy the key again from your dashboard, without spaces. If you regenerated the key, the old one stops working: open Settings, click Remove key and connect the new one.
Some data needs a higher plan or an add-on. The fair price and ODDS_TABLE use the odds summary, which needs the Growth plan or higher; Explore and the Best prices recipe fall back to the bookmakers on your key. Value bets, arbitrage, outrights and settlement are add-ons. The message shows exactly what is missing, with a link to plans; add-ons are managed in your dashboard.
Your key reached its hourly request limit. Turn off auto-refresh on recipes you no longer watch, refresh formulas less often, or add an extra request package on pricing.
Google limits how much custom functions can do: each call can run for up to 30 seconds, and there is a daily quota for outside requests per Google account (see Apps Script quotas). Hundreds of =ODDS() formulas refreshing every minute can reach it. Use fewer formulas with a market or bookmaker filter, refresh less often, or insert a recipe table from the side panel instead, which does not use the formula quota.
The event has no prices for that market or bookmaker yet, or the bookmaker is not on your key. Leave bookmaker empty to use every bookmaker on your key, and check the market name with =ODDS(eventId) first.
To remove your key, open Settings in the panel and click Remove key. This deletes the key and your panel settings from your Google account. To remove the add-on completely, go to Extensions > Add-ons > Manage add-ons, open the Odds-API.io add-on and choose Uninstall.
If none of these help, email hello@odds-api.io with the message you see and the formula or recipe you used.

FAQ

Yes. All data comes from your Odds-API.io API key, which needs a paid plan. See pricing.
The same as your API key: the bookmakers you selected on your plan, across all 34 sports. The panel shows how many bookmakers are on your key in Settings. The full catalogue of 450+ bookmakers is on the bookmakers page.
The panel fetches live from the API every time you open an event or build a sheet. Formulas reuse an identical response for up to 30 seconds and otherwise follow Google’s recalculation, see Refreshing formulas. For tick-by-tick updates in your own code, use the WebSocket feed.
Yes. Every panel action, recipe refresh and formula recalculation makes normal API requests on your key.
Yes. Inserted tables are plain values that everyone can see. Live formulas only calculate for people who have the add-on installed with their own key; others see #NAME?.
Not yet. The add-on is for Google Sheets. In the meantime, the SDKs and the REST API work from any language.
Yes, under the MIT license on GitHub.

AI & Vibe Coding

The MCP server, llms.txt and setup for ChatGPT, Claude and Cursor.

SDKs & Libraries

Node.js, Python, PHP, Go and R clients, plus the command-line tool.
Last modified on November 13, 2026